summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation
diff options
context:
space:
mode:
authortommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-09 16:46:25 +0000
committertommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-09 16:46:25 +0000
commit3941c026ba6576a4e21c93f3f08b917505c369a1 (patch)
tree2dbaad011bd9b20eadfbc25477c20a51a7f60a6e /chrome/browser/automation
parentf61b898ba829ce8b1393f5a518a0f28eaafa1408 (diff)
downloadchromium_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.cc54
-rw-r--r--chrome/browser/automation/automation_provider.h5
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,