Use multiline attribute to check for IA2_STATE_MULTILINE.
[chromium-blink-merge.git] / chrome / renderer / extensions / automation_internal_custom_bindings.cc
blob60f6647c82bad6c9044abb29f4ea6fe26b7a0ca1
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/renderer/extensions/automation_internal_custom_bindings.h"
7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/values.h"
10 #include "chrome/common/extensions/manifest_handlers/automation.h"
11 #include "content/public/child/v8_value_converter.h"
12 #include "extensions/common/extension.h"
13 #include "extensions/common/manifest.h"
14 #include "extensions/renderer/script_context.h"
15 #include "ui/accessibility/ax_enums.h"
17 namespace {
19 // Helper to convert an enum to a V8 object.
20 template <typename EnumType>
21 v8::Local<v8::Object> ToEnumObject(v8::Isolate* isolate,
22 EnumType start_after,
23 EnumType end_at) {
24 v8::Local<v8::Object> object = v8::Object::New(isolate);
25 for (int i = start_after + 1; i <= end_at; ++i) {
26 v8::Local<v8::String> value = v8::String::NewFromUtf8(
27 isolate, ui::ToString(static_cast<EnumType>(i)).c_str());
28 object->Set(value, value);
30 return object;
33 } // namespace
35 namespace extensions {
37 AutomationInternalCustomBindings::AutomationInternalCustomBindings(
38 ScriptContext* context) : ObjectBackedNativeHandler(context) {
39 RouteFunction(
40 "IsInteractPermitted",
41 base::Bind(&AutomationInternalCustomBindings::IsInteractPermitted,
42 base::Unretained(this)));
43 RouteFunction(
44 "GetSchemaAdditions",
45 base::Bind(&AutomationInternalCustomBindings::GetSchemaAdditions,
46 base::Unretained(this)));
49 AutomationInternalCustomBindings::~AutomationInternalCustomBindings() {
52 void AutomationInternalCustomBindings::IsInteractPermitted(
53 const v8::FunctionCallbackInfo<v8::Value>& args) {
54 const Extension* extension = context()->extension();
55 CHECK(extension);
56 const AutomationInfo* automation_info = AutomationInfo::Get(extension);
57 CHECK(automation_info);
58 args.GetReturnValue().Set(
59 v8::Boolean::New(GetIsolate(), automation_info->interact));
62 void AutomationInternalCustomBindings::GetSchemaAdditions(
63 const v8::FunctionCallbackInfo<v8::Value>& args) {
64 v8::Local<v8::Object> additions = v8::Object::New(GetIsolate());
66 additions->Set(
67 v8::String::NewFromUtf8(GetIsolate(), "EventType"),
68 ToEnumObject(GetIsolate(), ui::AX_EVENT_NONE, ui::AX_EVENT_LAST));
70 additions->Set(
71 v8::String::NewFromUtf8(GetIsolate(), "RoleType"),
72 ToEnumObject(GetIsolate(), ui::AX_ROLE_NONE, ui::AX_ROLE_LAST));
74 additions->Set(
75 v8::String::NewFromUtf8(GetIsolate(), "StateType"),
76 ToEnumObject(GetIsolate(), ui::AX_STATE_NONE, ui::AX_STATE_LAST));
78 additions->Set(
79 v8::String::NewFromUtf8(GetIsolate(), "TreeChangeType"),
80 ToEnumObject(GetIsolate(), ui::AX_MUTATION_NONE, ui::AX_MUTATION_LAST));
82 args.GetReturnValue().Set(additions);
85 } // namespace extensions