| Index: chrome/renderer/extensions/automation_internal_custom_bindings.h
|
| diff --git a/chrome/renderer/extensions/automation_internal_custom_bindings.h b/chrome/renderer/extensions/automation_internal_custom_bindings.h
|
| index 1bc8a795daa7a631cf7bf71cffbc3134e78c2fb9..c4f2cd23850cfc59bbc3e764b434aa2a19d99c14 100644
|
| --- a/chrome/renderer/extensions/automation_internal_custom_bindings.h
|
| +++ b/chrome/renderer/extensions/automation_internal_custom_bindings.h
|
| @@ -6,6 +6,7 @@
|
| #define CHROME_RENDERER_EXTENSIONS_AUTOMATION_INTERNAL_CUSTOM_BINDINGS_H_
|
|
|
| #include "base/compiler_specific.h"
|
| +#include "chrome/common/extensions/api/automation.h"
|
| #include "extensions/renderer/object_backed_native_handler.h"
|
| #include "ipc/ipc_message.h"
|
| #include "ui/accessibility/ax_tree.h"
|
| @@ -17,15 +18,27 @@ namespace extensions {
|
|
|
| class AutomationMessageFilter;
|
|
|
| +struct TreeCache {
|
| + TreeCache();
|
| + ~TreeCache();
|
| +
|
| + int tab_id;
|
| + int tree_id;
|
| +
|
| + gfx::Vector2d location_offset;
|
| + ui::AXTree tree;
|
| +};
|
| +
|
| // The native component of custom bindings for the chrome.automationInternal
|
| // API.
|
| -class AutomationInternalCustomBindings : public ObjectBackedNativeHandler {
|
| +class AutomationInternalCustomBindings : public ObjectBackedNativeHandler,
|
| + public ui::AXTreeDelegate {
|
| public:
|
| explicit AutomationInternalCustomBindings(ScriptContext* context);
|
|
|
| ~AutomationInternalCustomBindings() override;
|
|
|
| - bool OnMessageReceived(const IPC::Message& message);
|
| + void OnMessageReceived(const IPC::Message& message);
|
|
|
| private:
|
| // Returns whether this extension has the "interact" permission set (either
|
| @@ -39,10 +52,120 @@ class AutomationInternalCustomBindings : public ObjectBackedNativeHandler {
|
| // Get the routing ID for the extension.
|
| void GetRoutingID(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
|
| + // This is called by automation_internal_custom_bindings.js to indicate
|
| + // that an API was called that needs access to accessibility trees. This
|
| + // enables the MessageFilter that allows us to listen to accessibility
|
| + // events forwarded to this process.
|
| + void StartCachingAccessibilityTrees(
|
| + const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Called when an accessibility tree is destroyed and needs to be
|
| + // removed from our cache.
|
| + // Args: int ax_tree_id
|
| + void DestroyAccessibilityTree(
|
| + const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + //
|
| + // Access the cached accessibility trees and properties of their nodes.
|
| + //
|
| +
|
| + // Args: int ax_tree_id, Returns: int root_node_id.
|
| + void GetRootID(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, Returns: int parent_node_id.
|
| + void GetParentID(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, Returns: int child_count.
|
| + void GetChildCount(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, Returns: int child_id.
|
| + void GetChildIDAtIndex(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, Returns: int index_in_parent.
|
| + void GetIndexInParent(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id
|
| + // Returns: JS object with a string key for each state flag that's set.
|
| + void GetState(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, Returns: string role_name
|
| + void GetRole(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id
|
| + // Returns: JS object with {left, top, width, height}
|
| + void GetLocation(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, string attribute_name
|
| + // Returns: string attribute_value.
|
| + void GetStringAttribute(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, string attribute_name
|
| + // Returns: bool attribute_value.
|
| + void GetBoolAttribute(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, string attribute_name
|
| + // Returns: int attribute_value.
|
| + void GetIntAttribute(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, string attribute_name
|
| + // Returns: float attribute_value.
|
| + void GetFloatAttribute(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, string attribute_name
|
| + // Returns: JS array of int attribute_values.
|
| + void GetIntListAttribute(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // Args: int ax_tree_id, int node_id, string attribute_name
|
| + // Returns: string attribute_value.
|
| + void GetHtmlAttribute(const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + //
|
| + // Helper functions.
|
| + //
|
| +
|
| + // Throw an exception if we get bad arguments.
|
| + void ThrowInvalidArgumentsException(
|
| + const v8::FunctionCallbackInfo<v8::Value>& args);
|
| +
|
| + // For any function that takes int ax_tree_id, int node_id as its first
|
| + // two arguments, returns the tree and node it corresponds to, or returns
|
| + // false if not found.
|
| + bool GetNodeHelper(
|
| + const v8::FunctionCallbackInfo<v8::Value>& args,
|
| + TreeCache** out_cache,
|
| + ui::AXNode** out_node);
|
| +
|
| + // For any function that takes int ax_tree_id, int node_id, string attr
|
| + // as its first, returns the node it corresponds to and the string as
|
| + // a UTF8 string.
|
| + bool GetAttributeHelper(
|
| + const v8::FunctionCallbackInfo<v8::Value>& args,
|
| + ui::AXNode** out_node,
|
| + std::string* out_attribute_name);
|
| +
|
| + // Create a V8 string from a string.
|
| + v8::Local<v8::Value> CreateV8String(const char* str);
|
| + v8::Local<v8::Value> CreateV8String(const std::string& str);
|
| +
|
| // Handle accessibility events from the browser process.
|
| void OnAccessibilityEvent(
|
| const ExtensionMsg_AccessibilityEventParams& params);
|
|
|
| + // AXTreeDelegate implementation.
|
| + void OnNodeWillBeDeleted(ui::AXTree* tree, ui::AXNode* node) override;
|
| + void OnSubtreeWillBeDeleted(ui::AXTree* tree, ui::AXNode* node) override;
|
| + void OnNodeCreated(ui::AXTree* tree, ui::AXNode* node) override;
|
| + void OnNodeChanged(ui::AXTree* tree, ui::AXNode* node) override;
|
| + void OnAtomicUpdateFinished(ui::AXTree* tree,
|
| + bool root_changed,
|
| + const std::vector<Change>& changes) override;
|
| +
|
| + void SendTreeChangeEvent(api::automation::TreeChangeType change_type,
|
| + ui::AXTree* tree,
|
| + ui::AXNode* node);
|
| +
|
| + base::hash_map<int, TreeCache*> tree_id_to_tree_cache_map_;
|
| + base::hash_map<ui::AXTree*, TreeCache*> axtree_to_tree_cache_map_;
|
| scoped_refptr<AutomationMessageFilter> message_filter_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AutomationInternalCustomBindings);
|
|
|