diff options
author | oysteine@chromium.org <oysteine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-08 06:35:25 +0000 |
---|---|---|
committer | oysteine@chromium.org <oysteine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-08 06:36:43 +0000 |
commit | 9e6bea41c372f5fe919761a4476c20b782577372 (patch) | |
tree | 9bcae457fe7db081b6a99b21b21a6384ab00f61e /content/browser/loader/cross_site_resource_handler.cc | |
parent | 855c3bc87708a8c94cbb9a241f95e3a1bd36bf2b (diff) | |
download | chromium_src-9e6bea41c372f5fe919761a4476c20b782577372.zip chromium_src-9e6bea41c372f5fe919761a4476c20b782577372.tar.gz chromium_src-9e6bea41c372f5fe919761a4476c20b782577372.tar.bz2 |
Navigation transitions: Plumb data from the outgoing renderer to the incoming renderer.
The outgoing renderer sends one or more sets of serialized markup of transition
elements, the CSS selectors used to select each of these and its associated
allowed destination origin, up to the TransitionRequestManager in Chrome. Once
we have a navigation response we then pick up this data again (selecting one of
these sets), send it up to the Android embedder, and from there it's used to 1)
send a message down to the outgoing renderer to hide the transition elements
we selected to use using the CSS selector, and 2) send the serialized markup
down to the incoming renderer to inject into its document.
R=creis,jam,nasko
BUG=370696
Review URL: https://codereview.chromium.org/435833002
Cr-Commit-Position: refs/heads/master@{#288228}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288228 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/loader/cross_site_resource_handler.cc')
-rw-r--r-- | content/browser/loader/cross_site_resource_handler.cc | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/content/browser/loader/cross_site_resource_handler.cc b/content/browser/loader/cross_site_resource_handler.cc index f8a5e37..3d7862f 100644 --- a/content/browser/loader/cross_site_resource_handler.cc +++ b/content/browser/loader/cross_site_resource_handler.cc @@ -88,12 +88,11 @@ void OnCrossSiteResponseHelper(const CrossSiteResponseParams& params) { void OnDeferredAfterResponseStartedHelper( const GlobalRequestID& global_request_id, int render_frame_id, - const scoped_refptr<net::HttpResponseHeaders>& headers, - const GURL& url) { + const TransitionLayerData& transition_data) { RenderFrameHostImpl* rfh = RenderFrameHostImpl::FromID(global_request_id.child_id, render_frame_id); if (rfh) - rfh->OnDeferredAfterResponseStarted(global_request_id, headers, url); + rfh->OnDeferredAfterResponseStarted(global_request_id, transition_data); } bool CheckNavigationPolicyOnUI(GURL url, int process_id, int render_frame_id) { @@ -153,14 +152,22 @@ bool CrossSiteResourceHandler::OnResponseStarted( ResourceRequestInfoImpl* info = GetRequestInfo(); info->set_cross_site_handler(this); + TransitionLayerData transition_data; bool is_navigation_transition = TransitionRequestManager::GetInstance()->HasPendingTransitionRequest( - info->GetChildID(), info->GetRenderFrameID()); + info->GetChildID(), info->GetRenderFrameID(), request()->url(), + &transition_data); - if (is_navigation_transition) - return OnNavigationTransitionResponseStarted(response, defer); - else + if (is_navigation_transition) { + if (response_) + transition_data.response_headers = response_->head.headers; + transition_data.request_url = request()->url(); + + return OnNavigationTransitionResponseStarted(response, defer, + transition_data); + } else { return OnNormalResponseStarted(response, defer); + } } bool CrossSiteResourceHandler::OnNormalResponseStarted( @@ -231,14 +238,10 @@ bool CrossSiteResourceHandler::OnNormalResponseStarted( bool CrossSiteResourceHandler::OnNavigationTransitionResponseStarted( ResourceResponse* response, - bool* defer) { + bool* defer, + const TransitionLayerData& transition_data) { ResourceRequestInfoImpl* info = GetRequestInfo(); - scoped_refptr<net::HttpResponseHeaders> headers; - if (response_) - headers = response_->head.headers; - GURL url = request()->url(); - GlobalRequestID global_id(info->GetChildID(), info->GetRequestID()); int render_frame_id = info->GetRenderFrameID(); BrowserThread::PostTask( @@ -248,8 +251,7 @@ bool CrossSiteResourceHandler::OnNavigationTransitionResponseStarted( &OnDeferredAfterResponseStartedHelper, global_id, render_frame_id, - headers, - url)); + transition_data)); *defer = true; OnDidDefer(); |