Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: chrome/browser/automation/automation_provider.cc

Issue 3191015: GTTF: next batch of automation separation. (Closed)
Patch Set: tryservers Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/automation_provider.h" 5 #include "chrome/browser/automation/automation_provider.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "app/message_box_flags.h" 9 #include "app/message_box_flags.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 ExtensionsService* service = profile_->GetExtensionsService(); 327 ExtensionsService* service = profile_->GetExtensionsService();
328 if (extension && service && 328 if (extension && service &&
329 service->GetExtensionById(extension->id(), true) && 329 service->GetExtensionById(extension->id(), true) &&
330 !service->GetExtensionById(extension->id(), false)) 330 !service->GetExtensionById(extension->id(), false))
331 return extension; 331 return extension;
332 return NULL; 332 return NULL;
333 } 333 }
334 334
335 void AutomationProvider::OnMessageReceived(const IPC::Message& message) { 335 void AutomationProvider::OnMessageReceived(const IPC::Message& message) {
336 IPC_BEGIN_MESSAGE_MAP(AutomationProvider, message) 336 IPC_BEGIN_MESSAGE_MAP(AutomationProvider, message)
337 IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindow, GetBrowserWindow)
338 IPC_MESSAGE_HANDLER(AutomationMsg_GetBrowserLocale, GetBrowserLocale)
339 IPC_MESSAGE_HANDLER(AutomationMsg_LastActiveBrowserWindow,
340 GetLastActiveBrowserWindow)
341 IPC_MESSAGE_HANDLER(AutomationMsg_ActiveWindow, GetActiveWindow)
342 IPC_MESSAGE_HANDLER(AutomationMsg_FindNormalBrowserWindow,
343 FindNormalBrowserWindow)
344 IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowActive, IsWindowActive)
345 IPC_MESSAGE_HANDLER(AutomationMsg_ActivateWindow, ActivateWindow)
346 IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowMaximized, IsWindowMaximized)
347 IPC_MESSAGE_HANDLER(AutomationMsg_WindowExecuteCommandAsync,
348 ExecuteBrowserCommandAsync)
349 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowExecuteCommand,
350 ExecuteBrowserCommand)
351 IPC_MESSAGE_HANDLER(AutomationMsg_TerminateSession, TerminateSession) 337 IPC_MESSAGE_HANDLER(AutomationMsg_TerminateSession, TerminateSession)
352 IPC_MESSAGE_HANDLER(AutomationMsg_WindowViewBounds, WindowGetViewBounds) 338 IPC_MESSAGE_HANDLER(AutomationMsg_WindowViewBounds, WindowGetViewBounds)
353 IPC_MESSAGE_HANDLER(AutomationMsg_GetWindowBounds, GetWindowBounds) 339 IPC_MESSAGE_HANDLER(AutomationMsg_GetWindowBounds, GetWindowBounds)
354 IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowBounds, SetWindowBounds) 340 IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowBounds, SetWindowBounds)
355 IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowVisible, SetWindowVisible) 341 IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowVisible, SetWindowVisible)
356 IPC_MESSAGE_HANDLER(AutomationMsg_WindowClick, WindowSimulateClick) 342 IPC_MESSAGE_HANDLER(AutomationMsg_WindowClick, WindowSimulateClick)
357 IPC_MESSAGE_HANDLER(AutomationMsg_WindowMouseMove, WindowSimulateMouseMove) 343 IPC_MESSAGE_HANDLER(AutomationMsg_WindowMouseMove, WindowSimulateMouseMove)
358 IPC_MESSAGE_HANDLER(AutomationMsg_WindowKeyPress, WindowSimulateKeyPress) 344 IPC_MESSAGE_HANDLER(AutomationMsg_WindowKeyPress, WindowSimulateKeyPress)
359 #if !defined(OS_MACOSX) 345 #if !defined(OS_MACOSX)
360 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowDrag, 346 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowDrag,
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 IPC_MESSAGE_HANDLER(AutomationMsg_RunUnloadHandlers, OnRunUnloadHandlers) 537 IPC_MESSAGE_HANDLER(AutomationMsg_RunUnloadHandlers, OnRunUnloadHandlers)
552 IPC_MESSAGE_HANDLER(AutomationMsg_SetZoomLevel, OnSetZoomLevel) 538 IPC_MESSAGE_HANDLER(AutomationMsg_SetZoomLevel, OnSetZoomLevel)
553 #endif // defined(OS_WIN) 539 #endif // defined(OS_WIN)
554 #if defined(OS_CHROMEOS) 540 #if defined(OS_CHROMEOS)
555 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_LoginWithUserAndPass, 541 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_LoginWithUserAndPass,
556 LoginWithUserAndPass) 542 LoginWithUserAndPass)
557 #endif // defined(OS_CHROMEOS) 543 #endif // defined(OS_CHROMEOS)
558 IPC_END_MESSAGE_MAP() 544 IPC_END_MESSAGE_MAP()
559 } 545 }
560 546
561 void AutomationProvider::GetBrowserLocale(string16* locale) {
562 DCHECK(g_browser_process);
563 *locale = ASCIIToUTF16(g_browser_process->GetApplicationLocale());
564 }
565
566 void AutomationProvider::GetShowingAppModalDialog(bool* showing_dialog, 547 void AutomationProvider::GetShowingAppModalDialog(bool* showing_dialog,
567 int* dialog_button) { 548 int* dialog_button) {
568 AppModalDialog* dialog_delegate = 549 AppModalDialog* dialog_delegate =
569 Singleton<AppModalDialogQueue>()->active_dialog(); 550 Singleton<AppModalDialogQueue>()->active_dialog();
570 *showing_dialog = (dialog_delegate != NULL); 551 *showing_dialog = (dialog_delegate != NULL);
571 if (*showing_dialog) 552 if (*showing_dialog)
572 *dialog_button = dialog_delegate->GetDialogButtons(); 553 *dialog_button = dialog_delegate->GetDialogButtons();
573 else 554 else
574 *dialog_button = MessageBoxFlags::DIALOGBUTTON_NONE; 555 *dialog_button = MessageBoxFlags::DIALOGBUTTON_NONE;
575 } 556 }
(...skipping 22 matching lines...) Expand all
598 void AutomationProvider::ShutdownSessionService(int handle, bool* result) { 579 void AutomationProvider::ShutdownSessionService(int handle, bool* result) {
599 if (browser_tracker_->ContainsHandle(handle)) { 580 if (browser_tracker_->ContainsHandle(handle)) {
600 Browser* browser = browser_tracker_->GetResource(handle); 581 Browser* browser = browser_tracker_->GetResource(handle);
601 browser->profile()->ShutdownSessionService(); 582 browser->profile()->ShutdownSessionService();
602 *result = true; 583 *result = true;
603 } else { 584 } else {
604 *result = false; 585 *result = false;
605 } 586 }
606 } 587 }
607 588
608 void AutomationProvider::GetBrowserWindow(int index, int* handle) {
609 *handle = 0;
610 if (index >= 0) {
611 BrowserList::const_iterator iter = BrowserList::begin();
612 for (; (iter != BrowserList::end()) && (index > 0); ++iter, --index) {}
613 if (iter != BrowserList::end()) {
614 *handle = browser_tracker_->Add(*iter);
615 }
616 }
617 }
618
619 void AutomationProvider::FindNormalBrowserWindow(int* handle) {
620 *handle = 0;
621 Browser* browser = BrowserList::FindBrowserWithType(profile_,
622 Browser::TYPE_NORMAL,
623 false);
624 if (browser)
625 *handle = browser_tracker_->Add(browser);
626 }
627
628 void AutomationProvider::GetLastActiveBrowserWindow(int* handle) {
629 *handle = 0;
630 Browser* browser = BrowserList::GetLastActive();
631 if (browser)
632 *handle = browser_tracker_->Add(browser);
633 }
634
635 #if defined(OS_POSIX)
636 // TODO(estade): use this implementation for all platforms?
637 void AutomationProvider::GetActiveWindow(int* handle) {
638 gfx::NativeWindow window =
639 BrowserList::GetLastActive()->window()->GetNativeHandle();
640 *handle = window_tracker_->Add(window);
641 }
642 #endif
643
644 void AutomationProvider::ExecuteBrowserCommandAsync(int handle, int command,
645 bool* success) {
646 *success = false;
647 if (browser_tracker_->ContainsHandle(handle)) {
648 Browser* browser = browser_tracker_->GetResource(handle);
649 if (browser->command_updater()->SupportsCommand(command) &&
650 browser->command_updater()->IsCommandEnabled(command)) {
651 browser->ExecuteCommand(command);
652 *success = true;
653 }
654 }
655 }
656
657 void AutomationProvider::ExecuteBrowserCommand(
658 int handle, int command, IPC::Message* reply_message) {
659 // List of commands which just finish synchronously and don't require
660 // setting up an observer.
661 static const int kSynchronousCommands[] = {
662 IDC_HOME,
663 IDC_SELECT_NEXT_TAB,
664 IDC_SELECT_PREVIOUS_TAB,
665 IDC_SHOW_BOOKMARK_MANAGER,
666 };
667 if (browser_tracker_->ContainsHandle(handle)) {
668 Browser* browser = browser_tracker_->GetResource(handle);
669 if (browser->command_updater()->SupportsCommand(command) &&
670 browser->command_updater()->IsCommandEnabled(command)) {
671 // First check if we can handle the command without using an observer.
672 for (size_t i = 0; i < arraysize(kSynchronousCommands); i++) {
673 if (command == kSynchronousCommands[i]) {
674 browser->ExecuteCommand(command);
675 AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message,
676 true);
677 Send(reply_message);
678 return;
679 }
680 }
681
682 // Use an observer if we have one, otherwise fail.
683 if (ExecuteBrowserCommandObserver::CreateAndRegisterObserver(
684 this, browser, command, reply_message)) {
685 browser->ExecuteCommand(command);
686 return;
687 }
688 }
689 }
690 AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, false);
691 Send(reply_message);
692 }
693
694 // This task just adds another task to the event queue. This is useful if 589 // This task just adds another task to the event queue. This is useful if
695 // you want to ensure that any tasks added to the event queue after this one 590 // you want to ensure that any tasks added to the event queue after this one
696 // have already been processed by the time |task| is run. 591 // have already been processed by the time |task| is run.
697 class InvokeTaskLaterTask : public Task { 592 class InvokeTaskLaterTask : public Task {
698 public: 593 public:
699 explicit InvokeTaskLaterTask(Task* task) : task_(task) {} 594 explicit InvokeTaskLaterTask(Task* task) : task_(task) {}
700 virtual ~InvokeTaskLaterTask() {} 595 virtual ~InvokeTaskLaterTask() {}
701 596
702 virtual void Run() { 597 virtual void Run() {
703 MessageLoop::current()->PostTask(FROM_HERE, task_); 598 MessageLoop::current()->PostTask(FROM_HERE, task_);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 ((flags & views::Event::EF_CONTROL_DOWN) == 634 ((flags & views::Event::EF_CONTROL_DOWN) ==
740 views::Event::EF_CONTROL_DOWN), 635 views::Event::EF_CONTROL_DOWN),
741 ((flags & views::Event::EF_SHIFT_DOWN) == 636 ((flags & views::Event::EF_SHIFT_DOWN) ==
742 views::Event::EF_SHIFT_DOWN), 637 views::Event::EF_SHIFT_DOWN),
743 ((flags & views::Event::EF_ALT_DOWN) == 638 ((flags & views::Event::EF_ALT_DOWN) ==
744 views::Event::EF_ALT_DOWN), 639 views::Event::EF_ALT_DOWN),
745 ((flags & views::Event::EF_COMMAND_DOWN) == 640 ((flags & views::Event::EF_COMMAND_DOWN) ==
746 views::Event::EF_COMMAND_DOWN)); 641 views::Event::EF_COMMAND_DOWN));
747 } 642 }
748 643
749 void AutomationProvider::IsWindowActive(int handle, bool* success,
750 bool* is_active) {
751 if (window_tracker_->ContainsHandle(handle)) {
752 *is_active =
753 platform_util::IsWindowActive(window_tracker_->GetResource(handle));
754 *success = true;
755 } else {
756 *success = false;
757 *is_active = false;
758 }
759 }
760
761 void AutomationProvider::GetTabCount(int handle, int* tab_count) { 644 void AutomationProvider::GetTabCount(int handle, int* tab_count) {
762 *tab_count = -1; // -1 is the error code 645 *tab_count = -1; // -1 is the error code
763 646
764 if (browser_tracker_->ContainsHandle(handle)) { 647 if (browser_tracker_->ContainsHandle(handle)) {
765 Browser* browser = browser_tracker_->GetResource(handle); 648 Browser* browser = browser_tracker_->GetResource(handle);
766 *tab_count = browser->tab_count(); 649 *tab_count = browser->tab_count();
767 } 650 }
768 } 651 }
769 652
770 void AutomationProvider::GetType(int handle, int* type_as_int) { 653 void AutomationProvider::GetType(int handle, int* type_as_int) {
(...skipping 3359 matching lines...) Expand 10 before | Expand all | Expand 10 after
4130 } 4013 }
4131 4014
4132 void AutomationProvider::WaitForPopupMenuToOpen(IPC::Message* reply_message) { 4015 void AutomationProvider::WaitForPopupMenuToOpen(IPC::Message* reply_message) {
4133 NOTIMPLEMENTED(); 4016 NOTIMPLEMENTED();
4134 } 4017 }
4135 #endif // !defined(TOOLKIT_VIEWS) 4018 #endif // !defined(TOOLKIT_VIEWS)
4136 4019
4137 void AutomationProvider::ResetToDefaultTheme() { 4020 void AutomationProvider::ResetToDefaultTheme() {
4138 profile_->ClearTheme(); 4021 profile_->ClearTheme();
4139 } 4022 }
OLDNEW
« no previous file with comments | « chrome/browser/automation/automation_provider.h ('k') | chrome/browser/automation/automation_provider_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698