summaryrefslogtreecommitdiffstats
path: root/components/navigation_interception
diff options
context:
space:
mode:
authordavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-01 20:28:30 +0000
committerdavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-01 20:28:30 +0000
commit716db0f70a724707946e625fa8d450d42a0deaf7 (patch)
treefb306955f1bfc570b33fb8506e7b835746e7d915 /components/navigation_interception
parent01dcabad758a58d7eb590690a7da180c0cfcac86 (diff)
downloadchromium_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.cc43
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) {