OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/automation/testing_automation_provider.h" | 5 #include "chrome/browser/automation/testing_automation_provider.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/utf_string_conversions.h" |
8 #include "chrome/app/chrome_dll_resource.h" | 9 #include "chrome/app/chrome_dll_resource.h" |
9 #include "chrome/browser/automation/automation_browser_tracker.h" | 10 #include "chrome/browser/automation/automation_browser_tracker.h" |
10 #include "chrome/browser/automation/automation_provider_list.h" | 11 #include "chrome/browser/automation/automation_provider_list.h" |
11 #include "chrome/browser/automation/automation_provider_observers.h" | 12 #include "chrome/browser/automation/automation_provider_observers.h" |
12 #include "chrome/browser/automation/automation_tab_tracker.h" | 13 #include "chrome/browser/automation/automation_tab_tracker.h" |
| 14 #include "chrome/browser/automation/automation_window_tracker.h" |
| 15 #include "chrome/browser/browser_process.h" |
13 #include "chrome/browser/browser_window.h" | 16 #include "chrome/browser/browser_window.h" |
14 #include "chrome/browser/login_prompt.h" | 17 #include "chrome/browser/login_prompt.h" |
| 18 #include "chrome/browser/platform_util.h" |
15 #include "chrome/common/chrome_switches.h" | 19 #include "chrome/common/chrome_switches.h" |
16 #include "chrome/common/net/url_request_context_getter.h" | 20 #include "chrome/common/net/url_request_context_getter.h" |
17 #include "chrome/common/notification_service.h" | 21 #include "chrome/common/notification_service.h" |
18 #include "chrome/test/automation/automation_messages.h" | 22 #include "chrome/test/automation/automation_messages.h" |
19 #include "net/url_request/url_request_context.h" | 23 #include "net/url_request/url_request_context.h" |
20 | 24 |
21 namespace { | 25 namespace { |
22 | 26 |
23 class GetCookiesTask : public Task { | 27 class GetCookiesTask : public Task { |
24 public: | 28 public: |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_GoForward, GoForward) | 167 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_GoForward, GoForward) |
164 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_Reload, Reload) | 168 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_Reload, Reload) |
165 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_SetAuth, SetAuth) | 169 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_SetAuth, SetAuth) |
166 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_CancelAuth, CancelAuth) | 170 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_CancelAuth, CancelAuth) |
167 IPC_MESSAGE_HANDLER(AutomationMsg_NeedsAuth, NeedsAuth) | 171 IPC_MESSAGE_HANDLER(AutomationMsg_NeedsAuth, NeedsAuth) |
168 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_RedirectsFrom, | 172 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_RedirectsFrom, |
169 GetRedirectsFrom) | 173 GetRedirectsFrom) |
170 IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindowCount, GetBrowserWindowCount) | 174 IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindowCount, GetBrowserWindowCount) |
171 IPC_MESSAGE_HANDLER(AutomationMsg_NormalBrowserWindowCount, | 175 IPC_MESSAGE_HANDLER(AutomationMsg_NormalBrowserWindowCount, |
172 GetNormalBrowserWindowCount) | 176 GetNormalBrowserWindowCount) |
| 177 IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindow, GetBrowserWindow) |
| 178 IPC_MESSAGE_HANDLER(AutomationMsg_GetBrowserLocale, GetBrowserLocale) |
| 179 IPC_MESSAGE_HANDLER(AutomationMsg_LastActiveBrowserWindow, |
| 180 GetLastActiveBrowserWindow) |
| 181 IPC_MESSAGE_HANDLER(AutomationMsg_ActiveWindow, GetActiveWindow) |
| 182 IPC_MESSAGE_HANDLER(AutomationMsg_FindNormalBrowserWindow, |
| 183 FindNormalBrowserWindow) |
| 184 IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowActive, IsWindowActive) |
| 185 IPC_MESSAGE_HANDLER(AutomationMsg_ActivateWindow, ActivateWindow) |
| 186 IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowMaximized, IsWindowMaximized) |
| 187 IPC_MESSAGE_HANDLER(AutomationMsg_WindowExecuteCommandAsync, |
| 188 ExecuteBrowserCommandAsync) |
| 189 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowExecuteCommand, |
| 190 ExecuteBrowserCommand) |
173 | 191 |
174 IPC_MESSAGE_UNHANDLED(AutomationProvider::OnMessageReceived(message)); | 192 IPC_MESSAGE_UNHANDLED(AutomationProvider::OnMessageReceived(message)); |
175 IPC_END_MESSAGE_MAP() | 193 IPC_END_MESSAGE_MAP() |
176 } | 194 } |
177 | 195 |
178 void TestingAutomationProvider::OnChannelError() { | 196 void TestingAutomationProvider::OnChannelError() { |
179 BrowserList::CloseAllBrowsersAndExit(); | 197 BrowserList::CloseAllBrowsersAndExit(); |
180 AutomationProvider::OnChannelError(); | 198 AutomationProvider::OnChannelError(); |
181 } | 199 } |
182 | 200 |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 | 542 |
525 void TestingAutomationProvider::GetBrowserWindowCount(int* window_count) { | 543 void TestingAutomationProvider::GetBrowserWindowCount(int* window_count) { |
526 *window_count = static_cast<int>(BrowserList::size()); | 544 *window_count = static_cast<int>(BrowserList::size()); |
527 } | 545 } |
528 | 546 |
529 void TestingAutomationProvider::GetNormalBrowserWindowCount(int* window_count) { | 547 void TestingAutomationProvider::GetNormalBrowserWindowCount(int* window_count) { |
530 *window_count = static_cast<int>( | 548 *window_count = static_cast<int>( |
531 BrowserList::GetBrowserCountForType(profile_, Browser::TYPE_NORMAL)); | 549 BrowserList::GetBrowserCountForType(profile_, Browser::TYPE_NORMAL)); |
532 } | 550 } |
533 | 551 |
| 552 void TestingAutomationProvider::GetBrowserWindow(int index, int* handle) { |
| 553 *handle = 0; |
| 554 if (index >= 0) { |
| 555 BrowserList::const_iterator iter = BrowserList::begin(); |
| 556 for (; (iter != BrowserList::end()) && (index > 0); ++iter, --index) {} |
| 557 if (iter != BrowserList::end()) { |
| 558 *handle = browser_tracker_->Add(*iter); |
| 559 } |
| 560 } |
| 561 } |
| 562 |
| 563 void TestingAutomationProvider::FindNormalBrowserWindow(int* handle) { |
| 564 *handle = 0; |
| 565 Browser* browser = BrowserList::FindBrowserWithType(profile_, |
| 566 Browser::TYPE_NORMAL, |
| 567 false); |
| 568 if (browser) |
| 569 *handle = browser_tracker_->Add(browser); |
| 570 } |
| 571 |
| 572 void TestingAutomationProvider::GetLastActiveBrowserWindow(int* handle) { |
| 573 *handle = 0; |
| 574 Browser* browser = BrowserList::GetLastActive(); |
| 575 if (browser) |
| 576 *handle = browser_tracker_->Add(browser); |
| 577 } |
| 578 |
| 579 void TestingAutomationProvider::GetActiveWindow(int* handle) { |
| 580 gfx::NativeWindow window = |
| 581 BrowserList::GetLastActive()->window()->GetNativeHandle(); |
| 582 *handle = window_tracker_->Add(window); |
| 583 } |
| 584 |
| 585 void TestingAutomationProvider::ExecuteBrowserCommandAsync(int handle, |
| 586 int command, |
| 587 bool* success) { |
| 588 *success = false; |
| 589 if (browser_tracker_->ContainsHandle(handle)) { |
| 590 Browser* browser = browser_tracker_->GetResource(handle); |
| 591 if (browser->command_updater()->SupportsCommand(command) && |
| 592 browser->command_updater()->IsCommandEnabled(command)) { |
| 593 browser->ExecuteCommand(command); |
| 594 *success = true; |
| 595 } |
| 596 } |
| 597 } |
| 598 |
| 599 void TestingAutomationProvider::ExecuteBrowserCommand( |
| 600 int handle, int command, IPC::Message* reply_message) { |
| 601 // List of commands which just finish synchronously and don't require |
| 602 // setting up an observer. |
| 603 static const int kSynchronousCommands[] = { |
| 604 IDC_HOME, |
| 605 IDC_SELECT_NEXT_TAB, |
| 606 IDC_SELECT_PREVIOUS_TAB, |
| 607 IDC_SHOW_BOOKMARK_MANAGER, |
| 608 }; |
| 609 if (browser_tracker_->ContainsHandle(handle)) { |
| 610 Browser* browser = browser_tracker_->GetResource(handle); |
| 611 if (browser->command_updater()->SupportsCommand(command) && |
| 612 browser->command_updater()->IsCommandEnabled(command)) { |
| 613 // First check if we can handle the command without using an observer. |
| 614 for (size_t i = 0; i < arraysize(kSynchronousCommands); i++) { |
| 615 if (command == kSynchronousCommands[i]) { |
| 616 browser->ExecuteCommand(command); |
| 617 AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, |
| 618 true); |
| 619 Send(reply_message); |
| 620 return; |
| 621 } |
| 622 } |
| 623 |
| 624 // Use an observer if we have one, otherwise fail. |
| 625 if (ExecuteBrowserCommandObserver::CreateAndRegisterObserver( |
| 626 this, browser, command, reply_message)) { |
| 627 browser->ExecuteCommand(command); |
| 628 return; |
| 629 } |
| 630 } |
| 631 } |
| 632 AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, false); |
| 633 Send(reply_message); |
| 634 } |
| 635 |
| 636 void TestingAutomationProvider::GetBrowserLocale(string16* locale) { |
| 637 DCHECK(g_browser_process); |
| 638 *locale = ASCIIToUTF16(g_browser_process->GetApplicationLocale()); |
| 639 } |
| 640 |
| 641 void TestingAutomationProvider::IsWindowActive(int handle, |
| 642 bool* success, |
| 643 bool* is_active) { |
| 644 if (window_tracker_->ContainsHandle(handle)) { |
| 645 *is_active = |
| 646 platform_util::IsWindowActive(window_tracker_->GetResource(handle)); |
| 647 *success = true; |
| 648 } else { |
| 649 *success = false; |
| 650 *is_active = false; |
| 651 } |
| 652 } |
| 653 |
534 // TODO(brettw) change this to accept GURLs when history supports it | 654 // TODO(brettw) change this to accept GURLs when history supports it |
535 void TestingAutomationProvider::OnRedirectQueryComplete( | 655 void TestingAutomationProvider::OnRedirectQueryComplete( |
536 HistoryService::Handle request_handle, | 656 HistoryService::Handle request_handle, |
537 GURL from_url, | 657 GURL from_url, |
538 bool success, | 658 bool success, |
539 history::RedirectList* redirects) { | 659 history::RedirectList* redirects) { |
540 DCHECK(request_handle == redirect_query_); | 660 DCHECK(request_handle == redirect_query_); |
541 DCHECK(reply_message_ != NULL); | 661 DCHECK(reply_message_ != NULL); |
542 | 662 |
543 std::vector<GURL> redirects_gurl; | 663 std::vector<GURL> redirects_gurl; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 DCHECK(type == NotificationType::SESSION_END); | 696 DCHECK(type == NotificationType::SESSION_END); |
577 // OnBrowserRemoving does a ReleaseLater. When session end is received we exit | 697 // OnBrowserRemoving does a ReleaseLater. When session end is received we exit |
578 // before the task runs resulting in this object not being deleted. This | 698 // before the task runs resulting in this object not being deleted. This |
579 // Release balance out the Release scheduled by OnBrowserRemoving. | 699 // Release balance out the Release scheduled by OnBrowserRemoving. |
580 Release(); | 700 Release(); |
581 } | 701 } |
582 | 702 |
583 void TestingAutomationProvider::OnRemoveProvider() { | 703 void TestingAutomationProvider::OnRemoveProvider() { |
584 AutomationProviderList::GetInstance()->RemoveProvider(this); | 704 AutomationProviderList::GetInstance()->RemoveProvider(this); |
585 } | 705 } |
OLD | NEW |