Chromium Code Reviews| 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 0ecab81397b8b05c932a459ba20d7a77358b9463..987d457c2b7f9945261b455fcfff465eb0a7350d 100644 |
| --- a/chrome/renderer/extensions/automation_internal_custom_bindings.cc |
| +++ b/chrome/renderer/extensions/automation_internal_custom_bindings.cc |
| @@ -265,7 +265,10 @@ private: |
| AutomationInternalCustomBindings::AutomationInternalCustomBindings( |
| ScriptContext* context) |
| - : ObjectBackedNativeHandler(context), is_active_profile_(true) { |
| + : ObjectBackedNativeHandler(context), |
| + is_active_profile_(true), |
| + tree_change_observer_mask_( |
| + api::automation::TREE_CHANGE_OBSERVER_MASK_NOTREECHANGES) { |
| // 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. |
| @@ -278,6 +281,7 @@ AutomationInternalCustomBindings::AutomationInternalCustomBindings( |
| ROUTE_FUNCTION(GetRoutingID); |
| ROUTE_FUNCTION(StartCachingAccessibilityTrees); |
| ROUTE_FUNCTION(DestroyAccessibilityTree); |
| + ROUTE_FUNCTION(SetTreeChangeObserverMask); |
| ROUTE_FUNCTION(GetChildIDAtIndex); |
| #undef ROUTE_FUNCTION |
| @@ -570,6 +574,18 @@ void AutomationInternalCustomBindings::DestroyAccessibilityTree( |
| delete cache; |
| } |
| +void AutomationInternalCustomBindings::SetTreeChangeObserverMask( |
| + const v8::FunctionCallbackInfo<v8::Value>& args) { |
| + if (args.Length() != 1 || !args[0]->IsString()) { |
| + ThrowInvalidArgumentsException(this); |
| + return; |
| + } |
| + |
| + std::string mask_str = *v8::String::Utf8Value(args[0]); |
| + tree_change_observer_mask_ = |
|
Peter Lundblad
2015/11/20 13:42:59
What catches invalid values?
dmazzoni
2015/11/23 20:16:50
ParseTreeChangeObserverMask is autogenerated, it t
|
| + api::automation::ParseTreeChangeObserverMask(mask_str); |
| +} |
| + |
| void AutomationInternalCustomBindings::RouteTreeIDFunction( |
| const std::string& name, |
| TreeIDFunction callback) { |
| @@ -739,6 +755,24 @@ void AutomationInternalCustomBindings::SendTreeChangeEvent( |
| if (!is_active_profile_) |
| return; |
| + if (node->data().role != ui::AX_ROLE_EMBEDDED_OBJECT && |
| + node->data().role != ui::AX_ROLE_WEB_VIEW) { |
| + switch (tree_change_observer_mask_) { |
| + case api::automation::TREE_CHANGE_OBSERVER_MASK_NOTREECHANGES: |
| + default: |
| + return; |
| + case api::automation::TREE_CHANGE_OBSERVER_MASK_LIVEREGIONTREECHANGES: |
| + if (!node->data().HasStringAttribute( |
| + ui::AX_ATTR_CONTAINER_LIVE_STATUS) && |
| + node->data().role != ui::AX_ROLE_ALERT) { |
| + return; |
| + } |
| + break; |
| + case api::automation::TREE_CHANGE_OBSERVER_MASK_ALLTREECHANGES: |
| + break; |
| + } |
| + } |
| + |
| auto iter = axtree_to_tree_cache_map_.find(tree); |
| if (iter == axtree_to_tree_cache_map_.end()) |
| return; |