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

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 Nirnimesh's second round of 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..b98fcddadaaa83ec3fa74a28fd3e3a53ba4c6d48 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -2316,6 +2316,14 @@ void TestingAutomationProvider::SendJSONRequest(int handle,
handler_map["SetPrefs"] = &TestingAutomationProvider::SetPrefs;
handler_map["ExecuteJavascript"] =
&TestingAutomationProvider::ExecuteJavascriptJSON;
+ handler_map["AddDomRaisedEventObserver"] =
+ &TestingAutomationProvider::AddDomRaisedEventObserver;
+ handler_map["RemoveEventObserver"] =
+ &TestingAutomationProvider::RemoveEventObserver;
+ handler_map["GetNextEvent"] =
+ &TestingAutomationProvider::GetNextEvent;
+ handler_map["ClearEventQueue"] =
+ &TestingAutomationProvider::ClearEventQueue;
handler_map["ExecuteJavascriptInRenderView"] =
&TestingAutomationProvider::ExecuteJavascriptInRenderView;
handler_map["GoForward"] =
@@ -6443,6 +6451,68 @@ void TestingAutomationProvider::ExecuteJavascriptInRenderView(
rvh);
}
+void TestingAutomationProvider::AddDomRaisedEventObserver(
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ if (SendErrorIfModalDialogActive(this, reply_message))
+ return;
+
+ AutomationJSONReply reply(this, reply_message);
+ std::string event_name;
+ if (!args->GetString("event_name", &event_name)) {
+ reply.SendError("'event_name' missing or invalid");
+ return;
+ }
+
+ int observer_id = automation_event_queue_.AddObserver(
+ new DomRaisedEventObserver(automation_event_queue_, event_name));
+ scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
+ return_value->SetInteger("observer_id", observer_id);
+ reply.SendSuccess(return_value.get());
+}
+
+void TestingAutomationProvider::RemoveEventObserver(
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ AutomationJSONReply reply(this, reply_message);
+ int observer_id;
+ if (!args->GetInteger("observer_id", &observer_id)) {
+ reply.SendError("'observer_id' missing or invalid");
+ return;
+ }
+ if (automation_event_queue_.RemoveObserver(observer_id)) {
+ reply.SendSuccess(NULL);
+ return;
+ }
+ reply.SendError("Invalid observer id.");
+}
+
+void TestingAutomationProvider::ClearEventQueue(
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ automation_event_queue_.Clear();
+ AutomationJSONReply(this, reply_message).SendSuccess(NULL);
+}
+
+void TestingAutomationProvider::GetNextEvent(
+ DictionaryValue* args,
+ IPC::Message* reply_message) {
+ scoped_ptr<AutomationJSONReply> reply(
Nirnimesh 2012/02/29 03:22:08 won't this get free'd when this method's scope end
craigdh 2012/02/29 22:53:43 This function doesn't normally respond to the auto
+ new AutomationJSONReply(this, reply_message));
+ int observer_id;
+ bool blocking;
+ if (!args->GetInteger("observer_id", &observer_id)) {
+ reply->SendError("'observer_id' missing or invalid");
+ return;
+ }
+ if (!args->GetBoolean("blocking", &blocking)) {
+ reply->SendError("'blocking' missing or invalid");
+ return;
+ }
+
+ automation_event_queue_.GetNextEvent(reply.release(), observer_id, blocking);
Nirnimesh 2012/02/29 03:22:08 When all cases of SendSuccess/SendError are not co
craigdh 2012/02/29 22:53:43 It's actually cleaner to hold on to this Automatio
+}
+
void TestingAutomationProvider::GoForward(
DictionaryValue* args,
IPC::Message* reply_message) {

Powered by Google App Engine
This is Rietveld 408576698