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-17 20:50:29 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-17 20:50:29 +0000
commit3698f173be9c6bf67816ad7e1ec194dd83438cba (patch)
treedd95954931d37a7183881dda2778d0f14d9d7e7e /chrome/browser/browser.cc
parent4462559524df6726acc2400113508f3dc22b3648 (diff)
downloadchromium_src-3698f173be9c6bf67816ad7e1ec194dd83438cba.zip
chromium_src-3698f173be9c6bf67816ad7e1ec194dd83438cba.tar.gz
chromium_src-3698f173be9c6bf67816ad7e1ec194dd83438cba.tar.bz2
[Mac] Honor modifier keys in back/forward menu.
Add a method ActivatedAtWithDisposition to BackForwardMenuModel that navigates to a history item with a certain window disposition (current tab, new background/foreground tab). Change BackForwardMenuController to call ActivatedAtWithDisposition with the disposition created from the current NSEvent. Also, factor out some common code in Browser::GoBack and GoForward. BUG=37984 TEST=Navigate to a history item in the back/forward menu while holding down the command key. The item should open in a new tab. Likewise, holding down cmd-shift should open it in a new foreground tab. Review URL: http://codereview.chromium.org/910001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41875 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser.cc')
-rw-r--r--chrome/browser/browser.cc71
1 files changed, 39 insertions, 32 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc
index bc3972a..af98839 100644
--- a/chrome/browser/browser.cc
+++ b/chrome/browser/browser.cc
@@ -788,6 +788,19 @@ bool Browser::CanRestoreTab() {
return service && !service->entries().empty();
}
+bool Browser::NavigateToIndexWithDisposition(int index,
+ WindowOpenDisposition disp) {
+ NavigationController& controller =
+ GetOrCloneNavigationControllerForDisposition(disp);
+
+ if (index >= 0 && index < controller.entry_count()) {
+ controller.GoToIndex(index);
+ return true;
+ } else {
+ return false;
+ }
+}
+
void Browser::ShowSingletonTab(const GURL& url) {
// See if we already have a tab with the given URL and select it if so.
for (int i = 0; i < tabstrip_model_.count(); i++) {
@@ -842,49 +855,43 @@ void Browser::UpdateCommandsForFullscreenMode(bool is_fullscreen) {
///////////////////////////////////////////////////////////////////////////////
// Browser, Assorted browser commands:
+NavigationController& Browser::GetOrCloneNavigationControllerForDisposition(
+ WindowOpenDisposition disposition) {
+ TabContents* current_tab = GetSelectedTabContents();
+ if (disposition == NEW_FOREGROUND_TAB ||
+ disposition == NEW_BACKGROUND_TAB) {
+ TabContents* cloned = current_tab->Clone();
+ tabstrip_model_.AddTabContents(cloned, -1, false,
+ PageTransition::LINK,
+ disposition == NEW_FOREGROUND_TAB);
+ return cloned->controller();
+ } else {
+ // Default disposition is CURRENT_TAB.
+ return current_tab->controller();
+ }
+}
+
void Browser::GoBack(WindowOpenDisposition disposition) {
UserMetrics::RecordAction("Back", profile_);
TabContents* current_tab = GetSelectedTabContents();
if (current_tab->controller().CanGoBack()) {
- NavigationController* controller = NULL;
- if (disposition == NEW_FOREGROUND_TAB ||
- disposition == NEW_BACKGROUND_TAB) {
- TabContents* cloned = GetSelectedTabContents()->Clone();
- tabstrip_model_.AddTabContents(cloned, -1, false,
- PageTransition::LINK,
- disposition == NEW_FOREGROUND_TAB);
- if (current_tab->interstitial_page()) {
- // The interstitial won't be copied to the new tab, so we don't need to
- // go back.
- return;
- }
- controller = &cloned->controller();
- } else {
- // Default disposition is CURRENT_TAB.
- controller = &current_tab->controller();
+ 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();
}
- controller->GoBack();
}
}
-void Browser::GoForward(WindowOpenDisposition disp) {
- // TODO(brettw) this is mostly duplicated from GoBack, these should have a
- // common backend or something.
+void Browser::GoForward(WindowOpenDisposition disposition) {
UserMetrics::RecordAction("Forward", profile_);
if (GetSelectedTabContents()->controller().CanGoForward()) {
- NavigationController* controller = 0;
- if (disp == NEW_FOREGROUND_TAB || disp == NEW_BACKGROUND_TAB) {
- TabContents* cloned = GetSelectedTabContents()->Clone();
- tabstrip_model_.AddTabContents(cloned, -1, false,
- PageTransition::LINK,
- disp == NEW_FOREGROUND_TAB);
- controller = &cloned->controller();
- } else {
- // Default disposition is CURRENT_TAB.
- controller = &GetSelectedTabContents()->controller();
- }
- controller->GoForward();
+ NavigationController& controller =
+ GetOrCloneNavigationControllerForDisposition(disposition);
+ controller.GoForward();
}
}