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 37406710aeac9b360070aa115883a852fa224bf6..2e068b27fb64b85ddeed94dbf7f4c576357198c3 100644 |
--- a/chrome/renderer/extensions/automation_internal_custom_bindings.cc |
+++ b/chrome/renderer/extensions/automation_internal_custom_bindings.cc |
@@ -8,9 +8,29 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/values.h" |
#include "chrome/common/extensions/manifest_handlers/automation.h" |
+#include "content/public/renderer/v8_value_converter.h" |
#include "extensions/common/extension.h" |
#include "extensions/common/manifest.h" |
#include "extensions/renderer/script_context.h" |
+#include "ui/accessibility/ax_enums.h" |
+ |
+namespace { |
+ |
+// Helper to convert an enum to a V8 object. |
+template <typename EnumType> |
+v8::Local<v8::Object> ToEnumObject(v8::Isolate* isolate, |
+ EnumType start_after, |
+ EnumType end_at) { |
+ v8::Local<v8::Object> object = v8::Object::New(isolate); |
+ for (int i = start_after + 1; i <= end_at; ++i) { |
+ v8::Local<v8::String> value = v8::String::NewFromUtf8( |
+ isolate, ui::ToString(static_cast<EnumType>(i)).c_str()); |
+ object->Set(value, value); |
+ } |
+ return object; |
+} |
+ |
+} // namespace |
namespace extensions { |
@@ -20,6 +40,10 @@ AutomationInternalCustomBindings::AutomationInternalCustomBindings( |
"IsInteractPermitted", |
base::Bind(&AutomationInternalCustomBindings::IsInteractPermitted, |
base::Unretained(this))); |
+ RouteFunction( |
+ "GetSchemaAdditions", |
+ base::Bind(&AutomationInternalCustomBindings::GetSchemaAdditions, |
+ base::Unretained(this))); |
} |
AutomationInternalCustomBindings::~AutomationInternalCustomBindings() { |
@@ -35,4 +59,23 @@ void AutomationInternalCustomBindings::IsInteractPermitted( |
v8::Boolean::New(GetIsolate(), automation_info->interact)); |
} |
+void AutomationInternalCustomBindings::GetSchemaAdditions( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ v8::Local<v8::Object> additions = v8::Object::New(GetIsolate()); |
+ |
+ additions->Set( |
+ v8::String::NewFromUtf8(GetIsolate(), "EventType"), |
+ ToEnumObject(GetIsolate(), ui::AX_EVENT_NONE, ui::AX_EVENT_LAST)); |
+ |
+ additions->Set( |
+ v8::String::NewFromUtf8(GetIsolate(), "RoleType"), |
+ ToEnumObject(GetIsolate(), ui::AX_ROLE_NONE, ui::AX_ROLE_LAST)); |
+ |
+ additions->Set( |
+ v8::String::NewFromUtf8(GetIsolate(), "StateType"), |
+ ToEnumObject(GetIsolate(), ui::AX_STATE_NONE, ui::AX_STATE_LAST)); |
+ |
+ args.GetReturnValue().Set(additions); |
+} |
+ |
} // namespace extensions |