OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/browser/chromeos/arc/accessibility/ax_tree_source_arc.h" | 5 #include "chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "chrome/browser/extensions/api/automation_internal/automation_event_rou
ter.h" | 9 #include "chrome/browser/extensions/api/automation_internal/automation_event_rou
ter.h" |
10 #include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h" | 10 #include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 return false; | 108 return false; |
109 | 109 |
110 auto it = node->string_properties->find(prop); | 110 auto it = node->string_properties->find(prop); |
111 if (it == node->string_properties->end()) | 111 if (it == node->string_properties->end()) |
112 return false; | 112 return false; |
113 | 113 |
114 *out_value = it->second; | 114 *out_value = it->second; |
115 return true; | 115 return true; |
116 } | 116 } |
117 | 117 |
| 118 bool GetIntListProperty(arc::mojom::AccessibilityNodeInfoData* node, |
| 119 arc::mojom::AccessibilityIntListProperty prop, |
| 120 std::vector<int32_t>* out_value) { |
| 121 if (!node->int_list_properties) |
| 122 return false; |
| 123 |
| 124 auto it = node->int_list_properties->find(prop); |
| 125 if (it == node->int_list_properties->end()) |
| 126 return false; |
| 127 |
| 128 *out_value = it->second; |
| 129 return true; |
| 130 } |
| 131 |
| 132 bool GetStringListProperty(arc::mojom::AccessibilityNodeInfoData* node, |
| 133 arc::mojom::AccessibilityStringListProperty prop, |
| 134 std::vector<std::string>* out_value) { |
| 135 if (!node->string_list_properties) |
| 136 return false; |
| 137 |
| 138 auto it = node->string_list_properties->find(prop); |
| 139 if (it == node->string_list_properties->end()) |
| 140 return false; |
| 141 |
| 142 *out_value = it->second; |
| 143 return true; |
| 144 } |
| 145 |
118 void PopulateAXRole(arc::mojom::AccessibilityNodeInfoData* node, | 146 void PopulateAXRole(arc::mojom::AccessibilityNodeInfoData* node, |
119 ui::AXNodeData* out_data) { | 147 ui::AXNodeData* out_data) { |
120 std::string class_name; | 148 std::string class_name; |
121 GetStringProperty(node, arc::mojom::AccessibilityStringProperty::CLASS_NAME, | 149 GetStringProperty(node, arc::mojom::AccessibilityStringProperty::CLASS_NAME, |
122 &class_name); | 150 &class_name); |
123 | 151 |
124 #define MAP_ROLE(android_class_name, chrome_role) \ | 152 #define MAP_ROLE(android_class_name, chrome_role) \ |
125 if (class_name == android_class_name) { \ | 153 if (class_name == android_class_name) { \ |
126 out_data->role = chrome_role; \ | 154 out_data->role = chrome_role; \ |
127 return; \ | 155 return; \ |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 mojom::AccessibilityNodeInfoData* AXTreeSourceArc::GetNull() const { | 385 mojom::AccessibilityNodeInfoData* AXTreeSourceArc::GetNull() const { |
358 return nullptr; | 386 return nullptr; |
359 } | 387 } |
360 | 388 |
361 void AXTreeSourceArc::SerializeNode(mojom::AccessibilityNodeInfoData* node, | 389 void AXTreeSourceArc::SerializeNode(mojom::AccessibilityNodeInfoData* node, |
362 ui::AXNodeData* out_data) const { | 390 ui::AXNodeData* out_data) const { |
363 if (!node) | 391 if (!node) |
364 return; | 392 return; |
365 out_data->id = node->id; | 393 out_data->id = node->id; |
366 | 394 |
| 395 using AXIntListProperty = arc::mojom::AccessibilityIntListProperty; |
367 using AXIntProperty = arc::mojom::AccessibilityIntProperty; | 396 using AXIntProperty = arc::mojom::AccessibilityIntProperty; |
| 397 using AXStringListProperty = arc::mojom::AccessibilityStringListProperty; |
368 using AXStringProperty = arc::mojom::AccessibilityStringProperty; | 398 using AXStringProperty = arc::mojom::AccessibilityStringProperty; |
| 399 |
369 std::string text; | 400 std::string text; |
370 if (GetStringProperty(node, AXStringProperty::TEXT, &text)) | 401 if (GetStringProperty(node, AXStringProperty::TEXT, &text)) |
371 out_data->SetName(text); | 402 out_data->SetName(text); |
372 else if (GetStringProperty(node, AXStringProperty::CONTENT_DESCRIPTION, | 403 else if (GetStringProperty(node, AXStringProperty::CONTENT_DESCRIPTION, |
373 &text)) | 404 &text)) |
374 out_data->SetName(text); | 405 out_data->SetName(text); |
375 | 406 |
376 int32_t id = node->id; | 407 int32_t id = node->id; |
377 if (id == root_id_) | 408 if (id == root_id_) |
378 out_data->role = ui::AX_ROLE_ROOT_WEB_AREA; | 409 out_data->role = ui::AX_ROLE_ROOT_WEB_AREA; |
(...skipping 11 matching lines...) Expand all Loading... |
390 out_data->AddStringAttribute(ui::AX_ATTR_VALUE, text); | 421 out_data->AddStringAttribute(ui::AX_ATTR_VALUE, text); |
391 | 422 |
392 // Integer properties. | 423 // Integer properties. |
393 int32_t val; | 424 int32_t val; |
394 if (GetIntProperty(node, AXIntProperty::TEXT_SELECTION_START, &val) && | 425 if (GetIntProperty(node, AXIntProperty::TEXT_SELECTION_START, &val) && |
395 val >= 0) | 426 val >= 0) |
396 out_data->AddIntAttribute(ui::AX_ATTR_TEXT_SEL_START, val); | 427 out_data->AddIntAttribute(ui::AX_ATTR_TEXT_SEL_START, val); |
397 | 428 |
398 if (GetIntProperty(node, AXIntProperty::TEXT_SELECTION_END, &val) && val >= 0) | 429 if (GetIntProperty(node, AXIntProperty::TEXT_SELECTION_END, &val) && val >= 0) |
399 out_data->AddIntAttribute(ui::AX_ATTR_TEXT_SEL_END, val); | 430 out_data->AddIntAttribute(ui::AX_ATTR_TEXT_SEL_END, val); |
| 431 |
| 432 // Custom actions. |
| 433 std::vector<int32_t> custom_action_ids; |
| 434 if (GetIntListProperty(node, AXIntListProperty::CUSTOM_ACTION_IDS, |
| 435 &custom_action_ids)) { |
| 436 std::vector<std::string> custom_action_descriptions; |
| 437 |
| 438 CHECK(GetStringListProperty( |
| 439 node, AXStringListProperty::CUSTOM_ACTION_DESCRIPTIONS, |
| 440 &custom_action_descriptions)); |
| 441 CHECK(!custom_action_ids.empty()); |
| 442 CHECK_EQ(custom_action_ids.size(), custom_action_descriptions.size()); |
| 443 |
| 444 out_data->AddAction(ui::AX_ACTION_CUSTOM_ACTION); |
| 445 out_data->AddIntListAttribute(ui::AX_ATTR_CUSTOM_ACTION_IDS, |
| 446 custom_action_ids); |
| 447 out_data->AddStringListAttribute(ui::AX_ATTR_CUSTOM_ACTION_DESCRIPTIONS, |
| 448 custom_action_descriptions); |
| 449 } |
400 } | 450 } |
401 | 451 |
402 void AXTreeSourceArc::PerformAction(const ui::AXActionData& data) { | 452 void AXTreeSourceArc::PerformAction(const ui::AXActionData& data) { |
403 delegate_->OnAction(data); | 453 delegate_->OnAction(data); |
404 } | 454 } |
405 | 455 |
406 void AXTreeSourceArc::Reset() { | 456 void AXTreeSourceArc::Reset() { |
407 tree_map_.clear(); | 457 tree_map_.clear(); |
408 parent_map_.clear(); | 458 parent_map_.clear(); |
409 current_tree_serializer_.reset(new AXTreeArcSerializer(this)); | 459 current_tree_serializer_.reset(new AXTreeArcSerializer(this)); |
410 root_id_ = -1; | 460 root_id_ = -1; |
411 focused_node_id_ = -1; | 461 focused_node_id_ = -1; |
412 extensions::AutomationEventRouter* router = | 462 extensions::AutomationEventRouter* router = |
413 extensions::AutomationEventRouter::GetInstance(); | 463 extensions::AutomationEventRouter::GetInstance(); |
414 if (!router) | 464 if (!router) |
415 return; | 465 return; |
416 | 466 |
417 router->DispatchTreeDestroyedEvent(tree_id(), nullptr); | 467 router->DispatchTreeDestroyedEvent(tree_id(), nullptr); |
418 } | 468 } |
419 | 469 |
420 } // namespace arc | 470 } // namespace arc |
OLD | NEW |