| Index: chrome/browser/browser.cc
|
| ===================================================================
|
| --- chrome/browser/browser.cc (revision 49315)
|
| +++ chrome/browser/browser.cc (working copy)
|
| @@ -982,14 +982,11 @@
|
| bool Browser::NavigateToIndexWithDisposition(int index,
|
| WindowOpenDisposition disp) {
|
| NavigationController& controller =
|
| - GetOrCloneNavigationControllerForDisposition(disp);
|
| -
|
| - if (index >= 0 && index < controller.entry_count()) {
|
| - controller.GoToIndex(index);
|
| - return true;
|
| - } else {
|
| + GetOrCloneTabForDisposition(disp)->controller();
|
| + if (index < 0 || index >= controller.entry_count())
|
| return false;
|
| - }
|
| + controller.GoToIndex(index);
|
| + return true;
|
| }
|
|
|
| void Browser::ShowSingletonTab(const GURL& url) {
|
| @@ -1076,19 +1073,15 @@
|
| disposition == NEW_BACKGROUND_TAB);
|
| }
|
|
|
| -NavigationController& Browser::GetOrCloneNavigationControllerForDisposition(
|
| +TabContents* Browser::GetOrCloneTabForDisposition(
|
| WindowOpenDisposition disposition) {
|
| TabContents* current_tab = GetSelectedTabContents();
|
| if (ShouldOpenNewTabForWindowDisposition(disposition)) {
|
| - TabContents* cloned = current_tab->Clone();
|
| - tabstrip_model_.AddTabContents(cloned, -1, false,
|
| - PageTransition::LINK,
|
| + current_tab = current_tab->Clone();
|
| + tabstrip_model_.AddTabContents(current_tab, -1, false, PageTransition::LINK,
|
| disposition == NEW_FOREGROUND_TAB);
|
| - return cloned->controller();
|
| - } else {
|
| - // Default disposition is CURRENT_TAB.
|
| - return current_tab->controller();
|
| }
|
| + return current_tab;
|
| }
|
|
|
| void Browser::UpdateTabStripModelInsertionPolicy() {
|
| @@ -1148,56 +1141,50 @@
|
|
|
| TabContents* current_tab = GetSelectedTabContents();
|
| if (current_tab->controller().CanGoBack()) {
|
| - NavigationController& controller =
|
| - GetOrCloneNavigationControllerForDisposition(disposition);
|
| + TabContents* new_tab = GetOrCloneTabForDisposition(disposition);
|
| // 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)) {
|
| + if (current_tab->showing_interstitial_page() && (new_tab != current_tab))
|
| return;
|
| - }
|
| - controller.GoBack();
|
| + new_tab->controller().GoBack();
|
| }
|
| }
|
|
|
| void Browser::GoForward(WindowOpenDisposition disposition) {
|
| UserMetrics::RecordAction(UserMetricsAction("Forward"), profile_);
|
| - if (GetSelectedTabContents()->controller().CanGoForward()) {
|
| - NavigationController& controller =
|
| - GetOrCloneNavigationControllerForDisposition(disposition);
|
| - controller.GoForward();
|
| - }
|
| + if (GetSelectedTabContents()->controller().CanGoForward())
|
| + GetOrCloneTabForDisposition(disposition)->controller().GoForward();
|
| }
|
|
|
| -void Browser::Reload() {
|
| +void Browser::Reload(WindowOpenDisposition disposition) {
|
| UserMetrics::RecordAction(UserMetricsAction("Reload"), profile_);
|
| - ReloadInternal(false);
|
| + ReloadInternal(disposition, false);
|
| }
|
|
|
| -void Browser::ReloadIgnoringCache() {
|
| +void Browser::ReloadIgnoringCache(WindowOpenDisposition disposition) {
|
| UserMetrics::RecordAction(UserMetricsAction("ReloadIgnoringCache"), profile_);
|
| - ReloadInternal(true);
|
| + ReloadInternal(disposition, true);
|
| }
|
|
|
| -void Browser::ReloadInternal(bool ignore_cache) {
|
| +void Browser::ReloadInternal(WindowOpenDisposition disposition,
|
| + bool ignore_cache) {
|
| // If we are showing an interstitial, treat this as an OpenURL.
|
| TabContents* current_tab = GetSelectedTabContents();
|
| - if (current_tab) {
|
| - if (current_tab->showing_interstitial_page()) {
|
| - NavigationEntry* entry = current_tab->controller().GetActiveEntry();
|
| - DCHECK(entry); // Should exist if interstitial is showing.
|
| - OpenURL(entry->url(), GURL(), CURRENT_TAB, PageTransition::RELOAD);
|
| - return;
|
| - }
|
| -
|
| - // As this is caused by a user action, give the focus to the page.
|
| - if (!current_tab->FocusLocationBarByDefault())
|
| - current_tab->Focus();
|
| - if (ignore_cache)
|
| - current_tab->controller().ReloadIgnoringCache(true);
|
| - else
|
| - current_tab->controller().Reload(true);
|
| + if (current_tab && current_tab->showing_interstitial_page()) {
|
| + NavigationEntry* entry = current_tab->controller().GetActiveEntry();
|
| + DCHECK(entry); // Should exist if interstitial is showing.
|
| + OpenURL(entry->url(), GURL(), disposition, PageTransition::RELOAD);
|
| + return;
|
| }
|
| +
|
| + // As this is caused by a user action, give the focus to the page.
|
| + current_tab = GetOrCloneTabForDisposition(disposition);
|
| + if (!current_tab->FocusLocationBarByDefault())
|
| + current_tab->Focus();
|
| + if (ignore_cache)
|
| + current_tab->controller().ReloadIgnoringCache(true);
|
| + else
|
| + current_tab->controller().Reload(true);
|
| }
|
|
|
| void Browser::Home(WindowOpenDisposition disposition) {
|
| @@ -1920,18 +1907,18 @@
|
| // declaration order in browser.h!
|
| switch (id) {
|
| // Navigation commands
|
| - case IDC_BACK: GoBack(disposition); break;
|
| - case IDC_FORWARD: GoForward(disposition); break;
|
| - case IDC_RELOAD: Reload(); break;
|
| - case IDC_RELOAD_IGNORING_CACHE: ReloadIgnoringCache(); break;
|
| - case IDC_HOME: Home(disposition); break;
|
| - case IDC_OPEN_CURRENT_URL: OpenCurrentURL(); break;
|
| - case IDC_GO: Go(disposition); break;
|
| - case IDC_STOP: Stop(); break;
|
| + case IDC_BACK: GoBack(disposition); break;
|
| + case IDC_FORWARD: GoForward(disposition); break;
|
| + case IDC_RELOAD: Reload(disposition); break;
|
| + case IDC_RELOAD_IGNORING_CACHE: ReloadIgnoringCache(disposition); break;
|
| + case IDC_HOME: Home(disposition); break;
|
| + case IDC_OPEN_CURRENT_URL: OpenCurrentURL(); break;
|
| + case IDC_GO: Go(disposition); break;
|
| + case IDC_STOP: Stop(); break;
|
|
|
| // Window management commands
|
| - case IDC_NEW_WINDOW: NewWindow(); break;
|
| - case IDC_NEW_INCOGNITO_WINDOW: NewIncognitoWindow(); break;
|
| + case IDC_NEW_WINDOW: NewWindow(); break;
|
| + case IDC_NEW_INCOGNITO_WINDOW: NewIncognitoWindow(); break;
|
| case IDC_NEW_WINDOW_PROFILE_0:
|
| case IDC_NEW_WINDOW_PROFILE_1:
|
| case IDC_NEW_WINDOW_PROFILE_2:
|
| @@ -1943,13 +1930,13 @@
|
| case IDC_NEW_WINDOW_PROFILE_8:
|
| NewProfileWindowByIndex(id - IDC_NEW_WINDOW_PROFILE_0);
|
| break;
|
| - case IDC_CLOSE_WINDOW: CloseWindow(); break;
|
| - case IDC_NEW_TAB: NewTab(); break;
|
| - case IDC_CLOSE_TAB: CloseTab(); break;
|
| - case IDC_SELECT_NEXT_TAB: SelectNextTab(); break;
|
| - case IDC_SELECT_PREVIOUS_TAB: SelectPreviousTab(); break;
|
| - case IDC_MOVE_TAB_NEXT: MoveTabNext(); break;
|
| - case IDC_MOVE_TAB_PREVIOUS: MoveTabPrevious(); break;
|
| + case IDC_CLOSE_WINDOW: CloseWindow(); break;
|
| + case IDC_NEW_TAB: NewTab(); break;
|
| + case IDC_CLOSE_TAB: CloseTab(); break;
|
| + case IDC_SELECT_NEXT_TAB: SelectNextTab(); break;
|
| + case IDC_SELECT_PREVIOUS_TAB: SelectPreviousTab(); break;
|
| + case IDC_MOVE_TAB_NEXT: MoveTabNext(); break;
|
| + case IDC_MOVE_TAB_PREVIOUS: MoveTabPrevious(); break;
|
| case IDC_SELECT_TAB_0:
|
| case IDC_SELECT_TAB_1:
|
| case IDC_SELECT_TAB_2:
|
| @@ -1958,28 +1945,28 @@
|
| case IDC_SELECT_TAB_5:
|
| case IDC_SELECT_TAB_6:
|
| case IDC_SELECT_TAB_7: SelectNumberedTab(id - IDC_SELECT_TAB_0);
|
| - break;
|
| - case IDC_SELECT_LAST_TAB: SelectLastTab(); break;
|
| - case IDC_DUPLICATE_TAB: DuplicateTab(); break;
|
| - case IDC_RESTORE_TAB: RestoreTab(); break;
|
| - case IDC_COPY_URL: WriteCurrentURLToClipboard(); break;
|
| - case IDC_SHOW_AS_TAB: ConvertPopupToTabbedBrowser(); break;
|
| - case IDC_FULLSCREEN: ToggleFullscreenMode(); break;
|
| - case IDC_EXIT: Exit(); break;
|
| - case IDC_TOGGLE_VERTICAL_TABS: ToggleUseVerticalTabs(); break;
|
| + break;
|
| + case IDC_SELECT_LAST_TAB: SelectLastTab(); break;
|
| + case IDC_DUPLICATE_TAB: DuplicateTab(); break;
|
| + case IDC_RESTORE_TAB: RestoreTab(); break;
|
| + case IDC_COPY_URL: WriteCurrentURLToClipboard(); break;
|
| + case IDC_SHOW_AS_TAB: ConvertPopupToTabbedBrowser(); break;
|
| + case IDC_FULLSCREEN: ToggleFullscreenMode(); break;
|
| + case IDC_EXIT: Exit(); break;
|
| + case IDC_TOGGLE_VERTICAL_TABS: ToggleUseVerticalTabs(); break;
|
| #if defined(OS_CHROMEOS)
|
| - case IDC_COMPACT_NAVBAR: ToggleCompactNavigationBar(); break;
|
| - case IDC_SEARCH: Search(); break;
|
| + case IDC_COMPACT_NAVBAR: ToggleCompactNavigationBar(); break;
|
| + case IDC_SEARCH: Search(); break;
|
| #endif
|
|
|
| // Page-related commands
|
| - case IDC_SAVE_PAGE: SavePage(); break;
|
| - case IDC_BOOKMARK_PAGE: BookmarkCurrentPage(); break;
|
| - case IDC_BOOKMARK_ALL_TABS: BookmarkAllTabs(); break;
|
| - case IDC_VIEW_SOURCE: ViewSource(); break;
|
| - case IDC_EMAIL_PAGE_LOCATION: EmailPageLocation(); break;
|
| - case IDC_PRINT: Print(); break;
|
| - case IDC_ENCODING_AUTO_DETECT: ToggleEncodingAutoDetect(); break;
|
| + case IDC_SAVE_PAGE: SavePage(); break;
|
| + case IDC_BOOKMARK_PAGE: BookmarkCurrentPage(); break;
|
| + case IDC_BOOKMARK_ALL_TABS: BookmarkAllTabs(); break;
|
| + case IDC_VIEW_SOURCE: ViewSource(); break;
|
| + case IDC_EMAIL_PAGE_LOCATION: EmailPageLocation(); break;
|
| + case IDC_PRINT: Print(); break;
|
| + case IDC_ENCODING_AUTO_DETECT: ToggleEncodingAutoDetect(); break;
|
| case IDC_ENCODING_UTF8:
|
| case IDC_ENCODING_UTF16LE:
|
| case IDC_ENCODING_ISO88591:
|
| @@ -2016,68 +2003,68 @@
|
| case IDC_ENCODING_ISO88598:
|
| case IDC_ENCODING_ISO88598I:
|
| case IDC_ENCODING_WINDOWS1255:
|
| - case IDC_ENCODING_WINDOWS1258: OverrideEncoding(id); break;
|
| + case IDC_ENCODING_WINDOWS1258: OverrideEncoding(id); break;
|
|
|
| // Clipboard commands
|
| - case IDC_CUT: Cut(); break;
|
| - case IDC_COPY: Copy(); break;
|
| - case IDC_PASTE: Paste(); break;
|
| + case IDC_CUT: Cut(); break;
|
| + case IDC_COPY: Copy(); break;
|
| + case IDC_PASTE: Paste(); break;
|
|
|
| // Find-in-page
|
| - case IDC_FIND: Find(); break;
|
| - case IDC_FIND_NEXT: FindNext(); break;
|
| - case IDC_FIND_PREVIOUS: FindPrevious(); break;
|
| + case IDC_FIND: Find(); break;
|
| + case IDC_FIND_NEXT: FindNext(); break;
|
| + case IDC_FIND_PREVIOUS: FindPrevious(); break;
|
|
|
| // Zoom
|
| - case IDC_ZOOM_PLUS: Zoom(PageZoom::ZOOM_IN); break;
|
| - case IDC_ZOOM_NORMAL: Zoom(PageZoom::RESET); break;
|
| - case IDC_ZOOM_MINUS: Zoom(PageZoom::ZOOM_OUT); break;
|
| + case IDC_ZOOM_PLUS: Zoom(PageZoom::ZOOM_IN); break;
|
| + case IDC_ZOOM_NORMAL: Zoom(PageZoom::RESET); break;
|
| + case IDC_ZOOM_MINUS: Zoom(PageZoom::ZOOM_OUT); break;
|
|
|
| // Focus various bits of UI
|
| - case IDC_FOCUS_TOOLBAR: FocusToolbar(); break;
|
| - case IDC_FOCUS_LOCATION: FocusLocationBar(); break;
|
| - case IDC_FOCUS_SEARCH: FocusSearch(); break;
|
| - case IDC_FOCUS_MENU_BAR: FocusPageAndAppMenus(); break;
|
| + case IDC_FOCUS_TOOLBAR: FocusToolbar(); break;
|
| + case IDC_FOCUS_LOCATION: FocusLocationBar(); break;
|
| + case IDC_FOCUS_SEARCH: FocusSearch(); break;
|
| + case IDC_FOCUS_MENU_BAR: FocusPageAndAppMenus(); break;
|
|
|
| // Show various bits of UI
|
| - case IDC_OPEN_FILE: OpenFile(); break;
|
| - case IDC_CREATE_SHORTCUTS: OpenCreateShortcutsDialog(); break;
|
| - case IDC_DEV_TOOLS: ToggleDevToolsWindow(false); break;
|
| - case IDC_DEV_TOOLS_CONSOLE: ToggleDevToolsWindow(true); break;
|
| - case IDC_TASK_MANAGER: OpenTaskManager(); break;
|
| - case IDC_SELECT_PROFILE: OpenSelectProfileDialog(); break;
|
| - case IDC_NEW_PROFILE: OpenNewProfileDialog(); break;
|
| - case IDC_REPORT_BUG: OpenBugReportDialog(); break;
|
| + case IDC_OPEN_FILE: OpenFile(); break;
|
| + case IDC_CREATE_SHORTCUTS: OpenCreateShortcutsDialog(); break;
|
| + case IDC_DEV_TOOLS: ToggleDevToolsWindow(false); break;
|
| + case IDC_DEV_TOOLS_CONSOLE: ToggleDevToolsWindow(true); break;
|
| + case IDC_TASK_MANAGER: OpenTaskManager(); break;
|
| + case IDC_SELECT_PROFILE: OpenSelectProfileDialog(); break;
|
| + case IDC_NEW_PROFILE: OpenNewProfileDialog(); break;
|
| + case IDC_REPORT_BUG: OpenBugReportDialog(); break;
|
|
|
| - case IDC_SHOW_BOOKMARK_BAR: ToggleBookmarkBar(); break;
|
| - case IDC_SHOW_EXTENSION_SHELF: ToggleExtensionShelf(); break;
|
| + case IDC_SHOW_BOOKMARK_BAR: ToggleBookmarkBar(); break;
|
| + case IDC_SHOW_EXTENSION_SHELF: ToggleExtensionShelf(); break;
|
|
|
| - case IDC_SHOW_BOOKMARK_MANAGER: OpenBookmarkManager(); break;
|
| - case IDC_SHOW_APP_MENU: ShowAppMenu(); break;
|
| - case IDC_SHOW_PAGE_MENU: ShowPageMenu(); break;
|
| - case IDC_SHOW_HISTORY: ShowHistoryTab(); break;
|
| - case IDC_SHOW_DOWNLOADS: ShowDownloadsTab(); break;
|
| - case IDC_MANAGE_EXTENSIONS: ShowExtensionsTab(); break;
|
| - case IDC_SYNC_BOOKMARKS: OpenSyncMyBookmarksDialog(); break;
|
| - case IDC_OPTIONS: OpenOptionsDialog(); break;
|
| - case IDC_EDIT_SEARCH_ENGINES: OpenKeywordEditor(); break;
|
| - case IDC_VIEW_PASSWORDS: OpenPasswordManager(); break;
|
| - case IDC_CLEAR_BROWSING_DATA: OpenClearBrowsingDataDialog(); break;
|
| - case IDC_IMPORT_SETTINGS: OpenImportSettingsDialog(); break;
|
| + case IDC_SHOW_BOOKMARK_MANAGER: OpenBookmarkManager(); break;
|
| + case IDC_SHOW_APP_MENU: ShowAppMenu(); break;
|
| + case IDC_SHOW_PAGE_MENU: ShowPageMenu(); break;
|
| + case IDC_SHOW_HISTORY: ShowHistoryTab(); break;
|
| + case IDC_SHOW_DOWNLOADS: ShowDownloadsTab(); break;
|
| + case IDC_MANAGE_EXTENSIONS: ShowExtensionsTab(); break;
|
| + case IDC_SYNC_BOOKMARKS: OpenSyncMyBookmarksDialog(); break;
|
| + case IDC_OPTIONS: OpenOptionsDialog(); break;
|
| + case IDC_EDIT_SEARCH_ENGINES: OpenKeywordEditor(); break;
|
| + case IDC_VIEW_PASSWORDS: OpenPasswordManager(); break;
|
| + case IDC_CLEAR_BROWSING_DATA: OpenClearBrowsingDataDialog(); break;
|
| + case IDC_IMPORT_SETTINGS: OpenImportSettingsDialog(); break;
|
| case IDC_ABOUT:
|
| if (Singleton<UpgradeDetector>::get()->notify_upgrade())
|
| OpenUpdateChromeDialog();
|
| else
|
| OpenAboutChromeDialog();
|
| break;
|
| - case IDC_HELP_PAGE: OpenHelpTab(); break;
|
| + case IDC_HELP_PAGE: OpenHelpTab(); break;
|
| #if defined(OS_CHROMEOS)
|
| - case IDC_SYSTEM_OPTIONS: OpenSystemOptionsDialog(); break;
|
| - case IDC_INTERNET_OPTIONS: OpenInternetOptionsDialog(); break;
|
| + case IDC_SYSTEM_OPTIONS: OpenSystemOptionsDialog(); break;
|
| + case IDC_INTERNET_OPTIONS: OpenInternetOptionsDialog(); break;
|
| #endif
|
|
|
| // AutoFill
|
| - case IDC_AUTOFILL_DEFAULT: AutoFillDefaultProfile(); break;
|
| + case IDC_AUTOFILL_DEFAULT: AutoFillDefaultProfile(); break;
|
|
|
| default:
|
| LOG(WARNING) << "Received Unimplemented Command: " << id;
|
|
|