diff options
-rw-r--r-- | ash/accelerators/accelerator_controller.cc | 21 | ||||
-rw-r--r-- | ash/accelerators/accelerator_controller_unittest.cc | 12 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.cc | 8 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.h | 3 | ||||
-rw-r--r-- | ash/shell/shell_delegate_impl.cc | 9 | ||||
-rw-r--r-- | ash/shell/shell_delegate_impl.h | 3 | ||||
-rw-r--r-- | ash/shell_delegate.h | 9 | ||||
-rw-r--r-- | ash/test/test_shell_delegate.cc | 9 | ||||
-rw-r--r-- | ash/test/test_shell_delegate.h | 3 | ||||
-rw-r--r-- | chrome/browser/sessions/tab_restore_service.cc | 4 | ||||
-rw-r--r-- | chrome/browser/sessions/tab_restore_service.h | 3 | ||||
-rw-r--r-- | chrome/browser/ui/views/accelerator_table.cc | 8 | ||||
-rw-r--r-- | chrome/browser/ui/views/ash/chrome_shell_delegate.cc | 36 | ||||
-rw-r--r-- | chrome/browser/ui/views/ash/chrome_shell_delegate.h | 3 | ||||
-rw-r--r-- | chrome/browser/ui/views/toolbar_view.cc | 15 |
15 files changed, 138 insertions, 8 deletions
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc index df8ce13..fa81927 100644 --- a/ash/accelerators/accelerator_controller.cc +++ b/ash/accelerators/accelerator_controller.cc @@ -81,6 +81,11 @@ bool HandleExit() { return true; } +bool HandleNewTab() { + ash::Shell::GetInstance()->delegate()->NewTab(); + return true; +} + bool HandleNewWindow(bool is_incognito) { ash::ShellDelegate* delegate = ash::Shell::GetInstance()->delegate(); if (!delegate) @@ -89,6 +94,16 @@ bool HandleNewWindow(bool is_incognito) { return true; } +bool HandleRestoreTab() { + ash::Shell::GetInstance()->delegate()->RestoreTab(); + return true; +} + +bool HandleShowTaskManager() { + ash::Shell::GetInstance()->delegate()->ShowTaskManager(); + return true; +} + // Rotates the default window container. bool HandleRotateWindows() { aura::Window* target = ash::Shell::GetInstance()->GetContainer( @@ -315,8 +330,12 @@ bool AcceleratorController::AcceleratorPressed( return HandleExit(); case NEW_INCOGNITO_WINDOW: return HandleNewWindow(true /* is_incognito */); + case NEW_TAB: + return HandleNewTab(); case NEW_WINDOW: return HandleNewWindow(false /* is_incognito */); + case RESTORE_TAB: + return HandleRestoreTab(); case TAKE_SCREENSHOT: if (screenshot_delegate_.get()) { aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); @@ -379,6 +398,8 @@ bool AcceleratorController::AcceleratorPressed( return true; } break; + case SHOW_TASK_MANAGER: + return HandleShowTaskManager(); case NEXT_IME: if (ime_control_delegate_.get()) return ime_control_delegate_->HandleNextIme(); diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc index 67921c3..510e250 100644 --- a/ash/accelerators/accelerator_controller_unittest.cc +++ b/ash/accelerators/accelerator_controller_unittest.cc @@ -649,6 +649,10 @@ TEST_F(AcceleratorControllerTest, DISABLED_GlobalAccelerators) { EXPECT_TRUE(GetController()->Process( ui::Accelerator(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); + // New tab + EXPECT_TRUE(GetController()->Process( + ui::Accelerator(ui::VKEY_T, ui::EF_SHIFT_DOWN))); + // New incognito window EXPECT_TRUE(GetController()->Process( ui::Accelerator(ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); @@ -661,6 +665,14 @@ TEST_F(AcceleratorControllerTest, DISABLED_GlobalAccelerators) { EXPECT_TRUE(GetController()->Process( ui::Accelerator(ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); #endif + + // Restore tab + EXPECT_TRUE(GetController()->Process( + ui::Accelerator(ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); + + // Show task manager + EXPECT_TRUE(GetController()->Process( + ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN))); } TEST_F(AcceleratorControllerTest, ImeGlobalAccelerators) { diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc index 0800a90..b053241 100644 --- a/ash/accelerators/accelerator_table.cc +++ b/ash/accelerators/accelerator_table.cc @@ -38,14 +38,17 @@ const AcceleratorData kAcceleratorData[] = { { true, ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, TOGGLE_SPOKEN_FEEDBACK }, - // When you change the shortcut for NEW_INCOGNITO_WINDOW or NEW_WINDOW, - // you also need to modify ToolbarView::GetAcceleratorForCommandId() in + // When you change the shortcuts for NEW_INCOGNITO_WINDOW, NEW_WINDOW, or + // NEW_TAB, you also need to modify + // ToolbarView::GetAcceleratorForCommandId() in // chrome/browser/ui/views/toolbar_view.cc. { true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, NEW_INCOGNITO_WINDOW }, { true, ui::VKEY_N, ui::EF_CONTROL_DOWN, NEW_WINDOW }, + { true, ui::VKEY_T, ui::EF_CONTROL_DOWN, NEW_TAB }, { true, ui::VKEY_F5, ui::EF_SHIFT_DOWN, CYCLE_BACKWARD_LINEAR }, + { true, ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, RESTORE_TAB }, { true, ui::VKEY_F5, ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT }, { true, ui::VKEY_F5, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, TAKE_PARTIAL_SCREENSHOT }, @@ -70,6 +73,7 @@ const AcceleratorData kAcceleratorData[] = { ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SHOW_KEYBOARD_OVERLAY }, { true, ui::VKEY_F1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, SHOW_OAK }, + { true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, SHOW_TASK_MANAGER }, { true, ui::VKEY_1, ui::EF_ALT_DOWN, SELECT_WIN_0 }, { true, ui::VKEY_2, ui::EF_ALT_DOWN, SELECT_WIN_1 }, { true, ui::VKEY_3, ui::EF_ALT_DOWN, SELECT_WIN_2 }, diff --git a/ash/accelerators/accelerator_table.h b/ash/accelerators/accelerator_table.h index 922cef4..ef8e234 100644 --- a/ash/accelerators/accelerator_table.h +++ b/ash/accelerators/accelerator_table.h @@ -24,9 +24,11 @@ enum AcceleratorAction { FOCUS_LAUNCHER, FOCUS_TRAY, NEW_INCOGNITO_WINDOW, + NEW_TAB, NEW_WINDOW, NEXT_IME, PREVIOUS_IME, + RESTORE_TAB, ROTATE_WINDOWS, SEARCH_KEY, SELECT_LAST_WIN, @@ -40,6 +42,7 @@ enum AcceleratorAction { SELECT_WIN_7, SHOW_KEYBOARD_OVERLAY, SHOW_OAK, + SHOW_TASK_MANAGER, SWITCH_IME, // Switch to another IME depending on the accelerator. TAKE_PARTIAL_SCREENSHOT, TAKE_SCREENSHOT, diff --git a/ash/shell/shell_delegate_impl.cc b/ash/shell/shell_delegate_impl.cc index 957852e..7890551 100644 --- a/ash/shell/shell_delegate_impl.cc +++ b/ash/shell/shell_delegate_impl.cc @@ -56,6 +56,9 @@ void ShellDelegateImpl::Exit() { MessageLoopForUI::current()->Quit(); } +void ShellDelegateImpl::NewTab() { +} + void ShellDelegateImpl::NewWindow(bool incognito) { ash::shell::ToplevelWindow::CreateParams create_params; create_params.can_resize = true; @@ -75,9 +78,15 @@ void ShellDelegateImpl::OpenCrosh() { void ShellDelegateImpl::OpenMobileSetup() { } +void ShellDelegateImpl::RestoreTab() { +} + void ShellDelegateImpl::ShowKeyboardOverlay() { } +void ShellDelegateImpl::ShowTaskManager() { +} + content::BrowserContext* ShellDelegateImpl::GetCurrentBrowserContext() { return Shell::GetInstance()->browser_context(); } diff --git a/ash/shell/shell_delegate_impl.h b/ash/shell/shell_delegate_impl.h index 412f20c..3acc893 100644 --- a/ash/shell/shell_delegate_impl.h +++ b/ash/shell/shell_delegate_impl.h @@ -28,12 +28,15 @@ class ShellDelegateImpl : public ash::ShellDelegate { virtual bool IsScreenLocked() const OVERRIDE; virtual void Shutdown() OVERRIDE; virtual void Exit() OVERRIDE; + virtual void NewTab() OVERRIDE; virtual void NewWindow(bool incognito) OVERRIDE; virtual void Search() OVERRIDE; virtual void OpenFileManager() OVERRIDE; virtual void OpenCrosh() OVERRIDE; virtual void OpenMobileSetup() OVERRIDE; + virtual void RestoreTab() OVERRIDE; virtual void ShowKeyboardOverlay() OVERRIDE; + virtual void ShowTaskManager() OVERRIDE; virtual content::BrowserContext* GetCurrentBrowserContext() OVERRIDE; virtual void ToggleSpokenFeedback() OVERRIDE; virtual app_list::AppListViewDelegate* CreateAppListViewDelegate() OVERRIDE; diff --git a/ash/shell_delegate.h b/ash/shell_delegate.h index 6c1fd96..d57cca3 100644 --- a/ash/shell_delegate.h +++ b/ash/shell_delegate.h @@ -59,6 +59,9 @@ class ASH_EXPORT ShellDelegate { // Invoked when the user uses Ctrl-Shift-Q to close chrome. virtual void Exit() = 0; + // Invoked when the user uses Ctrl+T to open a new tab. + virtual void NewTab() = 0; + // Invoked when the user uses Ctrl-N or Ctrl-Shift-N to open a new window. virtual void NewWindow(bool incognito) = 0; @@ -74,9 +77,15 @@ class ASH_EXPORT ShellDelegate { // Invoked when the user needs to set up mobile networking. virtual void OpenMobileSetup() = 0; + // Invoked when the user uses Shift+Ctrl+T to restore the closed tab. + virtual void RestoreTab() = 0; + // Shows the keyboard shortcut overlay. virtual void ShowKeyboardOverlay() = 0; + // Shows the task manager window. + virtual void ShowTaskManager() = 0; + // Get the current browser context. This will get us the current profile. virtual content::BrowserContext* GetCurrentBrowserContext() = 0; diff --git a/ash/test/test_shell_delegate.cc b/ash/test/test_shell_delegate.cc index 60551b1..82d98112 100644 --- a/ash/test/test_shell_delegate.cc +++ b/ash/test/test_shell_delegate.cc @@ -45,6 +45,9 @@ void TestShellDelegate::Shutdown() { void TestShellDelegate::Exit() { } +void TestShellDelegate::NewTab() { +} + void TestShellDelegate::NewWindow(bool incognito) { } @@ -60,9 +63,15 @@ void TestShellDelegate::OpenCrosh() { void TestShellDelegate::OpenMobileSetup() { } +void TestShellDelegate::RestoreTab() { +} + void TestShellDelegate::ShowKeyboardOverlay() { } +void TestShellDelegate::ShowTaskManager() { +} + content::BrowserContext* TestShellDelegate::GetCurrentBrowserContext() { return new TestBrowserContext(); } diff --git a/ash/test/test_shell_delegate.h b/ash/test/test_shell_delegate.h index edc5941..5ca9759 100644 --- a/ash/test/test_shell_delegate.h +++ b/ash/test/test_shell_delegate.h @@ -24,12 +24,15 @@ class TestShellDelegate : public ShellDelegate { virtual bool IsScreenLocked() const OVERRIDE; virtual void Shutdown() OVERRIDE; virtual void Exit() OVERRIDE; + virtual void NewTab() OVERRIDE; virtual void NewWindow(bool incognito) OVERRIDE; virtual void Search() OVERRIDE; virtual void OpenFileManager() OVERRIDE; virtual void OpenCrosh() OVERRIDE; virtual void OpenMobileSetup() OVERRIDE; + virtual void RestoreTab() OVERRIDE; virtual void ShowKeyboardOverlay() OVERRIDE; + virtual void ShowTaskManager() OVERRIDE; virtual content::BrowserContext* GetCurrentBrowserContext() OVERRIDE; virtual void ToggleSpokenFeedback() OVERRIDE; virtual app_list::AppListViewDelegate* CreateAppListViewDelegate() OVERRIDE; diff --git a/chrome/browser/sessions/tab_restore_service.cc b/chrome/browser/sessions/tab_restore_service.cc index a6ed52f..dfba1af 100644 --- a/chrome/browser/sessions/tab_restore_service.cc +++ b/chrome/browser/sessions/tab_restore_service.cc @@ -474,6 +474,10 @@ void TabRestoreService::LoadTabsFromLastSession() { &load_consumer_); } +bool TabRestoreService::IsLoaded() const { + return !(load_state_ & (NOT_LOADED | LOADING)); +} + void TabRestoreService::Shutdown() { if (backend()) Save(); diff --git a/chrome/browser/sessions/tab_restore_service.h b/chrome/browser/sessions/tab_restore_service.h index f567554..4518170 100644 --- a/chrome/browser/sessions/tab_restore_service.h +++ b/chrome/browser/sessions/tab_restore_service.h @@ -180,6 +180,9 @@ class TabRestoreService : public BaseSessionService { // from the previous session have already been loaded. void LoadTabsFromLastSession(); + // Returns true if the tab entries have been loaded. + bool IsLoaded() const; + // Max number of entries we'll keep around. static const size_t kMaxEntries; diff --git a/chrome/browser/ui/views/accelerator_table.cc b/chrome/browser/ui/views/accelerator_table.cc index 0b85d27..2f27ce0 100644 --- a/chrome/browser/ui/views/accelerator_table.cc +++ b/chrome/browser/ui/views/accelerator_table.cc @@ -39,7 +39,7 @@ const AcceleratorMapping kAcceleratorMap[] = { #if !defined(OS_CHROMEOS) { ui::VKEY_F4, ui::EF_ALT_DOWN, IDC_CLOSE_WINDOW }, #endif -#if !defined(USE_AURA) +#if !defined(USE_ASH) { ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_EXIT }, #endif { ui::VKEY_F, ui::EF_CONTROL_DOWN, IDC_FIND }, @@ -98,9 +98,7 @@ const AcceleratorMapping kAcceleratorMap[] = { #if !defined(USE_ASH) { ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_NEW_INCOGNITO_WINDOW }, -#endif { ui::VKEY_T, ui::EF_CONTROL_DOWN, IDC_NEW_TAB }, -#if !defined(USE_ASH) { ui::VKEY_N, ui::EF_CONTROL_DOWN, IDC_NEW_WINDOW }, #endif { ui::VKEY_O, ui::EF_CONTROL_DOWN, IDC_OPEN_FILE }, @@ -119,7 +117,9 @@ const AcceleratorMapping kAcceleratorMap[] = { { ui::VKEY_F3, ui::EF_SHIFT_DOWN, IDC_RELOAD_IGNORING_CACHE }, #endif { ui::VKEY_HOME, ui::EF_ALT_DOWN, IDC_HOME }, +#if !defined(USE_ASH) { ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_RESTORE_TAB }, +#endif { ui::VKEY_S, ui::EF_CONTROL_DOWN, IDC_SAVE_PAGE }, { ui::VKEY_9, ui::EF_CONTROL_DOWN, IDC_SELECT_LAST_TAB }, { ui::VKEY_NUMPAD9, ui::EF_CONTROL_DOWN, IDC_SELECT_LAST_TAB }, @@ -156,7 +156,9 @@ const AcceleratorMapping kAcceleratorMap[] = { { ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_SHOW_AVATAR_MENU}, #endif { ui::VKEY_ESCAPE, ui::EF_NONE, IDC_STOP }, +#if !defined(USE_ASH) { ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER }, +#endif { ui::VKEY_OEM_PERIOD, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_TOGGLE_SPEECH_INPUT }, { ui::VKEY_U, ui::EF_CONTROL_DOWN, IDC_VIEW_SOURCE }, diff --git a/chrome/browser/ui/views/ash/chrome_shell_delegate.cc b/chrome/browser/ui/views/ash/chrome_shell_delegate.cc index dba8dc8..fb0c0a4 100644 --- a/chrome/browser/ui/views/ash/chrome_shell_delegate.cc +++ b/chrome/browser/ui/views/ash/chrome_shell_delegate.cc @@ -13,6 +13,8 @@ #include "chrome/browser/extensions/api/terminal/terminal_extension_helper.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/sessions/tab_restore_service.h" +#include "chrome/browser/sessions/tab_restore_service_factory.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_list.h" @@ -115,6 +117,13 @@ void ChromeShellDelegate::Exit() { browser::AttemptUserExit(); } +void ChromeShellDelegate::NewTab() { + Browser* browser = browser::FindOrCreateTabbedBrowser( + ProfileManager::GetDefaultProfileOrOffTheRecord()); + browser->NewTab(); + browser->window()->Show(); +} + void ChromeShellDelegate::NewWindow(bool is_incognito) { Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord(); Browser::NewEmptyWindow( @@ -194,12 +203,39 @@ void ChromeShellDelegate::OpenMobileSetup() { #endif } +void ChromeShellDelegate::RestoreTab() { + Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord(); + TabRestoreService* service = + TabRestoreServiceFactory::GetForProfile(profile); + if (!service) + return; + if (service->IsLoaded()) { + Browser* browser = browser::FindOrCreateTabbedBrowser(profile); + browser->RestoreTab(); + } else { + service->LoadTabsFromLastSession(); + // LoadTabsFromLastSession is asynchronous, so TabRestoreService has not + // finished loading the entries at this point. Wait for next event cycle + // which loads the restored tab entries. + MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&ChromeShellDelegate::RestoreTab, + weak_factory_.GetWeakPtr())); + } +} + void ChromeShellDelegate::ShowKeyboardOverlay() { #if defined(OS_CHROMEOS) KeyboardOverlayDialogView::ShowDialog(); #endif } +void ChromeShellDelegate::ShowTaskManager() { + Browser* browser = browser::FindOrCreateTabbedBrowser( + ProfileManager::GetDefaultProfileOrOffTheRecord()); + browser->OpenTaskManager(false); +} + content::BrowserContext* ChromeShellDelegate::GetCurrentBrowserContext() { return ProfileManager::GetDefaultProfile(); } diff --git a/chrome/browser/ui/views/ash/chrome_shell_delegate.h b/chrome/browser/ui/views/ash/chrome_shell_delegate.h index 0644808..b404c56 100644 --- a/chrome/browser/ui/views/ash/chrome_shell_delegate.h +++ b/chrome/browser/ui/views/ash/chrome_shell_delegate.h @@ -37,12 +37,15 @@ class ChromeShellDelegate : public ash::ShellDelegate, virtual bool IsScreenLocked() const OVERRIDE; virtual void Shutdown() OVERRIDE; virtual void Exit() OVERRIDE; + virtual void NewTab() OVERRIDE; virtual void NewWindow(bool is_incognito) OVERRIDE; virtual void Search() OVERRIDE; virtual void OpenFileManager() OVERRIDE; virtual void OpenCrosh() OVERRIDE; virtual void OpenMobileSetup() OVERRIDE; + virtual void RestoreTab() OVERRIDE; virtual void ShowKeyboardOverlay() OVERRIDE; + virtual void ShowTaskManager() OVERRIDE; virtual content::BrowserContext* GetCurrentBrowserContext() OVERRIDE; virtual void ToggleSpokenFeedback() OVERRIDE; virtual app_list::AppListViewDelegate* CreateAppListViewDelegate() OVERRIDE; diff --git a/chrome/browser/ui/views/toolbar_view.cc b/chrome/browser/ui/views/toolbar_view.cc index b24f070..8c9a979 100644 --- a/chrome/browser/ui/views/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar_view.cc @@ -501,9 +501,15 @@ bool ToolbarView::GetAcceleratorForCommandId(int command_id, *accelerator = ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN); return true; #if defined(USE_ASH) - // When USE_ASH is defined, IDC_NEW_WINDOW and IDC_NEW_INCOGNITO_WINDOW are - // handled outside Chrome, in ash/accelerators/accelerator_table.cc. - // crbug.com/120196 + // When USE_ASH is defined, the commands listed here are handled outside + // Chrome, in ash/accelerators/accelerator_table.cc (crbug.com/120196). + case IDC_CLEAR_BROWSING_DATA: + *accelerator = ui::Accelerator(ui::VKEY_BACK, + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); + return true; + case IDC_NEW_TAB: + *accelerator = ui::Accelerator(ui::VKEY_T, ui::EF_CONTROL_DOWN); + return true; case IDC_NEW_WINDOW: *accelerator = ui::Accelerator(ui::VKEY_N, ui::EF_CONTROL_DOWN); return true; @@ -511,6 +517,9 @@ bool ToolbarView::GetAcceleratorForCommandId(int command_id, *accelerator = ui::Accelerator(ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); return true; + case IDC_TASK_MANAGER: + *accelerator = ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN); + return true; #endif } // Else, we retrieve the accelerator information from the frame. |