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

Side by Side Diff: chrome/browser/browser_accessibility.h

Issue 1989009: Revert 46842 - Reimplement accessibility of web content by caching the entire... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 7 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
« no previous file with comments | « no previous file | chrome/browser/browser_accessibility.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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_BROWSER_ACCESSIBILITY_H_ 5 #ifndef CHROME_BROWSER_BROWSER_ACCESSIBILITY_H_
6 #define CHROME_BROWSER_BROWSER_ACCESSIBILITY_H_ 6 #define CHROME_BROWSER_BROWSER_ACCESSIBILITY_H_
7 7
8 #include <atlbase.h> 8 #include <atlbase.h>
9 #include <atlcom.h> 9 #include <atlcom.h>
10
10 #include <oleacc.h> 11 #include <oleacc.h>
11 12
12 #include <vector>
13
14 #include "base/scoped_comptr_win.h"
15 #include "chrome/browser/browser_accessibility_manager.h"
16 #include "ia2_api_all.h" // Generated
17 #include "webkit/glue/webaccessibility.h" 13 #include "webkit/glue/webaccessibility.h"
18 14
19 using webkit_glue::WebAccessibility; 15 using webkit_glue::WebAccessibility;
20 16
21 //////////////////////////////////////////////////////////////////////////////// 17 ////////////////////////////////////////////////////////////////////////////////
22 // 18 //
23 // BrowserAccessibility 19 // BrowserAccessibility
24 // 20 //
25 // Class implementing the MSAA IAccessible COM interface for the 21 // Class implementing the MSAA IAccessible COM interface for the
26 // Browser-Renderer communication of MSAA information, providing accessibility 22 // Browser-Renderer communication of MSAA information, providing accessibility
27 // to be used by screen readers and other assistive technology (AT). 23 // to be used by screen readers and other assistive technology (AT).
28 // 24 //
29 //////////////////////////////////////////////////////////////////////////////// 25 ////////////////////////////////////////////////////////////////////////////////
30 class ATL_NO_VTABLE BrowserAccessibility 26 class ATL_NO_VTABLE BrowserAccessibility
31 : public CComObjectRootEx<CComMultiThreadModel>, 27 : public CComObjectRootEx<CComMultiThreadModel>,
32 public IDispatchImpl<IAccessible2, &IID_IAccessible2, 28 public IDispatchImpl<IAccessible, &IID_IAccessible, &LIBID_Accessibility> {
33 &LIBID_IAccessible2Lib>,
34 public IServiceProvider {
35 public: 29 public:
36 BEGIN_COM_MAP(BrowserAccessibility) 30 BEGIN_COM_MAP(BrowserAccessibility)
37 COM_INTERFACE_ENTRY2(IDispatch, IAccessible2) 31 COM_INTERFACE_ENTRY2(IDispatch, IAccessible)
38 COM_INTERFACE_ENTRY2(IAccessible, IAccessible2) 32 COM_INTERFACE_ENTRY(IAccessible)
39 COM_INTERFACE_ENTRY(IAccessible2)
40 COM_INTERFACE_ENTRY(IServiceProvider)
41 END_COM_MAP() 33 END_COM_MAP()
42 34
43 BrowserAccessibility(); 35 BrowserAccessibility()
36 : iaccessible_id_(-1),
37 routing_id_(-1),
38 process_id_(-1),
39 parent_hwnd_(NULL),
40 instance_active_(false) {
41 }
44 42
45 virtual ~BrowserAccessibility(); 43 ~BrowserAccessibility() {}
46 44
47 // Initialize this object and mark it as active. 45 HRESULT Initialize(int iaccessible_id,
48 void Initialize(BrowserAccessibilityManager* manager, 46 int routing_id,
49 BrowserAccessibility* parent, 47 int process_id,
50 LONG child_id, 48 HWND parent_hwnd);
51 LONG index_in_parent,
52 const webkit_glue::WebAccessibility& src);
53 49
54 // Add a child of this object. 50 // Supported IAccessible methods.
55 void AddChild(BrowserAccessibility* child);
56
57 // Mark this object as inactive, and remove references to all children.
58 // When no other clients hold any references to this object it will be
59 // deleted, and in the meantime, calls to any methods will return E_FAIL.
60 void InactivateTree();
61
62 // Return true if this object is equal to or a descendant of |ancestor|.
63 bool IsDescendantOf(BrowserAccessibility* ancestor);
64
65 // Return the previous sibling of this object, or NULL if it's the first
66 // child of its parent.
67 BrowserAccessibility* GetPreviousSibling();
68
69 // Return the next sibling of this object, or NULL if it's the last child
70 // of its parent.
71 BrowserAccessibility* GetNextSibling();
72
73 // Accessors
74 LONG child_id() { return child_id_; }
75
76 // Add one to the reference count and return the same object. Always
77 // use this method when returning a BrowserAccessibility object as
78 // an output parameter to a COM interface, never use it otherwise.
79 BrowserAccessibility* NewReference();
80
81 //
82 // IAccessible methods.
83 //
84 51
85 // Performs the default action on a given object. 52 // Performs the default action on a given object.
86 STDMETHODIMP accDoDefaultAction(VARIANT var_id); 53 STDMETHODIMP accDoDefaultAction(VARIANT var_id);
87 54
88 // Retrieves the child element or child object at a given point on the screen. 55 // Retrieves the child element or child object at a given point on the screen.
89 STDMETHODIMP accHitTest(LONG x_left, LONG y_top, VARIANT* child); 56 STDMETHODIMP accHitTest(LONG x_left, LONG y_top, VARIANT* child);
90 57
91 // Retrieves the specified object's current screen location. 58 // Retrieves the specified object's current screen location.
92 STDMETHODIMP accLocation(LONG* x_left, 59 STDMETHODIMP accLocation(LONG* x_left,
93 LONG* y_top, 60 LONG* y_top,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 94
128 // Retrieves information describing the role of the specified object. 95 // Retrieves information describing the role of the specified object.
129 STDMETHODIMP get_accRole(VARIANT var_id, VARIANT* role); 96 STDMETHODIMP get_accRole(VARIANT var_id, VARIANT* role);
130 97
131 // Retrieves the current state of the specified object. 98 // Retrieves the current state of the specified object.
132 STDMETHODIMP get_accState(VARIANT var_id, VARIANT* state); 99 STDMETHODIMP get_accState(VARIANT var_id, VARIANT* state);
133 100
134 // Returns the value associated with the object. 101 // Returns the value associated with the object.
135 STDMETHODIMP get_accValue(VARIANT var_id, BSTR* value); 102 STDMETHODIMP get_accValue(VARIANT var_id, BSTR* value);
136 103
137 // Make an object take focus or extend the selection. 104 // Non-supported (by WebKit) IAccessible methods.
138 STDMETHODIMP accSelect(LONG flags_sel, VARIANT var_id); 105 STDMETHODIMP accSelect(LONG flags_sel, VARIANT var_id) { return E_NOTIMPL; }
139 106
140 STDMETHODIMP get_accHelpTopic(BSTR* help_file, 107 STDMETHODIMP get_accHelpTopic(BSTR* help_file,
141 VARIANT var_id, 108 VARIANT var_id,
142 LONG* topic_id); 109 LONG* topic_id);
143 110
144 STDMETHODIMP get_accSelection(VARIANT* selected); 111 STDMETHODIMP get_accSelection(VARIANT* selected);
145 112
146 // Deprecated methods, not implemented. 113 // Deprecated functions, not implemented here.
147 STDMETHODIMP put_accName(VARIANT var_id, BSTR put_name) { 114 STDMETHODIMP put_accName(VARIANT var_id, BSTR put_name) { return E_NOTIMPL; }
148 return E_NOTIMPL; 115 STDMETHODIMP put_accValue(VARIANT var_id, BSTR put_val) { return E_NOTIMPL; }
116
117 // Accessors/mutators.
118 HWND parent_hwnd() const { return parent_hwnd_;}
119
120 // Modify/retrieve the state (active/inactive) of this instance.
121 void set_instance_active(bool instance_active) {
122 instance_active_ = instance_active;
149 } 123 }
150 STDMETHODIMP put_accValue(VARIANT var_id, BSTR put_val) { 124 int instance_active() const { return instance_active_; }
151 return E_NOTIMPL; 125
126 int routing_id() const { return routing_id_; }
127
128 private:
129 // Creates a VARIANT that will reference the current accessibility
130 // object, not a child accessibility object.
131 VARIANT ChildSelfVariant() const {
132 VARIANT var;
133 V_VT(&var) = VT_I4;
134 V_I4(&var) = CHILDID_SELF;
135 return var;
152 } 136 }
153 137
154 // 138 // Wrapper functions, calling through to singleton instance of
155 // IAccessible2 methods. 139 // BrowserAccessibilityManager.
156 //
157 140
158 // Returns role from a longer list of possible roles. 141 // Creates an instance of BrowserAccessibility, initializes it and sets the
159 STDMETHODIMP role(LONG* role); 142 // [iaccessible_id] and [parent_id].
143 STDMETHODIMP CreateInstance(REFIID iid,
144 int iaccessible_id,
145 void** interface_ptr);
160 146
161 // Returns the state bitmask from a larger set of possible states. 147 // Composes and sends a message for requesting needed accessibility
162 STDMETHODIMP get_states(AccessibleStates* states); 148 // information. Unused LONG input parameters should be NULL, and the VARIANT
149 // an empty, valid instance.
150 bool RequestAccessibilityInfo(int iaccessible_func_id,
151 VARIANT var_id,
152 LONG input1, LONG input2);
163 153
164 // Get the unique ID of this object so that the client knows if it's 154 // Accessors.
165 // been encountered previously. 155 const WebAccessibility::OutParams& response();
166 STDMETHODIMP get_uniqueID(LONG* unique_id);
167
168 // Get the window handle of the enclosing window.
169 STDMETHODIMP get_windowHandle(HWND* window_handle);
170
171 // Get this object's index in its parent object.
172 STDMETHODIMP get_indexInParent(LONG* index_in_parent);
173
174 // IAccessible2 methods not implemented.
175 STDMETHODIMP get_extendedRole(BSTR* extended_role) {
176 return E_NOTIMPL;
177 }
178 STDMETHODIMP get_nRelations(LONG* n_relations) {
179 return E_NOTIMPL;
180 }
181 STDMETHODIMP get_relation(LONG relation_index,
182 IAccessibleRelation** relation) {
183 return E_NOTIMPL;
184 }
185 STDMETHODIMP get_relations(LONG max_relations,
186 IAccessibleRelation** relations,
187 LONG *n_relations) {
188 return E_NOTIMPL;
189 }
190 STDMETHODIMP scrollTo(enum IA2ScrollType scroll_type) {
191 return E_NOTIMPL;
192 }
193 STDMETHODIMP scrollToPoint(enum IA2CoordinateType coordinate_type,
194 LONG x,
195 LONG y) {
196 return E_NOTIMPL;
197 }
198 STDMETHODIMP get_groupPosition(LONG* group_level,
199 LONG* similar_items_in_group,
200 LONG* position_in_group) {
201 return E_NOTIMPL;
202 }
203 STDMETHODIMP get_localizedExtendedRole(BSTR* localized_extended_role) {
204 return E_NOTIMPL;
205 }
206 STDMETHODIMP get_nExtendedStates(LONG* n_extended_states) {
207 return E_NOTIMPL;
208 }
209 STDMETHODIMP get_extendedStates(LONG max_extended_states,
210 BSTR** extended_states,
211 LONG* n_extended_states) {
212 return E_NOTIMPL;
213 }
214 STDMETHODIMP get_localizedExtendedStates(LONG max_localized_extended_states,
215 BSTR** localized_extended_states,
216 LONG* n_localized_extended_states) {
217 return E_NOTIMPL;
218 }
219 STDMETHODIMP get_locale(IA2Locale* locale) {
220 return E_NOTIMPL;
221 }
222 STDMETHODIMP get_attributes(BSTR* attributes) {
223 return E_NOTIMPL;
224 }
225
226 //
227 // IServiceProvider methods.
228 //
229
230 STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void** object);
231
232 private:
233 // Many MSAA methods take a var_id parameter indicating that the operation
234 // should be performed on a particular child ID, rather than this object.
235 // This method tries to figure out the target object from |var_id| and
236 // returns a pointer to the target object if it exists, otherwise NULL.
237 // Does not return a new reference.
238 BrowserAccessibility* GetTargetFromChildID(const VARIANT& var_id);
239 156
240 // Returns a conversion from the BrowserAccessibilityRole (as defined in 157 // Returns a conversion from the BrowserAccessibilityRole (as defined in
241 // webkit/glue/webaccessibility.h) to an MSAA role. 158 // webkit/glue/webaccessibility.h) to an MSAA role.
242 LONG MSAARole(LONG browser_accessibility_role); 159 long MSAARole(long browser_accessibility_role);
243 160
244 // Returns a conversion from the BrowserAccessibilityState (as defined in 161 // Returns a conversion from the BrowserAccessibilityState (as defined in
245 // webkit/glue/webaccessibility.h) to MSAA states set. 162 // webkit/glue/webaccessibility.h) to MSAA states set.
246 LONG MSAAState(LONG browser_accessibility_state); 163 long MSAAState(long browser_accessibility_state);
247 164
248 // The manager of this tree of accessibility objects; needed for 165 // Id to uniquely distinguish this instance in the render-side caching,
249 // global operations like focus tracking. 166 // mapping it to the correct IAccessible on that side. Initialized to -1.
250 BrowserAccessibilityManager* manager_; 167 int iaccessible_id_;
251 // The parent of this object, may be NULL if we're the root object.
252 BrowserAccessibility* parent_;
253 // The ID of this object; globally unique within the browser process.
254 LONG child_id_;
255 // The index of this within its parent object.
256 LONG index_in_parent_;
257 // The ID of this object in the renderer process.
258 int32 renderer_id_;
259 168
260 // The children of this object. 169 // The unique ids of this IAccessible instance. Used to help
261 std::vector<BrowserAccessibility*> children_; 170 // BrowserAccessibilityManager instance retrieve the correct member
171 // variables for this process.
172 int routing_id_;
173 int process_id_;
262 174
263 // Accessibility metadata from the renderer, used to respond to MSAA 175 HWND parent_hwnd_;
264 // events.
265 string16 name_;
266 string16 value_;
267 string16 action_;
268 string16 description_;
269 string16 help_;
270 string16 shortcut_;
271 LONG role_;
272 LONG state_;
273 WebKit::WebRect location_;
274 176
275 // COM objects are reference-counted. When we're done with this object 177 // The instance should only be active if there is a non-terminated
276 // and it's removed from our accessibility tree, a client may still be 178 // RenderProcessHost associated with it. The BrowserAccessibilityManager keeps
277 // holding onto a pointer to this object, so we mark it as inactive 179 // track of this state, and sets it to false to disable all calls into the
278 // so that calls to any of this object's methods immediately return 180 // renderer from this instance of BroweserAccessibility, and have all
279 // failure. 181 // IAccessible functions return E_FAIL.
280 bool instance_active_; 182 bool instance_active_;
281 183
282 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibility); 184 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibility);
283 }; 185 };
284
285 #endif // CHROME_BROWSER_BROWSER_ACCESSIBILITY_H_ 186 #endif // CHROME_BROWSER_BROWSER_ACCESSIBILITY_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/browser_accessibility.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698