From 7256dabd02eaafcfdae1e20253cc8eeb25e677cc Mon Sep 17 00:00:00 2001 From: "phajdan.jr@chromium.org" Date: Mon, 23 Aug 2010 22:35:18 +0000 Subject: GTTF: next batch of automation separation. TEST=none BUG=52097 Review URL: http://codereview.chromium.org/3191015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57116 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/automation/automation_provider.cc | 117 -------------------- chrome/browser/automation/automation_provider.h | 15 +-- .../browser/automation/automation_provider_gtk.cc | 10 -- .../browser/automation/automation_provider_mac.mm | 8 -- .../browser/automation/automation_provider_win.cc | 35 ------ .../automation/testing_automation_provider.cc | 120 +++++++++++++++++++++ .../automation/testing_automation_provider.h | 13 +++ .../automation/testing_automation_provider_gtk.cc | 19 ++++ .../automation/testing_automation_provider_mac.mm | 19 ++++ .../automation/testing_automation_provider_win.cc | 30 ++++++ 10 files changed, 202 insertions(+), 184 deletions(-) create mode 100644 chrome/browser/automation/testing_automation_provider_gtk.cc create mode 100644 chrome/browser/automation/testing_automation_provider_mac.mm create mode 100644 chrome/browser/automation/testing_automation_provider_win.cc (limited to 'chrome/browser') diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc index e42543a..851adc8 100644 --- a/chrome/browser/automation/automation_provider.cc +++ b/chrome/browser/automation/automation_provider.cc @@ -334,20 +334,6 @@ Extension* AutomationProvider::GetDisabledExtension(int extension_handle) { void AutomationProvider::OnMessageReceived(const IPC::Message& message) { IPC_BEGIN_MESSAGE_MAP(AutomationProvider, message) - IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindow, GetBrowserWindow) - IPC_MESSAGE_HANDLER(AutomationMsg_GetBrowserLocale, GetBrowserLocale) - IPC_MESSAGE_HANDLER(AutomationMsg_LastActiveBrowserWindow, - GetLastActiveBrowserWindow) - IPC_MESSAGE_HANDLER(AutomationMsg_ActiveWindow, GetActiveWindow) - IPC_MESSAGE_HANDLER(AutomationMsg_FindNormalBrowserWindow, - FindNormalBrowserWindow) - IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowActive, IsWindowActive) - IPC_MESSAGE_HANDLER(AutomationMsg_ActivateWindow, ActivateWindow) - IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowMaximized, IsWindowMaximized) - IPC_MESSAGE_HANDLER(AutomationMsg_WindowExecuteCommandAsync, - ExecuteBrowserCommandAsync) - IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowExecuteCommand, - ExecuteBrowserCommand) IPC_MESSAGE_HANDLER(AutomationMsg_TerminateSession, TerminateSession) IPC_MESSAGE_HANDLER(AutomationMsg_WindowViewBounds, WindowGetViewBounds) IPC_MESSAGE_HANDLER(AutomationMsg_GetWindowBounds, GetWindowBounds) @@ -558,11 +544,6 @@ void AutomationProvider::OnMessageReceived(const IPC::Message& message) { IPC_END_MESSAGE_MAP() } -void AutomationProvider::GetBrowserLocale(string16* locale) { - DCHECK(g_browser_process); - *locale = ASCIIToUTF16(g_browser_process->GetApplicationLocale()); -} - void AutomationProvider::GetShowingAppModalDialog(bool* showing_dialog, int* dialog_button) { AppModalDialog* dialog_delegate = @@ -605,92 +586,6 @@ void AutomationProvider::ShutdownSessionService(int handle, bool* result) { } } -void AutomationProvider::GetBrowserWindow(int index, int* handle) { - *handle = 0; - if (index >= 0) { - BrowserList::const_iterator iter = BrowserList::begin(); - for (; (iter != BrowserList::end()) && (index > 0); ++iter, --index) {} - if (iter != BrowserList::end()) { - *handle = browser_tracker_->Add(*iter); - } - } -} - -void AutomationProvider::FindNormalBrowserWindow(int* handle) { - *handle = 0; - Browser* browser = BrowserList::FindBrowserWithType(profile_, - Browser::TYPE_NORMAL, - false); - if (browser) - *handle = browser_tracker_->Add(browser); -} - -void AutomationProvider::GetLastActiveBrowserWindow(int* handle) { - *handle = 0; - Browser* browser = BrowserList::GetLastActive(); - if (browser) - *handle = browser_tracker_->Add(browser); -} - -#if defined(OS_POSIX) -// TODO(estade): use this implementation for all platforms? -void AutomationProvider::GetActiveWindow(int* handle) { - gfx::NativeWindow window = - BrowserList::GetLastActive()->window()->GetNativeHandle(); - *handle = window_tracker_->Add(window); -} -#endif - -void AutomationProvider::ExecuteBrowserCommandAsync(int handle, int command, - bool* success) { - *success = false; - if (browser_tracker_->ContainsHandle(handle)) { - Browser* browser = browser_tracker_->GetResource(handle); - if (browser->command_updater()->SupportsCommand(command) && - browser->command_updater()->IsCommandEnabled(command)) { - browser->ExecuteCommand(command); - *success = true; - } - } -} - -void AutomationProvider::ExecuteBrowserCommand( - int handle, int command, IPC::Message* reply_message) { - // List of commands which just finish synchronously and don't require - // setting up an observer. - static const int kSynchronousCommands[] = { - IDC_HOME, - IDC_SELECT_NEXT_TAB, - IDC_SELECT_PREVIOUS_TAB, - IDC_SHOW_BOOKMARK_MANAGER, - }; - if (browser_tracker_->ContainsHandle(handle)) { - Browser* browser = browser_tracker_->GetResource(handle); - if (browser->command_updater()->SupportsCommand(command) && - browser->command_updater()->IsCommandEnabled(command)) { - // First check if we can handle the command without using an observer. - for (size_t i = 0; i < arraysize(kSynchronousCommands); i++) { - if (command == kSynchronousCommands[i]) { - browser->ExecuteCommand(command); - AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, - true); - Send(reply_message); - return; - } - } - - // Use an observer if we have one, otherwise fail. - if (ExecuteBrowserCommandObserver::CreateAndRegisterObserver( - this, browser, command, reply_message)) { - browser->ExecuteCommand(command); - return; - } - } - } - AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, false); - Send(reply_message); -} - // This task just adds another task to the event queue. This is useful if // you want to ensure that any tasks added to the event queue after this one // have already been processed by the time |task| is run. @@ -746,18 +641,6 @@ void AutomationProvider::WindowSimulateKeyPress(const IPC::Message& message, views::Event::EF_COMMAND_DOWN)); } -void AutomationProvider::IsWindowActive(int handle, bool* success, - bool* is_active) { - if (window_tracker_->ContainsHandle(handle)) { - *is_active = - platform_util::IsWindowActive(window_tracker_->GetResource(handle)); - *success = true; - } else { - *success = false; - *is_active = false; - } -} - void AutomationProvider::GetTabCount(int handle, int* tab_count) { *tab_count = -1; // -1 is the error code diff --git a/chrome/browser/automation/automation_provider.h b/chrome/browser/automation/automation_provider.h index ef28206..adc36d8 100644 --- a/chrome/browser/automation/automation_provider.h +++ b/chrome/browser/automation/automation_provider.h @@ -167,6 +167,7 @@ class AutomationProvider : public base::RefCounted, scoped_ptr browser_tracker_; scoped_ptr tab_tracker_; + scoped_ptr window_tracker_; typedef std::map LoginHandlerMap; LoginHandlerMap login_handler_map_; @@ -183,19 +184,9 @@ class AutomationProvider : public base::RefCounted, private: // IPC Message callbacks. - void GetBrowserLocale(string16* locale); void GetShowingAppModalDialog(bool* showing_dialog, int* dialog_button); void ClickAppModalDialogButton(int button, bool* success); void ShutdownSessionService(int handle, bool* result); - // Be aware that the browser window returned might be of non TYPE_NORMAL - // or in incognito mode. - void GetBrowserWindow(int index, int* handle); - void FindNormalBrowserWindow(int* handle); - void GetLastActiveBrowserWindow(int* handle); - void GetActiveWindow(int* handle); - void ExecuteBrowserCommandAsync(int handle, int command, bool* success); - void ExecuteBrowserCommand(int handle, int command, - IPC::Message* reply_message); void TerminateSession(int handle, bool* success); void WindowGetViewBounds(int handle, int view_id, bool screen_coordinates, bool* success, gfx::Rect* bounds); @@ -218,9 +209,6 @@ class AutomationProvider : public base::RefCounted, void GetWindowBounds(int handle, gfx::Rect* bounds, bool* result); void SetWindowBounds(int handle, const gfx::Rect& bounds, bool* result); void SetWindowVisible(int handle, bool visible, bool* result); - void IsWindowActive(int handle, bool* success, bool* is_active); - void ActivateWindow(int handle); - void IsWindowMaximized(int handle, bool* is_maximized, bool* success); void GetTabCount(int handle, int* tab_count); void GetType(int handle, int* type_as_int); @@ -920,7 +908,6 @@ class AutomationProvider : public base::RefCounted, extension_test_result_observer_; scoped_ptr metric_event_duration_observer_; scoped_ptr extension_tracker_; - scoped_ptr window_tracker_; scoped_ptr autocomplete_edit_tracker_; scoped_ptr restore_tracker_; PortContainerMap port_containers_; diff --git a/chrome/browser/automation/automation_provider_gtk.cc b/chrome/browser/automation/automation_provider_gtk.cc index 06abc4f..097eeb1 100644 --- a/chrome/browser/automation/automation_provider_gtk.cc +++ b/chrome/browser/automation/automation_provider_gtk.cc @@ -71,16 +71,6 @@ void AutomationProvider::WindowGetViewBounds(int handle, int view_id, } #endif -void AutomationProvider::ActivateWindow(int handle) { - NOTIMPLEMENTED(); -} - -void AutomationProvider::IsWindowMaximized(int handle, bool* is_maximized, - bool* success) { - *success = false; - NOTIMPLEMENTED(); -} - void AutomationProvider::PrintAsync(int tab_handle) { NOTIMPLEMENTED(); } diff --git a/chrome/browser/automation/automation_provider_mac.mm b/chrome/browser/automation/automation_provider_mac.mm index de6e8ee..74d98e5 100644 --- a/chrome/browser/automation/automation_provider_mac.mm +++ b/chrome/browser/automation/automation_provider_mac.mm @@ -89,14 +89,6 @@ void AutomationProvider::WindowGetViewBounds(int handle, int view_id, *success = true; } -void AutomationProvider::ActivateWindow(int handle) { NOTIMPLEMENTED(); } - -void AutomationProvider::IsWindowMaximized(int handle, bool* is_maximized, - bool* success) { - *success = false; - NOTIMPLEMENTED(); -} - void AutomationProvider::PrintAsync(int tab_handle) { NOTIMPLEMENTED(); } diff --git a/chrome/browser/automation/automation_provider_win.cc b/chrome/browser/automation/automation_provider_win.cc index 9a227cd..70a8049 100644 --- a/chrome/browser/automation/automation_provider_win.cc +++ b/chrome/browser/automation/automation_provider_win.cc @@ -73,22 +73,6 @@ BOOL CALLBACK EnumThreadWndProc(HWND hwnd, LPARAM l_param) { return TRUE; } -void AutomationProvider::GetActiveWindow(int* handle) { - HWND window = GetForegroundWindow(); - - // Let's make sure this window belongs to our process. - if (EnumThreadWindows(::GetCurrentThreadId(), - EnumThreadWndProc, - reinterpret_cast(window))) { - // We enumerated all the windows and did not find the foreground window, - // it is not our window, ignore it. - *handle = 0; - return; - } - - *handle = window_tracker_->Add(window); -} - // This task enqueues a mouse event on the event loop, so that the view // that it's being sent to can do the requisite post-processing. class MouseEventTask : public Task { @@ -271,25 +255,6 @@ void AutomationProvider::SetWindowVisible(int handle, bool visible, } } -void AutomationProvider::ActivateWindow(int handle) { - if (window_tracker_->ContainsHandle(handle)) { - ::SetActiveWindow(window_tracker_->GetResource(handle)); - } -} - -void AutomationProvider::IsWindowMaximized(int handle, bool* is_maximized, - bool* success) { - *success = false; - - HWND hwnd = window_tracker_->GetResource(handle); - if (hwnd) { - *success = true; - WINDOWPLACEMENT window_placement; - GetWindowPlacement(hwnd, &window_placement); - *is_maximized = (window_placement.showCmd == SW_MAXIMIZE); - } -} - void AutomationProvider::GetTabHWND(int handle, HWND* tab_hwnd) { *tab_hwnd = NULL; diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc index f62079b..ac30470 100644 --- a/chrome/browser/automation/testing_automation_provider.cc +++ b/chrome/browser/automation/testing_automation_provider.cc @@ -5,13 +5,17 @@ #include "chrome/browser/automation/testing_automation_provider.h" #include "base/command_line.h" +#include "base/utf_string_conversions.h" #include "chrome/app/chrome_dll_resource.h" #include "chrome/browser/automation/automation_browser_tracker.h" #include "chrome/browser/automation/automation_provider_list.h" #include "chrome/browser/automation/automation_provider_observers.h" #include "chrome/browser/automation/automation_tab_tracker.h" +#include "chrome/browser/automation/automation_window_tracker.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_window.h" #include "chrome/browser/login_prompt.h" +#include "chrome/browser/platform_util.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/net/url_request_context_getter.h" #include "chrome/common/notification_service.h" @@ -170,6 +174,20 @@ void TestingAutomationProvider::OnMessageReceived( IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindowCount, GetBrowserWindowCount) IPC_MESSAGE_HANDLER(AutomationMsg_NormalBrowserWindowCount, GetNormalBrowserWindowCount) + IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindow, GetBrowserWindow) + IPC_MESSAGE_HANDLER(AutomationMsg_GetBrowserLocale, GetBrowserLocale) + IPC_MESSAGE_HANDLER(AutomationMsg_LastActiveBrowserWindow, + GetLastActiveBrowserWindow) + IPC_MESSAGE_HANDLER(AutomationMsg_ActiveWindow, GetActiveWindow) + IPC_MESSAGE_HANDLER(AutomationMsg_FindNormalBrowserWindow, + FindNormalBrowserWindow) + IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowActive, IsWindowActive) + IPC_MESSAGE_HANDLER(AutomationMsg_ActivateWindow, ActivateWindow) + IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowMaximized, IsWindowMaximized) + IPC_MESSAGE_HANDLER(AutomationMsg_WindowExecuteCommandAsync, + ExecuteBrowserCommandAsync) + IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowExecuteCommand, + ExecuteBrowserCommand) IPC_MESSAGE_UNHANDLED(AutomationProvider::OnMessageReceived(message)); IPC_END_MESSAGE_MAP() @@ -531,6 +549,108 @@ void TestingAutomationProvider::GetNormalBrowserWindowCount(int* window_count) { BrowserList::GetBrowserCountForType(profile_, Browser::TYPE_NORMAL)); } +void TestingAutomationProvider::GetBrowserWindow(int index, int* handle) { + *handle = 0; + if (index >= 0) { + BrowserList::const_iterator iter = BrowserList::begin(); + for (; (iter != BrowserList::end()) && (index > 0); ++iter, --index) {} + if (iter != BrowserList::end()) { + *handle = browser_tracker_->Add(*iter); + } + } +} + +void TestingAutomationProvider::FindNormalBrowserWindow(int* handle) { + *handle = 0; + Browser* browser = BrowserList::FindBrowserWithType(profile_, + Browser::TYPE_NORMAL, + false); + if (browser) + *handle = browser_tracker_->Add(browser); +} + +void TestingAutomationProvider::GetLastActiveBrowserWindow(int* handle) { + *handle = 0; + Browser* browser = BrowserList::GetLastActive(); + if (browser) + *handle = browser_tracker_->Add(browser); +} + +void TestingAutomationProvider::GetActiveWindow(int* handle) { + gfx::NativeWindow window = + BrowserList::GetLastActive()->window()->GetNativeHandle(); + *handle = window_tracker_->Add(window); +} + +void TestingAutomationProvider::ExecuteBrowserCommandAsync(int handle, + int command, + bool* success) { + *success = false; + if (browser_tracker_->ContainsHandle(handle)) { + Browser* browser = browser_tracker_->GetResource(handle); + if (browser->command_updater()->SupportsCommand(command) && + browser->command_updater()->IsCommandEnabled(command)) { + browser->ExecuteCommand(command); + *success = true; + } + } +} + +void TestingAutomationProvider::ExecuteBrowserCommand( + int handle, int command, IPC::Message* reply_message) { + // List of commands which just finish synchronously and don't require + // setting up an observer. + static const int kSynchronousCommands[] = { + IDC_HOME, + IDC_SELECT_NEXT_TAB, + IDC_SELECT_PREVIOUS_TAB, + IDC_SHOW_BOOKMARK_MANAGER, + }; + if (browser_tracker_->ContainsHandle(handle)) { + Browser* browser = browser_tracker_->GetResource(handle); + if (browser->command_updater()->SupportsCommand(command) && + browser->command_updater()->IsCommandEnabled(command)) { + // First check if we can handle the command without using an observer. + for (size_t i = 0; i < arraysize(kSynchronousCommands); i++) { + if (command == kSynchronousCommands[i]) { + browser->ExecuteCommand(command); + AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, + true); + Send(reply_message); + return; + } + } + + // Use an observer if we have one, otherwise fail. + if (ExecuteBrowserCommandObserver::CreateAndRegisterObserver( + this, browser, command, reply_message)) { + browser->ExecuteCommand(command); + return; + } + } + } + AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, false); + Send(reply_message); +} + +void TestingAutomationProvider::GetBrowserLocale(string16* locale) { + DCHECK(g_browser_process); + *locale = ASCIIToUTF16(g_browser_process->GetApplicationLocale()); +} + +void TestingAutomationProvider::IsWindowActive(int handle, + bool* success, + bool* is_active) { + if (window_tracker_->ContainsHandle(handle)) { + *is_active = + platform_util::IsWindowActive(window_tracker_->GetResource(handle)); + *success = true; + } else { + *success = false; + *is_active = false; + } +} + // TODO(brettw) change this to accept GURLs when history supports it void TestingAutomationProvider::OnRedirectQueryComplete( HistoryService::Handle request_handle, diff --git a/chrome/browser/automation/testing_automation_provider.h b/chrome/browser/automation/testing_automation_provider.h index 55588e9..8b6da28 100644 --- a/chrome/browser/automation/testing_automation_provider.h +++ b/chrome/browser/automation/testing_automation_provider.h @@ -70,6 +70,19 @@ class TestingAutomationProvider : public AutomationProvider, IPC::Message* reply_message); void GetBrowserWindowCount(int* window_count); void GetNormalBrowserWindowCount(int* window_count); + // Be aware that the browser window returned might be of non TYPE_NORMAL + // or in incognito mode. + void GetBrowserWindow(int index, int* handle); + void FindNormalBrowserWindow(int* handle); + void GetLastActiveBrowserWindow(int* handle); + void GetActiveWindow(int* handle); + void ExecuteBrowserCommandAsync(int handle, int command, bool* success); + void ExecuteBrowserCommand(int handle, int command, + IPC::Message* reply_message); + void GetBrowserLocale(string16* locale); + void IsWindowActive(int handle, bool* success, bool* is_active); + void ActivateWindow(int handle); + void IsWindowMaximized(int handle, bool* is_maximized, bool* success); // Callback for history redirect queries. virtual void OnRedirectQueryComplete( diff --git a/chrome/browser/automation/testing_automation_provider_gtk.cc b/chrome/browser/automation/testing_automation_provider_gtk.cc new file mode 100644 index 0000000..ce61658 --- /dev/null +++ b/chrome/browser/automation/testing_automation_provider_gtk.cc @@ -0,0 +1,19 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/automation/testing_automation_provider.h" + +#include "base/logging.h" + +void TestingAutomationProvider::ActivateWindow(int handle) { + NOTIMPLEMENTED(); +} + +void TestingAutomationProvider::IsWindowMaximized(int handle, + bool* is_maximized, + bool* success) { + *success = false; + NOTIMPLEMENTED(); +} + diff --git a/chrome/browser/automation/testing_automation_provider_mac.mm b/chrome/browser/automation/testing_automation_provider_mac.mm new file mode 100644 index 0000000..ce61658 --- /dev/null +++ b/chrome/browser/automation/testing_automation_provider_mac.mm @@ -0,0 +1,19 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/automation/testing_automation_provider.h" + +#include "base/logging.h" + +void TestingAutomationProvider::ActivateWindow(int handle) { + NOTIMPLEMENTED(); +} + +void TestingAutomationProvider::IsWindowMaximized(int handle, + bool* is_maximized, + bool* success) { + *success = false; + NOTIMPLEMENTED(); +} + diff --git a/chrome/browser/automation/testing_automation_provider_win.cc b/chrome/browser/automation/testing_automation_provider_win.cc new file mode 100644 index 0000000..dcb8b1c --- /dev/null +++ b/chrome/browser/automation/testing_automation_provider_win.cc @@ -0,0 +1,30 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/automation/testing_automation_provider.h" + +#include + +#include "chrome/browser/automation/automation_window_tracker.h" + +void TestingAutomationProvider::ActivateWindow(int handle) { + if (window_tracker_->ContainsHandle(handle)) { + ::SetActiveWindow(window_tracker_->GetResource(handle)); + } +} + +void TestingAutomationProvider::IsWindowMaximized(int handle, + bool* is_maximized, + bool* success) { + *success = false; + + HWND hwnd = window_tracker_->GetResource(handle); + if (hwnd) { + *success = true; + WINDOWPLACEMENT window_placement; + GetWindowPlacement(hwnd, &window_placement); + *is_maximized = (window_placement.showCmd == SW_MAXIMIZE); + } +} + -- cgit v1.1