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

Unified Diff: chrome/browser/automation/testing_automation_provider.cc

Issue 9372120: Implementation of AutomationEventQueue and associated framework to support generic non-blocking aut… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Dennis' comments. Created 8 years, 10 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 side-by-side diff with in-line comments
Download patch
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 afc251a4d660590022094a732d548c3ad5f630a6..c67110add500a5bda23cec69c1ef4c25ba959d36 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -2316,6 +2316,16 @@ void TestingAutomationProvider::SendJSONRequest(int handle,
handler_map["SetPrefs"] = &TestingAutomationProvider::SetPrefs;
handler_map["ExecuteJavascript"] =
&TestingAutomationProvider::ExecuteJavascriptJSON;
+ handler_map["AddRaisedEventObserver"] =
+ &TestingAutomationProvider::AddRaisedEventObserver;
+ handler_map["GetEvent"] =
+ &TestingAutomationProvider::GetEvent;
+ handler_map["RemoveEventObserver"] =
+ &TestingAutomationProvider::RemoveEventObserver;
+ handler_map["ClearEvents"] =
+ &TestingAutomationProvider::ClearEvents;
+ handler_map["ClearEventObservers"] =
+ &TestingAutomationProvider::ClearEventObservers;
handler_map["ExecuteJavascriptInRenderView"] =
&TestingAutomationProvider::ExecuteJavascriptInRenderView;
handler_map["GoForward"] =
@@ -6443,6 +6453,72 @@ void TestingAutomationProvider::ExecuteJavascriptInRenderView(
rvh);
}
+void TestingAutomationProvider::AddRaisedEventObserver(
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ if (SendErrorIfModalDialogActive(this, reply_message))
+ return;
+
+ std::string event_name;
+ if (!args->GetString("event_name", &event_name)) {
+ AutomationJSONReply(this, reply_message)
+ .SendError("'event_name' missing or invalid");
+ return;
+ }
+
+ RaisedEventObserver* jsobserver =
Nirnimesh 2012/02/24 23:18:09 if the user fails to call RemoveEventObserver, doe
craigdh 2012/02/27 22:43:38 All un-removed observers are freed when the Testin
+ new RaisedEventObserver(automation_event_queue_, event_name);
+ scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
+ return_value->SetInteger("observer_id", jsobserver->GetId());
+ AutomationJSONReply(this, reply_message).SendSuccess(return_value.get());
+}
+
+void TestingAutomationProvider::RemoveEventObserver(
Nirnimesh 2012/02/24 23:18:09 this method name does not have 'Raised'.
craigdh 2012/02/27 22:43:38 It's not intended to, this method can remove any t
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ int observer_id;
+ if (!args->GetInteger("observer_id", &observer_id)) {
+ AutomationJSONReply(this, reply_message)
+ .SendError("'observer_id' missing or invalid");
+ return;
+ }
+ automation_event_queue_.RemoveObserver(observer_id);
Nirnimesh 2012/02/24 23:18:09 what if observer_id is invalid?
craigdh 2012/02/27 22:43:38 Then it does not remove anything. Do you think tha
Nirnimesh 2012/02/28 09:13:09 Yes, an error message would be nice.
+ AutomationJSONReply(this, reply_message).SendSuccess(NULL);
+}
+
+void TestingAutomationProvider::ClearEvents(
Nirnimesh 2012/02/24 23:18:09 Shouldn't this imply ClearEventObservers as well?
craigdh 2012/02/27 22:43:38 I was imagining cases where it may be desirable to
Nirnimesh 2012/02/28 09:13:09 Unless you call ClearEventObservers as well, you c
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ automation_event_queue_.Clear();
+ AutomationJSONReply(this, reply_message).SendSuccess(NULL);
+}
+
+void TestingAutomationProvider::ClearEventObservers(
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ automation_event_queue_.ClearObservers();
+ AutomationJSONReply(this, reply_message).SendSuccess(NULL);
+}
+
+void TestingAutomationProvider::GetEvent(
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ int observer_id;
+ bool blocking;
+ if (!args->GetInteger("observer_id", &observer_id)) {
+ AutomationJSONReply(this, reply_message)
+ .SendError("'observer_id' missing or invalid");
+ return;
+ }
+ if (!args->GetBoolean("blocking", &blocking)) {
+ AutomationJSONReply(this, reply_message)
+ .SendError("'blocking' missing or invalid");
+ return;
+ }
+
+ automation_event_queue_.GetEvent(this, reply_message, observer_id, blocking);
+}
+
void TestingAutomationProvider::GoForward(
DictionaryValue* args,
IPC::Message* reply_message) {

Powered by Google App Engine
This is Rietveld 408576698