summaryrefslogtreecommitdiffstats
path: root/content/browser/loader/resource_dispatcher_host_unittest.cc
diff options
context:
space:
mode:
authordavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-22 19:24:43 +0000
committerdavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-22 19:24:43 +0000
commit675957f87020a0b1231741f185501513b66cc05a (patch)
treef8f58c2ca5e3cd4a745bf2596659fd3644773c34 /content/browser/loader/resource_dispatcher_host_unittest.cc
parentc1fc04d64f103c689f43296510b6b6f50704f871 (diff)
downloadchromium_src-675957f87020a0b1231741f185501513b66cc05a.zip
chromium_src-675957f87020a0b1231741f185501513b66cc05a.tar.gz
chromium_src-675957f87020a0b1231741f185501513b66cc05a.tar.bz2
Add ResourceType::PING and mark those requests as detachable.
This avoids cancelling <a ping> requests on cross-process navigations when the owning renderer dies. Actually assigning resources this type is conditioned on a currently undefined WEBKIT_HAS_TARGET_PING symbol to be defined in a follow-up Blink CL. The #ifdef can then be removed when that lands. BUG=302816 TEST=ResourceDispatcherHostTest.DeletedFilterDetachable Review URL: https://codereview.chromium.org/55513002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236807 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/loader/resource_dispatcher_host_unittest.cc')
-rw-r--r--content/browser/loader/resource_dispatcher_host_unittest.cc47
1 files changed, 29 insertions, 18 deletions
diff --git a/content/browser/loader/resource_dispatcher_host_unittest.cc b/content/browser/loader/resource_dispatcher_host_unittest.cc
index 81e0c88..895951b 100644
--- a/content/browser/loader/resource_dispatcher_host_unittest.cc
+++ b/content/browser/loader/resource_dispatcher_host_unittest.cc
@@ -1021,41 +1021,52 @@ TEST_F(ResourceDispatcherHostTest, DetachedResourceTimesOut) {
// If the filter has disappeared then detachable resources should continue to
// load.
TEST_F(ResourceDispatcherHostTest, DeletedFilterDetached) {
- ResourceHostMsg_Request request = CreateResourceRequest(
- "GET", ResourceType::PREFETCH, net::URLRequestTestJob::test_url_4());
+ // test_url_1's data is available synchronously, so use 2 and 3.
+ ResourceHostMsg_Request request_prefetch = CreateResourceRequest(
+ "GET", ResourceType::PREFETCH, net::URLRequestTestJob::test_url_2());
+ ResourceHostMsg_Request request_ping = CreateResourceRequest(
+ "GET", ResourceType::PING, net::URLRequestTestJob::test_url_3());
- ResourceHostMsg_RequestResource msg(0, 1, request);
bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_, &msg_was_ok);
+ ResourceHostMsg_RequestResource msg_prefetch(0, 1, request_prefetch);
+ host_.OnMessageReceived(msg_prefetch, filter_, &msg_was_ok);
+ ResourceHostMsg_RequestResource msg_ping(0, 2, request_ping);
+ host_.OnMessageReceived(msg_ping, filter_, &msg_was_ok);
- // Remove the filter before processing the request by simulating channel
+ // Remove the filter before processing the requests by simulating channel
// closure.
- GlobalRequestID global_request_id(filter_->child_id(), 1);
- ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(
- host_.GetURLRequest(global_request_id));
- info->filter_->OnChannelClosing();
- info->filter_.reset();
-
- // From the renderer's perspective, the request was cancelled.
+ ResourceRequestInfoImpl* info_prefetch = ResourceRequestInfoImpl::ForRequest(
+ host_.GetURLRequest(GlobalRequestID(filter_->child_id(), 1)));
+ ResourceRequestInfoImpl* info_ping = ResourceRequestInfoImpl::ForRequest(
+ host_.GetURLRequest(GlobalRequestID(filter_->child_id(), 2)));
+ DCHECK_EQ(filter_.get(), info_prefetch->filter());
+ DCHECK_EQ(filter_.get(), info_ping->filter());
+ filter_->OnChannelClosing();
+ info_prefetch->filter_.reset();
+ info_ping->filter_.reset();
+
+ // From the renderer's perspective, the requests were cancelled.
ResourceIPCAccumulator::ClassifiedMessages msgs;
accum_.GetClassifiedMessages(&msgs);
- ASSERT_EQ(1U, msgs.size());
+ ASSERT_EQ(2U, msgs.size());
CheckRequestCompleteErrorCode(msgs[0][0], net::ERR_ABORTED);
+ CheckRequestCompleteErrorCode(msgs[1][0], net::ERR_ABORTED);
// But it continues detached.
- EXPECT_EQ(1, host_.pending_requests());
- EXPECT_TRUE(info->detachable_handler()->is_detached());
+ EXPECT_EQ(2, host_.pending_requests());
+ EXPECT_TRUE(info_prefetch->detachable_handler()->is_detached());
+ EXPECT_TRUE(info_ping->detachable_handler()->is_detached());
KickOffRequest();
- // Make sure the request wasn't canceled early.
- EXPECT_EQ(1, host_.pending_requests());
+ // Make sure the requests weren't canceled early.
+ EXPECT_EQ(2, host_.pending_requests());
while (net::URLRequestTestJob::ProcessOnePendingMessage()) {}
base::MessageLoop::current()->RunUntilIdle();
EXPECT_EQ(0, host_.pending_requests());
- EXPECT_EQ(1, network_delegate()->completed_requests());
+ EXPECT_EQ(2, network_delegate()->completed_requests());
EXPECT_EQ(0, network_delegate()->canceled_requests());
EXPECT_EQ(0, network_delegate()->error_count());
}