OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ | 5 #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ |
6 #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ | 6 #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
13 #include "content/common/content_export.h" | 13 #include "content/common/content_export.h" |
14 #include "third_party/WebKit/public/web/WebAXEnums.h" | 14 #include "third_party/WebKit/public/web/WebAXEnums.h" |
15 #include "ui/accessibility/ax_node_data.h" | 15 #include "ui/accessibility/ax_node_data.h" |
16 #include "ui/accessibility/ax_serializable_tree.h" | 16 #include "ui/accessibility/ax_tree.h" |
17 #include "ui/accessibility/ax_tree_update.h" | 17 #include "ui/accessibility/ax_tree_update.h" |
18 #include "ui/gfx/native_widget_types.h" | 18 #include "ui/gfx/native_widget_types.h" |
19 | 19 |
20 struct AccessibilityHostMsg_EventParams; | 20 struct AccessibilityHostMsg_EventParams; |
21 struct AccessibilityHostMsg_LocationChangeParams; | 21 struct AccessibilityHostMsg_LocationChangeParams; |
22 | 22 |
23 namespace content { | 23 namespace content { |
24 class BrowserAccessibility; | 24 class BrowserAccessibility; |
25 class BrowserAccessibilityManager; | |
26 #if defined(OS_ANDROID) | 25 #if defined(OS_ANDROID) |
27 class BrowserAccessibilityManagerAndroid; | 26 class BrowserAccessibilityManagerAndroid; |
28 #endif | 27 #endif |
29 #if defined(OS_WIN) | 28 #if defined(OS_WIN) |
30 class BrowserAccessibilityManagerWin; | 29 class BrowserAccessibilityManagerWin; |
31 #endif | 30 #endif |
32 | 31 |
33 // For testing. | 32 // For testing. |
34 CONTENT_EXPORT ui::AXTreeUpdate MakeAXTreeUpdate( | 33 CONTENT_EXPORT ui::AXTreeUpdate MakeAXTreeUpdate( |
35 const ui::AXNodeData& node, | 34 const ui::AXNodeData& node, |
36 const ui::AXNodeData& node2 = ui::AXNodeData(), | 35 const ui::AXNodeData& node2 = ui::AXNodeData(), |
37 const ui::AXNodeData& node3 = ui::AXNodeData(), | 36 const ui::AXNodeData& node3 = ui::AXNodeData(), |
38 const ui::AXNodeData& node4 = ui::AXNodeData(), | 37 const ui::AXNodeData& node4 = ui::AXNodeData(), |
39 const ui::AXNodeData& node5 = ui::AXNodeData(), | 38 const ui::AXNodeData& node5 = ui::AXNodeData(), |
40 const ui::AXNodeData& node6 = ui::AXNodeData(), | 39 const ui::AXNodeData& node6 = ui::AXNodeData(), |
41 const ui::AXNodeData& node7 = ui::AXNodeData(), | 40 const ui::AXNodeData& node7 = ui::AXNodeData(), |
42 const ui::AXNodeData& node8 = ui::AXNodeData(), | 41 const ui::AXNodeData& node8 = ui::AXNodeData(), |
43 const ui::AXNodeData& node9 = ui::AXNodeData()); | 42 const ui::AXNodeData& node9 = ui::AXNodeData()); |
44 | 43 |
45 // Class that can perform actions on behalf of the BrowserAccessibilityManager. | 44 // Class that can perform actions on behalf of the BrowserAccessibilityManager. |
46 // Note: BrowserAccessibilityManager should never cache any of the return | |
47 // values from any of these interfaces, especially those that return pointers. | |
48 // They may only be valid within this call stack. That policy eliminates any | |
49 // concerns about ownership and lifecycle issues; none of these interfaces | |
50 // transfer ownership and no return values are guaranteed to be valid outside | |
51 // of the current call stack. | |
52 class CONTENT_EXPORT BrowserAccessibilityDelegate { | 45 class CONTENT_EXPORT BrowserAccessibilityDelegate { |
53 public: | 46 public: |
54 virtual ~BrowserAccessibilityDelegate() {} | 47 virtual ~BrowserAccessibilityDelegate() {} |
55 virtual void AccessibilitySetFocus(int acc_obj_id) = 0; | 48 virtual void AccessibilitySetFocus(int acc_obj_id) = 0; |
56 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0; | 49 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0; |
57 virtual void AccessibilityShowMenu(const gfx::Point& global_point) = 0; | 50 virtual void AccessibilityShowMenu(const gfx::Point& global_point) = 0; |
58 virtual void AccessibilityScrollToMakeVisible( | 51 virtual void AccessibilityScrollToMakeVisible( |
59 int acc_obj_id, const gfx::Rect& subfocus) = 0; | 52 int acc_obj_id, const gfx::Rect& subfocus) = 0; |
60 virtual void AccessibilityScrollToPoint( | 53 virtual void AccessibilityScrollToPoint( |
61 int acc_obj_id, const gfx::Point& point) = 0; | 54 int acc_obj_id, const gfx::Point& point) = 0; |
62 virtual void AccessibilitySetTextSelection( | 55 virtual void AccessibilitySetTextSelection( |
63 int acc_obj_id, int start_offset, int end_offset) = 0; | 56 int acc_obj_id, int start_offset, int end_offset) = 0; |
64 virtual bool AccessibilityViewHasFocus() const = 0; | 57 virtual bool AccessibilityViewHasFocus() const = 0; |
65 virtual gfx::Rect AccessibilityGetViewBounds() const = 0; | 58 virtual gfx::Rect AccessibilityGetViewBounds() const = 0; |
66 virtual gfx::Point AccessibilityOriginInScreen( | 59 virtual gfx::Point AccessibilityOriginInScreen( |
67 const gfx::Rect& bounds) const = 0; | 60 const gfx::Rect& bounds) const = 0; |
68 virtual void AccessibilityHitTest( | 61 virtual void AccessibilityHitTest( |
69 const gfx::Point& point) = 0; | 62 const gfx::Point& point) = 0; |
70 virtual void AccessibilityFatalError() = 0; | 63 virtual void AccessibilityFatalError() = 0; |
71 virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() = 0; | 64 virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() = 0; |
72 virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() = 0; | 65 virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() = 0; |
73 virtual BrowserAccessibilityManager* AccessibilityGetChildFrame( | |
74 int64 frame_tree_node_id) = 0; | |
75 virtual BrowserAccessibilityManager* AccessibilityGetParentFrame() = 0; | |
76 }; | 66 }; |
77 | 67 |
78 class CONTENT_EXPORT BrowserAccessibilityFactory { | 68 class CONTENT_EXPORT BrowserAccessibilityFactory { |
79 public: | 69 public: |
80 virtual ~BrowserAccessibilityFactory() {} | 70 virtual ~BrowserAccessibilityFactory() {} |
81 | 71 |
82 // Create an instance of BrowserAccessibility and return a new | 72 // Create an instance of BrowserAccessibility and return a new |
83 // reference to it. | 73 // reference to it. |
84 virtual BrowserAccessibility* Create(); | 74 virtual BrowserAccessibility* Create(); |
85 }; | 75 }; |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 virtual void OnNodeChanged(ui::AXNode* node) OVERRIDE; | 182 virtual void OnNodeChanged(ui::AXNode* node) OVERRIDE; |
193 virtual void OnNodeCreationFinished(ui::AXNode* node) OVERRIDE; | 183 virtual void OnNodeCreationFinished(ui::AXNode* node) OVERRIDE; |
194 virtual void OnNodeChangeFinished(ui::AXNode* node) OVERRIDE; | 184 virtual void OnNodeChangeFinished(ui::AXNode* node) OVERRIDE; |
195 virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE {} | 185 virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE {} |
196 | 186 |
197 BrowserAccessibilityDelegate* delegate() const { return delegate_; } | 187 BrowserAccessibilityDelegate* delegate() const { return delegate_; } |
198 void set_delegate(BrowserAccessibilityDelegate* delegate) { | 188 void set_delegate(BrowserAccessibilityDelegate* delegate) { |
199 delegate_ = delegate; | 189 delegate_ = delegate; |
200 } | 190 } |
201 | 191 |
202 // Get a snapshot of the current tree as an AXTreeUpdate. | |
203 ui::AXTreeUpdate SnapshotAXTreeForTesting(); | |
204 | |
205 // Frame tree support. | |
206 void SetChildFrameTreeNodeId(int32 node_id, int64 child_frame_tree_node_id); | |
207 BrowserAccessibility* GetCrossFrameParent(); | |
208 | |
209 protected: | 192 protected: |
210 BrowserAccessibilityManager( | 193 BrowserAccessibilityManager( |
211 BrowserAccessibilityDelegate* delegate, | 194 BrowserAccessibilityDelegate* delegate, |
212 BrowserAccessibilityFactory* factory); | 195 BrowserAccessibilityFactory* factory); |
213 | 196 |
214 BrowserAccessibilityManager( | 197 BrowserAccessibilityManager( |
215 const ui::AXTreeUpdate& initial_tree, | 198 const ui::AXTreeUpdate& initial_tree, |
216 BrowserAccessibilityDelegate* delegate, | 199 BrowserAccessibilityDelegate* delegate, |
217 BrowserAccessibilityFactory* factory); | 200 BrowserAccessibilityFactory* factory); |
218 | 201 |
(...skipping 16 matching lines...) Expand all Loading... |
235 // touch event was within the bounds of the currently focused object. | 218 // touch event was within the bounds of the currently focused object. |
236 // Otherwise we'll just wait to see if focus changes. | 219 // Otherwise we'll just wait to see if focus changes. |
237 OSK_ALLOWED_WITHIN_FOCUSED_OBJECT, | 220 OSK_ALLOWED_WITHIN_FOCUSED_OBJECT, |
238 | 221 |
239 // Focus has changed within a tab that's already visible. Allow the | 222 // Focus has changed within a tab that's already visible. Allow the |
240 // on-screen keyboard to show anytime that a touch event leads to an | 223 // on-screen keyboard to show anytime that a touch event leads to an |
241 // editable text control getting focus. | 224 // editable text control getting focus. |
242 OSK_ALLOWED | 225 OSK_ALLOWED |
243 }; | 226 }; |
244 | 227 |
| 228 // Update a set of nodes using data received from the renderer |
| 229 // process. |
| 230 bool UpdateNodes(const std::vector<ui::AXNodeData>& nodes); |
| 231 |
| 232 // Update one node from the tree using data received from the renderer |
| 233 // process. Returns true on success, false on fatal error. |
| 234 bool UpdateNode(const ui::AXNodeData& src); |
| 235 |
| 236 void SetRoot(BrowserAccessibility* root); |
| 237 |
| 238 BrowserAccessibility* CreateNode( |
| 239 BrowserAccessibility* parent, |
| 240 int32 id, |
| 241 int32 index_in_parent); |
| 242 |
245 protected: | 243 protected: |
246 // The object that can perform actions on our behalf. | 244 // The object that can perform actions on our behalf. |
247 BrowserAccessibilityDelegate* delegate_; | 245 BrowserAccessibilityDelegate* delegate_; |
248 | 246 |
249 // Factory to create BrowserAccessibility objects (for dependency injection). | 247 // Factory to create BrowserAccessibility objects (for dependency injection). |
250 scoped_ptr<BrowserAccessibilityFactory> factory_; | 248 scoped_ptr<BrowserAccessibilityFactory> factory_; |
251 | 249 |
252 // The underlying tree of accessibility objects. | 250 // The underlying tree of accessibility objects. |
253 scoped_ptr<ui::AXSerializableTree> tree_; | 251 scoped_ptr<ui::AXTree> tree_; |
254 | 252 |
255 // The node that currently has focus. | 253 // The node that currently has focus. |
256 ui::AXNode* focus_; | 254 ui::AXNode* focus_; |
257 | 255 |
258 // A mapping from a node id to its wrapper of type BrowserAccessibility. | 256 // A mapping from a node id to its wrapper of type BrowserAccessibility. |
259 base::hash_map<int32, BrowserAccessibility*> id_wrapper_map_; | 257 base::hash_map<int32, BrowserAccessibility*> id_wrapper_map_; |
260 | 258 |
261 // The on-screen keyboard state. | 259 // The on-screen keyboard state. |
262 OnScreenKeyboardState osk_state_; | 260 OnScreenKeyboardState osk_state_; |
263 | 261 |
264 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager); | 262 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager); |
265 }; | 263 }; |
266 | 264 |
267 } // namespace content | 265 } // namespace content |
268 | 266 |
269 #endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ | 267 #endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ |
OLD | NEW |