diff options
author | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-01 20:28:30 +0000 |
---|---|---|
committer | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-01 20:28:30 +0000 |
commit | 716db0f70a724707946e625fa8d450d42a0deaf7 (patch) | |
tree | fb306955f1bfc570b33fb8506e7b835746e7d915 /components/navigation_interception | |
parent | 01dcabad758a58d7eb590690a7da180c0cfcac86 (diff) | |
download | chromium_src-716db0f70a724707946e625fa8d450d42a0deaf7.zip chromium_src-716db0f70a724707946e625fa8d450d42a0deaf7.tar.gz chromium_src-716db0f70a724707946e625fa8d450d42a0deaf7.tar.bz2 |
Add header to defer redirects until prerenders become visible.
This adds a Follow-Only-When-Prerender-Shown header which, when attached to an
HTTP redirect, defers the redirect until the page is visible. In some
situations, namely if attached to a main page load or a synchronous request,
the prerender is aborted instead. (In the former case, the navigation entry is
uncommitted, so the prerender is useless. In the latter, we indefinitely hang
up the renderer process, preventing reuse in other tabs.)
BUG=292879
TEST=PrerenderBrowserTest.PrerenderDeferredImage,
PrerenderBrowserTest.PrerenderDeferredImageAfterRedirect,
PrerenderBrowserTest.PrerenderDeferredMainFrame,
PrerenderBrowserTest.PrerenderDeferredMainFrameAfterRedirect,
PrerenderBrowserTest.PrerenderDeferredSynchronousXHR,
PrerenderTrackerTest.PrerenderThrottledRedirectResume,
PrerenderTrackerTest.PrerenderThrottledRedirectCancel,
PrerenderTrackerTest.PrerenderThrottledRedirectMainFrame,
PrerenderTrackerTest.PrerenderThrottledRedirectSyncXHR
Review URL: https://codereview.chromium.org/24195015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@226290 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/navigation_interception')
-rw-r--r-- | components/navigation_interception/intercept_navigation_resource_throttle_unittest.cc | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/components/navigation_interception/intercept_navigation_resource_throttle_unittest.cc b/components/navigation_interception/intercept_navigation_resource_throttle_unittest.cc index e1bd566..e384501 100644 --- a/components/navigation_interception/intercept_navigation_resource_throttle_unittest.cc +++ b/components/navigation_interception/intercept_navigation_resource_throttle_unittest.cc @@ -121,28 +121,29 @@ class TestIOThreadState { : resource_context_(&test_url_request_context_), request_(url, NULL, resource_context_.GetRequestContext()) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - if (render_process_id != MSG_ROUTING_NONE && - render_view_id != MSG_ROUTING_NONE) { - content::ResourceRequestInfo::AllocateForTesting( - &request_, - ResourceType::MAIN_FRAME, - &resource_context_, - render_process_id, - render_view_id); - } - throttle_.reset(new InterceptNavigationResourceThrottle( + if (render_process_id != MSG_ROUTING_NONE && + render_view_id != MSG_ROUTING_NONE) { + content::ResourceRequestInfo::AllocateForTesting( &request_, - base::Bind(&MockInterceptCallbackReceiver::ShouldIgnoreNavigation, - base::Unretained(callback_receiver)))); - throttle_->set_controller_for_testing(&throttle_controller_); - request_.set_method(request_method); - - if (redirect_mode == REDIRECT_MODE_302) { - net::HttpResponseInfo& response_info = - const_cast<net::HttpResponseInfo&>(request_.response_info()); - response_info.headers = new net::HttpResponseHeaders( - "Status: 302 Found\0\0"); - } + ResourceType::MAIN_FRAME, + &resource_context_, + render_process_id, + render_view_id, + false); + } + throttle_.reset(new InterceptNavigationResourceThrottle( + &request_, + base::Bind(&MockInterceptCallbackReceiver::ShouldIgnoreNavigation, + base::Unretained(callback_receiver)))); + throttle_->set_controller_for_testing(&throttle_controller_); + request_.set_method(request_method); + + if (redirect_mode == REDIRECT_MODE_302) { + net::HttpResponseInfo& response_info = + const_cast<net::HttpResponseInfo&>(request_.response_info()); + response_info.headers = new net::HttpResponseHeaders( + "Status: 302 Found\0\0"); + } } void ThrottleWillStartRequest(bool* defer) { |