diff options
author | irobert@chromium.org <irobert@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-15 23:29:18 +0000 |
---|---|---|
committer | irobert@chromium.org <irobert@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-15 23:29:18 +0000 |
commit | e2caa03951c9b10f49dff903c12badf9644bad88 (patch) | |
tree | 1ebc3891a5b02f5c1e89306570768b764112615f /content/public | |
parent | ee09ccd04e7f7a709cd3e61071cf7ea9fd26b1cf (diff) | |
download | chromium_src-e2caa03951c9b10f49dff903c12badf9644bad88.zip chromium_src-e2caa03951c9b10f49dff903c12badf9644bad88.tar.gz chromium_src-e2caa03951c9b10f49dff903c12badf9644bad88.tar.bz2 |
Fix Cross-Process Redirect Navigation
(Second attempt, after committing in http://crrev.com/167800.)
BUG=104493
TEST=Go back when clicking an SSL search result to a hosted app.
Review URL: https://chromiumcodereview.appspot.com/11359098
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@168072 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/public')
-rw-r--r-- | content/public/browser/navigation_controller.cc | 7 | ||||
-rw-r--r-- | content/public/browser/navigation_controller.h | 4 | ||||
-rw-r--r-- | content/public/browser/page_navigator.cc | 9 | ||||
-rw-r--r-- | content/public/browser/page_navigator.h | 4 | ||||
-rw-r--r-- | content/public/renderer/navigation_state.cc | 3 | ||||
-rw-r--r-- | content/public/renderer/navigation_state.h | 13 |
6 files changed, 34 insertions, 6 deletions
diff --git a/content/public/browser/navigation_controller.cc b/content/public/browser/navigation_controller.cc index 4c9ba58..5fc56dc 100644 --- a/content/public/browser/navigation_controller.cc +++ b/content/public/browser/navigation_controller.cc @@ -15,7 +15,8 @@ NavigationController::LoadURLParams::LoadURLParams(const GURL& url) is_renderer_initiated(false), override_user_agent(UA_OVERRIDE_INHERIT), browser_initiated_post_data(NULL), - can_load_local_resources(false) { + can_load_local_resources(false), + is_cross_site_redirect(false) { } NavigationController::LoadURLParams::~LoadURLParams() { @@ -33,7 +34,8 @@ NavigationController::LoadURLParams::LoadURLParams( transferred_global_request_id(other.transferred_global_request_id), base_url_for_data_url(other.base_url_for_data_url), virtual_url_for_data_url(other.virtual_url_for_data_url), - browser_initiated_post_data(other.browser_initiated_post_data) { + browser_initiated_post_data(other.browser_initiated_post_data), + is_cross_site_redirect(false) { } NavigationController::LoadURLParams& @@ -50,6 +52,7 @@ NavigationController::LoadURLParams::operator=( base_url_for_data_url = other.base_url_for_data_url; virtual_url_for_data_url = other.virtual_url_for_data_url; browser_initiated_post_data = other.browser_initiated_post_data; + is_cross_site_redirect = other.is_cross_site_redirect; return *this; } diff --git a/content/public/browser/navigation_controller.h b/content/public/browser/navigation_controller.h index 8a64d48..d37960b 100644 --- a/content/public/browser/navigation_controller.h +++ b/content/public/browser/navigation_controller.h @@ -151,6 +151,10 @@ class NavigationController { // True if this URL should be able to access local resources. bool can_load_local_resources; + // Indicates whether this navigation involves a cross-process redirect, + // in which case it should replace the current navigation entry. + bool is_cross_site_redirect; + explicit LoadURLParams(const GURL& url); ~LoadURLParams(); diff --git a/content/public/browser/page_navigator.cc b/content/public/browser/page_navigator.cc index 029afbc..608b2d0 100644 --- a/content/public/browser/page_navigator.cc +++ b/content/public/browser/page_navigator.cc @@ -17,7 +17,8 @@ OpenURLParams::OpenURLParams( source_frame_id(-1), disposition(disposition), transition(transition), - is_renderer_initiated(is_renderer_initiated) { + is_renderer_initiated(is_renderer_initiated), + is_cross_site_redirect(false) { } OpenURLParams::OpenURLParams( @@ -32,14 +33,16 @@ OpenURLParams::OpenURLParams( source_frame_id(source_frame_id), disposition(disposition), transition(transition), - is_renderer_initiated(is_renderer_initiated) { + is_renderer_initiated(is_renderer_initiated), + is_cross_site_redirect(false) { } OpenURLParams::OpenURLParams() : source_frame_id(-1), disposition(UNKNOWN), transition(PageTransitionFromInt(0)), - is_renderer_initiated(false) { + is_renderer_initiated(false), + is_cross_site_redirect(false) { } OpenURLParams::~OpenURLParams() { diff --git a/content/public/browser/page_navigator.h b/content/public/browser/page_navigator.h index 90eaef6..bc716df 100644 --- a/content/public/browser/page_navigator.h +++ b/content/public/browser/page_navigator.h @@ -64,6 +64,10 @@ struct CONTENT_EXPORT OpenURLParams { // transferred to a new renderer. GlobalRequestID transferred_global_request_id; + // Indicates whether this navigation involves a cross-process redirect, + // in which case it should replace the current navigation entry. + bool is_cross_site_redirect; + private: OpenURLParams(); }; diff --git a/content/public/renderer/navigation_state.cc b/content/public/renderer/navigation_state.cc index 9208efa..37fcfb7 100644 --- a/content/public/renderer/navigation_state.cc +++ b/content/public/renderer/navigation_state.cc @@ -18,7 +18,8 @@ NavigationState::NavigationState(content::PageTransition transition_type, was_within_same_page_(false), transferred_request_child_id_(-1), transferred_request_request_id_(-1), - allow_download_(true) { + allow_download_(true), + is_redirect_in_progress_(false) { } NavigationState::~NavigationState() {} diff --git a/content/public/renderer/navigation_state.h b/content/public/renderer/navigation_state.h index f13b9b7..58a6534 100644 --- a/content/public/renderer/navigation_state.h +++ b/content/public/renderer/navigation_state.h @@ -78,6 +78,12 @@ class NavigationState { bool allow_download() const { return allow_download_; } + void set_is_redirect_in_progress(bool value) { + is_redirect_in_progress_ = value; + } + bool is_redirect_in_progress() const { + return is_redirect_in_progress_; + } private: NavigationState(content::PageTransition transition_type, @@ -96,6 +102,13 @@ class NavigationState { int transferred_request_request_id_; bool allow_download_; + // If we are handling a top-level client-side redirect, we need to set this + // to true when calling willPerformClientRedirect. + // If DecidePolicyForNavigation decides this redirect is a cross-process + // navigation, it will pass this flag to the browser process through OpenURL, + // which will eventually replace the current navigation entry. + bool is_redirect_in_progress_; + DISALLOW_COPY_AND_ASSIGN(NavigationState); }; |