summaryrefslogtreecommitdiffstats
path: root/content/browser/loader/cross_site_resource_handler.cc
diff options
context:
space:
mode:
authoroysteine@chromium.org <oysteine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-08 06:35:25 +0000
committeroysteine@chromium.org <oysteine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-08 06:36:43 +0000
commit9e6bea41c372f5fe919761a4476c20b782577372 (patch)
tree9bcae457fe7db081b6a99b21b21a6384ab00f61e /content/browser/loader/cross_site_resource_handler.cc
parent855c3bc87708a8c94cbb9a241f95e3a1bd36bf2b (diff)
downloadchromium_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.cc32
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();