OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/renderer/extensions/automation_internal_custom_bindings.h" | 5 #include "chrome/renderer/extensions/automation_internal_custom_bindings.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 } | 93 } |
94 | 94 |
95 AutomationInternalCustomBindings* owner_; | 95 AutomationInternalCustomBindings* owner_; |
96 bool removed_; | 96 bool removed_; |
97 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 97 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
98 | 98 |
99 DISALLOW_COPY_AND_ASSIGN(AutomationMessageFilter); | 99 DISALLOW_COPY_AND_ASSIGN(AutomationMessageFilter); |
100 }; | 100 }; |
101 | 101 |
102 AutomationInternalCustomBindings::AutomationInternalCustomBindings( | 102 AutomationInternalCustomBindings::AutomationInternalCustomBindings( |
103 ScriptContext* context) : ObjectBackedNativeHandler(context) { | 103 ScriptContext* context) |
| 104 : ObjectBackedNativeHandler(context), is_active_profile_(true) { |
104 // It's safe to use base::Unretained(this) here because these bindings | 105 // It's safe to use base::Unretained(this) here because these bindings |
105 // will only be called on a valid AutomationInternalCustomBindings instance | 106 // will only be called on a valid AutomationInternalCustomBindings instance |
106 // and none of the functions have any side effects. | 107 // and none of the functions have any side effects. |
107 #define ROUTE_FUNCTION(FN) \ | 108 #define ROUTE_FUNCTION(FN) \ |
108 RouteFunction(#FN, \ | 109 RouteFunction(#FN, \ |
109 base::Bind(&AutomationInternalCustomBindings::FN, \ | 110 base::Bind(&AutomationInternalCustomBindings::FN, \ |
110 base::Unretained(this))) | 111 base::Unretained(this))) |
111 | 112 |
112 ROUTE_FUNCTION(IsInteractPermitted); | 113 ROUTE_FUNCTION(IsInteractPermitted); |
113 ROUTE_FUNCTION(GetSchemaAdditions); | 114 ROUTE_FUNCTION(GetSchemaAdditions); |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 const std::string& str) { | 512 const std::string& str) { |
512 return v8::String::NewFromUtf8( | 513 return v8::String::NewFromUtf8( |
513 GetIsolate(), str.c_str(), v8::String::kNormalString, str.length()); | 514 GetIsolate(), str.c_str(), v8::String::kNormalString, str.length()); |
514 } | 515 } |
515 | 516 |
516 // | 517 // |
517 // Handle accessibility events from the browser process. | 518 // Handle accessibility events from the browser process. |
518 // | 519 // |
519 | 520 |
520 void AutomationInternalCustomBindings::OnAccessibilityEvent( | 521 void AutomationInternalCustomBindings::OnAccessibilityEvent( |
521 const ExtensionMsg_AccessibilityEventParams& params) { | 522 const ExtensionMsg_AccessibilityEventParams& params, |
| 523 bool is_active_profile) { |
| 524 is_active_profile_ = is_active_profile; |
522 int tree_id = params.tree_id; | 525 int tree_id = params.tree_id; |
523 TreeCache* cache; | 526 TreeCache* cache; |
524 auto iter = tree_id_to_tree_cache_map_.find(tree_id); | 527 auto iter = tree_id_to_tree_cache_map_.find(tree_id); |
525 if (iter == tree_id_to_tree_cache_map_.end()) { | 528 if (iter == tree_id_to_tree_cache_map_.end()) { |
526 cache = new TreeCache(); | 529 cache = new TreeCache(); |
527 cache->tab_id = -1; | 530 cache->tab_id = -1; |
528 cache->tree_id = params.tree_id; | 531 cache->tree_id = params.tree_id; |
529 cache->tree.SetDelegate(this); | 532 cache->tree.SetDelegate(this); |
530 tree_id_to_tree_cache_map_.insert(std::make_pair(tree_id, cache)); | 533 tree_id_to_tree_cache_map_.insert(std::make_pair(tree_id, cache)); |
531 axtree_to_tree_cache_map_.insert(std::make_pair(&cache->tree, cache)); | 534 axtree_to_tree_cache_map_.insert(std::make_pair(&cache->tree, cache)); |
532 } else { | 535 } else { |
533 cache = iter->second; | 536 cache = iter->second; |
534 } | 537 } |
535 | 538 |
| 539 // Update the internal state whether it's the active profile or not. |
536 cache->location_offset = params.location_offset; | 540 cache->location_offset = params.location_offset; |
537 if (!cache->tree.Unserialize(params.update)) { | 541 if (!cache->tree.Unserialize(params.update)) { |
538 LOG(ERROR) << cache->tree.error(); | 542 LOG(ERROR) << cache->tree.error(); |
539 return; | 543 return; |
540 } | 544 } |
541 | 545 |
| 546 // Don't send the event if it's not the active profile. |
| 547 if (!is_active_profile) |
| 548 return; |
| 549 |
542 v8::HandleScope handle_scope(GetIsolate()); | 550 v8::HandleScope handle_scope(GetIsolate()); |
543 v8::Context::Scope context_scope(context()->v8_context()); | 551 v8::Context::Scope context_scope(context()->v8_context()); |
544 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 1U)); | 552 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 1U)); |
545 v8::Local<v8::Object> event_params(v8::Object::New(GetIsolate())); | 553 v8::Local<v8::Object> event_params(v8::Object::New(GetIsolate())); |
546 event_params->Set(CreateV8String("treeID"), | 554 event_params->Set(CreateV8String("treeID"), |
547 v8::Integer::New(GetIsolate(), params.tree_id)); | 555 v8::Integer::New(GetIsolate(), params.tree_id)); |
548 event_params->Set(CreateV8String("targetID"), | 556 event_params->Set(CreateV8String("targetID"), |
549 v8::Integer::New(GetIsolate(), params.id)); | 557 v8::Integer::New(GetIsolate(), params.id)); |
550 event_params->Set(CreateV8String("eventType"), | 558 event_params->Set(CreateV8String("eventType"), |
551 CreateV8String(ToString(params.event_type))); | 559 CreateV8String(ToString(params.event_type))); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 tree, node); | 617 tree, node); |
610 break; | 618 break; |
611 } | 619 } |
612 } | 620 } |
613 } | 621 } |
614 | 622 |
615 void AutomationInternalCustomBindings::SendTreeChangeEvent( | 623 void AutomationInternalCustomBindings::SendTreeChangeEvent( |
616 api::automation::TreeChangeType change_type, | 624 api::automation::TreeChangeType change_type, |
617 ui::AXTree* tree, | 625 ui::AXTree* tree, |
618 ui::AXNode* node) { | 626 ui::AXNode* node) { |
| 627 // Don't send tree change events when it's not the active profile. |
| 628 if (!is_active_profile_) |
| 629 return; |
| 630 |
619 auto iter = axtree_to_tree_cache_map_.find(tree); | 631 auto iter = axtree_to_tree_cache_map_.find(tree); |
620 if (iter == axtree_to_tree_cache_map_.end()) | 632 if (iter == axtree_to_tree_cache_map_.end()) |
621 return; | 633 return; |
622 | 634 |
623 int tree_id = iter->second->tree_id; | 635 int tree_id = iter->second->tree_id; |
624 | 636 |
625 v8::HandleScope handle_scope(GetIsolate()); | 637 v8::HandleScope handle_scope(GetIsolate()); |
626 v8::Context::Scope context_scope(context()->v8_context()); | 638 v8::Context::Scope context_scope(context()->v8_context()); |
627 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 3U)); | 639 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 3U)); |
628 args->Set(0U, v8::Integer::New(GetIsolate(), tree_id)); | 640 args->Set(0U, v8::Integer::New(GetIsolate(), tree_id)); |
629 args->Set(1U, v8::Integer::New(GetIsolate(), node->id())); | 641 args->Set(1U, v8::Integer::New(GetIsolate(), node->id())); |
630 args->Set(2U, CreateV8String(ToString(change_type))); | 642 args->Set(2U, CreateV8String(ToString(change_type))); |
631 context()->DispatchEvent("automationInternal.onTreeChange", args); | 643 context()->DispatchEvent("automationInternal.onTreeChange", args); |
632 } | 644 } |
633 | 645 |
634 } // namespace extensions | 646 } // namespace extensions |
OLD | NEW |