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"
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/renderer/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"
19 // Helper to convert an enum to a V8 object.
20 template <typename EnumType
>
21 v8::Local
<v8::Object
> ToEnumObject(v8::Isolate
* isolate
,
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
);
35 namespace extensions
{
37 AutomationInternalCustomBindings::AutomationInternalCustomBindings(
38 ScriptContext
* context
) : ObjectBackedNativeHandler(context
) {
40 "IsInteractPermitted",
41 base::Bind(&AutomationInternalCustomBindings::IsInteractPermitted
,
42 base::Unretained(this)));
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();
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());
67 v8::String::NewFromUtf8(GetIsolate(), "EventType"),
68 ToEnumObject(GetIsolate(), ui::AX_EVENT_NONE
, ui::AX_EVENT_LAST
));
71 v8::String::NewFromUtf8(GetIsolate(), "RoleType"),
72 ToEnumObject(GetIsolate(), ui::AX_ROLE_NONE
, ui::AX_ROLE_LAST
));
75 v8::String::NewFromUtf8(GetIsolate(), "StateType"),
76 ToEnumObject(GetIsolate(), ui::AX_STATE_NONE
, ui::AX_STATE_LAST
));
78 args
.GetReturnValue().Set(additions
);
81 } // namespace extensions