Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(987)

Side by Side Diff: chrome/browser/accessibility/browser_accessibility_manager.h

Issue 3582015: Revert 61704 - Make BrowserAccessibilityManager cross platform. Step 2. In Pr... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ 5 #ifndef CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_
6 #define CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ 6 #define CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_
7 #pragma once 7 #pragma once
8 8
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 10
11 #if defined(OS_WIN) 11 #if defined(OS_WIN)
12 #include <oleacc.h> 12 #include <oleacc.h>
13 #endif 13 #endif
14 14
15 #include <vector> 15 #include <vector>
16 16
17 #include "base/hash_tables.h"
18 #include "base/scoped_ptr.h"
19 #include "chrome/common/render_messages_params.h"
20 #include "gfx/native_widget_types.h" 17 #include "gfx/native_widget_types.h"
21 #include "webkit/glue/webaccessibility.h" 18 #include "webkit/glue/webaccessibility.h"
22 19
23 20 struct ViewHostMsg_AccessibilityNotification_Params;
24 class BrowserAccessibility;
25 #if defined(OS_WIN)
26 class BrowserAccessibilityManagerWin;
27 #endif
28 21
29 using webkit_glue::WebAccessibility; 22 using webkit_glue::WebAccessibility;
30 23
31 // Class that can perform actions on behalf of the BrowserAccessibilityManager. 24 // Class that can perform actions on behalf of the BrowserAccessibilityManager.
32 class BrowserAccessibilityDelegate { 25 class BrowserAccessibilityDelegate {
33 public: 26 public:
34 virtual ~BrowserAccessibilityDelegate() {} 27 virtual ~BrowserAccessibilityDelegate() {}
35 virtual void SetAccessibilityFocus(int acc_obj_id) = 0; 28 virtual void SetAccessibilityFocus(int acc_obj_id) = 0;
36 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0; 29 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0;
37 virtual bool HasFocus() = 0; 30 virtual bool HasFocus() = 0;
38 }; 31 };
39 32
40 class BrowserAccessibilityFactory {
41 public:
42 virtual ~BrowserAccessibilityFactory() {}
43
44 // Create an instance of BrowserAccessibility and return a new
45 // reference to it.
46 virtual BrowserAccessibility* Create();
47 };
48
49 // Manages a tree of BrowserAccessibility objects. 33 // Manages a tree of BrowserAccessibility objects.
50 class BrowserAccessibilityManager { 34 class BrowserAccessibilityManager {
51 public: 35 public:
52 // Creates the platform specific BrowserAccessibilityManager. Ownership passes 36 // Creates the platform specific BrowserAccessibilityManager. Ownership passes
53 // to the caller. 37 // to the caller.
54 static BrowserAccessibilityManager* Create( 38 static BrowserAccessibilityManager* Create(
55 gfx::NativeView parent_view, 39 gfx::NativeWindow parent_window,
56 const WebAccessibility& src, 40 const webkit_glue::WebAccessibility& src,
57 BrowserAccessibilityDelegate* delegate, 41 BrowserAccessibilityDelegate* delegate);
58 BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory());
59 42
60 virtual ~BrowserAccessibilityManager(); 43 virtual ~BrowserAccessibilityManager();
61 44
62 virtual void NotifyAccessibilityEvent(
63 ViewHostMsg_AccessibilityNotification_Params::NotificationType n,
64 BrowserAccessibility* node) = 0;
65
66 // Returns the next unique child id.
67 static int32 GetNextChildID();
68
69 // Return a pointer to the root of the tree, does not make a new reference.
70 BrowserAccessibility* GetRoot();
71
72 // Removes the BrowserAccessibility child_id from the manager.
73 void Remove(int32 child_id);
74
75 // Return a pointer to the object corresponding to the given child_id,
76 // does not make a new reference.
77 BrowserAccessibility* GetFromChildID(int32 child_id);
78
79 // Called to notify the accessibility manager that its associated native 45 // Called to notify the accessibility manager that its associated native
80 // view got focused. 46 // window got focused.
81 void GotFocus(); 47 virtual void GotFocus() = 0;
82
83 // Tell the renderer to set focus to this node.
84 void SetFocus(const BrowserAccessibility& node);
85
86 // Tell the renderer to do the default action for this node.
87 void DoDefaultAction(const BrowserAccessibility& node);
88 48
89 // Called when the renderer process has notified us of about tree changes. 49 // Called when the renderer process has notified us of about tree changes.
90 // Send a notification to MSAA clients of the change. 50 // Send a notification to MSAA clients of the change.
91 void OnAccessibilityNotifications( 51 void OnAccessibilityNotifications(
92 const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params); 52 const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params);
93 53
94 gfx::NativeView GetParentView(); 54 gfx::NativeWindow GetParentWindow();
95 55
96 #if defined(OS_WIN) 56 #if defined(OS_WIN)
97 BrowserAccessibilityManagerWin* toBrowserAccessibilityManagerWin(); 57 virtual IAccessible* GetRootAccessible() = 0;
98 #endif 58 #endif
99 59
100 // Return the object that has focus, if it's a descandant of the 60 protected:
101 // given root (inclusive). Does not make a new reference. 61 explicit BrowserAccessibilityManager(gfx::NativeWindow parent_window);
102 BrowserAccessibility* GetFocus(BrowserAccessibility* root);
103 62
104 protected: 63 virtual void OnAccessibilityObjectStateChange(
105 BrowserAccessibilityManager( 64 const webkit_glue::WebAccessibility& acc_obj) = 0;
106 gfx::NativeView parent_view, 65 virtual void OnAccessibilityObjectChildrenChange(
107 const WebAccessibility& src, 66 const webkit_glue::WebAccessibility& acc_obj) = 0;
108 BrowserAccessibilityDelegate* delegate, 67 virtual void OnAccessibilityObjectFocusChange(
109 BrowserAccessibilityFactory* factory); 68 const webkit_glue::WebAccessibility& acc_obj) = 0;
69 virtual void OnAccessibilityObjectLoadComplete(
70 const webkit_glue::WebAccessibility& acc_obj) = 0;
71 virtual void OnAccessibilityObjectValueChange(
72 const webkit_glue::WebAccessibility& acc_obj) = 0;
73 virtual void OnAccessibilityObjectTextChange(
74 const webkit_glue::WebAccessibility& acc_obj) = 0;
110 75
111 private: 76 private:
112 void OnAccessibilityObjectStateChange( 77 // The parent window.
113 const WebAccessibility& acc_obj); 78 gfx::NativeWindow parent_window_;
114 void OnAccessibilityObjectChildrenChange(
115 const WebAccessibility& acc_obj);
116 void OnAccessibilityObjectFocusChange(
117 const WebAccessibility& acc_obj);
118 void OnAccessibilityObjectLoadComplete(
119 const WebAccessibility& acc_obj);
120 void OnAccessibilityObjectValueChange(
121 const WebAccessibility& acc_obj);
122 void OnAccessibilityObjectTextChange(
123 const WebAccessibility& acc_obj);
124
125 // Recursively compare the IDs of our subtree to a new subtree received
126 // from the renderer and return true if their IDs match exactly.
127 bool CanModifyTreeInPlace(
128 BrowserAccessibility* current_root,
129 const WebAccessibility& new_root);
130
131 // Recursively modify a subtree (by reinitializing) to match a new
132 // subtree received from the renderer process. Should only be called
133 // if CanModifyTreeInPlace returned true.
134 void ModifyTreeInPlace(
135 BrowserAccessibility* current_root,
136 const WebAccessibility& new_root);
137
138 // Update the accessibility tree with an updated WebAccessibility tree or
139 // subtree received from the renderer process. First attempts to modify
140 // the tree in place, and if that fails, replaces the entire subtree.
141 // Returns the updated node or NULL if no node was updated.
142 BrowserAccessibility* UpdateTree(
143 const WebAccessibility& acc_obj);
144
145 // Recursively build a tree of BrowserAccessibility objects from
146 // the WebAccessibility tree received from the renderer process.
147 BrowserAccessibility* CreateAccessibilityTree(
148 BrowserAccessibility* parent,
149 int child_id,
150 const WebAccessibility& src,
151 int index_in_parent);
152
153 protected:
154 // The next unique id for a BrowserAccessibility instance.
155 static int32 next_child_id_;
156
157 // The parent view.
158 gfx::NativeView parent_view_;
159
160 // The object that can perform actions on our behalf.
161 BrowserAccessibilityDelegate* delegate_;
162
163 // Factory to create BrowserAccessibility objects (for dependency injection).
164 scoped_ptr<BrowserAccessibilityFactory> factory_;
165
166 // The root of the tree of IAccessible objects and the element that
167 // currently has focus, if any.
168 BrowserAccessibility* root_;
169 BrowserAccessibility* focus_;
170
171 // A mapping from the IDs of objects in the renderer, to the child IDs
172 // we use internally here.
173 base::hash_map<int, int32> renderer_id_to_child_id_map_;
174
175 // A mapping from child IDs to BrowserAccessibility objects.
176 base::hash_map<int32, BrowserAccessibility*> child_id_map_;
177 79
178 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager); 80 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager);
179 }; 81 };
180 82
181 #endif // CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_ 83 #endif // CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_
OLDNEW
« no previous file with comments | « chrome/browser/accessibility/browser_accessibility.cc ('k') | chrome/browser/accessibility/browser_accessibility_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698