| Index: chrome/renderer/extensions/automation_internal_custom_bindings.cc
|
| diff --git a/chrome/renderer/extensions/automation_internal_custom_bindings.cc b/chrome/renderer/extensions/automation_internal_custom_bindings.cc
|
| index e56944b1f4928389aae3fb68e502e1dc620804e8..ab2a80b49c63c1808297c895cc6a2f39192f0517 100644
|
| --- a/chrome/renderer/extensions/automation_internal_custom_bindings.cc
|
| +++ b/chrome/renderer/extensions/automation_internal_custom_bindings.cc
|
| @@ -21,6 +21,7 @@
|
| #include "content/public/renderer/render_view.h"
|
| #include "extensions/common/extension.h"
|
| #include "extensions/common/manifest.h"
|
| +#include "extensions/renderer/extension_bindings_system.h"
|
| #include "extensions/renderer/script_context.h"
|
| #include "ipc/message_filter.h"
|
| #include "ui/accessibility/ax_enums.h"
|
| @@ -418,13 +419,15 @@ private:
|
| };
|
|
|
| AutomationInternalCustomBindings::AutomationInternalCustomBindings(
|
| - ScriptContext* context)
|
| + ScriptContext* context,
|
| + ExtensionBindingsSystem* bindings_system)
|
| : ObjectBackedNativeHandler(context),
|
| is_active_profile_(true),
|
| - tree_change_observer_overall_filter_(0) {
|
| - // It's safe to use base::Unretained(this) here because these bindings
|
| - // will only be called on a valid AutomationInternalCustomBindings instance
|
| - // and none of the functions have any side effects.
|
| + tree_change_observer_overall_filter_(0),
|
| + bindings_system_(bindings_system) {
|
| +// It's safe to use base::Unretained(this) here because these bindings
|
| +// will only be called on a valid AutomationInternalCustomBindings instance
|
| +// and none of the functions have any side effects.
|
| #define ROUTE_FUNCTION(FN) \
|
| RouteFunction(#FN, "automation", \
|
| base::Bind(&AutomationInternalCustomBindings::FN, \
|
| @@ -1135,15 +1138,13 @@ void AutomationInternalCustomBindings::OnAccessibilityEvent(
|
| // Update the internal state whether it's the active profile or not.
|
| cache->location_offset = params.location_offset;
|
| deleted_node_ids_.clear();
|
| - v8::Isolate* isolate = GetIsolate();
|
| - v8::HandleScope handle_scope(isolate);
|
| - v8::Context::Scope context_scope(context()->v8_context());
|
| - v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 1U));
|
| if (!cache->tree.Unserialize(params.update)) {
|
| LOG(ERROR) << cache->tree.error();
|
| - args->Set(0U, v8::Number::New(isolate, tree_id));
|
| - context()->DispatchEvent(
|
| - "automationInternal.onAccessibilityTreeSerializationError", args);
|
| + base::ListValue args;
|
| + args.AppendInteger(tree_id);
|
| + bindings_system_->DispatchEventInContext(
|
| + "automationInternal.onAccessibilityTreeSerializationError", &args,
|
| + nullptr, context());
|
| return;
|
| }
|
|
|
| @@ -1154,21 +1155,19 @@ void AutomationInternalCustomBindings::OnAccessibilityEvent(
|
| SendNodesRemovedEvent(&cache->tree, deleted_node_ids_);
|
| deleted_node_ids_.clear();
|
|
|
| - v8::Local<v8::Object> event_params(v8::Object::New(GetIsolate()));
|
| - event_params->Set(CreateV8String(isolate, "treeID"),
|
| - v8::Integer::New(GetIsolate(), params.tree_id));
|
| - event_params->Set(CreateV8String(isolate, "targetID"),
|
| - v8::Integer::New(GetIsolate(), params.id));
|
| - event_params->Set(CreateV8String(isolate, "eventType"),
|
| - CreateV8String(isolate, ToString(params.event_type)));
|
| - event_params->Set(CreateV8String(isolate, "eventFrom"),
|
| - CreateV8String(isolate, ToString(params.event_from)));
|
| - event_params->Set(CreateV8String(isolate, "mouseX"),
|
| - v8::Integer::New(GetIsolate(), params.mouse_location.x()));
|
| - event_params->Set(CreateV8String(isolate, "mouseY"),
|
| - v8::Integer::New(GetIsolate(), params.mouse_location.y()));
|
| - args->Set(0U, event_params);
|
| - context()->DispatchEvent("automationInternal.onAccessibilityEvent", args);
|
| + {
|
| + auto event_params = base::MakeUnique<base::DictionaryValue>();
|
| + event_params->SetInteger("treeID", params.tree_id);
|
| + event_params->SetInteger("targetID", params.id);
|
| + event_params->SetString("eventType", ToString(params.event_type));
|
| + event_params->SetString("eventFrom", ToString(params.event_from));
|
| + event_params->SetInteger("mouseX", params.mouse_location.x());
|
| + event_params->SetInteger("mouseY", params.mouse_location.y());
|
| + base::ListValue args;
|
| + args.Append(std::move(event_params));
|
| + bindings_system_->DispatchEventInContext(
|
| + "automationInternal.onAccessibilityEvent", &args, nullptr, context());
|
| + }
|
| }
|
|
|
| void AutomationInternalCustomBindings::OnAccessibilityLocationChange(
|
| @@ -1328,10 +1327,6 @@ void AutomationInternalCustomBindings::SendTreeChangeEvent(
|
|
|
| int tree_id = iter->second->tree_id;
|
|
|
| - v8::Isolate* isolate = GetIsolate();
|
| - v8::HandleScope handle_scope(isolate);
|
| - v8::Context::Scope context_scope(context()->v8_context());
|
| -
|
| for (const auto& observer : tree_change_observers_) {
|
| switch (observer.filter) {
|
| case api::automation::TREE_CHANGE_OBSERVER_FILTER_NOTREECHANGES:
|
| @@ -1352,12 +1347,13 @@ void AutomationInternalCustomBindings::SendTreeChangeEvent(
|
| break;
|
| }
|
|
|
| - v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 4U));
|
| - args->Set(0U, v8::Integer::New(GetIsolate(), observer.id));
|
| - args->Set(1U, v8::Integer::New(GetIsolate(), tree_id));
|
| - args->Set(2U, v8::Integer::New(GetIsolate(), node->id()));
|
| - args->Set(3U, CreateV8String(isolate, ToString(change_type)));
|
| - context()->DispatchEvent("automationInternal.onTreeChange", args);
|
| + base::ListValue args;
|
| + args.AppendInteger(observer.id);
|
| + args.AppendInteger(tree_id);
|
| + args.AppendInteger(node->id());
|
| + args.AppendString(ToString(change_type));
|
| + bindings_system_->DispatchEventInContext("automationInternal.onTreeChange",
|
| + &args, nullptr, context());
|
| }
|
| }
|
|
|
| @@ -1369,13 +1365,11 @@ void AutomationInternalCustomBindings::SendChildTreeIDEvent(ui::AXTree* tree,
|
|
|
| int tree_id = iter->second->tree_id;
|
|
|
| - v8::Isolate* isolate = GetIsolate();
|
| - v8::HandleScope handle_scope(isolate);
|
| - v8::Context::Scope context_scope(context()->v8_context());
|
| - v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 2U));
|
| - args->Set(0U, v8::Integer::New(GetIsolate(), tree_id));
|
| - args->Set(1U, v8::Integer::New(GetIsolate(), node->id()));
|
| - context()->DispatchEvent("automationInternal.onChildTreeID", args);
|
| + base::ListValue args;
|
| + args.AppendInteger(tree_id);
|
| + args.AppendInteger(node->id());
|
| + bindings_system_->DispatchEventInContext("automationInternal.onChildTreeID",
|
| + &args, nullptr, context());
|
| }
|
|
|
| void AutomationInternalCustomBindings::SendNodesRemovedEvent(
|
| @@ -1387,16 +1381,17 @@ void AutomationInternalCustomBindings::SendNodesRemovedEvent(
|
|
|
| int tree_id = iter->second->tree_id;
|
|
|
| - v8::Isolate* isolate = GetIsolate();
|
| - v8::HandleScope handle_scope(isolate);
|
| - v8::Context::Scope context_scope(context()->v8_context());
|
| - v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 2U));
|
| - args->Set(0U, v8::Integer::New(GetIsolate(), tree_id));
|
| - v8::Local<v8::Array> nodes(v8::Array::New(GetIsolate(), ids.size()));
|
| - args->Set(1U, nodes);
|
| - for (size_t i = 0; i < ids.size(); ++i)
|
| - nodes->Set(i, v8::Integer::New(GetIsolate(), ids[i]));
|
| - context()->DispatchEvent("automationInternal.onNodesRemoved", args);
|
| + base::ListValue args;
|
| + args.AppendInteger(tree_id);
|
| + {
|
| + auto nodes = base::MakeUnique<base::ListValue>();
|
| + for (auto id : ids)
|
| + nodes->AppendInteger(id);
|
| + args.Append(std::move(nodes));
|
| + }
|
| +
|
| + bindings_system_->DispatchEventInContext("automationInternal.onNodesRemoved",
|
| + &args, nullptr, context());
|
| }
|
|
|
| } // namespace extensions
|
|
|