summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser.cc
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-29 19:19:06 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-29 19:19:06 +0000
commitd497b0781cb67b0d7359a633d88c1ada077992aa (patch)
treea53748014d4d8f9265a5c8e266d0fd4d7639cd0c /chrome/browser/browser.cc
parent53d1edcbd0c3fc30b5e3af6529a516c41ba8debe (diff)
downloadchromium_src-d497b0781cb67b0d7359a633d88c1ada077992aa.zip
chromium_src-d497b0781cb67b0d7359a633d88c1ada077992aa.tar.gz
chromium_src-d497b0781cb67b0d7359a633d88c1ada077992aa.tar.bz2
Fix a regression appearing in r41875 where navigating back from an interstitial page wouldn't work.
Also, factor out a method WindowDispositionShouldOpenNewTab that's used to decide if a given window disposition opens in a new tab or the current tab. BUG=39248 TEST=SSLUITest.TestHTTPSExpiredCertAndGoBackViaButton, SSLUITest.TestHTTPSExpiredCertAndGoBackViaMenu, manual test: Go to www.google.com, then to https://ebay.com to show the HTTPS interstitial, then navigate back using the toolbar. Review URL: http://codereview.chromium.org/1406001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42974 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser.cc')
-rw-r--r--chrome/browser/browser.cc19
1 files changed, 13 insertions, 6 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc
index 48cb020..be26e1e 100644
--- a/chrome/browser/browser.cc
+++ b/chrome/browser/browser.cc
@@ -893,11 +893,16 @@ void Browser::UpdateCommandsForFullscreenMode(bool is_fullscreen) {
///////////////////////////////////////////////////////////////////////////////
// Browser, Assorted browser commands:
+bool Browser::ShouldOpenNewTabForWindowDisposition(
+ WindowOpenDisposition disposition) {
+ return (disposition == NEW_FOREGROUND_TAB ||
+ disposition == NEW_BACKGROUND_TAB);
+}
+
NavigationController& Browser::GetOrCloneNavigationControllerForDisposition(
WindowOpenDisposition disposition) {
TabContents* current_tab = GetSelectedTabContents();
- if (disposition == NEW_FOREGROUND_TAB ||
- disposition == NEW_BACKGROUND_TAB) {
+ if (ShouldOpenNewTabForWindowDisposition(disposition)) {
TabContents* cloned = current_tab->Clone();
tabstrip_model_.AddTabContents(cloned, -1, false,
PageTransition::LINK,
@@ -916,11 +921,13 @@ void Browser::GoBack(WindowOpenDisposition disposition) {
if (current_tab->controller().CanGoBack()) {
NavigationController& controller =
GetOrCloneNavigationControllerForDisposition(disposition);
- // The interstitial won't be copied to the new tab, so we don't need to
- // go back.
- if (!current_tab->interstitial_page()) {
- controller.GoBack();
+ // If we are on an interstitial page and clone the tab, it won't be copied
+ // to the new tab, so we don't need to go back.
+ if (current_tab->interstitial_page() &&
+ ShouldOpenNewTabForWindowDisposition(disposition)) {
+ return;
}
+ controller.GoBack();
}
}