Chromium Code Reviews| 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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 109 RouteFunction(#FN, \ | 109 RouteFunction(#FN, \ |
| 110 base::Bind(&AutomationInternalCustomBindings::FN, \ | 110 base::Bind(&AutomationInternalCustomBindings::FN, \ |
| 111 base::Unretained(this))) | 111 base::Unretained(this))) |
| 112 | 112 |
| 113 ROUTE_FUNCTION(IsInteractPermitted); | 113 ROUTE_FUNCTION(IsInteractPermitted); |
| 114 ROUTE_FUNCTION(GetSchemaAdditions); | 114 ROUTE_FUNCTION(GetSchemaAdditions); |
| 115 ROUTE_FUNCTION(GetRoutingID); | 115 ROUTE_FUNCTION(GetRoutingID); |
| 116 ROUTE_FUNCTION(StartCachingAccessibilityTrees); | 116 ROUTE_FUNCTION(StartCachingAccessibilityTrees); |
| 117 ROUTE_FUNCTION(DestroyAccessibilityTree); | 117 ROUTE_FUNCTION(DestroyAccessibilityTree); |
| 118 ROUTE_FUNCTION(GetRootID); | 118 ROUTE_FUNCTION(GetRootID); |
| 119 ROUTE_FUNCTION(GetDocURL); | |
|
David Tseng
2015/10/19 18:21:38
I would like to see us to re-use get*Attribute her
| |
| 120 ROUTE_FUNCTION(GetDocTitle); | |
| 121 ROUTE_FUNCTION(GetDocLoaded); | |
| 122 ROUTE_FUNCTION(GetDocLoadingProgress); | |
| 123 ROUTE_FUNCTION(GetAnchorObjectID); | |
| 124 ROUTE_FUNCTION(GetAnchorOffset); | |
| 125 ROUTE_FUNCTION(GetFocusObjectID); | |
| 126 ROUTE_FUNCTION(GetFocusOffset); | |
| 119 ROUTE_FUNCTION(GetParentID); | 127 ROUTE_FUNCTION(GetParentID); |
| 120 ROUTE_FUNCTION(GetChildCount); | 128 ROUTE_FUNCTION(GetChildCount); |
| 121 ROUTE_FUNCTION(GetChildIDAtIndex); | 129 ROUTE_FUNCTION(GetChildIDAtIndex); |
| 122 ROUTE_FUNCTION(GetIndexInParent); | 130 ROUTE_FUNCTION(GetIndexInParent); |
| 123 ROUTE_FUNCTION(GetState); | 131 ROUTE_FUNCTION(GetState); |
| 124 ROUTE_FUNCTION(GetRole); | 132 ROUTE_FUNCTION(GetRole); |
| 125 ROUTE_FUNCTION(GetLocation); | 133 ROUTE_FUNCTION(GetLocation); |
| 126 ROUTE_FUNCTION(GetStringAttribute); | 134 ROUTE_FUNCTION(GetStringAttribute); |
| 127 ROUTE_FUNCTION(GetBoolAttribute); | 135 ROUTE_FUNCTION(GetBoolAttribute); |
| 128 ROUTE_FUNCTION(GetIntAttribute); | 136 ROUTE_FUNCTION(GetIntAttribute); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 230 ui::AXNode* root = cache->tree.root(); | 238 ui::AXNode* root = cache->tree.root(); |
| 231 | 239 |
| 232 // The root can be null if this is called from an onTreeChange callback. | 240 // The root can be null if this is called from an onTreeChange callback. |
| 233 if (!root) | 241 if (!root) |
| 234 return; | 242 return; |
| 235 | 243 |
| 236 int root_id = root->id(); | 244 int root_id = root->id(); |
| 237 args.GetReturnValue().Set(v8::Integer::New(GetIsolate(), root_id)); | 245 args.GetReturnValue().Set(v8::Integer::New(GetIsolate(), root_id)); |
| 238 } | 246 } |
| 239 | 247 |
| 248 void AutomationInternalCustomBindings::GetDocURL( | |
| 249 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 250 if (args.Length() != 1 || !args[0]->IsNumber()) { | |
| 251 ThrowInvalidArgumentsException(args); | |
| 252 return; | |
| 253 } | |
| 254 | |
| 255 int tree_id = args[0]->Int32Value(); | |
| 256 const auto iter = tree_id_to_tree_cache_map_.find(tree_id); | |
| 257 if (iter == tree_id_to_tree_cache_map_.end()) | |
| 258 return; | |
| 259 | |
| 260 TreeCache* cache = iter->second; | |
| 261 args.GetReturnValue().Set( | |
| 262 v8::String::NewFromUtf8(GetIsolate(), cache->tree.data().url.c_str())); | |
| 263 } | |
| 264 | |
| 265 void AutomationInternalCustomBindings::GetDocTitle( | |
| 266 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 267 if (args.Length() != 1 || !args[0]->IsNumber()) { | |
| 268 ThrowInvalidArgumentsException(args); | |
| 269 return; | |
| 270 } | |
| 271 | |
| 272 int tree_id = args[0]->Int32Value(); | |
| 273 const auto iter = tree_id_to_tree_cache_map_.find(tree_id); | |
| 274 if (iter == tree_id_to_tree_cache_map_.end()) | |
| 275 return; | |
| 276 | |
| 277 TreeCache* cache = iter->second; | |
| 278 args.GetReturnValue().Set( | |
| 279 v8::String::NewFromUtf8(GetIsolate(), cache->tree.data().title.c_str())); | |
| 280 } | |
| 281 | |
| 282 void AutomationInternalCustomBindings::GetDocLoaded( | |
| 283 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 284 if (args.Length() != 1 || !args[0]->IsNumber()) { | |
| 285 ThrowInvalidArgumentsException(args); | |
| 286 return; | |
| 287 } | |
| 288 | |
| 289 int tree_id = args[0]->Int32Value(); | |
| 290 const auto iter = tree_id_to_tree_cache_map_.find(tree_id); | |
| 291 if (iter == tree_id_to_tree_cache_map_.end()) | |
| 292 return; | |
| 293 | |
| 294 TreeCache* cache = iter->second; | |
| 295 args.GetReturnValue().Set( | |
| 296 v8::Boolean::New(GetIsolate(), cache->tree.data().loaded)); | |
| 297 } | |
| 298 | |
| 299 void AutomationInternalCustomBindings::GetDocLoadingProgress( | |
| 300 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 301 if (args.Length() != 1 || !args[0]->IsNumber()) { | |
| 302 ThrowInvalidArgumentsException(args); | |
| 303 return; | |
| 304 } | |
| 305 | |
| 306 int tree_id = args[0]->Int32Value(); | |
| 307 const auto iter = tree_id_to_tree_cache_map_.find(tree_id); | |
| 308 if (iter == tree_id_to_tree_cache_map_.end()) | |
| 309 return; | |
| 310 | |
| 311 TreeCache* cache = iter->second; | |
| 312 args.GetReturnValue().Set( | |
| 313 v8::Number::New(GetIsolate(), cache->tree.data().loading_progress)); | |
| 314 } | |
| 315 | |
| 316 void AutomationInternalCustomBindings::GetAnchorObjectID( | |
| 317 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 318 if (args.Length() != 1 || !args[0]->IsNumber()) { | |
| 319 ThrowInvalidArgumentsException(args); | |
| 320 return; | |
| 321 } | |
| 322 | |
| 323 int tree_id = args[0]->Int32Value(); | |
| 324 const auto iter = tree_id_to_tree_cache_map_.find(tree_id); | |
| 325 if (iter == tree_id_to_tree_cache_map_.end()) | |
| 326 return; | |
| 327 | |
| 328 TreeCache* cache = iter->second; | |
| 329 args.GetReturnValue().Set( | |
| 330 v8::Number::New(GetIsolate(), cache->tree.data().sel_anchor_object_id)); | |
| 331 } | |
| 332 | |
| 333 void AutomationInternalCustomBindings::GetAnchorOffset( | |
| 334 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 335 if (args.Length() != 1 || !args[0]->IsNumber()) { | |
| 336 ThrowInvalidArgumentsException(args); | |
| 337 return; | |
| 338 } | |
| 339 | |
| 340 int tree_id = args[0]->Int32Value(); | |
| 341 const auto iter = tree_id_to_tree_cache_map_.find(tree_id); | |
| 342 if (iter == tree_id_to_tree_cache_map_.end()) | |
| 343 return; | |
| 344 | |
| 345 TreeCache* cache = iter->second; | |
| 346 args.GetReturnValue().Set( | |
| 347 v8::Number::New(GetIsolate(), cache->tree.data().sel_anchor_offset)); | |
| 348 } | |
| 349 | |
| 350 void AutomationInternalCustomBindings::GetFocusObjectID( | |
| 351 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 352 if (args.Length() != 1 || !args[0]->IsNumber()) { | |
| 353 ThrowInvalidArgumentsException(args); | |
| 354 return; | |
| 355 } | |
| 356 | |
| 357 int tree_id = args[0]->Int32Value(); | |
| 358 const auto iter = tree_id_to_tree_cache_map_.find(tree_id); | |
| 359 if (iter == tree_id_to_tree_cache_map_.end()) | |
| 360 return; | |
| 361 | |
| 362 TreeCache* cache = iter->second; | |
| 363 args.GetReturnValue().Set( | |
| 364 v8::Number::New(GetIsolate(), cache->tree.data().sel_focus_object_id)); | |
| 365 } | |
| 366 | |
| 367 void AutomationInternalCustomBindings::GetFocusOffset( | |
| 368 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 369 if (args.Length() != 1 || !args[0]->IsNumber()) { | |
| 370 ThrowInvalidArgumentsException(args); | |
| 371 return; | |
| 372 } | |
| 373 | |
| 374 int tree_id = args[0]->Int32Value(); | |
| 375 const auto iter = tree_id_to_tree_cache_map_.find(tree_id); | |
| 376 if (iter == tree_id_to_tree_cache_map_.end()) | |
| 377 return; | |
| 378 | |
| 379 TreeCache* cache = iter->second; | |
| 380 args.GetReturnValue().Set( | |
| 381 v8::Number::New(GetIsolate(), cache->tree.data().sel_focus_offset)); | |
| 382 } | |
| 383 | |
| 240 void AutomationInternalCustomBindings::GetParentID( | 384 void AutomationInternalCustomBindings::GetParentID( |
| 241 const v8::FunctionCallbackInfo<v8::Value>& args) { | 385 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 242 ui::AXNode* node = nullptr; | 386 ui::AXNode* node = nullptr; |
| 243 if (!GetNodeHelper(args, nullptr, &node)) | 387 if (!GetNodeHelper(args, nullptr, &node)) |
| 244 return; | 388 return; |
| 245 | 389 |
| 246 if (!node->parent()) | 390 if (!node->parent()) |
| 247 return; | 391 return; |
| 248 | 392 |
| 249 int parent_id = node->parent()->id(); | 393 int parent_id = node->parent()->id(); |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 554 event_params->Set(CreateV8String("treeID"), | 698 event_params->Set(CreateV8String("treeID"), |
| 555 v8::Integer::New(GetIsolate(), params.tree_id)); | 699 v8::Integer::New(GetIsolate(), params.tree_id)); |
| 556 event_params->Set(CreateV8String("targetID"), | 700 event_params->Set(CreateV8String("targetID"), |
| 557 v8::Integer::New(GetIsolate(), params.id)); | 701 v8::Integer::New(GetIsolate(), params.id)); |
| 558 event_params->Set(CreateV8String("eventType"), | 702 event_params->Set(CreateV8String("eventType"), |
| 559 CreateV8String(ToString(params.event_type))); | 703 CreateV8String(ToString(params.event_type))); |
| 560 args->Set(0U, event_params); | 704 args->Set(0U, event_params); |
| 561 context()->DispatchEvent("automationInternal.onAccessibilityEvent", args); | 705 context()->DispatchEvent("automationInternal.onAccessibilityEvent", args); |
| 562 } | 706 } |
| 563 | 707 |
| 708 void AutomationInternalCustomBindings::OnTreeDataChanged(ui::AXTree* tree) {} | |
| 709 | |
| 564 void AutomationInternalCustomBindings::OnNodeWillBeDeleted(ui::AXTree* tree, | 710 void AutomationInternalCustomBindings::OnNodeWillBeDeleted(ui::AXTree* tree, |
| 565 ui::AXNode* node) { | 711 ui::AXNode* node) { |
| 566 SendTreeChangeEvent( | 712 SendTreeChangeEvent( |
| 567 api::automation::TREE_CHANGE_TYPE_NODEREMOVED, | 713 api::automation::TREE_CHANGE_TYPE_NODEREMOVED, |
| 568 tree, node); | 714 tree, node); |
| 569 } | 715 } |
| 570 | 716 |
| 571 void AutomationInternalCustomBindings::OnSubtreeWillBeDeleted( | 717 void AutomationInternalCustomBindings::OnSubtreeWillBeDeleted( |
| 572 ui::AXTree* tree, | 718 ui::AXTree* tree, |
| 573 ui::AXNode* node) { | 719 ui::AXNode* node) { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 637 v8::HandleScope handle_scope(GetIsolate()); | 783 v8::HandleScope handle_scope(GetIsolate()); |
| 638 v8::Context::Scope context_scope(context()->v8_context()); | 784 v8::Context::Scope context_scope(context()->v8_context()); |
| 639 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 3U)); | 785 v8::Local<v8::Array> args(v8::Array::New(GetIsolate(), 3U)); |
| 640 args->Set(0U, v8::Integer::New(GetIsolate(), tree_id)); | 786 args->Set(0U, v8::Integer::New(GetIsolate(), tree_id)); |
| 641 args->Set(1U, v8::Integer::New(GetIsolate(), node->id())); | 787 args->Set(1U, v8::Integer::New(GetIsolate(), node->id())); |
| 642 args->Set(2U, CreateV8String(ToString(change_type))); | 788 args->Set(2U, CreateV8String(ToString(change_type))); |
| 643 context()->DispatchEvent("automationInternal.onTreeChange", args); | 789 context()->DispatchEvent("automationInternal.onTreeChange", args); |
| 644 } | 790 } |
| 645 | 791 |
| 646 } // namespace extensions | 792 } // namespace extensions |
| OLD | NEW |