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

Side by Side Diff: content/browser/accessibility/browser_accessibility_com_win.h

Issue 2864953002: Split out the MSCOM pieces of BrowserAccessibilityWin into a seperate class. (Closed)
Patch Set: Created 3 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_WIN_H_ 5 #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_COM_WIN_H_
6 #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_WIN_H_ 6 #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_COM_WIN_H_
7 7
8 #include <atlbase.h> 8 #include <atlbase.h>
9 #include <atlcom.h> 9 #include <atlcom.h>
10 #include <oleacc.h> 10 #include <oleacc.h>
11 #include <stddef.h> 11 #include <stddef.h>
12 #include <stdint.h> 12 #include <stdint.h>
13 #include <vector>
14
13 #include <UIAutomationCore.h> 15 #include <UIAutomationCore.h>
14 16
15 #include <vector>
16
17 #include "base/compiler_specific.h" 17 #include "base/compiler_specific.h"
18 #include "base/gtest_prod_util.h" 18 #include "base/gtest_prod_util.h"
19 #include "base/macros.h" 19 #include "base/macros.h"
20 #include "content/browser/accessibility/browser_accessibility.h" 20 #include "content/browser/accessibility/browser_accessibility.h"
21 #include "content/browser/accessibility/browser_accessibility_win.h"
21 #include "content/common/content_export.h" 22 #include "content/common/content_export.h"
22 #include "third_party/iaccessible2/ia2_api_all.h" 23 #include "third_party/iaccessible2/ia2_api_all.h"
23 #include "third_party/isimpledom/ISimpleDOMDocument.h" 24 #include "third_party/isimpledom/ISimpleDOMDocument.h"
24 #include "third_party/isimpledom/ISimpleDOMNode.h" 25 #include "third_party/isimpledom/ISimpleDOMNode.h"
25 #include "third_party/isimpledom/ISimpleDOMText.h" 26 #include "third_party/isimpledom/ISimpleDOMText.h"
26 #include "ui/accessibility/platform/ax_platform_node_win.h" 27 #include "ui/accessibility/platform/ax_platform_node_win.h"
27 28
29 namespace ui {
30 enum TextBoundaryDirection;
31 enum TextBoundaryType;
32 }
33
28 namespace content { 34 namespace content {
35 class BrowserAccessibilityWin;
29 class BrowserAccessibilityRelation; 36 class BrowserAccessibilityRelation;
30 37
31 //////////////////////////////////////////////////////////////////////////////// 38 ////////////////////////////////////////////////////////////////////////////////
32 // 39 //
33 // BrowserAccessibilityWin 40 // BrowserAccessibilityComWin
34 // 41 //
35 // Class implementing the windows accessible interface for the Browser-Renderer 42 // Class implementing the windows accessible interface used by screen readers
36 // communication of accessibility information, providing accessibility 43 // and other assistive technology (AT). It typically is created and owned by
37 // to be used by screen readers and other assistive technology (AT). 44 // a BrowserAccessibilityCom |owner_|. When this owner goes away, the
dmazzoni 2017/05/08 04:45:24 BrowserAccessibilityCom -> BrowserAccessibilityWin
dougt 2017/05/08 16:53:36 Done.
45 // BrowserAccessibilityComWin objects may continue to exists being held onto by
dmazzoni 2017/05/08 04:45:24 Mention due to reference counting
dougt 2017/05/08 16:53:36 Done.
46 // MSCOM. However, such objects are invalid and should gracefully fail.
dmazzoni 2017/05/08 04:45:24 Should return E_FAIL from everything when instance
dougt 2017/05/08 16:53:36 Done.
38 // 47 //
39 //////////////////////////////////////////////////////////////////////////////// 48 ////////////////////////////////////////////////////////////////////////////////
40 class __declspec(uuid("562072fe-3390-43b1-9e2c-dd4118f5ac79")) 49 class __declspec(uuid("562072fe-3390-43b1-9e2c-dd4118f5ac79"))
41 BrowserAccessibilityWin 50 BrowserAccessibilityComWin : public ui::AXPlatformNodeWin,
42 : public BrowserAccessibility, 51 public IAccessibleApplication,
43 public CComObjectRootEx<CComMultiThreadModel>, 52 public IAccessibleHyperlink,
44 public IDispatchImpl<IAccessible2, &IID_IAccessible2, 53 public IAccessibleHypertext,
45 &LIBID_IAccessible2Lib>, 54 public IAccessibleImage,
46 public IAccessibleApplication, 55 public IAccessibleTable,
47 public IAccessibleHyperlink, 56 public IAccessibleTable2,
48 public IAccessibleHypertext, 57 public IAccessibleTableCell,
49 public IAccessibleImage, 58 public IAccessibleValue,
50 public IAccessibleTable, 59 public ISimpleDOMDocument,
51 public IAccessibleTable2, 60 public ISimpleDOMNode,
52 public IAccessibleTableCell, 61 public ISimpleDOMText,
53 public IAccessibleValue, 62 public IAccessibleEx,
54 public IServiceProvider, 63 public IRawElementProviderSimple {
55 public ISimpleDOMDocument,
56 public ISimpleDOMNode,
57 public ISimpleDOMText,
58 public IAccessibleEx,
59 public IRawElementProviderSimple {
60 public: 64 public:
61 BEGIN_COM_MAP(BrowserAccessibilityWin) 65 BEGIN_COM_MAP(BrowserAccessibilityComWin)
62 COM_INTERFACE_ENTRY2(IDispatch, IAccessible2) 66 COM_INTERFACE_ENTRY(IAccessibleAction)
63 COM_INTERFACE_ENTRY(IAccessible) 67 COM_INTERFACE_ENTRY(IAccessibleApplication)
64 COM_INTERFACE_ENTRY(IAccessible2) 68 COM_INTERFACE_ENTRY(IAccessibleEx)
65 COM_INTERFACE_ENTRY(IAccessibleAction) 69 COM_INTERFACE_ENTRY(IAccessibleHyperlink)
66 COM_INTERFACE_ENTRY(IAccessibleApplication) 70 COM_INTERFACE_ENTRY(IAccessibleHypertext)
67 COM_INTERFACE_ENTRY(IAccessibleEx) 71 COM_INTERFACE_ENTRY(IAccessibleImage)
68 COM_INTERFACE_ENTRY(IAccessibleHyperlink) 72 COM_INTERFACE_ENTRY(IAccessibleTable)
69 COM_INTERFACE_ENTRY(IAccessibleHypertext) 73 COM_INTERFACE_ENTRY(IAccessibleTable2)
70 COM_INTERFACE_ENTRY(IAccessibleImage) 74 COM_INTERFACE_ENTRY(IAccessibleTableCell)
71 COM_INTERFACE_ENTRY(IAccessibleTable) 75 COM_INTERFACE_ENTRY(IAccessibleValue)
72 COM_INTERFACE_ENTRY(IAccessibleTable2) 76 COM_INTERFACE_ENTRY(IRawElementProviderSimple)
73 COM_INTERFACE_ENTRY(IAccessibleTableCell) 77 COM_INTERFACE_ENTRY(ISimpleDOMDocument)
74 COM_INTERFACE_ENTRY(IAccessibleText) 78 COM_INTERFACE_ENTRY(ISimpleDOMNode)
75 COM_INTERFACE_ENTRY(IAccessibleValue) 79 COM_INTERFACE_ENTRY(ISimpleDOMText)
76 COM_INTERFACE_ENTRY(IRawElementProviderSimple) 80 COM_INTERFACE_ENTRY_CHAIN(ui::AXPlatformNodeWin)
77 COM_INTERFACE_ENTRY(IServiceProvider)
78 COM_INTERFACE_ENTRY(ISimpleDOMDocument)
79 COM_INTERFACE_ENTRY(ISimpleDOMNode)
80 COM_INTERFACE_ENTRY(ISimpleDOMText)
81 END_COM_MAP() 81 END_COM_MAP()
82 82
83 // Represents a non-static text node in IAccessibleHypertext. This character 83 // Represents a non-static text node in IAccessibleHypertext. This character
84 // is embedded in the response to IAccessibleText::get_text, indicating the 84 // is embedded in the response to IAccessibleText::get_text, indicating the
85 // position where a non-static text child object appears. 85 // position where a non-static text child object appears.
86 CONTENT_EXPORT static const base::char16 kEmbeddedCharacter; 86 CONTENT_EXPORT static const base::char16 kEmbeddedCharacter;
87 87
88 // Mappings from roles and states to human readable strings. Initialize 88 // Mappings from roles and states to human readable strings. Initialize
89 // with |InitializeStringMaps|. 89 // with |InitializeStringMaps|.
90 static std::map<int32_t, base::string16> role_string_map; 90 static std::map<int32_t, base::string16> role_string_map;
91 static std::map<int32_t, base::string16> state_string_map; 91 static std::map<int32_t, base::string16> state_string_map;
92 92
93 CONTENT_EXPORT BrowserAccessibilityWin(); 93 CONTENT_EXPORT BrowserAccessibilityComWin();
94 94 CONTENT_EXPORT ~BrowserAccessibilityComWin() override;
95 CONTENT_EXPORT ~BrowserAccessibilityWin() override;
96 95
97 // Called after an atomic tree update completes. See 96 // Called after an atomic tree update completes. See
98 // BrowserAccessibilityManagerWin::OnAtomicUpdateFinished for more 97 // BrowserAccessibilityManagerWin::OnAtomicUpdateFinished for more
99 // details on what these do. 98 // details on what these do.
100 CONTENT_EXPORT void UpdateStep1ComputeWinAttributes(); 99 CONTENT_EXPORT void UpdateStep1ComputeWinAttributes();
101 CONTENT_EXPORT void UpdateStep2ComputeHypertext(); 100 CONTENT_EXPORT void UpdateStep2ComputeHypertext();
102 CONTENT_EXPORT void UpdateStep3FireEvents(bool is_subtree_creation); 101 CONTENT_EXPORT void UpdateStep3FireEvents(bool is_subtree_creation);
103 102
104 // This is used to call UpdateStep1ComputeWinAttributes, ... above when
105 // a node needs to be updated for some other reason other than via
106 // OnAtomicUpdateFinished.
107 CONTENT_EXPORT void UpdatePlatformAttributes() override;
108
109 //
110 // BrowserAccessibility methods.
111 //
112 CONTENT_EXPORT void OnSubtreeWillBeDeleted() override;
113 CONTENT_EXPORT void NativeAddReference() override;
114 CONTENT_EXPORT void NativeReleaseReference() override;
115 CONTENT_EXPORT bool IsNative() const override;
116 CONTENT_EXPORT void OnLocationChanged() override;
117
118 // 103 //
119 // IAccessible methods. 104 // IAccessible methods.
120 // 105 //
121 106
122 // Performs the default action on a given object. 107 // Performs the default action on a given object.
123 CONTENT_EXPORT STDMETHODIMP accDoDefaultAction(VARIANT var_id) override; 108 CONTENT_EXPORT STDMETHODIMP accDoDefaultAction(VARIANT var_id) override;
124 109
125 // Retrieves the child element or child object at a given point on the screen. 110 // Retrieves the child element or child object at a given point on the screen.
126 CONTENT_EXPORT STDMETHODIMP 111 CONTENT_EXPORT STDMETHODIMP accHitTest(LONG x_left,
127 accHitTest(LONG x_left, LONG y_top, VARIANT* child) override; 112 LONG y_top,
113 VARIANT* child) override;
128 114
129 // Retrieves the specified object's current screen location. 115 // Retrieves the specified object's current screen location.
130 CONTENT_EXPORT STDMETHODIMP accLocation(LONG* x_left, 116 CONTENT_EXPORT STDMETHODIMP accLocation(LONG* x_left,
131 LONG* y_top, 117 LONG* y_top,
132 LONG* width, 118 LONG* width,
133 LONG* height, 119 LONG* height,
134 VARIANT var_id) override; 120 VARIANT var_id) override;
135 121
136 // Traverses to another UI element and retrieves the object. 122 // Traverses to another UI element and retrieves the object.
137 CONTENT_EXPORT STDMETHODIMP 123 CONTENT_EXPORT STDMETHODIMP accNavigate(LONG nav_dir,
138 accNavigate(LONG nav_dir, VARIANT start, VARIANT* end) override; 124 VARIANT start,
125 VARIANT* end) override;
139 126
140 // Retrieves an IDispatch interface pointer for the specified child. 127 // Retrieves an IDispatch interface pointer for the specified child.
141 CONTENT_EXPORT STDMETHODIMP 128 CONTENT_EXPORT STDMETHODIMP get_accChild(VARIANT var_child,
142 get_accChild(VARIANT var_child, IDispatch** disp_child) override; 129 IDispatch** disp_child) override;
143 130
144 // Retrieves the number of accessible children. 131 // Retrieves the number of accessible children.
145 CONTENT_EXPORT STDMETHODIMP get_accChildCount(LONG* child_count) override; 132 CONTENT_EXPORT STDMETHODIMP get_accChildCount(LONG* child_count) override;
146 133
147 // Retrieves a string that describes the object's default action. 134 // Retrieves a string that describes the object's default action.
148 CONTENT_EXPORT STDMETHODIMP 135 CONTENT_EXPORT STDMETHODIMP
149 get_accDefaultAction(VARIANT var_id, BSTR* default_action) override; 136 get_accDefaultAction(VARIANT var_id, BSTR* default_action) override;
150 137
151 // Retrieves the object's description. 138 // Retrieves the object's description.
152 CONTENT_EXPORT STDMETHODIMP 139 CONTENT_EXPORT STDMETHODIMP get_accDescription(VARIANT var_id,
153 get_accDescription(VARIANT var_id, BSTR* desc) override; 140 BSTR* desc) override;
154 141
155 // Retrieves the object that has the keyboard focus. 142 // Retrieves the object that has the keyboard focus.
156 CONTENT_EXPORT STDMETHODIMP get_accFocus(VARIANT* focus_child) override; 143 CONTENT_EXPORT STDMETHODIMP get_accFocus(VARIANT* focus_child) override;
157 144
158 // Retrieves the help information associated with the object. 145 // Retrieves the help information associated with the object.
159 CONTENT_EXPORT STDMETHODIMP get_accHelp(VARIANT var_id, BSTR* heflp) override; 146 CONTENT_EXPORT STDMETHODIMP get_accHelp(VARIANT var_id, BSTR* heflp) override;
160 147
161 // Retrieves the specified object's shortcut. 148 // Retrieves the specified object's shortcut.
162 CONTENT_EXPORT STDMETHODIMP 149 CONTENT_EXPORT STDMETHODIMP
163 get_accKeyboardShortcut(VARIANT var_id, BSTR* access_key) override; 150 get_accKeyboardShortcut(VARIANT var_id, BSTR* access_key) override;
164 151
165 // Retrieves the name of the specified object. 152 // Retrieves the name of the specified object.
166 CONTENT_EXPORT STDMETHODIMP get_accName(VARIANT var_id, BSTR* name) override; 153 CONTENT_EXPORT STDMETHODIMP get_accName(VARIANT var_id, BSTR* name) override;
167 154
168 // Retrieves the IDispatch interface of the object's parent. 155 // Retrieves the IDispatch interface of the object's parent.
169 CONTENT_EXPORT STDMETHODIMP get_accParent(IDispatch** disp_parent) override; 156 CONTENT_EXPORT STDMETHODIMP get_accParent(IDispatch** disp_parent) override;
170 157
171 // Retrieves information describing the role of the specified object. 158 // Retrieves information describing the role of the specified object.
172 CONTENT_EXPORT STDMETHODIMP 159 CONTENT_EXPORT STDMETHODIMP get_accRole(VARIANT var_id,
173 get_accRole(VARIANT var_id, VARIANT* role) override; 160 VARIANT* role) override;
174 161
175 // Retrieves the current state of the specified object. 162 // Retrieves the current state of the specified object.
176 CONTENT_EXPORT STDMETHODIMP 163 CONTENT_EXPORT STDMETHODIMP get_accState(VARIANT var_id,
177 get_accState(VARIANT var_id, VARIANT* state) override; 164 VARIANT* state) override;
178 165
179 // Returns the value associated with the object. 166 // Returns the value associated with the object.
180 CONTENT_EXPORT STDMETHODIMP 167 CONTENT_EXPORT STDMETHODIMP get_accValue(VARIANT var_id,
181 get_accValue(VARIANT var_id, BSTR* value) override; 168 BSTR* value) override;
182 169
183 // Make an object take focus or extend the selection. 170 // Make an object take focus or extend the selection.
184 CONTENT_EXPORT STDMETHODIMP 171 CONTENT_EXPORT STDMETHODIMP accSelect(LONG flags_sel,
185 accSelect(LONG flags_sel, VARIANT var_id) override; 172 VARIANT var_id) override;
186 173
187 CONTENT_EXPORT STDMETHODIMP 174 CONTENT_EXPORT STDMETHODIMP get_accHelpTopic(BSTR* help_file,
188 get_accHelpTopic(BSTR* help_file, VARIANT var_id, LONG* topic_id) override; 175 VARIANT var_id,
176 LONG* topic_id) override;
189 177
190 CONTENT_EXPORT STDMETHODIMP get_accSelection(VARIANT* selected) override; 178 CONTENT_EXPORT STDMETHODIMP get_accSelection(VARIANT* selected) override;
191 179
192 // Deprecated methods, not implemented. 180 // Deprecated methods, not implemented.
193 CONTENT_EXPORT STDMETHODIMP 181 CONTENT_EXPORT STDMETHODIMP put_accName(VARIANT var_id,
194 put_accName(VARIANT var_id, BSTR put_name) override; 182 BSTR put_name) override;
195 CONTENT_EXPORT STDMETHODIMP 183 CONTENT_EXPORT STDMETHODIMP put_accValue(VARIANT var_id,
196 put_accValue(VARIANT var_id, BSTR put_val) override; 184 BSTR put_val) override;
197 185
198 // 186 //
199 // IAccessible2 methods. 187 // IAccessible2 methods.
200 // 188 //
201 189
202 // Returns role from a longer list of possible roles. 190 // Returns role from a longer list of possible roles.
203 CONTENT_EXPORT STDMETHODIMP role(LONG* role) override; 191 CONTENT_EXPORT STDMETHODIMP role(LONG* role) override;
204 192
205 // Returns the state bitmask from a larger set of possible states. 193 // Returns the state bitmask from a larger set of possible states.
206 CONTENT_EXPORT STDMETHODIMP get_states(AccessibleStates* states) override; 194 CONTENT_EXPORT STDMETHODIMP get_states(AccessibleStates* states) override;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 LONG* y) override; 270 LONG* y) override;
283 271
284 CONTENT_EXPORT STDMETHODIMP get_imageSize(LONG* height, LONG* width) override; 272 CONTENT_EXPORT STDMETHODIMP get_imageSize(LONG* height, LONG* width) override;
285 273
286 // 274 //
287 // IAccessibleTable methods. 275 // IAccessibleTable methods.
288 // 276 //
289 277
290 // get_description - also used by IAccessibleImage 278 // get_description - also used by IAccessibleImage
291 279
292 CONTENT_EXPORT STDMETHODIMP 280 CONTENT_EXPORT STDMETHODIMP get_accessibleAt(long row,
293 get_accessibleAt(long row, long column, IUnknown** accessible) override; 281 long column,
282 IUnknown** accessible) override;
294 283
295 CONTENT_EXPORT STDMETHODIMP get_caption(IUnknown** accessible) override; 284 CONTENT_EXPORT STDMETHODIMP get_caption(IUnknown** accessible) override;
296 285
297 CONTENT_EXPORT STDMETHODIMP 286 CONTENT_EXPORT STDMETHODIMP get_childIndex(long row_index,
298 get_childIndex(long row_index, long column_index, long* cell_index) override; 287 long column_index,
288 long* cell_index) override;
299 289
300 CONTENT_EXPORT STDMETHODIMP 290 CONTENT_EXPORT STDMETHODIMP get_columnDescription(long column,
301 get_columnDescription(long column, BSTR* description) override; 291 BSTR* description) override;
302 292
303 CONTENT_EXPORT STDMETHODIMP 293 CONTENT_EXPORT STDMETHODIMP
304 get_columnExtentAt(long row, long column, long* n_columns_spanned) override; 294 get_columnExtentAt(long row, long column, long* n_columns_spanned) override;
305 295
306 CONTENT_EXPORT STDMETHODIMP 296 CONTENT_EXPORT STDMETHODIMP
307 get_columnHeader(IAccessibleTable** accessible_table, 297 get_columnHeader(IAccessibleTable** accessible_table,
308 long* starting_row_index) override; 298 long* starting_row_index) override;
309 299
310 CONTENT_EXPORT STDMETHODIMP 300 CONTENT_EXPORT STDMETHODIMP get_columnIndex(long cell_index,
311 get_columnIndex(long cell_index, long* column_index) override; 301 long* column_index) override;
312 302
313 CONTENT_EXPORT STDMETHODIMP get_nColumns(long* column_count) override; 303 CONTENT_EXPORT STDMETHODIMP get_nColumns(long* column_count) override;
314 304
315 CONTENT_EXPORT STDMETHODIMP get_nRows(long* row_count) override; 305 CONTENT_EXPORT STDMETHODIMP get_nRows(long* row_count) override;
316 306
317 CONTENT_EXPORT STDMETHODIMP get_nSelectedChildren(long* cell_count) override; 307 CONTENT_EXPORT STDMETHODIMP get_nSelectedChildren(long* cell_count) override;
318 308
319 CONTENT_EXPORT STDMETHODIMP get_nSelectedColumns(long* column_count) override; 309 CONTENT_EXPORT STDMETHODIMP get_nSelectedColumns(long* column_count) override;
320 310
321 CONTENT_EXPORT STDMETHODIMP get_nSelectedRows(long* row_count) override; 311 CONTENT_EXPORT STDMETHODIMP get_nSelectedRows(long* row_count) override;
322 312
323 CONTENT_EXPORT STDMETHODIMP 313 CONTENT_EXPORT STDMETHODIMP get_rowDescription(long row,
324 get_rowDescription(long row, BSTR* description) override; 314 BSTR* description) override;
325 315
326 CONTENT_EXPORT STDMETHODIMP 316 CONTENT_EXPORT STDMETHODIMP get_rowExtentAt(long row,
327 get_rowExtentAt(long row, long column, long* n_rows_spanned) override; 317 long column,
318 long* n_rows_spanned) override;
328 319
329 CONTENT_EXPORT STDMETHODIMP 320 CONTENT_EXPORT STDMETHODIMP
330 get_rowHeader(IAccessibleTable** accessible_table, 321 get_rowHeader(IAccessibleTable** accessible_table,
331 long* starting_column_index) override; 322 long* starting_column_index) override;
332 323
333 CONTENT_EXPORT STDMETHODIMP 324 CONTENT_EXPORT STDMETHODIMP get_rowIndex(long cell_index,
334 get_rowIndex(long cell_index, long* row_index) override; 325 long* row_index) override;
335 326
336 CONTENT_EXPORT STDMETHODIMP get_selectedChildren(long max_children, 327 CONTENT_EXPORT STDMETHODIMP get_selectedChildren(long max_children,
337 long** children, 328 long** children,
338 long* n_children) override; 329 long* n_children) override;
339 330
340 CONTENT_EXPORT STDMETHODIMP get_selectedColumns(long max_columns, 331 CONTENT_EXPORT STDMETHODIMP get_selectedColumns(long max_columns,
341 long** columns, 332 long** columns,
342 long* n_columns) override; 333 long* n_columns) override;
343 334
344 CONTENT_EXPORT STDMETHODIMP 335 CONTENT_EXPORT STDMETHODIMP get_selectedRows(long max_rows,
345 get_selectedRows(long max_rows, long** rows, long* n_rows) override; 336 long** rows,
337 long* n_rows) override;
346 338
347 CONTENT_EXPORT STDMETHODIMP get_summary(IUnknown** accessible) override; 339 CONTENT_EXPORT STDMETHODIMP get_summary(IUnknown** accessible) override;
348 340
349 CONTENT_EXPORT STDMETHODIMP 341 CONTENT_EXPORT STDMETHODIMP
350 get_isColumnSelected(long column, boolean* is_selected) override; 342 get_isColumnSelected(long column, boolean* is_selected) override;
351 343
352 CONTENT_EXPORT STDMETHODIMP 344 CONTENT_EXPORT STDMETHODIMP get_isRowSelected(long row,
353 get_isRowSelected(long row, boolean* is_selected) override; 345 boolean* is_selected) override;
354 346
355 CONTENT_EXPORT STDMETHODIMP 347 CONTENT_EXPORT STDMETHODIMP get_isSelected(long row,
356 get_isSelected(long row, long column, boolean* is_selected) override; 348 long column,
349 boolean* is_selected) override;
357 350
358 CONTENT_EXPORT STDMETHODIMP 351 CONTENT_EXPORT STDMETHODIMP
359 get_rowColumnExtentsAtIndex(long index, 352 get_rowColumnExtentsAtIndex(long index,
360 long* row, 353 long* row,
361 long* column, 354 long* column,
362 long* row_extents, 355 long* row_extents,
363 long* column_extents, 356 long* column_extents,
364 boolean* is_selected) override; 357 boolean* is_selected) override;
365 358
366 CONTENT_EXPORT STDMETHODIMP selectRow(long row) override; 359 CONTENT_EXPORT STDMETHODIMP selectRow(long row) override;
367 360
368 CONTENT_EXPORT STDMETHODIMP selectColumn(long column) override; 361 CONTENT_EXPORT STDMETHODIMP selectColumn(long column) override;
369 362
370 CONTENT_EXPORT STDMETHODIMP unselectRow(long row) override; 363 CONTENT_EXPORT STDMETHODIMP unselectRow(long row) override;
371 364
372 CONTENT_EXPORT STDMETHODIMP unselectColumn(long column) override; 365 CONTENT_EXPORT STDMETHODIMP unselectColumn(long column) override;
373 366
374 CONTENT_EXPORT STDMETHODIMP 367 CONTENT_EXPORT STDMETHODIMP
375 get_modelChange(IA2TableModelChange* model_change) override; 368 get_modelChange(IA2TableModelChange* model_change) override;
376 369
377 // 370 //
378 // IAccessibleTable2 methods. 371 // IAccessibleTable2 methods.
379 // 372 //
380 // (Most of these are duplicates of IAccessibleTable methods, only the 373 // (Most of these are duplicates of IAccessibleTable methods, only the
381 // unique ones are included here.) 374 // unique ones are included here.)
382 // 375 //
383 376
384 CONTENT_EXPORT STDMETHODIMP 377 CONTENT_EXPORT STDMETHODIMP get_cellAt(long row,
385 get_cellAt(long row, long column, IUnknown** cell) override; 378 long column,
379 IUnknown** cell) override;
386 380
387 CONTENT_EXPORT STDMETHODIMP get_nSelectedCells(long* cell_count) override; 381 CONTENT_EXPORT STDMETHODIMP get_nSelectedCells(long* cell_count) override;
388 382
389 CONTENT_EXPORT STDMETHODIMP 383 CONTENT_EXPORT STDMETHODIMP
390 get_selectedCells(IUnknown*** cells, long* n_selected_cells) override; 384 get_selectedCells(IUnknown*** cells, long* n_selected_cells) override;
391 385
392 CONTENT_EXPORT STDMETHODIMP 386 CONTENT_EXPORT STDMETHODIMP get_selectedColumns(long** columns,
393 get_selectedColumns(long** columns, long* n_columns) override; 387 long* n_columns) override;
394 388
395 CONTENT_EXPORT STDMETHODIMP 389 CONTENT_EXPORT STDMETHODIMP get_selectedRows(long** rows,
396 get_selectedRows(long** rows, long* n_rows) override; 390 long* n_rows) override;
397 391
398 // 392 //
399 // IAccessibleTableCell methods. 393 // IAccessibleTableCell methods.
400 // 394 //
401 395
402 CONTENT_EXPORT STDMETHODIMP 396 CONTENT_EXPORT STDMETHODIMP
403 get_columnExtent(long* n_columns_spanned) override; 397 get_columnExtent(long* n_columns_spanned) override;
404 398
405 CONTENT_EXPORT STDMETHODIMP 399 CONTENT_EXPORT STDMETHODIMP
406 get_columnHeaderCells(IUnknown*** cell_accessibles, 400 get_columnHeaderCells(IUnknown*** cell_accessibles,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 LONG* out_y, 436 LONG* out_y,
443 LONG* out_width, 437 LONG* out_width,
444 LONG* out_height) override; 438 LONG* out_height) override;
445 439
446 CONTENT_EXPORT STDMETHODIMP get_nSelections(LONG* n_selections) override; 440 CONTENT_EXPORT STDMETHODIMP get_nSelections(LONG* n_selections) override;
447 441
448 CONTENT_EXPORT STDMETHODIMP get_selection(LONG selection_index, 442 CONTENT_EXPORT STDMETHODIMP get_selection(LONG selection_index,
449 LONG* start_offset, 443 LONG* start_offset,
450 LONG* end_offset) override; 444 LONG* end_offset) override;
451 445
452 CONTENT_EXPORT STDMETHODIMP 446 CONTENT_EXPORT STDMETHODIMP get_text(LONG start_offset,
453 get_text(LONG start_offset, LONG end_offset, BSTR* text) override; 447 LONG end_offset,
448 BSTR* text) override;
454 449
455 CONTENT_EXPORT STDMETHODIMP 450 CONTENT_EXPORT STDMETHODIMP
456 get_textAtOffset(LONG offset, 451 get_textAtOffset(LONG offset,
457 enum IA2TextBoundaryType boundary_type, 452 enum IA2TextBoundaryType boundary_type,
458 LONG* start_offset, 453 LONG* start_offset,
459 LONG* end_offset, 454 LONG* end_offset,
460 BSTR* text) override; 455 BSTR* text) override;
461 456
462 CONTENT_EXPORT STDMETHODIMP 457 CONTENT_EXPORT STDMETHODIMP
463 get_textBeforeOffset(LONG offset, 458 get_textBeforeOffset(LONG offset,
(...skipping 24 matching lines...) Expand all
488 LONG end_index, 483 LONG end_index,
489 enum IA2ScrollType scroll_type) override; 484 enum IA2ScrollType scroll_type) override;
490 485
491 CONTENT_EXPORT STDMETHODIMP 486 CONTENT_EXPORT STDMETHODIMP
492 scrollSubstringToPoint(LONG start_index, 487 scrollSubstringToPoint(LONG start_index,
493 LONG end_index, 488 LONG end_index,
494 enum IA2CoordinateType coordinate_type, 489 enum IA2CoordinateType coordinate_type,
495 LONG x, 490 LONG x,
496 LONG y) override; 491 LONG y) override;
497 492
498 CONTENT_EXPORT STDMETHODIMP 493 CONTENT_EXPORT STDMETHODIMP addSelection(LONG start_offset,
499 addSelection(LONG start_offset, LONG end_offset) override; 494 LONG end_offset) override;
500 495
501 CONTENT_EXPORT STDMETHODIMP removeSelection(LONG selection_index) override; 496 CONTENT_EXPORT STDMETHODIMP removeSelection(LONG selection_index) override;
502 497
503 CONTENT_EXPORT STDMETHODIMP setCaretOffset(LONG offset) override; 498 CONTENT_EXPORT STDMETHODIMP setCaretOffset(LONG offset) override;
504 499
505 CONTENT_EXPORT STDMETHODIMP setSelection(LONG selection_index, 500 CONTENT_EXPORT STDMETHODIMP setSelection(LONG selection_index,
506 LONG start_offset, 501 LONG start_offset,
507 LONG end_offset) override; 502 LONG end_offset) override;
508 503
509 // IAccessibleText methods not implemented. 504 // IAccessibleText methods not implemented.
(...skipping 19 matching lines...) Expand all
529 CONTENT_EXPORT STDMETHODIMP get_anchorTarget(long index, 524 CONTENT_EXPORT STDMETHODIMP get_anchorTarget(long index,
530 VARIANT* anchor_target) override; 525 VARIANT* anchor_target) override;
531 CONTENT_EXPORT STDMETHODIMP get_startIndex(long* index) override; 526 CONTENT_EXPORT STDMETHODIMP get_startIndex(long* index) override;
532 CONTENT_EXPORT STDMETHODIMP get_endIndex(long* index) override; 527 CONTENT_EXPORT STDMETHODIMP get_endIndex(long* index) override;
533 // This method is deprecated in the IA2 Spec and so we don't implement it. 528 // This method is deprecated in the IA2 Spec and so we don't implement it.
534 CONTENT_EXPORT STDMETHODIMP get_valid(boolean* valid) override; 529 CONTENT_EXPORT STDMETHODIMP get_valid(boolean* valid) override;
535 530
536 // IAccessibleAction mostly not implemented. 531 // IAccessibleAction mostly not implemented.
537 CONTENT_EXPORT STDMETHODIMP nActions(long* n_actions) override; 532 CONTENT_EXPORT STDMETHODIMP nActions(long* n_actions) override;
538 CONTENT_EXPORT STDMETHODIMP doAction(long action_index) override; 533 CONTENT_EXPORT STDMETHODIMP doAction(long action_index) override;
539 CONTENT_EXPORT STDMETHODIMP 534 CONTENT_EXPORT STDMETHODIMP get_description(long action_index,
540 get_description(long action_index, BSTR* description) override; 535 BSTR* description) override;
541 CONTENT_EXPORT STDMETHODIMP get_keyBinding(long action_index, 536 CONTENT_EXPORT STDMETHODIMP get_keyBinding(long action_index,
542 long n_max_bindings, 537 long n_max_bindings,
543 BSTR** key_bindings, 538 BSTR** key_bindings,
544 long* n_bindings) override; 539 long* n_bindings) override;
545 CONTENT_EXPORT STDMETHODIMP get_name(long action_index, BSTR* name) override; 540 CONTENT_EXPORT STDMETHODIMP get_name(long action_index, BSTR* name) override;
546 CONTENT_EXPORT STDMETHODIMP 541 CONTENT_EXPORT STDMETHODIMP get_localizedName(long action_index,
547 get_localizedName(long action_index, BSTR* localized_name) override; 542 BSTR* localized_name) override;
548 543
549 // 544 //
550 // IAccessibleValue methods. 545 // IAccessibleValue methods.
551 // 546 //
552 547
553 CONTENT_EXPORT STDMETHODIMP get_currentValue(VARIANT* value) override; 548 CONTENT_EXPORT STDMETHODIMP get_currentValue(VARIANT* value) override;
554 549
555 CONTENT_EXPORT STDMETHODIMP get_minimumValue(VARIANT* value) override; 550 CONTENT_EXPORT STDMETHODIMP get_minimumValue(VARIANT* value) override;
556 551
557 CONTENT_EXPORT STDMETHODIMP get_maximumValue(VARIANT* value) override; 552 CONTENT_EXPORT STDMETHODIMP get_maximumValue(VARIANT* value) override;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 613
619 CONTENT_EXPORT STDMETHODIMP get_firstChild(ISimpleDOMNode** node) override; 614 CONTENT_EXPORT STDMETHODIMP get_firstChild(ISimpleDOMNode** node) override;
620 615
621 CONTENT_EXPORT STDMETHODIMP get_lastChild(ISimpleDOMNode** node) override; 616 CONTENT_EXPORT STDMETHODIMP get_lastChild(ISimpleDOMNode** node) override;
622 617
623 CONTENT_EXPORT STDMETHODIMP 618 CONTENT_EXPORT STDMETHODIMP
624 get_previousSibling(ISimpleDOMNode** node) override; 619 get_previousSibling(ISimpleDOMNode** node) override;
625 620
626 CONTENT_EXPORT STDMETHODIMP get_nextSibling(ISimpleDOMNode** node) override; 621 CONTENT_EXPORT STDMETHODIMP get_nextSibling(ISimpleDOMNode** node) override;
627 622
628 CONTENT_EXPORT STDMETHODIMP 623 CONTENT_EXPORT STDMETHODIMP get_childAt(unsigned int child_index,
629 get_childAt(unsigned int child_index, ISimpleDOMNode** node) override; 624 ISimpleDOMNode** node) override;
630 625
631 CONTENT_EXPORT STDMETHODIMP get_innerHTML(BSTR* innerHTML) override; 626 CONTENT_EXPORT STDMETHODIMP get_innerHTML(BSTR* innerHTML) override;
632 627
633 CONTENT_EXPORT STDMETHODIMP 628 CONTENT_EXPORT STDMETHODIMP
634 get_localInterface(void** local_interface) override; 629 get_localInterface(void** local_interface) override;
635 630
636 CONTENT_EXPORT STDMETHODIMP get_language(BSTR* language) override; 631 CONTENT_EXPORT STDMETHODIMP get_language(BSTR* language) override;
637 632
638 // 633 //
639 // ISimpleDOMText methods. 634 // ISimpleDOMText methods.
(...skipping 19 matching lines...) Expand all
659 654
660 CONTENT_EXPORT STDMETHODIMP 655 CONTENT_EXPORT STDMETHODIMP
661 scrollToSubstring(unsigned int start_index, unsigned int end_index) override; 656 scrollToSubstring(unsigned int start_index, unsigned int end_index) override;
662 657
663 CONTENT_EXPORT STDMETHODIMP get_fontFamily(BSTR* font_family) override; 658 CONTENT_EXPORT STDMETHODIMP get_fontFamily(BSTR* font_family) override;
664 659
665 // 660 //
666 // IServiceProvider methods. 661 // IServiceProvider methods.
667 // 662 //
668 663
669 CONTENT_EXPORT STDMETHODIMP 664 CONTENT_EXPORT STDMETHODIMP QueryService(REFGUID guidService,
670 QueryService(REFGUID guidService, REFIID riid, void** object) override; 665 REFIID riid,
666 void** object) override;
671 667
672 // IAccessibleEx methods not implemented. 668 // IAccessibleEx methods not implemented.
673 CONTENT_EXPORT STDMETHODIMP 669 CONTENT_EXPORT STDMETHODIMP GetObjectForChild(long child_id,
674 GetObjectForChild(long child_id, IAccessibleEx** ret) override; 670 IAccessibleEx** ret) override;
675 671
676 CONTENT_EXPORT STDMETHODIMP 672 CONTENT_EXPORT STDMETHODIMP GetIAccessiblePair(IAccessible** acc,
677 GetIAccessiblePair(IAccessible** acc, long* child_id) override; 673 long* child_id) override;
678 674
679 CONTENT_EXPORT STDMETHODIMP GetRuntimeId(SAFEARRAY** runtime_id) override; 675 CONTENT_EXPORT STDMETHODIMP GetRuntimeId(SAFEARRAY** runtime_id) override;
680 676
681 CONTENT_EXPORT STDMETHODIMP 677 CONTENT_EXPORT STDMETHODIMP
682 ConvertReturnedElement(IRawElementProviderSimple* element, 678 ConvertReturnedElement(IRawElementProviderSimple* element,
683 IAccessibleEx** acc) override; 679 IAccessibleEx** acc) override;
684 680
685 // 681 //
686 // IRawElementProviderSimple methods. 682 // IRawElementProviderSimple methods.
687 // 683 //
688 // The GetPatternProvider/GetPropertyValue methods need to be implemented for 684 // The GetPatternProvider/GetPropertyValue methods need to be implemented for
689 // the on-screen keyboard to show up in Windows 8 metro. 685 // the on-screen keyboard to show up in Windows 8 metro.
690 CONTENT_EXPORT STDMETHODIMP 686 CONTENT_EXPORT STDMETHODIMP GetPatternProvider(PATTERNID id,
691 GetPatternProvider(PATTERNID id, IUnknown** provider) override; 687 IUnknown** provider) override;
692 CONTENT_EXPORT STDMETHODIMP 688 CONTENT_EXPORT STDMETHODIMP GetPropertyValue(PROPERTYID id,
693 GetPropertyValue(PROPERTYID id, VARIANT* ret) override; 689 VARIANT* ret) override;
694 690
695 // 691 //
696 // IRawElementProviderSimple methods not implemented 692 // IRawElementProviderSimple methods not implemented
697 // 693 //
698 CONTENT_EXPORT STDMETHODIMP 694 CONTENT_EXPORT STDMETHODIMP
699 get_ProviderOptions(enum ProviderOptions* ret) override; 695 get_ProviderOptions(enum ProviderOptions* ret) override;
700 CONTENT_EXPORT STDMETHODIMP 696 CONTENT_EXPORT STDMETHODIMP
701 get_HostRawElementProvider(IRawElementProviderSimple** provider) override; 697 get_HostRawElementProvider(IRawElementProviderSimple** provider) override;
702 698
703 // 699 //
704 // CComObjectRootEx methods. 700 // CComObjectRootEx methods.
705 // 701 //
706 702
707 // Called by BEGIN_COM_MAP() / END_COM_MAP(). 703 // Called by BEGIN_COM_MAP() / END_COM_MAP().
708 static CONTENT_EXPORT HRESULT WINAPI 704 static CONTENT_EXPORT HRESULT WINAPI
709 InternalQueryInterface(void* this_ptr, 705 InternalQueryInterface(void* this_ptr,
710 const _ATL_INTMAP_ENTRY* entries, 706 const _ATL_INTMAP_ENTRY* entries,
711 REFIID iid, 707 REFIID iid,
712 void** object); 708 void** object);
713 709
714 // Computes and caches the IA2 text style attributes for the text and other 710 // Computes and caches the IA2 text style attributes for the text and other
715 // embedded child objects. 711 // embedded child objects.
716 CONTENT_EXPORT void ComputeStylesIfNeeded(); 712 CONTENT_EXPORT void ComputeStylesIfNeeded();
717 713
718 // |offset| could either be a text character or a child index in case of 714 // |offset| could either be a text character or a child index in case of
719 // non-text objects. 715 // non-text objects.
720 AXPlatformPosition::AXPositionInstance CreatePositionForSelectionAt( 716 AXPlatformPosition::AXPositionInstance CreatePositionForSelectionAt(
721 int offset) const; 717 int offset) const;
722 718
723 CONTENT_EXPORT base::string16 GetText() const override;
724
725 // Accessors. 719 // Accessors.
726 int32_t ia_role() const { return win_attributes_->ia_role; } 720 int32_t ia_role() const { return win_attributes_->ia_role; }
727 int32_t ia_state() const { return win_attributes_->ia_state; } 721 int32_t ia_state() const { return win_attributes_->ia_state; }
728 const base::string16& role_name() const { return win_attributes_->role_name; } 722 const base::string16& role_name() const { return win_attributes_->role_name; }
729 int32_t ia2_role() const { return win_attributes_->ia2_role; } 723 int32_t ia2_role() const { return win_attributes_->ia2_role; }
730 int32_t ia2_state() const { return win_attributes_->ia2_state; } 724 int32_t ia2_state() const { return win_attributes_->ia2_state; }
731 const std::vector<base::string16>& ia2_attributes() const { 725 const std::vector<base::string16>& ia2_attributes() const {
732 return win_attributes_->ia2_attributes; 726 return win_attributes_->ia2_attributes;
733 } 727 }
734 base::string16 name() const { return win_attributes_->name; } 728 base::string16 name() const { return win_attributes_->name; }
735 base::string16 description() const { return win_attributes_->description; } 729 base::string16 description() const { return win_attributes_->description; }
736 base::string16 value() const { return win_attributes_->value; } 730 base::string16 value() const { return win_attributes_->value; }
737 const std::map<int, std::vector<base::string16>>& offset_to_text_attributes() 731 const std::map<int, std::vector<base::string16>>& offset_to_text_attributes()
738 const { 732 const {
739 return win_attributes_->offset_to_text_attributes; 733 return win_attributes_->offset_to_text_attributes;
740 } 734 }
741 std::map<int32_t, int32_t>& hyperlink_offset_to_index() const { 735 std::map<int32_t, int32_t>& hyperlink_offset_to_index() const {
742 return win_attributes_->hyperlink_offset_to_index; 736 return win_attributes_->hyperlink_offset_to_index;
743 } 737 }
744 std::vector<int32_t>& hyperlinks() const { 738 std::vector<int32_t>& hyperlinks() const {
745 return win_attributes_->hyperlinks; 739 return win_attributes_->hyperlinks;
746 } 740 }
747 741
748 private: 742 private:
743 // Setter and getter for the browser accessibility owner
744 BrowserAccessibilityWin* GetOwner() const { return owner_; }
745 void SetOwner(BrowserAccessibilityWin* owner) { owner_ = owner; }
dmazzoni 2017/05/08 04:45:24 I wonder if this should be called Init() or merged
dougt 2017/05/08 16:53:36 I do agree with you that this is a bit funky. Sim
746
749 // Returns the IA2 text attributes for this object. 747 // Returns the IA2 text attributes for this object.
750 std::vector<base::string16> ComputeTextAttributes() const; 748 std::vector<base::string16> ComputeTextAttributes() const;
751 749
752 // Add one to the reference count and return the same object. Always 750 // Add one to the reference count and return the same object. Always
753 // use this method when returning a BrowserAccessibilityWin object as 751 // use this method when returning a BrowserAccessibilityComWin object as
754 // an output parameter to a COM interface, never use it otherwise. 752 // an output parameter to a COM interface, never use it otherwise.
755 BrowserAccessibilityWin* NewReference(); 753 BrowserAccessibilityComWin* NewReference();
756 754
757 // Returns a list of IA2 attributes indicating the offsets in the text of a 755 // Returns a list of IA2 attributes indicating the offsets in the text of a
758 // leaf object, such as a text field or static text, where spelling errors are 756 // leaf object, such as a text field or static text, where spelling errors are
759 // present. 757 // present.
760 std::map<int, std::vector<base::string16>> GetSpellingAttributes() const; 758 std::map<int, std::vector<base::string16>> GetSpellingAttributes();
761 759
762 // Many MSAA methods take a var_id parameter indicating that the operation 760 // Many MSAA methods take a var_id parameter indicating that the operation
763 // should be performed on a particular child ID, rather than this object. 761 // should be performed on a particular child ID, rather than this object.
764 // This method tries to figure out the target object from |var_id| and 762 // This method tries to figure out the target object from |var_id| and
765 // returns a pointer to the target object if it exists, otherwise NULL. 763 // returns a pointer to the target object if it exists, otherwise NULL.
766 // Does not return a new reference. 764 // Does not return a new reference.
767 BrowserAccessibilityWin* GetTargetFromChildID(const VARIANT& var_id); 765 BrowserAccessibilityComWin* GetTargetFromChildID(const VARIANT& var_id);
768 766
769 // Initialize the role and state metadata from the role enum and state 767 // Initialize the role and state metadata from the role enum and state
770 // bitmasks defined in ui::AXNodeData. 768 // bitmasks defined in ui::AXNodeData.
771 void InitRoleAndState(); 769 void InitRoleAndState();
772 770
773 // Retrieve the value of an attribute from the string attribute map and 771 // Retrieve the value of an attribute from the string attribute map and
774 // if found and nonempty, allocate a new BSTR (with SysAllocString) 772 // if found and nonempty, allocate a new BSTR (with SysAllocString)
775 // and return S_OK. If not found or empty, return S_FALSE. 773 // and return S_OK. If not found or empty, return S_FALSE.
776 HRESULT GetStringAttributeAsBstr( 774 HRESULT GetStringAttributeAsBstr(ui::AXStringAttribute attribute,
777 ui::AXStringAttribute attribute, 775 BSTR* value_bstr);
778 BSTR* value_bstr);
779 776
780 // Escapes characters in string attributes as required by the IA2 Spec. 777 // Escapes characters in string attributes as required by the IA2 Spec.
781 // It's okay for input to be the same as output. 778 // It's okay for input to be the same as output.
782 CONTENT_EXPORT static void SanitizeStringAttributeForIA2( 779 CONTENT_EXPORT static void SanitizeStringAttributeForIA2(
783 const base::string16& input, 780 const base::string16& input,
784 base::string16* output); 781 base::string16* output);
785 FRIEND_TEST_ALL_PREFIXES(BrowserAccessibilityTest, 782 FRIEND_TEST_ALL_PREFIXES(BrowserAccessibilityTest,
786 TestSanitizeStringAttributeForIA2); 783 TestSanitizeStringAttributeForIA2);
787 784
788 // Sets the selection given a start and end offset in IA2 Hypertext. 785 // Sets the selection given a start and end offset in IA2 Hypertext.
789 void SetIA2HypertextSelection(LONG start_offset, LONG end_offset); 786 void SetIA2HypertextSelection(LONG start_offset, LONG end_offset);
790 787
791 // If the string attribute |attribute| is present, add its value as an 788 // If the string attribute |attribute| is present, add its value as an
792 // IAccessible2 attribute with the name |ia2_attr|. 789 // IAccessible2 attribute with the name |ia2_attr|.
793 void StringAttributeToIA2(ui::AXStringAttribute attribute, 790 void StringAttributeToIA2(ui::AXStringAttribute attribute,
794 const char* ia2_attr); 791 const char* ia2_attr);
795 792
796 // If the bool attribute |attribute| is present, add its value as an 793 // If the bool attribute |attribute| is present, add its value as an
797 // IAccessible2 attribute with the name |ia2_attr|. 794 // IAccessible2 attribute with the name |ia2_attr|.
798 void BoolAttributeToIA2(ui::AXBoolAttribute attribute, 795 void BoolAttributeToIA2(ui::AXBoolAttribute attribute, const char* ia2_attr);
799 const char* ia2_attr);
800 796
801 // If the int attribute |attribute| is present, add its value as an 797 // If the int attribute |attribute| is present, add its value as an
802 // IAccessible2 attribute with the name |ia2_attr|. 798 // IAccessible2 attribute with the name |ia2_attr|.
803 void IntAttributeToIA2(ui::AXIntAttribute attribute, 799 void IntAttributeToIA2(ui::AXIntAttribute attribute, const char* ia2_attr);
804 const char* ia2_attr);
805 800
806 // 801 //
807 // Helper methods for IA2 hyperlinks. 802 // Helper methods for IA2 hyperlinks.
808 // 803 //
809 // Hyperlink is an IA2 misnomer. It refers to objects embedded within other 804 // Hyperlink is an IA2 misnomer. It refers to objects embedded within other
810 // objects, such as a numbered list within a contenteditable div. 805 // objects, such as a numbered list within a contenteditable div.
811 // Also, in IA2, text that includes embedded objects is called hypertext. 806 // Also, in IA2, text that includes embedded objects is called hypertext.
812 807
813 // Returns true if the current object is an IA2 hyperlink. 808 // Returns true if the current object is an IA2 hyperlink.
814 bool IsHyperlink() const; 809 bool IsHyperlink() const;
815 // Returns the hyperlink at the given text position, or nullptr if no 810 // Returns the hyperlink at the given text position, or nullptr if no
816 // hyperlink can be found. 811 // hyperlink can be found.
817 BrowserAccessibilityWin* GetHyperlinkFromHypertextOffset(int offset) const; 812 BrowserAccessibilityComWin* GetHyperlinkFromHypertextOffset(int offset) const;
818 813
819 // Functions for retrieving offsets for hyperlinks and hypertext. 814 // Functions for retrieving offsets for hyperlinks and hypertext.
820 // Return -1 in case of failure. 815 // Return -1 in case of failure.
821 int32_t GetHyperlinkIndexFromChild( 816 int32_t GetHyperlinkIndexFromChild(
822 const BrowserAccessibilityWin& child) const; 817 const BrowserAccessibilityComWin& child) const;
823 int32_t GetHypertextOffsetFromHyperlinkIndex(int32_t hyperlink_index) const; 818 int32_t GetHypertextOffsetFromHyperlinkIndex(int32_t hyperlink_index) const;
824 int32_t GetHypertextOffsetFromChild( 819 int32_t GetHypertextOffsetFromChild(BrowserAccessibilityComWin& child);
825 const BrowserAccessibilityWin& child) const;
826 int32_t GetHypertextOffsetFromDescendant( 820 int32_t GetHypertextOffsetFromDescendant(
827 const BrowserAccessibilityWin& descendant) const; 821 const BrowserAccessibilityComWin& descendant) const;
828 822
829 // If the selection endpoint is either equal to or an ancestor of this object, 823 // If the selection endpoint is either equal to or an ancestor of this object,
830 // returns endpoint_offset. 824 // returns endpoint_offset.
831 // If the selection endpoint is a descendant of this object, returns its 825 // If the selection endpoint is a descendant of this object, returns its
832 // offset. Otherwise, returns either 0 or the length of the hypertext 826 // offset. Otherwise, returns either 0 or the length of the hypertext
833 // depending on the direction of the selection. 827 // depending on the direction of the selection.
834 // Returns -1 in case of unexpected failure, e.g. the selection endpoint 828 // Returns -1 in case of unexpected failure, e.g. the selection endpoint
835 // cannot be found in the accessibility tree. 829 // cannot be found in the accessibility tree.
836 int GetHypertextOffsetFromEndpoint( 830 int GetHypertextOffsetFromEndpoint(
837 const BrowserAccessibilityWin& endpoint_object, 831 const BrowserAccessibilityComWin& endpoint_object,
838 int endpoint_offset) const; 832 int endpoint_offset) const;
839 833
840 // 834 //
841 // Selection helper functions. 835 // Selection helper functions.
842 // 836 //
843 // The following functions retrieve the endpoints of the current selection. 837 // The following functions retrieve the endpoints of the current selection.
844 // First they check for a local selection found on the current control, e.g. 838 // First they check for a local selection found on the current control, e.g.
845 // when querying the selection on a textarea. 839 // when querying the selection on a textarea.
846 // If not found they retrieve the global selection found on the current frame. 840 // If not found they retrieve the global selection found on the current frame.
847 int GetSelectionAnchor() const; 841 int GetSelectionAnchor() const;
848 int GetSelectionFocus() const; 842 int GetSelectionFocus() const;
849 // Retrieves the selection offsets in the way required by the IA2 APIs. 843 // Retrieves the selection offsets in the way required by the IA2 APIs.
850 // selection_start and selection_end are -1 when there is no selection active 844 // selection_start and selection_end are -1 when there is no selection active
851 // on this object. 845 // on this object.
852 // The greatest of the two offsets is one past the last character of the 846 // The greatest of the two offsets is one past the last character of the
853 // selection.) 847 // selection.)
854 void GetSelectionOffsets(int* selection_start, int* selection_end) const; 848 void GetSelectionOffsets(int* selection_start, int* selection_end) const;
855 849
856 // Get the value text, which might come from the floating-point 850 // Get the value text, which might come from the floating-point
857 // value for some roles. 851 // value for some roles.
858 base::string16 GetValueText(); 852 base::string16 GetValueText();
859 853
860 bool IsSameHypertextCharacter(size_t old_char_index, size_t new_char_index); 854 bool IsSameHypertextCharacter(size_t old_char_index, size_t new_char_index);
861 void ComputeHypertextRemovedAndInserted( 855 void ComputeHypertextRemovedAndInserted(int* start,
862 int* start, int* old_len, int* new_len); 856 int* old_len,
857 int* new_len);
863 858
864 // If offset is a member of IA2TextSpecialOffsets this function updates the 859 // If offset is a member of IA2TextSpecialOffsets this function updates the
865 // value of offset and returns, otherwise offset remains unchanged. 860 // value of offset and returns, otherwise offset remains unchanged.
866 void HandleSpecialTextOffset(LONG* offset); 861 void HandleSpecialTextOffset(LONG* offset);
867 862
868 // Convert from a IA2TextBoundaryType to a ui::TextBoundaryType. 863 // Convert from a IA2TextBoundaryType to a ui::TextBoundaryType.
869 ui::TextBoundaryType IA2TextBoundaryToTextBoundary(IA2TextBoundaryType type); 864 ui::TextBoundaryType IA2TextBoundaryToTextBoundary(IA2TextBoundaryType type);
870 865
871 // Search forwards (direction == 1) or backwards (direction == -1) 866 // Search forwards (direction == 1) or backwards (direction == -1)
872 // from the given offset until the given boundary is found, and 867 // from the given offset until the given boundary is found, and
873 // return the offset of that boundary. 868 // return the offset of that boundary.
874 LONG FindBoundary(const base::string16& text, 869 LONG FindBoundary(const base::string16& text,
875 IA2TextBoundaryType ia2_boundary, 870 IA2TextBoundaryType ia2_boundary,
876 LONG start_offset, 871 LONG start_offset,
877 ui::TextBoundaryDirection direction); 872 ui::TextBoundaryDirection direction);
878 873
879 // Searches forward from the given offset until the start of the next style 874 // Searches forward from the given offset until the start of the next style
880 // is found, or searches backward from the given offset until the start of the 875 // is found, or searches backward from the given offset until the start of the
881 // current style is found. 876 // current style is found.
882 LONG FindStartOfStyle(LONG start_offset, 877 LONG FindStartOfStyle(LONG start_offset,
883 ui::TextBoundaryDirection direction) const; 878 ui::TextBoundaryDirection direction) const;
884 879
885 // ID refers to the node ID in the current tree, not the globally unique ID. 880 // ID refers to the node ID in the current tree, not the globally unique ID.
886 // TODO(nektar): Could we use globally unique IDs everywhere? 881 // TODO(nektar): Could we use globally unique IDs everywhere?
887 // TODO(nektar): Rename this function to GetFromNodeID. 882 // TODO(nektar): Rename this function to GetFromNodeID.
888 BrowserAccessibilityWin* GetFromID(int32_t id) const; 883 BrowserAccessibilityComWin* GetFromID(int32_t id) const;
889 884
890 // Returns true if this is a list box option with a parent of type list box, 885 // Returns true if this is a list box option with a parent of type list box,
891 // or a menu list option with a parent of type menu list popup. 886 // or a menu list option with a parent of type menu list popup.
892 bool IsListBoxOptionOrMenuListOption(); 887 bool IsListBoxOptionOrMenuListOption();
893 888
894 // For adding / removing IA2 relations. 889 // For adding / removing IA2 relations.
895 890
896 void AddRelation(const base::string16& relation_type, int target_id); 891 void AddRelation(const base::string16& relation_type, int target_id);
897 void AddBidirectionalRelations(const base::string16& relation_type, 892 void AddBidirectionalRelations(const base::string16& relation_type,
898 const base::string16& reverse_relation_type, 893 const base::string16& reverse_relation_type,
899 ui::AXIntListAttribute attribute); 894 ui::AXIntListAttribute attribute);
900 // Clears all the forward relations from this object to any other object and 895 // Clears all the forward relations from this object to any other object and
901 // the associated reverse relations on the other objects, but leaves any 896 // the associated reverse relations on the other objects, but leaves any
902 // reverse relations on this object alone. 897 // reverse relations on this object alone.
903 void ClearOwnRelations(); 898 void ClearOwnRelations();
904 void RemoveBidirectionalRelationsOfType( 899 void RemoveBidirectionalRelationsOfType(
905 const base::string16& relation_type, 900 const base::string16& relation_type,
906 const base::string16& reverse_relation_type); 901 const base::string16& reverse_relation_type);
907 void RemoveTargetFromRelation(const base::string16& relation_type, 902 void RemoveTargetFromRelation(const base::string16& relation_type,
908 int target_id); 903 int target_id);
909 904
910 // Updates object attributes of IA2 with html attributes. 905 // Updates object attributes of IA2 with html attributes.
911 void UpdateRequiredAttributes(); 906 void UpdateRequiredAttributes();
912 907
913 // Fire a Windows-specific accessibility event notification on this node. 908 // Fire a Windows-specific accessibility event notification on this node.
914 void FireNativeEvent(LONG win_event_type) const; 909 void FireNativeEvent(LONG win_event_type) const;
915 910
916 ui::AXPlatformNodeWin* GetPlatformNodeWin() const;
917
918 static bool IsInTreeGrid(const BrowserAccessibility* item); 911 static bool IsInTreeGrid(const BrowserAccessibility* item);
919 912
920 struct WinAttributes { 913 struct WinAttributes {
921 WinAttributes(); 914 WinAttributes();
922 ~WinAttributes(); 915 ~WinAttributes();
923 916
924 // IAccessible role and state. 917 // IAccessible role and state.
925 int32_t ia_role; 918 int32_t ia_role;
926 int32_t ia_state; 919 int32_t ia_state;
927 base::string16 role_name; 920 base::string16 role_name;
(...skipping 13 matching lines...) Expand all
941 // Hypertext. 934 // Hypertext.
942 base::string16 hypertext; 935 base::string16 hypertext;
943 936
944 // Maps each style span to its start offset in hypertext. 937 // Maps each style span to its start offset in hypertext.
945 std::map<int, std::vector<base::string16>> offset_to_text_attributes; 938 std::map<int, std::vector<base::string16>> offset_to_text_attributes;
946 939
947 // Maps an embedded character offset in |hypertext_| to an index in 940 // Maps an embedded character offset in |hypertext_| to an index in
948 // |hyperlinks_|. 941 // |hyperlinks_|.
949 std::map<int32_t, int32_t> hyperlink_offset_to_index; 942 std::map<int32_t, int32_t> hyperlink_offset_to_index;
950 943
951 // The unique id of a BrowserAccessibilityWin for each hyperlink. 944 // The unique id of a BrowserAccessibilityComWin for each hyperlink.
952 // TODO(nektar): Replace object IDs with child indices if we decide that 945 // TODO(nektar): Replace object IDs with child indices if we decide that
953 // we are not implementing IA2 hyperlinks for anything other than IA2 946 // we are not implementing IA2 hyperlinks for anything other than IA2
954 // Hypertext. 947 // Hypertext.
955 std::vector<int32_t> hyperlinks; 948 std::vector<int32_t> hyperlinks;
956 }; 949 };
957 950
951 BrowserAccessibilityWin* owner_;
952
958 std::unique_ptr<WinAttributes> win_attributes_; 953 std::unique_ptr<WinAttributes> win_attributes_;
959 954
960 // Only valid during the scope of a IA2_EVENT_TEXT_REMOVED or 955 // Only valid during the scope of a IA2_EVENT_TEXT_REMOVED or
961 // IA2_EVENT_TEXT_INSERTED event. 956 // IA2_EVENT_TEXT_INSERTED event.
962 std::unique_ptr<WinAttributes> old_win_attributes_; 957 std::unique_ptr<WinAttributes> old_win_attributes_;
963 958
964 // Relationships between this node and other nodes. 959 // Relationships between this node and other nodes.
965 std::vector<BrowserAccessibilityRelation*> relations_; 960 std::vector<BrowserAccessibilityRelation*> relations_;
966 961
967 // The previous scroll position, so we can tell if this object scrolled. 962 // The previous scroll position, so we can tell if this object scrolled.
968 int previous_scroll_x_; 963 int previous_scroll_x_;
969 int previous_scroll_y_; 964 int previous_scroll_y_;
970 965
971 // Give BrowserAccessibility::Create access to our constructor. 966 // Give BrowserAccessibility::Create access to our constructor.
972 friend class BrowserAccessibility; 967 friend class BrowserAccessibility;
968 friend class BrowserAccessibilityWin;
973 friend class BrowserAccessibilityRelation; 969 friend class BrowserAccessibilityRelation;
974 970
975 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityWin); 971 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityComWin);
976 }; 972 };
977 973
978 CONTENT_EXPORT BrowserAccessibilityWin* 974 CONTENT_EXPORT BrowserAccessibilityComWin* ToBrowserAccessibilityComWin(
979 ToBrowserAccessibilityWin(BrowserAccessibility* obj); 975 BrowserAccessibility* obj);
dmazzoni 2017/05/08 04:45:24 Is there really no time we'll ever also want ToBro
dougt 2017/05/08 16:53:36 Tests use it. But, by far, the most common cast i
dmazzoni 2017/05/08 18:31:04 Nevermind, I see now it's just in a different file
980
981 CONTENT_EXPORT const BrowserAccessibilityWin*
982 ToBrowserAccessibilityWin(const BrowserAccessibility* obj);
983 976
984 } // namespace content 977 } // namespace content
985 978
986 #endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_WIN_H_ 979 #endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_COM_WIN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698