| 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..439cacb059cc9a0d4471bd76e649166f01385182 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,78 @@ 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;
|
| + }
|
| +
|
| + if (!automation_event_queue_.get())
|
| + automation_event_queue_.reset(new AutomationEventQueue);
|
| +
|
| + int observer_id = automation_event_queue_->AddObserver(
|
| + new DomRaisedEventObserver(automation_event_queue_.get(), 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) ||
|
| + !automation_event_queue_.get()) {
|
| + 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_.reset();
|
| + AutomationJSONReply(this, reply_message).SendSuccess(NULL);
|
| +}
|
| +
|
| +void TestingAutomationProvider::GetNextEvent(
|
| + DictionaryValue* args,
|
| + IPC::Message* reply_message) {
|
| + scoped_ptr<AutomationJSONReply> reply(
|
| + 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;
|
| + }
|
| + if (!automation_event_queue_.get()) {
|
| + reply->SendError(
|
| + "No observers are attached to the queue. Did you forget to add one?");
|
| + return;
|
| + }
|
| +
|
| + // The reply will be freed once a matching event is added to the queue.
|
| + automation_event_queue_->GetNextEvent(reply.release(), observer_id, blocking);
|
| +}
|
| +
|
| void TestingAutomationProvider::GoForward(
|
| DictionaryValue* args,
|
| IPC::Message* reply_message) {
|
|
|