summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation/automation_provider.cc
diff options
context:
space:
mode:
authorhuanr@chromium.org <huanr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-13 18:15:14 +0000
committerhuanr@chromium.org <huanr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-13 18:15:14 +0000
commit14c0a03a516a1904225068e135e30769f2b36cb4 (patch)
treea26111b7f2dbeae57caadb38717b0f260fe14c8d /chrome/browser/automation/automation_provider.cc
parentc799366e36aca3488f2941663cfc3448e77634c6 (diff)
downloadchromium_src-14c0a03a516a1904225068e135e30769f2b36cb4.zip
chromium_src-14c0a03a516a1904225068e135e30769f2b36cb4.tar.gz
chromium_src-14c0a03a516a1904225068e135e30769f2b36cb4.tar.bz2
A few more UI commands: duplicate tab, open window.
Convert them to synchronous mode, move to AutoMatedUITestBase, add unit test. Review URL: http://codereview.chromium.org/66066 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation/automation_provider.cc')
-rw-r--r--chrome/browser/automation/automation_provider.cc39
1 files changed, 36 insertions, 3 deletions
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
index 9dee930..1f1adc2 100644
--- a/chrome/browser/automation/automation_provider.cc
+++ b/chrome/browser/automation/automation_provider.cc
@@ -422,6 +422,36 @@ class TabClosedNotificationObserver : public TabStripNotificationObserver {
IPC::Message* reply_message_;
};
+class BrowserOpenedNotificationObserver : public NotificationObserver {
+ public:
+ BrowserOpenedNotificationObserver(AutomationProvider* automation,
+ IPC::Message* reply_message)
+ : automation_(automation),
+ reply_message_(reply_message) {
+ registrar_.Add(this, NotificationType::BROWSER_OPENED,
+ NotificationService::AllSources());
+ }
+
+ ~BrowserOpenedNotificationObserver() {
+ }
+
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type == NotificationType::BROWSER_OPENED) {
+ automation_->Send(reply_message_);
+ delete this;
+ } else {
+ NOTREACHED();
+ }
+ }
+
+ private:
+ AutomationProvider* automation_;
+ IPC::Message* reply_message_;
+ NotificationRegistrar registrar_;
+};
+
class BrowserClosedNotificationObserver : public NotificationObserver {
public:
BrowserClosedNotificationObserver(Browser* browser,
@@ -463,6 +493,7 @@ struct CommandNotification {
};
const struct CommandNotification command_notifications[] = {
+ {IDC_DUPLICATE_TAB, NotificationType::TAB_PARENTED},
{IDC_NEW_TAB, NotificationType::TAB_PARENTED}
};
@@ -922,8 +953,8 @@ void AutomationProvider::OnMessageReceived(const IPC::Message& message) {
SetFilteredInet);
IPC_MESSAGE_HANDLER(AutomationMsg_DownloadDirectory,
GetDownloadDirectory);
- IPC_MESSAGE_HANDLER(AutomationMsg_OpenNewBrowserWindow,
- OpenNewBrowserWindow);
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_OpenNewBrowserWindow,
+ OpenNewBrowserWindow);
IPC_MESSAGE_HANDLER(AutomationMsg_WindowForBrowser,
GetWindowForBrowser);
IPC_MESSAGE_HANDLER(AutomationMsg_AutocompleteEditForBrowser,
@@ -2106,7 +2137,9 @@ void AutomationProvider::GetDownloadDirectory(
}
}
-void AutomationProvider::OpenNewBrowserWindow(bool show) {
+void AutomationProvider::OpenNewBrowserWindow(bool show,
+ IPC::Message* reply_message) {
+ new BrowserOpenedNotificationObserver(this, reply_message);
// We may have no current browser windows open so don't rely on
// asking an existing browser to execute the IDC_NEWWINDOW command
Browser* browser = Browser::Create(profile_);