Commit 7a45923e authored by Yutaka Hirano's avatar Yutaka Hirano Committed by Commit Bot

Unflake SecurityExploitBrowserTest.Invalid[Blocked]RequestId

CreateLoaderAndStart used in TryCreateDuplicateRequestIds created
network::mojom::URLLoaderPtr and network::TestURLLoaderClient in it and
hence the request got aborted. That will lead to flakiness because on
a slow system the first request got aborted before the second request
arrives. This CL fixes that.

Bug: 799516
Change-Id: I4767d7f98185e633f229315074a9361b14e47e3b
Reviewed-on: https://chromium-review.googlesource.com/1125581Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Yutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572517}
parent 2d6620f0
...@@ -184,28 +184,44 @@ class SecurityExploitBrowserTest : public ContentBrowserTest { ...@@ -184,28 +184,44 @@ class SecurityExploitBrowserTest : public ContentBrowserTest {
static void CreateLoaderAndStartOnIOThread( static void CreateLoaderAndStartOnIOThread(
scoped_refptr<ResourceMessageFilter> filter, scoped_refptr<ResourceMessageFilter> filter,
network::mojom::URLLoaderRequest request,
int route_id, int route_id,
int request_id, int request_id,
const network::ResourceRequest& request) { const network::ResourceRequest& resource_request,
network::mojom::URLLoaderPtr loader; network::mojom::URLLoaderClientPtrInfo client) {
network::TestURLLoaderClient client;
filter->CreateLoaderAndStart( filter->CreateLoaderAndStart(
mojo::MakeRequest(&loader), route_id, request_id, std::move(request), route_id, request_id,
network::mojom::kURLLoadOptionNone, request, network::mojom::kURLLoadOptionNone, resource_request,
client.CreateInterfacePtr(), network::mojom::URLLoaderClientPtr(std::move(client)),
net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS)); net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS));
} }
static void CreateLoaderAndStart(RenderProcessHost* process, static void CreateLoaderAndStart(
int route_id, RenderProcessHost* process,
int request_id, int route_id,
const network::ResourceRequest& request) { int request_id,
const network::ResourceRequest& resource_request) {
network::mojom::URLLoaderPtr loader;
network::TestURLLoaderClient client;
CreateLoaderAndStart(process, mojo::MakeRequest(&loader), route_id,
request_id, resource_request,
client.CreateInterfacePtr().PassInterface());
}
static void CreateLoaderAndStart(
RenderProcessHost* process,
network::mojom::URLLoaderRequest request,
int route_id,
int request_id,
const network::ResourceRequest& resource_request,
network::mojom::URLLoaderClientPtrInfo client) {
RenderProcessHostImpl* impl = static_cast<RenderProcessHostImpl*>(process); RenderProcessHostImpl* impl = static_cast<RenderProcessHostImpl*>(process);
auto filter = impl->resource_message_filter_; auto filter = impl->resource_message_filter_;
process->GetChannel()->ipc_task_runner()->PostTask( process->GetChannel()->ipc_task_runner()->PostTask(
FROM_HERE, base::BindOnce(CreateLoaderAndStartOnIOThread, filter, FROM_HERE, base::BindOnce(CreateLoaderAndStartOnIOThread, filter,
route_id, request_id, request)); std::move(request), route_id, request_id,
resource_request, std::move(client)));
} }
void TryCreateDuplicateRequestIds(Shell* shell, bool block_loaders) { void TryCreateDuplicateRequestIds(Shell* shell, bool block_loaders) {
...@@ -227,11 +243,16 @@ class SecurityExploitBrowserTest : public ContentBrowserTest { ...@@ -227,11 +243,16 @@ class SecurityExploitBrowserTest : public ContentBrowserTest {
// Use the same request id twice. // Use the same request id twice.
RenderProcessHostKillWaiter kill_waiter(rfh->GetProcess()); RenderProcessHostKillWaiter kill_waiter(rfh->GetProcess());
// We need to keep loader and client to keep the requests alive.
CreateLoaderAndStart(rfh->GetProcess(), rfh->GetRoutingID(), network::mojom::URLLoaderPtr loader1, loader2;
kRequestIdNotPreviouslyUsed, request); network::TestURLLoaderClient client1, client2;
CreateLoaderAndStart(rfh->GetProcess(), rfh->GetRoutingID(),
kRequestIdNotPreviouslyUsed, request); CreateLoaderAndStart(rfh->GetProcess(), mojo::MakeRequest(&loader1),
rfh->GetRoutingID(), kRequestIdNotPreviouslyUsed,
request, client1.CreateInterfacePtr().PassInterface());
CreateLoaderAndStart(rfh->GetProcess(), mojo::MakeRequest(&loader2),
rfh->GetRoutingID(), kRequestIdNotPreviouslyUsed,
request, client2.CreateInterfacePtr().PassInterface());
EXPECT_EQ(bad_message::RDH_INVALID_REQUEST_ID, kill_waiter.Wait()); EXPECT_EQ(bad_message::RDH_INVALID_REQUEST_ID, kill_waiter.Wait());
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment