Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Unified Diff: chrome/browser/ui/browser.cc

Issue 10117016: Implementation for switching between recently used tabs using ctrl tilde or quoteleft. Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixed review comments. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/browser.cc
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 259099284eeda44650e8e3a86d02cd21445b61d3..4292084d99e4b8119f8bcccbcf5f7184ff1feb7d 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -130,6 +130,7 @@
#include "chrome/browser/ui/tabs/dock_info.h"
#include "chrome/browser/ui/tabs/tab_finder.h"
#include "chrome/browser/ui/tabs/tab_menu_model.h"
+#include "chrome/browser/ui/tabs/tab_mru_list_manager.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/web_applications/web_app_ui.h"
#include "chrome/browser/ui/webui/feedback_ui.h"
@@ -374,7 +375,10 @@ Browser::Browser(Type type, Profile* profile)
bookmark_bar_state_(BookmarkBar::HIDDEN),
window_has_shown_(false) {
tab_strip_model_->AddObserver(this);
-
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableTabMRUSwitch)) {
+ tab_mru_list_manager_.reset(new TabMRUListManager(tab_strip_model_.get()));
+ }
toolbar_model_.reset(new ToolbarModel(toolbar_model_delegate_.get()));
registrar_.Add(this, content::NOTIFICATION_SSL_VISIBLE_STATE_CHANGED,
@@ -1461,6 +1465,13 @@ void Browser::SelectLastTab() {
tab_strip_model_->SelectLastTab();
}
+void Browser::SelectPreviousMRUTab() {
+ content::RecordAction(UserMetricsAction("SelectPreviousMRUTab"));
+ TabContentsWrapper* contents = tab_mru_list_manager_->GetPreviousMRUTab();
+ if (contents)
+ ActivateTabAt(tab_strip_model_->GetIndexOfTabContents(contents), true);
+}
+
void Browser::DuplicateTab() {
content::RecordAction(UserMetricsAction("Duplicate"));
DuplicateContentsAt(active_index());
@@ -2426,25 +2437,25 @@ void Browser::ExecuteCommandWithDisposition(
// 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(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_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_STOP: Stop(); break;
// Window management commands
- case IDC_NEW_WINDOW: NewWindow(); break;
- case IDC_NEW_INCOGNITO_WINDOW: NewIncognitoWindow(); 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_TABPOSE: OpenTabpose(); break;
- case IDC_MOVE_TAB_NEXT: MoveTabNext(); break;
- case IDC_MOVE_TAB_PREVIOUS: MoveTabPrevious(); break;
+ case IDC_NEW_WINDOW: NewWindow(); break;
+ case IDC_NEW_INCOGNITO_WINDOW: NewIncognitoWindow(); 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_TABPOSE: OpenTabpose(); 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:
@@ -2452,29 +2463,29 @@ void Browser::ExecuteCommandWithDisposition(
case IDC_SELECT_TAB_4:
case IDC_SELECT_TAB_5:
case IDC_SELECT_TAB_6:
- case IDC_SELECT_TAB_7: SelectNumberedTab(id - IDC_SELECT_TAB_0);
+ 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_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;
#if defined(OS_MACOSX)
- case IDC_PRESENTATION_MODE: TogglePresentationMode(); break;
+ case IDC_PRESENTATION_MODE: TogglePresentationMode(); break;
#endif
- case IDC_EXIT: Exit(); break;
+ case IDC_EXIT: Exit(); break;
// 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: ViewSelectedSource(); break;
- case IDC_EMAIL_PAGE_LOCATION: EmailPageLocation(); break;
- case IDC_PRINT: Print(); break;
- case IDC_ADVANCED_PRINT: AdvancedPrint(); break;
- case IDC_CHROME_TO_MOBILE_PAGE: ShowChromeToMobileBubble(); 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: ViewSelectedSource(); break;
+ case IDC_EMAIL_PAGE_LOCATION: EmailPageLocation(); break;
+ case IDC_PRINT: Print(); break;
+ case IDC_ADVANCED_PRINT: AdvancedPrint(); break;
+ case IDC_CHROME_TO_MOBILE_PAGE: ShowChromeToMobileBubble(); break;
+ case IDC_ENCODING_AUTO_DETECT: ToggleEncodingAutoDetect(); break;
case IDC_ENCODING_UTF8:
case IDC_ENCODING_UTF16LE:
case IDC_ENCODING_ISO88591:
@@ -2511,69 +2522,70 @@ void Browser::ExecuteCommandWithDisposition(
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(content::PAGE_ZOOM_IN); break;
- case IDC_ZOOM_NORMAL: Zoom(content::PAGE_ZOOM_RESET); break;
- case IDC_ZOOM_MINUS: Zoom(content::PAGE_ZOOM_OUT); break;
+ case IDC_ZOOM_PLUS: Zoom(content::PAGE_ZOOM_IN); break;
+ case IDC_ZOOM_NORMAL: Zoom(content::PAGE_ZOOM_RESET); break;
+ case IDC_ZOOM_MINUS: Zoom(content::PAGE_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: FocusAppMenu(); break;
- case IDC_FOCUS_BOOKMARKS: FocusBookmarksToolbar(); break;
- case IDC_FOCUS_NEXT_PANE: FocusNextPane(); break;
- case IDC_FOCUS_PREVIOUS_PANE: FocusPreviousPane(); break;
+ case IDC_FOCUS_TOOLBAR: FocusToolbar(); break;
+ case IDC_FOCUS_LOCATION: FocusLocationBar(); break;
+ case IDC_FOCUS_SEARCH: FocusSearch(); break;
+ case IDC_FOCUS_MENU_BAR: FocusAppMenu(); break;
+ case IDC_FOCUS_BOOKMARKS: FocusBookmarksToolbar(); break;
+ case IDC_FOCUS_NEXT_PANE: FocusNextPane(); break;
+ case IDC_FOCUS_PREVIOUS_PANE: FocusPreviousPane(); break;
// Show various bits of UI
- case IDC_OPEN_FILE: OpenFile(); break;
- case IDC_CREATE_SHORTCUTS: OpenCreateShortcutsDialog(); break;
- case IDC_DEV_TOOLS: ToggleDevToolsWindow(
- DEVTOOLS_TOGGLE_ACTION_NONE);
- break;
- case IDC_DEV_TOOLS_CONSOLE: ToggleDevToolsWindow(
- DEVTOOLS_TOGGLE_ACTION_SHOW_CONSOLE);
- break;
- case IDC_DEV_TOOLS_INSPECT: ToggleDevToolsWindow(
- DEVTOOLS_TOGGLE_ACTION_INSPECT);
- break;
- case IDC_TASK_MANAGER: OpenTaskManager(false); break;
- case IDC_VIEW_BACKGROUND_PAGES: OpenTaskManager(true); break;
- case IDC_FEEDBACK: OpenFeedbackDialog(); break;
-
- case IDC_SHOW_BOOKMARK_BAR: ToggleBookmarkBar(); break;
- case IDC_PROFILING_ENABLED: Profiling::Toggle(); break;
-
- case IDC_SHOW_BOOKMARK_MANAGER: OpenBookmarkManager(); break;
- case IDC_SHOW_APP_MENU: ShowAppMenu(); break;
- case IDC_SHOW_AVATAR_MENU: ShowAvatarMenu(); break;
- case IDC_SHOW_HISTORY: ShowHistoryTab(); break;
- case IDC_SHOW_DOWNLOADS: ShowDownloadsTab(); break;
- case IDC_MANAGE_EXTENSIONS: ShowExtensionsTab(); break;
- case IDC_OPTIONS: OpenOptionsDialog(); break;
- case IDC_EDIT_SEARCH_ENGINES: OpenSearchEngineOptionsDialog(); break;
- case IDC_VIEW_PASSWORDS: OpenPasswordManager(); break;
- case IDC_CLEAR_BROWSING_DATA: OpenClearBrowsingDataDialog(); break;
- case IDC_IMPORT_SETTINGS: OpenImportSettingsDialog(); break;
- case IDC_ABOUT: OpenAboutChromeDialog(); break;
- case IDC_UPGRADE_DIALOG: OpenUpdateChromeDialog(); break;
- case IDC_VIEW_INCOMPATIBILITIES: ShowAboutConflictsTab(); break;
- case IDC_HELP_PAGE: ShowHelpTab(); break;
- case IDC_SHOW_SYNC_SETUP: ShowSyncSetup(SyncPromoUI::SOURCE_MENU);
- break;
- case IDC_TOGGLE_SPEECH_INPUT: ToggleSpeechInput(); break;
+ case IDC_OPEN_FILE: OpenFile(); break;
+ case IDC_CREATE_SHORTCUTS: OpenCreateShortcutsDialog(); break;
+ case IDC_DEV_TOOLS: ToggleDevToolsWindow(
+ DEVTOOLS_TOGGLE_ACTION_NONE);
+ break;
+ case IDC_DEV_TOOLS_CONSOLE: ToggleDevToolsWindow(
+ DEVTOOLS_TOGGLE_ACTION_SHOW_CONSOLE);
+ break;
+ case IDC_DEV_TOOLS_INSPECT: ToggleDevToolsWindow(
+ DEVTOOLS_TOGGLE_ACTION_INSPECT);
+ break;
+ case IDC_TASK_MANAGER: OpenTaskManager(false); break;
+ case IDC_VIEW_BACKGROUND_PAGES: OpenTaskManager(true); break;
+ case IDC_FEEDBACK: OpenFeedbackDialog(); break;
+
+ case IDC_SHOW_BOOKMARK_BAR: ToggleBookmarkBar(); break;
+ case IDC_PROFILING_ENABLED: Profiling::Toggle(); break;
+
+ case IDC_SHOW_BOOKMARK_MANAGER: OpenBookmarkManager(); break;
+ case IDC_SHOW_APP_MENU: ShowAppMenu(); break;
+ case IDC_SHOW_AVATAR_MENU: ShowAvatarMenu(); break;
+ case IDC_SHOW_HISTORY: ShowHistoryTab(); break;
+ case IDC_SHOW_DOWNLOADS: ShowDownloadsTab(); break;
+ case IDC_MANAGE_EXTENSIONS: ShowExtensionsTab(); break;
+ case IDC_OPTIONS: OpenOptionsDialog(); break;
+ case IDC_EDIT_SEARCH_ENGINES: OpenSearchEngineOptionsDialog(); break;
+ case IDC_VIEW_PASSWORDS: OpenPasswordManager(); break;
+ case IDC_CLEAR_BROWSING_DATA: OpenClearBrowsingDataDialog(); break;
+ case IDC_IMPORT_SETTINGS: OpenImportSettingsDialog(); break;
+ case IDC_ABOUT: OpenAboutChromeDialog(); break;
+ case IDC_UPGRADE_DIALOG: OpenUpdateChromeDialog(); break;
+ case IDC_VIEW_INCOMPATIBILITIES: ShowAboutConflictsTab(); break;
+ case IDC_HELP_PAGE: ShowHelpTab(); break;
+ case IDC_SHOW_SYNC_SETUP: ShowSyncSetup(SyncPromoUI::SOURCE_MENU);
+ break;
+ case IDC_TOGGLE_SPEECH_INPUT: ToggleSpeechInput(); break;
+ case IDC_SELECT_PREVIOUS_MRU_TAB: SelectPreviousMRUTab(); break;
default:
LOG(WARNING) << "Received Unimplemented Command: " << id;
@@ -4079,6 +4091,11 @@ void Browser::InitCommandState() {
command_updater_.UpdateCommandEnabled(IDC_SELECT_NEXT_TAB, normal_window);
command_updater_.UpdateCommandEnabled(IDC_SELECT_PREVIOUS_TAB,
normal_window);
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
sky 2012/06/15 19:47:39 This should be conditionally enabled.
NaveenBobbili (Motorola) 2012/06/25 09:44:23 Done.
+ switches::kEnableTabMRUSwitch)) {
+ command_updater_.UpdateCommandEnabled(IDC_SELECT_PREVIOUS_MRU_TAB,
+ normal_window);
+ }
command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_NEXT, normal_window);
command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_PREVIOUS, normal_window);
command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_0, normal_window);

Powered by Google App Engine
This is Rietveld 408576698