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_tree.h" | 16 #include "ui/accessibility/ax_serializable_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; |
25 #if defined(OS_ANDROID) | 26 #if defined(OS_ANDROID) |
26 class BrowserAccessibilityManagerAndroid; | 27 class BrowserAccessibilityManagerAndroid; |
27 #endif | 28 #endif |
28 #if defined(OS_WIN) | 29 #if defined(OS_WIN) |
29 class BrowserAccessibilityManagerWin; | 30 class BrowserAccessibilityManagerWin; |
30 #endif | 31 #endif |
31 | 32 |
32 // For testing. | 33 // For testing. |
33 CONTENT_EXPORT ui::AXTreeUpdate MakeAXTreeUpdate( | 34 CONTENT_EXPORT ui::AXTreeUpdate MakeAXTreeUpdate( |
34 const ui::AXNodeData& node, | 35 const ui::AXNodeData& node, |
35 const ui::AXNodeData& node2 = ui::AXNodeData(), | 36 const ui::AXNodeData& node2 = ui::AXNodeData(), |
36 const ui::AXNodeData& node3 = ui::AXNodeData(), | 37 const ui::AXNodeData& node3 = ui::AXNodeData(), |
37 const ui::AXNodeData& node4 = ui::AXNodeData(), | 38 const ui::AXNodeData& node4 = ui::AXNodeData(), |
38 const ui::AXNodeData& node5 = ui::AXNodeData(), | 39 const ui::AXNodeData& node5 = ui::AXNodeData(), |
39 const ui::AXNodeData& node6 = ui::AXNodeData(), | 40 const ui::AXNodeData& node6 = ui::AXNodeData(), |
40 const ui::AXNodeData& node7 = ui::AXNodeData(), | 41 const ui::AXNodeData& node7 = ui::AXNodeData(), |
41 const ui::AXNodeData& node8 = ui::AXNodeData(), | 42 const ui::AXNodeData& node8 = ui::AXNodeData(), |
42 const ui::AXNodeData& node9 = ui::AXNodeData()); | 43 const ui::AXNodeData& node9 = ui::AXNodeData()); |
43 | 44 |
44 // Class that can perform actions on behalf of the BrowserAccessibilityManager. | 45 // 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. |
45 class CONTENT_EXPORT BrowserAccessibilityDelegate { | 52 class CONTENT_EXPORT BrowserAccessibilityDelegate { |
46 public: | 53 public: |
47 virtual ~BrowserAccessibilityDelegate() {} | 54 virtual ~BrowserAccessibilityDelegate() {} |
48 virtual void AccessibilitySetFocus(int acc_obj_id) = 0; | 55 virtual void AccessibilitySetFocus(int acc_obj_id) = 0; |
49 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0; | 56 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0; |
50 virtual void AccessibilityShowMenu(const gfx::Point& global_point) = 0; | 57 virtual void AccessibilityShowMenu(const gfx::Point& global_point) = 0; |
51 virtual void AccessibilityScrollToMakeVisible( | 58 virtual void AccessibilityScrollToMakeVisible( |
52 int acc_obj_id, const gfx::Rect& subfocus) = 0; | 59 int acc_obj_id, const gfx::Rect& subfocus) = 0; |
53 virtual void AccessibilityScrollToPoint( | 60 virtual void AccessibilityScrollToPoint( |
54 int acc_obj_id, const gfx::Point& point) = 0; | 61 int acc_obj_id, const gfx::Point& point) = 0; |
55 virtual void AccessibilitySetTextSelection( | 62 virtual void AccessibilitySetTextSelection( |
56 int acc_obj_id, int start_offset, int end_offset) = 0; | 63 int acc_obj_id, int start_offset, int end_offset) = 0; |
57 virtual bool AccessibilityViewHasFocus() const = 0; | 64 virtual bool AccessibilityViewHasFocus() const = 0; |
58 virtual gfx::Rect AccessibilityGetViewBounds() const = 0; | 65 virtual gfx::Rect AccessibilityGetViewBounds() const = 0; |
59 virtual gfx::Point AccessibilityOriginInScreen( | 66 virtual gfx::Point AccessibilityOriginInScreen( |
60 const gfx::Rect& bounds) const = 0; | 67 const gfx::Rect& bounds) const = 0; |
61 virtual void AccessibilityHitTest( | 68 virtual void AccessibilityHitTest( |
62 const gfx::Point& point) = 0; | 69 const gfx::Point& point) = 0; |
63 virtual void AccessibilityFatalError() = 0; | 70 virtual void AccessibilityFatalError() = 0; |
64 virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() = 0; | 71 virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() = 0; |
65 virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() = 0; | 72 virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() = 0; |
| 73 virtual BrowserAccessibilityManager* AccessibilityGetChildFrame( |
| 74 int64 frame_tree_node_id) = 0; |
| 75 virtual BrowserAccessibilityManager* AccessibilityGetParentFrame() = 0; |
66 }; | 76 }; |
67 | 77 |
68 class CONTENT_EXPORT BrowserAccessibilityFactory { | 78 class CONTENT_EXPORT BrowserAccessibilityFactory { |
69 public: | 79 public: |
70 virtual ~BrowserAccessibilityFactory() {} | 80 virtual ~BrowserAccessibilityFactory() {} |
71 | 81 |
72 // Create an instance of BrowserAccessibility and return a new | 82 // Create an instance of BrowserAccessibility and return a new |
73 // reference to it. | 83 // reference to it. |
74 virtual BrowserAccessibility* Create(); | 84 virtual BrowserAccessibility* Create(); |
75 }; | 85 }; |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 virtual void OnNodeChanged(ui::AXNode* node) OVERRIDE; | 192 virtual void OnNodeChanged(ui::AXNode* node) OVERRIDE; |
183 virtual void OnNodeCreationFinished(ui::AXNode* node) OVERRIDE; | 193 virtual void OnNodeCreationFinished(ui::AXNode* node) OVERRIDE; |
184 virtual void OnNodeChangeFinished(ui::AXNode* node) OVERRIDE; | 194 virtual void OnNodeChangeFinished(ui::AXNode* node) OVERRIDE; |
185 virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE {} | 195 virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE {} |
186 | 196 |
187 BrowserAccessibilityDelegate* delegate() const { return delegate_; } | 197 BrowserAccessibilityDelegate* delegate() const { return delegate_; } |
188 void set_delegate(BrowserAccessibilityDelegate* delegate) { | 198 void set_delegate(BrowserAccessibilityDelegate* delegate) { |
189 delegate_ = delegate; | 199 delegate_ = delegate; |
190 } | 200 } |
191 | 201 |
| 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 |
192 protected: | 209 protected: |
193 BrowserAccessibilityManager( | 210 BrowserAccessibilityManager( |
194 BrowserAccessibilityDelegate* delegate, | 211 BrowserAccessibilityDelegate* delegate, |
195 BrowserAccessibilityFactory* factory); | 212 BrowserAccessibilityFactory* factory); |
196 | 213 |
197 BrowserAccessibilityManager( | 214 BrowserAccessibilityManager( |
198 const ui::AXTreeUpdate& initial_tree, | 215 const ui::AXTreeUpdate& initial_tree, |
199 BrowserAccessibilityDelegate* delegate, | 216 BrowserAccessibilityDelegate* delegate, |
200 BrowserAccessibilityFactory* factory); | 217 BrowserAccessibilityFactory* factory); |
201 | 218 |
(...skipping 16 matching lines...) Expand all Loading... |
218 // touch event was within the bounds of the currently focused object. | 235 // touch event was within the bounds of the currently focused object. |
219 // Otherwise we'll just wait to see if focus changes. | 236 // Otherwise we'll just wait to see if focus changes. |
220 OSK_ALLOWED_WITHIN_FOCUSED_OBJECT, | 237 OSK_ALLOWED_WITHIN_FOCUSED_OBJECT, |
221 | 238 |
222 // Focus has changed within a tab that's already visible. Allow the | 239 // Focus has changed within a tab that's already visible. Allow the |
223 // on-screen keyboard to show anytime that a touch event leads to an | 240 // on-screen keyboard to show anytime that a touch event leads to an |
224 // editable text control getting focus. | 241 // editable text control getting focus. |
225 OSK_ALLOWED | 242 OSK_ALLOWED |
226 }; | 243 }; |
227 | 244 |
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 | |
243 protected: | 245 protected: |
244 // The object that can perform actions on our behalf. | 246 // The object that can perform actions on our behalf. |
245 BrowserAccessibilityDelegate* delegate_; | 247 BrowserAccessibilityDelegate* delegate_; |
246 | 248 |
247 // Factory to create BrowserAccessibility objects (for dependency injection). | 249 // Factory to create BrowserAccessibility objects (for dependency injection). |
248 scoped_ptr<BrowserAccessibilityFactory> factory_; | 250 scoped_ptr<BrowserAccessibilityFactory> factory_; |
249 | 251 |
250 // The underlying tree of accessibility objects. | 252 // The underlying tree of accessibility objects. |
251 scoped_ptr<ui::AXTree> tree_; | 253 scoped_ptr<ui::AXSerializableTree> tree_; |
252 | 254 |
253 // The node that currently has focus. | 255 // The node that currently has focus. |
254 ui::AXNode* focus_; | 256 ui::AXNode* focus_; |
255 | 257 |
256 // A mapping from a node id to its wrapper of type BrowserAccessibility. | 258 // A mapping from a node id to its wrapper of type BrowserAccessibility. |
257 base::hash_map<int32, BrowserAccessibility*> id_wrapper_map_; | 259 base::hash_map<int32, BrowserAccessibility*> id_wrapper_map_; |
258 | 260 |
259 // The on-screen keyboard state. | 261 // The on-screen keyboard state. |
260 OnScreenKeyboardState osk_state_; | 262 OnScreenKeyboardState osk_state_; |
261 | 263 |
262 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager); | 264 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager); |
263 }; | 265 }; |
264 | 266 |
265 } // namespace content | 267 } // namespace content |
266 | 268 |
267 #endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ | 269 #endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ |
OLD | NEW |