0

DevTools: make DevToolsSanityTest.TestNetworkPushTime work with Network Service

Bug: 721408
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_mojo
Change-Id: I22204e52a27a1431907d284fd32993d727b1435d
Reviewed-on: https://chromium-review.googlesource.com/1043528
Reviewed-by: Dmitry Gozman <dgozman@chromium.org>
Commit-Queue: Andrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556088}
This commit is contained in:
Andrey Kosyakov
2018-05-04 16:43:51 +00:00
committed by Commit Bot
parent 648ba5db33
commit 72390a4295
2 changed files with 42 additions and 86 deletions
chrome/browser/devtools
testing/buildbot/filters

@ -73,6 +73,7 @@
#include "content/public/common/url_constants.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_navigation_observer.h"
#include "content/public/test/url_loader_interceptor.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/browser/extension_system.h"
@ -83,11 +84,8 @@
#include "extensions/test/test_extension_dir.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/spawned_test_server/spawned_test_server.h"
#include "net/test/url_request/url_request_mock_http_job.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
#include "net/url_request/url_request_filter.h"
#include "net/url_request/url_request_http_job.h"
#include "services/network/public/cpp/features.h"
#include "third_party/blink/public/platform/web_input_event.h"
#include "ui/compositor/compositor_switches.h"
@ -199,78 +197,6 @@ void SwitchToExtensionPanel(DevToolsWindow* window,
SwitchToPanel(window, (prefix + panel_name).c_str());
}
class PushTimesMockURLRequestJob : public net::URLRequestMockHTTPJob {
public:
PushTimesMockURLRequestJob(net::URLRequest* request,
net::NetworkDelegate* network_delegate,
base::FilePath file_path)
: net::URLRequestMockHTTPJob(request, network_delegate, file_path) {}
void Start() override {
load_timing_info_.socket_reused = true;
load_timing_info_.request_start_time = base::Time::Now();
load_timing_info_.request_start = base::TimeTicks::Now();
load_timing_info_.send_start = base::TimeTicks::Now();
load_timing_info_.send_end = base::TimeTicks::Now();
load_timing_info_.receive_headers_end = base::TimeTicks::Now();
net::URLRequestMockHTTPJob::Start();
}
void GetLoadTimingInfo(net::LoadTimingInfo* load_timing_info) const override {
load_timing_info_.push_start = load_timing_info_.request_start -
base::TimeDelta::FromMilliseconds(100);
if (load_timing_info_.push_end.is_null() &&
request()->url().query() != kPushUseNullEndTime) {
load_timing_info_.push_end = base::TimeTicks::Now();
}
*load_timing_info = load_timing_info_;
}
private:
mutable net::LoadTimingInfo load_timing_info_;
DISALLOW_COPY_AND_ASSIGN(PushTimesMockURLRequestJob);
};
class TestInterceptor : public net::URLRequestInterceptor {
public:
// Creates TestInterceptor and registers it with the URLRequestFilter,
// which takes ownership of it.
static void Register(const GURL& url, const base::FilePath& file_path) {
EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
net::URLRequestFilter::GetInstance()->AddHostnameInterceptor(
url.scheme(), url.host(),
base::WrapUnique(new TestInterceptor(url, file_path)));
}
// Unregisters previously created TestInterceptor, which should delete it.
static void Unregister(const GURL& url) {
EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
net::URLRequestFilter::GetInstance()->RemoveHostnameHandler(url.scheme(),
url.host());
}
// net::URLRequestJobFactory::ProtocolHandler implementation:
net::URLRequestJob* MaybeInterceptRequest(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const override {
EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
if (request->url().path() != url_.path())
return nullptr;
return new PushTimesMockURLRequestJob(request, network_delegate,
file_path_);
}
private:
TestInterceptor(const GURL& url, const base::FilePath& file_path)
: url_(url), file_path_(file_path) {}
const GURL url_;
const base::FilePath file_path_;
DISALLOW_COPY_AND_ASSIGN(TestInterceptor);
};
} // namespace
class DevToolsSanityTest : public InProcessBrowserTest {
@ -1605,22 +1531,53 @@ IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestNetworkRawHeadersText) {
RunTest("testNetworkRawHeadersText", kChunkedTestPage);
}
namespace {
bool InterceptURLLoad(content::URLLoaderInterceptor::RequestParams* params) {
const GURL& url = params->url_request.url;
if (!base::EndsWith(url.path(), kPushTestResource,
base::CompareCase::SENSITIVE)) {
return false;
}
network::ResourceResponseHead response;
response.headers = new net::HttpResponseHeaders("200 OK\r\n\r\n");
auto start_time =
base::TimeTicks::Now() - base::TimeDelta::FromMilliseconds(10);
response.request_start = start_time;
response.response_start = base::TimeTicks::Now();
response.request_time =
base::Time::Now() - base::TimeDelta::FromMilliseconds(10);
response.response_time = base::Time::Now();
auto& load_timing = response.load_timing;
load_timing.request_start = start_time;
load_timing.request_start_time = response.request_time;
load_timing.send_start = start_time;
load_timing.send_end = base::TimeTicks::Now();
load_timing.receive_headers_end = base::TimeTicks::Now();
load_timing.push_start = start_time - base::TimeDelta::FromMilliseconds(100);
if (url.query() != kPushUseNullEndTime)
load_timing.push_end = base::TimeTicks::Now();
params->client->OnReceiveResponse(response, /*downloaded_file=*/nullptr);
params->client->OnComplete(network::URLLoaderCompletionStatus());
return true;
}
} // namespace
IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestNetworkPushTime) {
content::URLLoaderInterceptor interceptor(
base::BindRepeating(InterceptURLLoad));
OpenDevToolsWindow(kPushTestPage, false);
GURL push_url = spawned_test_server()->GetURL(kPushTestResource);
base::FilePath file_path =
spawned_test_server()->document_root().AppendASCII(kPushTestResource);
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::BindOnce(&TestInterceptor::Register, push_url, file_path));
DispatchOnTestSuite(window_, "testPushTimes", push_url.spec().c_str());
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::BindOnce(&TestInterceptor::Unregister, push_url));
CloseDevToolsWindow();
}

@ -92,7 +92,6 @@
# crbug.com/776589 Intercepting requests with net::URLRequestFilter.
-ContinueWhereILeftOffTest.CookiesClearedOnExit
-DevToolsSanityTest.TestNetworkPushTime
-DownloadExtensionTest.DownloadExtensionTest_Download_FileSystemURL
-MimeHandlerViewTests/MimeHandlerViewTest.SingleRequest/0
-PolicyTest.ExtensionInstallSources