summaryrefslogtreecommitdiffstats
path: root/content/public
diff options
context:
space:
mode:
authorirobert@chromium.org <irobert@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-15 23:29:18 +0000
committerirobert@chromium.org <irobert@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-15 23:29:18 +0000
commite2caa03951c9b10f49dff903c12badf9644bad88 (patch)
tree1ebc3891a5b02f5c1e89306570768b764112615f /content/public
parentee09ccd04e7f7a709cd3e61071cf7ea9fd26b1cf (diff)
downloadchromium_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.cc7
-rw-r--r--content/public/browser/navigation_controller.h4
-rw-r--r--content/public/browser/page_navigator.cc9
-rw-r--r--content/public/browser/page_navigator.h4
-rw-r--r--content/public/renderer/navigation_state.cc3
-rw-r--r--content/public/renderer/navigation_state.h13
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);
};