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/arc_accessibility_helper_bri
dge.h" | 5 #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bri
dge.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" | 10 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 if (!wm_helper) | 53 if (!wm_helper) |
54 return; | 54 return; |
55 | 55 |
56 aura::Window* focused_window = wm_helper->GetFocusedWindow(); | 56 aura::Window* focused_window = wm_helper->GetFocusedWindow(); |
57 if (!focused_window) | 57 if (!focused_window) |
58 return; | 58 return; |
59 | 59 |
60 aura::Window* toplevel_window = focused_window->GetToplevelWindow(); | 60 aura::Window* toplevel_window = focused_window->GetToplevelWindow(); |
61 | 61 |
62 gfx::Rect bounds_in_screen = gfx::ScaleToEnclosingRect( | 62 gfx::Rect bounds_in_screen = gfx::ScaleToEnclosingRect( |
63 node_data->boundsInScreen, | 63 node_data->bounds_in_screen, |
64 1.0f / toplevel_window->layer()->device_scale_factor()); | 64 1.0f / toplevel_window->layer()->device_scale_factor()); |
65 | 65 |
66 accessibility_manager->OnViewFocusedInArc(bounds_in_screen); | 66 accessibility_manager->OnViewFocusedInArc(bounds_in_screen); |
67 } | 67 } |
68 | 68 |
69 arc::mojom::AccessibilityFilterType GetFilterType() { | 69 arc::mojom::AccessibilityFilterType GetFilterType() { |
70 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 70 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
71 chromeos::switches::kEnableChromeVoxArcSupport)) { | 71 chromeos::switches::kEnableChromeVoxArcSupport)) { |
72 return arc::mojom::AccessibilityFilterType::ALL; | 72 return arc::mojom::AccessibilityFilterType::ALL; |
73 } | 73 } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 } | 151 } |
152 | 152 |
153 void ArcAccessibilityHelperBridge::OnAccessibilityEvent( | 153 void ArcAccessibilityHelperBridge::OnAccessibilityEvent( |
154 mojom::AccessibilityEventDataPtr event_data) { | 154 mojom::AccessibilityEventDataPtr event_data) { |
155 arc::mojom::AccessibilityFilterType filter_type = GetFilterType(); | 155 arc::mojom::AccessibilityFilterType filter_type = GetFilterType(); |
156 | 156 |
157 if (filter_type == arc::mojom::AccessibilityFilterType::ALL || | 157 if (filter_type == arc::mojom::AccessibilityFilterType::ALL || |
158 filter_type == | 158 filter_type == |
159 arc::mojom::AccessibilityFilterType::WHITELISTED_PACKAGE_NAME) { | 159 arc::mojom::AccessibilityFilterType::WHITELISTED_PACKAGE_NAME) { |
160 // Get the task id for this package which requires inspecting node data. | 160 // Get the task id for this package which requires inspecting node data. |
161 if (event_data->nodeData.empty()) | 161 if (event_data->node_data.empty()) |
162 return; | 162 return; |
163 | 163 |
164 arc::mojom::AccessibilityNodeInfoData* node = event_data->nodeData[0].get(); | 164 arc::mojom::AccessibilityNodeInfoData* node = |
165 if (!node->stringProperties) | 165 event_data->node_data[0].get(); |
| 166 if (!node->string_properties) |
166 return; | 167 return; |
167 | 168 |
168 auto package_it = node->stringProperties->find( | 169 auto package_it = node->string_properties->find( |
169 arc::mojom::AccessibilityStringProperty::PACKAGE_NAME); | 170 arc::mojom::AccessibilityStringProperty::PACKAGE_NAME); |
170 if (package_it == node->stringProperties->end()) | 171 if (package_it == node->string_properties->end()) |
171 return; | 172 return; |
172 | 173 |
173 auto task_ids_it = package_name_to_task_ids_.find(package_it->second); | 174 auto task_ids_it = package_name_to_task_ids_.find(package_it->second); |
174 if (task_ids_it == package_name_to_task_ids_.end()) | 175 if (task_ids_it == package_name_to_task_ids_.end()) |
175 return; | 176 return; |
176 | 177 |
177 const auto& task_ids = task_ids_it->second; | 178 const auto& task_ids = task_ids_it->second; |
178 | 179 |
179 // Reject updates to non-current task ids. We can do this currently | 180 // Reject updates to non-current task ids. We can do this currently |
180 // because all events include the entire tree. | 181 // because all events include the entire tree. |
181 if (task_ids.count(current_task_id_) == 0) | 182 if (task_ids.count(current_task_id_) == 0) |
182 return; | 183 return; |
183 | 184 |
184 auto tree_it = package_name_to_tree_.find(package_it->second); | 185 auto tree_it = package_name_to_tree_.find(package_it->second); |
185 AXTreeSourceArc* tree_source; | 186 AXTreeSourceArc* tree_source; |
186 if (tree_it == package_name_to_tree_.end()) { | 187 if (tree_it == package_name_to_tree_.end()) { |
187 package_name_to_tree_[package_it->second].reset( | 188 package_name_to_tree_[package_it->second].reset( |
188 new AXTreeSourceArc(this)); | 189 new AXTreeSourceArc(this)); |
189 tree_source = package_name_to_tree_[package_it->second].get(); | 190 tree_source = package_name_to_tree_[package_it->second].get(); |
190 } else { | 191 } else { |
191 tree_source = tree_it->second.get(); | 192 tree_source = tree_it->second.get(); |
192 } | 193 } |
193 tree_source->NotifyAccessibilityEvent(event_data.get()); | 194 tree_source->NotifyAccessibilityEvent(event_data.get()); |
194 return; | 195 return; |
195 } | 196 } |
196 | 197 |
197 if (event_data->eventType != arc::mojom::AccessibilityEventType::VIEW_FOCUSED) | 198 if (event_data->event_type != |
| 199 arc::mojom::AccessibilityEventType::VIEW_FOCUSED) |
198 return; | 200 return; |
199 | 201 |
200 CHECK_EQ(1U, event_data.get()->nodeData.size()); | 202 CHECK_EQ(1U, event_data.get()->node_data.size()); |
201 DispatchFocusChange(event_data.get()->nodeData[0].get()); | 203 DispatchFocusChange(event_data.get()->node_data[0].get()); |
202 } | 204 } |
203 | 205 |
204 void ArcAccessibilityHelperBridge::OnAction( | 206 void ArcAccessibilityHelperBridge::OnAction( |
205 const ui::AXActionData& data) const { | 207 const ui::AXActionData& data) const { |
206 arc::mojom::AccessibilityActionType mojo_action; | 208 arc::mojom::AccessibilityActionType mojo_action; |
207 switch (data.action) { | 209 switch (data.action) { |
208 case ui::AX_ACTION_DO_DEFAULT: | 210 case ui::AX_ACTION_DO_DEFAULT: |
209 mojo_action = arc::mojom::AccessibilityActionType::CLICK; | 211 mojo_action = arc::mojom::AccessibilityActionType::CLICK; |
210 break; | 212 break; |
211 default: | 213 default: |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 break; | 264 break; |
263 } | 265 } |
264 } | 266 } |
265 } | 267 } |
266 | 268 |
267 void ArcAccessibilityHelperBridge::OnTaskSetActive(int32_t task_id) { | 269 void ArcAccessibilityHelperBridge::OnTaskSetActive(int32_t task_id) { |
268 current_task_id_ = task_id; | 270 current_task_id_ = task_id; |
269 } | 271 } |
270 | 272 |
271 } // namespace arc | 273 } // namespace arc |
OLD | NEW |