| Index: chrome/browser/automation/testing_automation_provider.cc
|
| diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc
|
| index f62079b15b4bbcfe025dc6234200114daa252d41..ac30470579f75d2632eef708a7d227042ebc67b1 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,
|
|
|