diff options
author | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-22 19:24:43 +0000 |
---|---|---|
committer | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-22 19:24:43 +0000 |
commit | 675957f87020a0b1231741f185501513b66cc05a (patch) | |
tree | f8f58c2ca5e3cd4a745bf2596659fd3644773c34 /content/browser/loader/resource_dispatcher_host_unittest.cc | |
parent | c1fc04d64f103c689f43296510b6b6f50704f871 (diff) | |
download | chromium_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.cc | 47 |
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()); } |