diff options
author | mazda@chromium.org <mazda@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-25 03:16:57 +0000 |
---|---|---|
committer | mazda@chromium.org <mazda@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-25 03:16:57 +0000 |
commit | 343dc066bfe7fdef978142bd47753ba28536219c (patch) | |
tree | b918d2b7d52a91f1546e4cefcee9b38b24620676 /chrome | |
parent | 5f6259d5aa9bb29f15db051a3c6be3d78b82e1db (diff) | |
download | chromium_src-343dc066bfe7fdef978142bd47753ba28536219c.zip chromium_src-343dc066bfe7fdef978142bd47753ba28536219c.tar.gz chromium_src-343dc066bfe7fdef978142bd47753ba28536219c.tar.bz2 |
Handle more browser commands in ash.
This CL modifies the shell accelerator controller to handle the shortcuts for
the following browser commands so that they work with no browser window shown.
- IDC_NEW_TAB
- IDC_RESTORE_TAB
- IDC_SHOW_BOOKMARK_MANAGER
BUG=124232,120642
TEST=Checked all the shortcuts worked properly with no browser window shown. aura_shell_unittests
Review URL: https://chromiumcodereview.appspot.com/10414064
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138982 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-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 |
6 files changed, 63 insertions, 6 deletions
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. |