Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(489)

Side by Side Diff: chrome/renderer/extensions/automation_internal_custom_bindings.cc

Issue 1268163002: Dispatch automation events to the last used profile. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix crash Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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),
105 is_active_profile_(true) {
104 // It's safe to use base::Unretained(this) here because these bindings 106 // It's safe to use base::Unretained(this) here because these bindings
105 // will only be called on a valid AutomationInternalCustomBindings instance 107 // will only be called on a valid AutomationInternalCustomBindings instance
106 // and none of the functions have any side effects. 108 // and none of the functions have any side effects.
107 #define ROUTE_FUNCTION(FN) \ 109 #define ROUTE_FUNCTION(FN) \
108 RouteFunction(#FN, \ 110 RouteFunction(#FN, \
109 base::Bind(&AutomationInternalCustomBindings::FN, \ 111 base::Bind(&AutomationInternalCustomBindings::FN, \
110 base::Unretained(this))) 112 base::Unretained(this)))
111 113
112 ROUTE_FUNCTION(IsInteractPermitted); 114 ROUTE_FUNCTION(IsInteractPermitted);
113 ROUTE_FUNCTION(GetSchemaAdditions); 115 ROUTE_FUNCTION(GetSchemaAdditions);
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 const std::string& str) { 513 const std::string& str) {
512 return v8::String::NewFromUtf8( 514 return v8::String::NewFromUtf8(
513 GetIsolate(), str.c_str(), v8::String::kNormalString, str.length()); 515 GetIsolate(), str.c_str(), v8::String::kNormalString, str.length());
514 } 516 }
515 517
516 // 518 //
517 // Handle accessibility events from the browser process. 519 // Handle accessibility events from the browser process.
518 // 520 //
519 521
520 void AutomationInternalCustomBindings::OnAccessibilityEvent( 522 void AutomationInternalCustomBindings::OnAccessibilityEvent(
521 const ExtensionMsg_AccessibilityEventParams& params) { 523 const ExtensionMsg_AccessibilityEventParams& params,
524 bool is_active_profile) {
525 is_active_profile_ = is_active_profile;
522 int tree_id = params.tree_id; 526 int tree_id = params.tree_id;
523 TreeCache* cache; 527 TreeCache* cache;
524 auto iter = tree_id_to_tree_cache_map_.find(tree_id); 528 auto iter = tree_id_to_tree_cache_map_.find(tree_id);
525 if (iter == tree_id_to_tree_cache_map_.end()) { 529 if (iter == tree_id_to_tree_cache_map_.end()) {
526 cache = new TreeCache(); 530 cache = new TreeCache();
527 cache->tab_id = -1; 531 cache->tab_id = -1;
528 cache->tree_id = params.tree_id; 532 cache->tree_id = params.tree_id;
529 cache->tree.SetDelegate(this); 533 cache->tree.SetDelegate(this);
530 tree_id_to_tree_cache_map_.insert(std::make_pair(tree_id, cache)); 534 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)); 535 axtree_to_tree_cache_map_.insert(std::make_pair(&cache->tree, cache));
532 } else { 536 } else {
533 cache = iter->second; 537 cache = iter->second;
534 } 538 }
535 539
540 // Update the internal state whether it's the active profile or not.
536 cache->location_offset = params.location_offset; 541 cache->location_offset = params.location_offset;
537 if (!cache->tree.Unserialize(params.update)) { 542 if (!cache->tree.Unserialize(params.update)) {
538 LOG(ERROR) << cache->tree.error(); 543 LOG(ERROR) << cache->tree.error();
539 return; 544 return;
540 } 545 }
541 546
547 // Don't send the event if it's not the active profile.
548 if (!is_active_profile)
549 return;
550
542 v8::HandleScope handle_scope(GetIsolate()); 551 v8::HandleScope handle_scope(GetIsolate());
543 v8::Context::Scope context_scope(context()->v8_context()); 552 v8::Context::Scope context_scope(context()->v8_context());
544 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 1U)); 553 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 1U));
545 v8::Local<v8::Object> event_params(v8::Object::New(GetIsolate())); 554 v8::Local<v8::Object> event_params(v8::Object::New(GetIsolate()));
546 event_params->Set(CreateV8String("treeID"), 555 event_params->Set(CreateV8String("treeID"),
547 v8::Integer::New(GetIsolate(), params.tree_id)); 556 v8::Integer::New(GetIsolate(), params.tree_id));
548 event_params->Set(CreateV8String("targetID"), 557 event_params->Set(CreateV8String("targetID"),
549 v8::Integer::New(GetIsolate(), params.id)); 558 v8::Integer::New(GetIsolate(), params.id));
550 event_params->Set(CreateV8String("eventType"), 559 event_params->Set(CreateV8String("eventType"),
551 CreateV8String(ToString(params.event_type))); 560 CreateV8String(ToString(params.event_type)));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 tree, node); 618 tree, node);
610 break; 619 break;
611 } 620 }
612 } 621 }
613 } 622 }
614 623
615 void AutomationInternalCustomBindings::SendTreeChangeEvent( 624 void AutomationInternalCustomBindings::SendTreeChangeEvent(
616 api::automation::TreeChangeType change_type, 625 api::automation::TreeChangeType change_type,
617 ui::AXTree* tree, 626 ui::AXTree* tree,
618 ui::AXNode* node) { 627 ui::AXNode* node) {
628 // Don't send tree change events when it's not the active profile.
629 if (!is_active_profile_)
630 return;
631
619 auto iter = axtree_to_tree_cache_map_.find(tree); 632 auto iter = axtree_to_tree_cache_map_.find(tree);
620 if (iter == axtree_to_tree_cache_map_.end()) 633 if (iter == axtree_to_tree_cache_map_.end())
621 return; 634 return;
622 635
623 int tree_id = iter->second->tree_id; 636 int tree_id = iter->second->tree_id;
624 637
625 v8::HandleScope handle_scope(GetIsolate()); 638 v8::HandleScope handle_scope(GetIsolate());
626 v8::Context::Scope context_scope(context()->v8_context()); 639 v8::Context::Scope context_scope(context()->v8_context());
627 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 3U)); 640 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 3U));
628 args->Set(0U, v8::Integer::New(GetIsolate(), tree_id)); 641 args->Set(0U, v8::Integer::New(GetIsolate(), tree_id));
629 args->Set(1U, v8::Integer::New(GetIsolate(), node->id())); 642 args->Set(1U, v8::Integer::New(GetIsolate(), node->id()));
630 args->Set(2U, CreateV8String(ToString(change_type))); 643 args->Set(2U, CreateV8String(ToString(change_type)));
631 context()->DispatchEvent("automationInternal.onTreeChange", args); 644 context()->DispatchEvent("automationInternal.onTreeChange", args);
632 } 645 }
633 646
634 } // namespace extensions 647 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698