diff options
author | tommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-09 16:46:25 +0000 |
---|---|---|
committer | tommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-09 16:46:25 +0000 |
commit | 3941c026ba6576a4e21c93f3f08b917505c369a1 (patch) | |
tree | 2dbaad011bd9b20eadfbc25477c20a51a7f60a6e /chrome/browser/automation | |
parent | f61b898ba829ce8b1393f5a518a0f28eaafa1408 (diff) | |
download | chromium_src-3941c026ba6576a4e21c93f3f08b917505c369a1.zip chromium_src-3941c026ba6576a4e21c93f3f08b917505c369a1.tar.gz chromium_src-3941c026ba6576a4e21c93f3f08b917505c369a1.tar.bz2 |
Adding support for tab notifications and initializing the focus of an automated tab.
Review URL: http://codereview.chromium.org/20125
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9388 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation')
-rw-r--r-- | chrome/browser/automation/automation_provider.cc | 54 | ||||
-rw-r--r-- | chrome/browser/automation/automation_provider.h | 5 |
2 files changed, 37 insertions, 22 deletions
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc index dc1cb10..b6f8462 100644 --- a/chrome/browser/automation/automation_provider.cc +++ b/chrome/browser/automation/automation_provider.cc @@ -770,6 +770,8 @@ void AutomationProvider::OnMessageReceived(const IPC::Message& message) { SetAcceleratorsForTab) IPC_MESSAGE_HANDLER(AutomationMsg_ProcessUnhandledAccelerator, ProcessUnhandledAccelerator) + IPC_MESSAGE_HANDLER(AutomationMsg_SetInitialFocus, + SetInitialFocus) IPC_MESSAGE_HANDLER(AutomationMsg_WaitForTabToBeRestored, WaitForTabToBeRestored) IPC_MESSAGE_HANDLER(AutomationMsg_GetSecurityState, @@ -2105,18 +2107,10 @@ void AutomationProvider::SetAcceleratorsForTab(const IPC::Message& message, HACCEL accel_table, int accel_entry_count) { bool status = false; - if (tab_tracker_->ContainsHandle(handle)) { - NavigationController* tab = tab_tracker_->GetResource(handle); - TabContents* tab_contents = tab->GetTabContents(TAB_CONTENTS_WEB); - ExternalTabContainer* external_tab_container = - ExternalTabContainer::GetContainerForTab( - tab_contents->GetContainerHWND()); - // This call is only valid on an externally hosted tab - if (external_tab_container) { - external_tab_container->SetAccelerators(accel_table, - accel_entry_count); - status = true; - } + ExternalTabContainer* external_tab = GetExternalTabForHandle(handle); + if (external_tab) { + external_tab->SetAccelerators(accel_table, accel_entry_count); + status = true; } Send(new AutomationMsg_SetAcceleratorsForTabResponse(message.routing_id(), status)); @@ -2124,16 +2118,18 @@ void AutomationProvider::SetAcceleratorsForTab(const IPC::Message& message, void AutomationProvider::ProcessUnhandledAccelerator( const IPC::Message& message, int handle, const MSG& msg) { - if (tab_tracker_->ContainsHandle(handle)) { - NavigationController* tab = tab_tracker_->GetResource(handle); - TabContents* tab_contents = tab->GetTabContents(TAB_CONTENTS_WEB); - ExternalTabContainer* external_tab_container = - ExternalTabContainer::GetContainerForTab( - tab_contents->GetContainerHWND()); - // This call is only valid on an externally hosted tab - if (external_tab_container) { - external_tab_container->ProcessUnhandledAccelerator(msg); - } + ExternalTabContainer* external_tab = GetExternalTabForHandle(handle); + if (external_tab) { + external_tab->ProcessUnhandledAccelerator(msg); + } + // This message expects no response. +} + +void AutomationProvider::SetInitialFocus(const IPC::Message& message, + int handle, bool reverse) { + ExternalTabContainer* external_tab = GetExternalTabForHandle(handle); + if (external_tab) { + external_tab->SetInitialFocus(reverse); } // This message expects no response. } @@ -2391,6 +2387,20 @@ WebContents* AutomationProvider::GetWebContentsForHandle( return web_contents; } +ExternalTabContainer* AutomationProvider::GetExternalTabForHandle(int handle) { + if (tab_tracker_->ContainsHandle(handle)) { + NavigationController* tab = tab_tracker_->GetResource(handle); + TabContents* tab_contents = tab->GetTabContents(TAB_CONTENTS_WEB); + DCHECK(tab_contents); + if (tab_contents) { + HWND hwnd = tab_contents->GetContainerHWND(); + return ExternalTabContainer::GetContainerForTab(hwnd); + } + } + + return NULL; +} + TestingAutomationProvider::TestingAutomationProvider(Profile* profile) : AutomationProvider(profile) { BrowserList::AddObserver(this); diff --git a/chrome/browser/automation/automation_provider.h b/chrome/browser/automation/automation_provider.h index c223d3d..a8ca47f 100644 --- a/chrome/browser/automation/automation_provider.h +++ b/chrome/browser/automation/automation_provider.h @@ -30,6 +30,7 @@ class LoginHandler; class NavigationControllerRestoredObserver; +class ExternalTabContainer; class AutomationProvider : public base::RefCounted<AutomationProvider>, public IPC::Channel::Listener, @@ -248,6 +249,8 @@ class AutomationProvider : public base::RefCounted<AutomationProvider>, void ProcessUnhandledAccelerator(const IPC::Message& message, int handle, const MSG& msg); + void SetInitialFocus(const IPC::Message& message, int handle, bool reverse); + // See comment in AutomationMsg_WaitForTabToBeRestored. void WaitForTabToBeRestored(const IPC::Message& message, int tab_handle); @@ -370,6 +373,8 @@ class AutomationProvider : public base::RefCounted<AutomationProvider>, // is not of the WebContents type. WebContents* GetWebContentsForHandle(int handle, NavigationController** tab); + ExternalTabContainer* GetExternalTabForHandle(int handle); + // Callback for history redirect queries. virtual void OnRedirectQueryComplete( HistoryService::Handle request_handle, |