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

Side by Side 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: Added unit test 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/browser.h" 5 #include "chrome/browser/ui/browser.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 #endif // OS_WIN 10 #endif // OS_WIN
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 #include "chrome/browser/ui/panels/panel.h" 123 #include "chrome/browser/ui/panels/panel.h"
124 #include "chrome/browser/ui/panels/panel_manager.h" 124 #include "chrome/browser/ui/panels/panel_manager.h"
125 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" 125 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
126 #include "chrome/browser/ui/status_bubble.h" 126 #include "chrome/browser/ui/status_bubble.h"
127 #include "chrome/browser/ui/sync/browser_synced_window_delegate.h" 127 #include "chrome/browser/ui/sync/browser_synced_window_delegate.h"
128 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" 128 #include "chrome/browser/ui/tab_contents/core_tab_helper.h"
129 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 129 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
130 #include "chrome/browser/ui/tabs/dock_info.h" 130 #include "chrome/browser/ui/tabs/dock_info.h"
131 #include "chrome/browser/ui/tabs/tab_finder.h" 131 #include "chrome/browser/ui/tabs/tab_finder.h"
132 #include "chrome/browser/ui/tabs/tab_menu_model.h" 132 #include "chrome/browser/ui/tabs/tab_menu_model.h"
133 #include "chrome/browser/ui/tabs/tab_mru_list_manager.h"
133 #include "chrome/browser/ui/tabs/tab_strip_model.h" 134 #include "chrome/browser/ui/tabs/tab_strip_model.h"
134 #include "chrome/browser/ui/web_applications/web_app_ui.h" 135 #include "chrome/browser/ui/web_applications/web_app_ui.h"
135 #include "chrome/browser/ui/webui/feedback_ui.h" 136 #include "chrome/browser/ui/webui/feedback_ui.h"
136 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" 137 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
137 #include "chrome/browser/ui/webui/ntp/new_tab_page_handler.h" 138 #include "chrome/browser/ui/webui/ntp/new_tab_page_handler.h"
138 #include "chrome/browser/ui/webui/options2/content_settings_handler2.h" 139 #include "chrome/browser/ui/webui/options2/content_settings_handler2.h"
139 #include "chrome/browser/ui/webui/signin/login_ui_service.h" 140 #include "chrome/browser/ui/webui/signin/login_ui_service.h"
140 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 141 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
141 #include "chrome/browser/ui/window_sizer.h" 142 #include "chrome/browser/ui/window_sizer.h"
142 #include "chrome/browser/upgrade_detector.h" 143 #include "chrome/browser/upgrade_detector.h"
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 new BrowserToolbarModelDelegate(this))), 368 new BrowserToolbarModelDelegate(this))),
368 ALLOW_THIS_IN_INITIALIZER_LIST( 369 ALLOW_THIS_IN_INITIALIZER_LIST(
369 tab_restore_service_delegate_( 370 tab_restore_service_delegate_(
370 new BrowserTabRestoreServiceDelegate(this))), 371 new BrowserTabRestoreServiceDelegate(this))),
371 ALLOW_THIS_IN_INITIALIZER_LIST( 372 ALLOW_THIS_IN_INITIALIZER_LIST(
372 synced_window_delegate_( 373 synced_window_delegate_(
373 new BrowserSyncedWindowDelegate(this))), 374 new BrowserSyncedWindowDelegate(this))),
374 bookmark_bar_state_(BookmarkBar::HIDDEN), 375 bookmark_bar_state_(BookmarkBar::HIDDEN),
375 window_has_shown_(false) { 376 window_has_shown_(false) {
376 tab_strip_model_->AddObserver(this); 377 tab_strip_model_->AddObserver(this);
377 378 if (CommandLine::ForCurrentProcess()->HasSwitch(
379 switches::kEnableTabMRUSwitch)) {
380 tab_mru_list_manager_.reset(new TabMRUListManager(tab_strip_model_.get()));
sky 2012/06/11 18:21:51 spacing is wrong here.
NaveenBobbili (Motorola) 2012/06/13 06:07:32 Done.
381 }
378 toolbar_model_.reset(new ToolbarModel(toolbar_model_delegate_.get())); 382 toolbar_model_.reset(new ToolbarModel(toolbar_model_delegate_.get()));
379 383
380 registrar_.Add(this, content::NOTIFICATION_SSL_VISIBLE_STATE_CHANGED, 384 registrar_.Add(this, content::NOTIFICATION_SSL_VISIBLE_STATE_CHANGED,
381 content::NotificationService::AllSources()); 385 content::NotificationService::AllSources());
382 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, 386 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
383 content::Source<Profile>(profile_->GetOriginalProfile())); 387 content::Source<Profile>(profile_->GetOriginalProfile()));
384 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, 388 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
385 content::Source<Profile>(profile_->GetOriginalProfile())); 389 content::Source<Profile>(profile_->GetOriginalProfile()));
386 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, 390 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
387 content::Source<Profile>(profile_->GetOriginalProfile())); 391 content::Source<Profile>(profile_->GetOriginalProfile()));
(...skipping 1066 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 content::RecordAction(UserMetricsAction("SelectNumberedTab")); 1458 content::RecordAction(UserMetricsAction("SelectNumberedTab"));
1455 ActivateTabAt(index, true); 1459 ActivateTabAt(index, true);
1456 } 1460 }
1457 } 1461 }
1458 1462
1459 void Browser::SelectLastTab() { 1463 void Browser::SelectLastTab() {
1460 content::RecordAction(UserMetricsAction("SelectLastTab")); 1464 content::RecordAction(UserMetricsAction("SelectLastTab"));
1461 tab_strip_model_->SelectLastTab(); 1465 tab_strip_model_->SelectLastTab();
1462 } 1466 }
1463 1467
1468 void Browser::SelectNextMRUTab() {
sky 2012/06/11 18:21:51 Isn't this more of selecting the previous mru tab,
NaveenBobbili (Motorola) 2012/06/13 06:07:32 Done.
1469 content::RecordAction(UserMetricsAction("SelectNextMRUTab"));
1470 TabContentsWrapper* contents = tab_mru_list_manager_->GetNextMRUTab();
1471 if (contents)
1472 ActivateTabAt(tab_strip_model_->GetIndexOfTabContents(contents), true);
1473 }
1474
1464 void Browser::DuplicateTab() { 1475 void Browser::DuplicateTab() {
1465 content::RecordAction(UserMetricsAction("Duplicate")); 1476 content::RecordAction(UserMetricsAction("Duplicate"));
1466 DuplicateContentsAt(active_index()); 1477 DuplicateContentsAt(active_index());
1467 } 1478 }
1468 1479
1469 void Browser::WriteCurrentURLToClipboard() { 1480 void Browser::WriteCurrentURLToClipboard() {
1470 // TODO(ericu): There isn't currently a metric for this. Should there be? 1481 // TODO(ericu): There isn't currently a metric for this. Should there be?
1471 // We don't appear to track the action when it comes from the 1482 // We don't appear to track the action when it comes from the
1472 // RenderContextViewMenu. 1483 // RenderContextViewMenu.
1473 1484
(...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after
2567 case IDC_VIEW_PASSWORDS: OpenPasswordManager(); break; 2578 case IDC_VIEW_PASSWORDS: OpenPasswordManager(); break;
2568 case IDC_CLEAR_BROWSING_DATA: OpenClearBrowsingDataDialog(); break; 2579 case IDC_CLEAR_BROWSING_DATA: OpenClearBrowsingDataDialog(); break;
2569 case IDC_IMPORT_SETTINGS: OpenImportSettingsDialog(); break; 2580 case IDC_IMPORT_SETTINGS: OpenImportSettingsDialog(); break;
2570 case IDC_ABOUT: OpenAboutChromeDialog(); break; 2581 case IDC_ABOUT: OpenAboutChromeDialog(); break;
2571 case IDC_UPGRADE_DIALOG: OpenUpdateChromeDialog(); break; 2582 case IDC_UPGRADE_DIALOG: OpenUpdateChromeDialog(); break;
2572 case IDC_VIEW_INCOMPATIBILITIES: ShowAboutConflictsTab(); break; 2583 case IDC_VIEW_INCOMPATIBILITIES: ShowAboutConflictsTab(); break;
2573 case IDC_HELP_PAGE: ShowHelpTab(); break; 2584 case IDC_HELP_PAGE: ShowHelpTab(); break;
2574 case IDC_SHOW_SYNC_SETUP: ShowSyncSetup(SyncPromoUI::SOURCE_MENU); 2585 case IDC_SHOW_SYNC_SETUP: ShowSyncSetup(SyncPromoUI::SOURCE_MENU);
2575 break; 2586 break;
2576 case IDC_TOGGLE_SPEECH_INPUT: ToggleSpeechInput(); break; 2587 case IDC_TOGGLE_SPEECH_INPUT: ToggleSpeechInput(); break;
2588 case IDC_SELECT_NEXT_MRU_TAB: SelectNextMRUTab(); break;
2577 2589
2578 default: 2590 default:
2579 LOG(WARNING) << "Received Unimplemented Command: " << id; 2591 LOG(WARNING) << "Received Unimplemented Command: " << id;
2580 break; 2592 break;
2581 } 2593 }
2582 } 2594 }
2583 2595
2584 //////////////////////////////////////////////////////////////////////////////// 2596 ////////////////////////////////////////////////////////////////////////////////
2585 // Browser, TabRestoreServiceObserver: 2597 // Browser, TabRestoreServiceObserver:
2586 2598
(...skipping 1485 matching lines...) Expand 10 before | Expand all | Expand 10 after
4072 // Navigation commands 4084 // Navigation commands
4073 command_updater_.UpdateCommandEnabled(IDC_HOME, normal_window); 4085 command_updater_.UpdateCommandEnabled(IDC_HOME, normal_window);
4074 4086
4075 // Window management commands 4087 // Window management commands
4076 // TODO(rohitrao): Disable fullscreen on non-Lion? 4088 // TODO(rohitrao): Disable fullscreen on non-Lion?
4077 command_updater_.UpdateCommandEnabled(IDC_FULLSCREEN, 4089 command_updater_.UpdateCommandEnabled(IDC_FULLSCREEN,
4078 !(is_type_panel() && is_app())); 4090 !(is_type_panel() && is_app()));
4079 command_updater_.UpdateCommandEnabled(IDC_SELECT_NEXT_TAB, normal_window); 4091 command_updater_.UpdateCommandEnabled(IDC_SELECT_NEXT_TAB, normal_window);
4080 command_updater_.UpdateCommandEnabled(IDC_SELECT_PREVIOUS_TAB, 4092 command_updater_.UpdateCommandEnabled(IDC_SELECT_PREVIOUS_TAB,
4081 normal_window); 4093 normal_window);
4094 if (CommandLine::ForCurrentProcess()->HasSwitch(
4095 switches::kEnableTabMRUSwitch)) {
4096 command_updater_.UpdateCommandEnabled(IDC_SELECT_NEXT_MRU_TAB,
4097 normal_window);
4098 }
4082 command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_NEXT, normal_window); 4099 command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_NEXT, normal_window);
4083 command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_PREVIOUS, normal_window); 4100 command_updater_.UpdateCommandEnabled(IDC_MOVE_TAB_PREVIOUS, normal_window);
4084 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_0, normal_window); 4101 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_0, normal_window);
4085 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_1, normal_window); 4102 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_1, normal_window);
4086 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_2, normal_window); 4103 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_2, normal_window);
4087 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_3, normal_window); 4104 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_3, normal_window);
4088 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_4, normal_window); 4105 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_4, normal_window);
4089 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_5, normal_window); 4106 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_5, normal_window);
4090 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_6, normal_window); 4107 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_6, normal_window);
4091 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_7, normal_window); 4108 command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_7, normal_window);
(...skipping 1017 matching lines...) Expand 10 before | Expand all | Expand 10 after
5109 if (contents && !allow_js_access) { 5126 if (contents && !allow_js_access) {
5110 contents->web_contents()->GetController().LoadURL( 5127 contents->web_contents()->GetController().LoadURL(
5111 target_url, 5128 target_url,
5112 content::Referrer(), 5129 content::Referrer(),
5113 content::PAGE_TRANSITION_LINK, 5130 content::PAGE_TRANSITION_LINK,
5114 std::string()); // No extra headers. 5131 std::string()); // No extra headers.
5115 } 5132 }
5116 5133
5117 return contents != NULL; 5134 return contents != NULL;
5118 } 5135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698