| Index: chrome/browser/browser.cc
|
| ===================================================================
|
| --- chrome/browser/browser.cc (revision 12354)
|
| +++ chrome/browser/browser.cc (working copy)
|
| @@ -552,7 +552,7 @@
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // Browser, Assorted browser commands:
|
|
|
| -void Browser::GoBack() {
|
| +void Browser::GoBack(WindowOpenDisposition disposition) {
|
| UserMetrics::RecordAction(L"Back", profile_);
|
|
|
| // If we are showing an interstitial, just hide it.
|
| @@ -566,14 +566,37 @@
|
| web_contents->interstitial_page()->DontProceed();
|
| return;
|
| }
|
| - if (current_tab->controller()->CanGoBack())
|
| - current_tab->controller()->GoBack();
|
| +
|
| + if (current_tab->controller()->CanGoBack()) {
|
| + NavigationController* controller = 0;
|
| + if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB){
|
| + controller = GetSelectedTabContents()->controller()->Clone();
|
| + tabstrip_model_.AddTabContents(
|
| + controller->active_contents(), -1,
|
| + PageTransition::LINK, disposition == NEW_FOREGROUND_TAB);
|
| + } else {
|
| + // Default disposition is CURRENT_TAB.
|
| + controller = current_tab->controller();
|
| + }
|
| + controller->GoBack();
|
| + }
|
| }
|
|
|
| -void Browser::GoForward() {
|
| +void Browser::GoForward(WindowOpenDisposition disp) {
|
| UserMetrics::RecordAction(L"Forward", profile_);
|
| - if (GetSelectedTabContents()->controller()->CanGoForward())
|
| - GetSelectedTabContents()->controller()->GoForward();
|
| + if (GetSelectedTabContents()->controller()->CanGoForward()) {
|
| + NavigationController* controller = 0;
|
| + if (disp == NEW_FOREGROUND_TAB || disp == NEW_BACKGROUND_TAB) {
|
| + controller = GetSelectedTabContents()->controller()->Clone();
|
| + tabstrip_model_.AddTabContents(
|
| + controller->active_contents(), -1,
|
| + PageTransition::LINK, disp == NEW_FOREGROUND_TAB);
|
| + } else {
|
| + // Default disposition is CURRENT_TAB.
|
| + controller = GetSelectedTabContents()->controller();
|
| + }
|
| + controller->GoForward();
|
| + }
|
| }
|
|
|
| void Browser::Reload() {
|
| @@ -598,11 +621,9 @@
|
| }
|
| }
|
|
|
| -void Browser::Home() {
|
| +void Browser::Home(WindowOpenDisposition disposition) {
|
| UserMetrics::RecordAction(L"Home", profile_);
|
| - GURL homepage_url = GetHomePage();
|
| - GetSelectedTabContents()->controller()->LoadURL(
|
| - homepage_url, GURL(), PageTransition::AUTO_BOOKMARK);
|
| + OpenURL(GetHomePage(), GURL(), disposition, PageTransition::AUTO_BOOKMARK);
|
| }
|
|
|
| void Browser::OpenCurrentURL() {
|
| @@ -613,9 +634,9 @@
|
| location_bar->GetPageTransition());
|
| }
|
|
|
| -void Browser::Go() {
|
| +void Browser::Go(WindowOpenDisposition disposition) {
|
| UserMetrics::RecordAction(L"Go", profile_);
|
| - window_->GetLocationBar()->AcceptInput();
|
| + window_->GetLocationBar()->AcceptInputWithDisposition(disposition);
|
| }
|
|
|
| void Browser::Stop() {
|
| @@ -1103,10 +1124,8 @@
|
| return NULL;
|
| }
|
|
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// Browser, CommandUpdater::CommandUpdaterDelegate implementation:
|
| -
|
| -void Browser::ExecuteCommand(int id) {
|
| +void Browser::ExecuteCommandWithDisposition(
|
| + int id, WindowOpenDisposition disposition) {
|
| // No commands are enabled if there is not yet any selected tab.
|
| // TODO(pkasting): It seems like we should not need this, because either
|
| // most/all commands should not have been enabled yet anyway or the ones that
|
| @@ -1123,12 +1142,12 @@
|
| // declaration order in browser.h!
|
| switch (id) {
|
| // Navigation commands
|
| - case IDC_BACK: GoBack(); break;
|
| - case IDC_FORWARD: GoForward(); break;
|
| + case IDC_BACK: GoBack(disposition); break;
|
| + case IDC_FORWARD: GoForward(disposition); break;
|
| case IDC_RELOAD: Reload(); break;
|
| - case IDC_HOME: Home(); break;
|
| + case IDC_HOME: Home(disposition); break;
|
| case IDC_OPEN_CURRENT_URL: OpenCurrentURL(); break;
|
| - case IDC_GO: Go(); break;
|
| + case IDC_GO: Go(disposition); break;
|
| case IDC_STOP: Stop(); break;
|
|
|
| // Window management commands
|
| @@ -1283,6 +1302,13 @@
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| +// Browser, CommandUpdater::CommandUpdaterDelegate implementation:
|
| +
|
| +void Browser::ExecuteCommand(int id) {
|
| + ExecuteCommandWithDisposition(id, CURRENT_TAB);
|
| +}
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| // Browser, TabStripModelDelegate implementation:
|
|
|
| GURL Browser::GetBlankTabURL() const {
|
|
|