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
3 // found in the LICENSE file.
5 #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_WIN_H_
6 #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_WIN_H_
11 #include <UIAutomationCore.h>
15 #include "base/compiler_specific.h"
16 #include "content/browser/accessibility/browser_accessibility.h"
17 #include "content/common/content_export.h"
18 #include "third_party/iaccessible2/ia2_api_all.h"
19 #include "third_party/isimpledom/ISimpleDOMDocument.h"
20 #include "third_party/isimpledom/ISimpleDOMNode.h"
21 #include "third_party/isimpledom/ISimpleDOMText.h"
24 enum TextBoundaryDirection
;
25 enum TextBoundaryType
;
29 class BrowserAccessibilityRelation
;
31 ////////////////////////////////////////////////////////////////////////////////
33 // BrowserAccessibilityWin
35 // Class implementing the windows accessible interface for the Browser-Renderer
36 // communication of accessibility information, providing accessibility
37 // to be used by screen readers and other assistive technology (AT).
39 ////////////////////////////////////////////////////////////////////////////////
40 class __declspec(uuid("562072fe-3390-43b1-9e2c-dd4118f5ac79"))
41 BrowserAccessibilityWin
42 : public BrowserAccessibility
,
43 public CComObjectRootEx
<CComMultiThreadModel
>,
44 public IDispatchImpl
<IAccessible2
, &IID_IAccessible2
,
45 &LIBID_IAccessible2Lib
>,
46 public IAccessibleApplication
,
47 public IAccessibleHyperlink
,
48 public IAccessibleHypertext
,
49 public IAccessibleImage
,
50 public IAccessibleTable
,
51 public IAccessibleTable2
,
52 public IAccessibleTableCell
,
53 public IAccessibleValue
,
54 public IServiceProvider
,
55 public ISimpleDOMDocument
,
56 public ISimpleDOMNode
,
57 public ISimpleDOMText
,
59 public IRawElementProviderSimple
{
61 BEGIN_COM_MAP(BrowserAccessibilityWin
)
62 COM_INTERFACE_ENTRY2(IDispatch
, IAccessible2
)
63 COM_INTERFACE_ENTRY2(IAccessible
, IAccessible2
)
64 COM_INTERFACE_ENTRY2(IAccessibleText
, IAccessibleHypertext
)
65 COM_INTERFACE_ENTRY(IAccessible2
)
66 COM_INTERFACE_ENTRY(IAccessibleApplication
)
67 COM_INTERFACE_ENTRY(IAccessibleHyperlink
)
68 COM_INTERFACE_ENTRY(IAccessibleHypertext
)
69 COM_INTERFACE_ENTRY(IAccessibleImage
)
70 COM_INTERFACE_ENTRY(IAccessibleTable
)
71 COM_INTERFACE_ENTRY(IAccessibleTable2
)
72 COM_INTERFACE_ENTRY(IAccessibleTableCell
)
73 COM_INTERFACE_ENTRY(IAccessibleValue
)
74 COM_INTERFACE_ENTRY(IServiceProvider
)
75 COM_INTERFACE_ENTRY(ISimpleDOMDocument
)
76 COM_INTERFACE_ENTRY(ISimpleDOMNode
)
77 COM_INTERFACE_ENTRY(ISimpleDOMText
)
78 COM_INTERFACE_ENTRY(IAccessibleEx
)
79 COM_INTERFACE_ENTRY(IRawElementProviderSimple
)
82 // Represents a non-static text node in IAccessibleHypertext. This character
83 // is embedded in the response to IAccessibleText::get_text, indicating the
84 // position where a non-static text child object appears.
85 CONTENT_EXPORT
static const base::char16 kEmbeddedCharacter
[];
87 // Mappings from roles and states to human readable strings. Initialize
88 // with |InitializeStringMaps|.
89 static std::map
<int32
, base::string16
> role_string_map
;
90 static std::map
<int32
, base::string16
> state_string_map
;
92 CONTENT_EXPORT
BrowserAccessibilityWin();
94 CONTENT_EXPORT
virtual ~BrowserAccessibilityWin();
96 // The Windows-specific unique ID, used as the child ID for MSAA methods
97 // like NotifyWinEvent, and as the unique ID for IAccessible2 and ISimpleDOM.
98 LONG
unique_id_win() const { return unique_id_win_
; }
101 // BrowserAccessibility methods.
103 CONTENT_EXPORT
virtual void OnDataChanged() OVERRIDE
;
104 CONTENT_EXPORT
virtual void OnUpdateFinished() OVERRIDE
;
105 CONTENT_EXPORT
virtual void NativeAddReference() OVERRIDE
;
106 CONTENT_EXPORT
virtual void NativeReleaseReference() OVERRIDE
;
107 CONTENT_EXPORT
virtual bool IsNative() const OVERRIDE
;
108 CONTENT_EXPORT
virtual void OnLocationChanged() const OVERRIDE
;
111 // IAccessible methods.
114 // Performs the default action on a given object.
115 CONTENT_EXPORT STDMETHODIMP
accDoDefaultAction(VARIANT var_id
);
117 // Retrieves the child element or child object at a given point on the screen.
118 CONTENT_EXPORT STDMETHODIMP
accHitTest(LONG x_left
, LONG y_top
,
121 // Retrieves the specified object's current screen location.
122 CONTENT_EXPORT STDMETHODIMP
accLocation(LONG
* x_left
,
128 // Traverses to another UI element and retrieves the object.
129 CONTENT_EXPORT STDMETHODIMP
accNavigate(LONG nav_dir
, VARIANT start
,
132 // Retrieves an IDispatch interface pointer for the specified child.
133 CONTENT_EXPORT STDMETHODIMP
get_accChild(VARIANT var_child
,
134 IDispatch
** disp_child
);
136 // Retrieves the number of accessible children.
137 CONTENT_EXPORT STDMETHODIMP
get_accChildCount(LONG
* child_count
);
139 // Retrieves a string that describes the object's default action.
140 CONTENT_EXPORT STDMETHODIMP
get_accDefaultAction(VARIANT var_id
,
141 BSTR
* default_action
);
143 // Retrieves the object's description.
144 CONTENT_EXPORT STDMETHODIMP
get_accDescription(VARIANT var_id
, BSTR
* desc
);
146 // Retrieves the object that has the keyboard focus.
147 CONTENT_EXPORT STDMETHODIMP
get_accFocus(VARIANT
* focus_child
);
149 // Retrieves the help information associated with the object.
150 CONTENT_EXPORT STDMETHODIMP
get_accHelp(VARIANT var_id
, BSTR
* heflp
);
152 // Retrieves the specified object's shortcut.
153 CONTENT_EXPORT STDMETHODIMP
get_accKeyboardShortcut(VARIANT var_id
,
156 // Retrieves the name of the specified object.
157 CONTENT_EXPORT STDMETHODIMP
get_accName(VARIANT var_id
, BSTR
* name
);
159 // Retrieves the IDispatch interface of the object's parent.
160 CONTENT_EXPORT STDMETHODIMP
get_accParent(IDispatch
** disp_parent
);
162 // Retrieves information describing the role of the specified object.
163 CONTENT_EXPORT STDMETHODIMP
get_accRole(VARIANT var_id
, VARIANT
* role
);
165 // Retrieves the current state of the specified object.
166 CONTENT_EXPORT STDMETHODIMP
get_accState(VARIANT var_id
, VARIANT
* state
);
168 // Returns the value associated with the object.
169 CONTENT_EXPORT STDMETHODIMP
get_accValue(VARIANT var_id
, BSTR
* value
);
171 // Make an object take focus or extend the selection.
172 CONTENT_EXPORT STDMETHODIMP
accSelect(LONG flags_sel
, VARIANT var_id
);
174 CONTENT_EXPORT STDMETHODIMP
get_accHelpTopic(BSTR
* help_file
,
178 CONTENT_EXPORT STDMETHODIMP
get_accSelection(VARIANT
* selected
);
180 // Deprecated methods, not implemented.
181 CONTENT_EXPORT STDMETHODIMP
put_accName(VARIANT var_id
, BSTR put_name
) {
184 CONTENT_EXPORT STDMETHODIMP
put_accValue(VARIANT var_id
, BSTR put_val
) {
189 // IAccessible2 methods.
192 // Returns role from a longer list of possible roles.
193 CONTENT_EXPORT STDMETHODIMP
role(LONG
* role
);
195 // Returns the state bitmask from a larger set of possible states.
196 CONTENT_EXPORT STDMETHODIMP
get_states(AccessibleStates
* states
);
198 // Returns the attributes specific to this IAccessible2 object,
199 // such as a cell's formula.
200 CONTENT_EXPORT STDMETHODIMP
get_attributes(BSTR
* attributes
);
202 // Get the unique ID of this object so that the client knows if it's
203 // been encountered previously.
204 CONTENT_EXPORT STDMETHODIMP
get_uniqueID(LONG
* unique_id
);
206 // Get the window handle of the enclosing window.
207 CONTENT_EXPORT STDMETHODIMP
get_windowHandle(HWND
* window_handle
);
209 // Get this object's index in its parent object.
210 CONTENT_EXPORT STDMETHODIMP
get_indexInParent(LONG
* index_in_parent
);
212 CONTENT_EXPORT STDMETHODIMP
get_nRelations(LONG
* n_relations
);
214 CONTENT_EXPORT STDMETHODIMP
get_relation(LONG relation_index
,
215 IAccessibleRelation
** relation
);
217 CONTENT_EXPORT STDMETHODIMP
get_relations(LONG max_relations
,
218 IAccessibleRelation
** relations
,
221 CONTENT_EXPORT STDMETHODIMP
scrollTo(enum IA2ScrollType scroll_type
);
223 CONTENT_EXPORT STDMETHODIMP
scrollToPoint(
224 enum IA2CoordinateType coordinate_type
,
228 CONTENT_EXPORT STDMETHODIMP
get_groupPosition(LONG
* group_level
,
229 LONG
* similar_items_in_group
,
230 LONG
* position_in_group
);
233 // IAccessibleEx methods not implemented.
235 CONTENT_EXPORT STDMETHODIMP
get_extendedRole(BSTR
* extended_role
) {
238 CONTENT_EXPORT STDMETHODIMP
get_localizedExtendedRole(
239 BSTR
* localized_extended_role
) {
242 CONTENT_EXPORT STDMETHODIMP
get_nExtendedStates(LONG
* n_extended_states
) {
245 CONTENT_EXPORT STDMETHODIMP
get_extendedStates(LONG max_extended_states
,
246 BSTR
** extended_states
,
247 LONG
* n_extended_states
) {
250 CONTENT_EXPORT STDMETHODIMP
get_localizedExtendedStates(
251 LONG max_localized_extended_states
,
252 BSTR
** localized_extended_states
,
253 LONG
* n_localized_extended_states
) {
256 CONTENT_EXPORT STDMETHODIMP
get_locale(IA2Locale
* locale
) {
261 // IAccessibleApplication methods.
263 CONTENT_EXPORT STDMETHODIMP
get_appName(BSTR
* app_name
);
265 CONTENT_EXPORT STDMETHODIMP
get_appVersion(BSTR
* app_version
);
267 CONTENT_EXPORT STDMETHODIMP
get_toolkitName(BSTR
* toolkit_name
);
269 CONTENT_EXPORT STDMETHODIMP
get_toolkitVersion(BSTR
* toolkit_version
);
272 // IAccessibleImage methods.
274 CONTENT_EXPORT STDMETHODIMP
get_description(BSTR
* description
);
276 CONTENT_EXPORT STDMETHODIMP
get_imagePosition(
277 enum IA2CoordinateType coordinate_type
,
281 CONTENT_EXPORT STDMETHODIMP
get_imageSize(LONG
* height
, LONG
* width
);
284 // IAccessibleTable methods.
287 // get_description - also used by IAccessibleImage
289 CONTENT_EXPORT STDMETHODIMP
get_accessibleAt(long row
,
291 IUnknown
** accessible
);
293 CONTENT_EXPORT STDMETHODIMP
get_caption(IUnknown
** accessible
);
295 CONTENT_EXPORT STDMETHODIMP
get_childIndex(long row_index
,
299 CONTENT_EXPORT STDMETHODIMP
get_columnDescription(long column
,
302 CONTENT_EXPORT STDMETHODIMP
get_columnExtentAt(long row
,
304 long* n_columns_spanned
);
306 CONTENT_EXPORT STDMETHODIMP
get_columnHeader(
307 IAccessibleTable
** accessible_table
,
308 long* starting_row_index
);
310 CONTENT_EXPORT STDMETHODIMP
get_columnIndex(long cell_index
,
313 CONTENT_EXPORT STDMETHODIMP
get_nColumns(long* column_count
);
315 CONTENT_EXPORT STDMETHODIMP
get_nRows(long* row_count
);
317 CONTENT_EXPORT STDMETHODIMP
get_nSelectedChildren(long* cell_count
);
319 CONTENT_EXPORT STDMETHODIMP
get_nSelectedColumns(long* column_count
);
321 CONTENT_EXPORT STDMETHODIMP
get_nSelectedRows(long *row_count
);
323 CONTENT_EXPORT STDMETHODIMP
get_rowDescription(long row
,
326 CONTENT_EXPORT STDMETHODIMP
get_rowExtentAt(long row
,
328 long* n_rows_spanned
);
330 CONTENT_EXPORT STDMETHODIMP
get_rowHeader(IAccessibleTable
** accessible_table
,
331 long* starting_column_index
);
333 CONTENT_EXPORT STDMETHODIMP
get_rowIndex(long cell_index
,
336 CONTENT_EXPORT STDMETHODIMP
get_selectedChildren(long max_children
,
340 CONTENT_EXPORT STDMETHODIMP
get_selectedColumns(long max_columns
,
344 CONTENT_EXPORT STDMETHODIMP
get_selectedRows(long max_rows
,
348 CONTENT_EXPORT STDMETHODIMP
get_summary(IUnknown
** accessible
);
350 CONTENT_EXPORT STDMETHODIMP
get_isColumnSelected(long column
,
351 boolean
* is_selected
);
353 CONTENT_EXPORT STDMETHODIMP
get_isRowSelected(long row
,
354 boolean
* is_selected
);
356 CONTENT_EXPORT STDMETHODIMP
get_isSelected(long row
,
358 boolean
* is_selected
);
360 CONTENT_EXPORT STDMETHODIMP
get_rowColumnExtentsAtIndex(long index
,
364 long* column_extents
,
365 boolean
* is_selected
);
367 CONTENT_EXPORT STDMETHODIMP
selectRow(long row
) {
371 CONTENT_EXPORT STDMETHODIMP
selectColumn(long column
) {
375 CONTENT_EXPORT STDMETHODIMP
unselectRow(long row
) {
379 CONTENT_EXPORT STDMETHODIMP
unselectColumn(long column
) {
383 CONTENT_EXPORT STDMETHODIMP
get_modelChange(
384 IA2TableModelChange
* model_change
) {
389 // IAccessibleTable2 methods.
391 // (Most of these are duplicates of IAccessibleTable methods, only the
392 // unique ones are included here.)
395 CONTENT_EXPORT STDMETHODIMP
get_cellAt(long row
,
399 CONTENT_EXPORT STDMETHODIMP
get_nSelectedCells(long* cell_count
);
401 CONTENT_EXPORT STDMETHODIMP
get_selectedCells(IUnknown
*** cells
,
402 long* n_selected_cells
);
404 CONTENT_EXPORT STDMETHODIMP
get_selectedColumns(long** columns
,
407 CONTENT_EXPORT STDMETHODIMP
get_selectedRows(long** rows
,
411 // IAccessibleTableCell methods.
414 CONTENT_EXPORT STDMETHODIMP
get_columnExtent(long* n_columns_spanned
);
416 CONTENT_EXPORT STDMETHODIMP
get_columnHeaderCells(
417 IUnknown
*** cell_accessibles
,
418 long* n_column_header_cells
);
420 CONTENT_EXPORT STDMETHODIMP
get_columnIndex(long* column_index
);
422 CONTENT_EXPORT STDMETHODIMP
get_rowExtent(long* n_rows_spanned
);
424 CONTENT_EXPORT STDMETHODIMP
get_rowHeaderCells(IUnknown
*** cell_accessibles
,
425 long* n_row_header_cells
);
427 CONTENT_EXPORT STDMETHODIMP
get_rowIndex(long* row_index
);
429 CONTENT_EXPORT STDMETHODIMP
get_isSelected(boolean
* is_selected
);
431 CONTENT_EXPORT STDMETHODIMP
get_rowColumnExtents(long* row
,
434 long* column_extents
,
435 boolean
* is_selected
);
437 CONTENT_EXPORT STDMETHODIMP
get_table(IUnknown
** table
);
440 // IAccessibleText methods.
443 CONTENT_EXPORT STDMETHODIMP
get_nCharacters(LONG
* n_characters
);
445 CONTENT_EXPORT STDMETHODIMP
get_caretOffset(LONG
* offset
);
447 CONTENT_EXPORT STDMETHODIMP
get_characterExtents(
449 enum IA2CoordinateType coord_type
,
455 CONTENT_EXPORT STDMETHODIMP
get_nSelections(LONG
* n_selections
);
457 CONTENT_EXPORT STDMETHODIMP
get_selection(LONG selection_index
,
461 CONTENT_EXPORT STDMETHODIMP
get_text(LONG start_offset
,
465 CONTENT_EXPORT STDMETHODIMP
get_textAtOffset(
467 enum IA2TextBoundaryType boundary_type
,
472 CONTENT_EXPORT STDMETHODIMP
get_textBeforeOffset(
474 enum IA2TextBoundaryType boundary_type
,
479 CONTENT_EXPORT STDMETHODIMP
get_textAfterOffset(
481 enum IA2TextBoundaryType boundary_type
,
486 CONTENT_EXPORT STDMETHODIMP
get_newText(IA2TextSegment
* new_text
);
488 CONTENT_EXPORT STDMETHODIMP
get_oldText(IA2TextSegment
* old_text
);
490 CONTENT_EXPORT STDMETHODIMP
get_offsetAtPoint(
493 enum IA2CoordinateType coord_type
,
496 CONTENT_EXPORT STDMETHODIMP
scrollSubstringTo(
499 enum IA2ScrollType scroll_type
);
501 CONTENT_EXPORT STDMETHODIMP
scrollSubstringToPoint(
504 enum IA2CoordinateType coordinate_type
,
507 CONTENT_EXPORT STDMETHODIMP
addSelection(LONG start_offset
, LONG end_offset
);
509 CONTENT_EXPORT STDMETHODIMP
removeSelection(LONG selection_index
);
511 CONTENT_EXPORT STDMETHODIMP
setCaretOffset(LONG offset
);
513 CONTENT_EXPORT STDMETHODIMP
setSelection(LONG selection_index
,
517 // IAccessibleText methods not implemented.
518 CONTENT_EXPORT STDMETHODIMP
get_attributes(LONG offset
, LONG
* start_offset
,
520 BSTR
* text_attributes
) {
525 // IAccessibleHypertext methods.
528 CONTENT_EXPORT STDMETHODIMP
get_nHyperlinks(long* hyperlink_count
);
530 CONTENT_EXPORT STDMETHODIMP
get_hyperlink(long index
,
531 IAccessibleHyperlink
** hyperlink
);
533 CONTENT_EXPORT STDMETHODIMP
get_hyperlinkIndex(long char_index
,
534 long* hyperlink_index
);
536 // IAccessibleHyperlink not implemented.
537 CONTENT_EXPORT STDMETHODIMP
get_anchor(long index
, VARIANT
* anchor
) {
540 CONTENT_EXPORT STDMETHODIMP
get_anchorTarget(long index
,
541 VARIANT
* anchor_target
) {
544 CONTENT_EXPORT STDMETHODIMP
get_startIndex( long* index
) {
547 CONTENT_EXPORT STDMETHODIMP
get_endIndex( long* index
) {
550 CONTENT_EXPORT STDMETHODIMP
get_valid(boolean
* valid
) {
554 // IAccessibleAction not implemented.
555 CONTENT_EXPORT STDMETHODIMP
nActions(long* n_actions
) {
558 CONTENT_EXPORT STDMETHODIMP
doAction(long action_index
) {
561 CONTENT_EXPORT STDMETHODIMP
get_description(long action_index
,
565 CONTENT_EXPORT STDMETHODIMP
get_keyBinding(long action_index
,
571 CONTENT_EXPORT STDMETHODIMP
get_name(long action_index
, BSTR
* name
) {
574 CONTENT_EXPORT STDMETHODIMP
get_localizedName(long action_index
,
575 BSTR
* localized_name
) {
580 // IAccessibleValue methods.
583 CONTENT_EXPORT STDMETHODIMP
get_currentValue(VARIANT
* value
);
585 CONTENT_EXPORT STDMETHODIMP
get_minimumValue(VARIANT
* value
);
587 CONTENT_EXPORT STDMETHODIMP
get_maximumValue(VARIANT
* value
);
589 CONTENT_EXPORT STDMETHODIMP
setCurrentValue(VARIANT new_value
);
592 // ISimpleDOMDocument methods.
595 CONTENT_EXPORT STDMETHODIMP
get_URL(BSTR
* url
);
597 CONTENT_EXPORT STDMETHODIMP
get_title(BSTR
* title
);
599 CONTENT_EXPORT STDMETHODIMP
get_mimeType(BSTR
* mime_type
);
601 CONTENT_EXPORT STDMETHODIMP
get_docType(BSTR
* doc_type
);
603 CONTENT_EXPORT STDMETHODIMP
get_nameSpaceURIForID(short name_space_id
,
604 BSTR
* name_space_uri
) {
607 CONTENT_EXPORT STDMETHODIMP
put_alternateViewMediaTypes(
608 BSTR
* comma_separated_media_types
) {
613 // ISimpleDOMNode methods.
616 CONTENT_EXPORT STDMETHODIMP
get_nodeInfo(BSTR
* node_name
,
617 short* name_space_id
,
619 unsigned int* num_children
,
620 unsigned int* unique_id
,
621 unsigned short* node_type
);
623 CONTENT_EXPORT STDMETHODIMP
get_attributes(unsigned short max_attribs
,
625 short* name_space_id
,
627 unsigned short* num_attribs
);
629 CONTENT_EXPORT STDMETHODIMP
get_attributesForNames(
630 unsigned short num_attribs
,
632 short* name_space_id
,
633 BSTR
* attrib_values
);
635 CONTENT_EXPORT STDMETHODIMP
get_computedStyle(
636 unsigned short max_style_properties
,
637 boolean use_alternate_view
,
638 BSTR
*style_properties
,
640 unsigned short *num_style_properties
);
642 CONTENT_EXPORT STDMETHODIMP
get_computedStyleForProperties(
643 unsigned short num_style_properties
,
644 boolean use_alternate_view
,
645 BSTR
* style_properties
,
648 CONTENT_EXPORT STDMETHODIMP
scrollTo(boolean placeTopLeft
);
650 CONTENT_EXPORT STDMETHODIMP
get_parentNode(ISimpleDOMNode
** node
);
652 CONTENT_EXPORT STDMETHODIMP
get_firstChild(ISimpleDOMNode
** node
);
654 CONTENT_EXPORT STDMETHODIMP
get_lastChild(ISimpleDOMNode
** node
);
656 CONTENT_EXPORT STDMETHODIMP
get_previousSibling(ISimpleDOMNode
** node
);
658 CONTENT_EXPORT STDMETHODIMP
get_nextSibling(ISimpleDOMNode
** node
);
660 CONTENT_EXPORT STDMETHODIMP
get_childAt(unsigned int child_index
,
661 ISimpleDOMNode
** node
);
663 CONTENT_EXPORT STDMETHODIMP
get_innerHTML(BSTR
* innerHTML
) {
667 CONTENT_EXPORT STDMETHODIMP
get_localInterface(void** local_interface
) {
671 CONTENT_EXPORT STDMETHODIMP
get_language(BSTR
* language
) {
676 // ISimpleDOMText methods.
679 CONTENT_EXPORT STDMETHODIMP
get_domText(BSTR
* dom_text
);
681 CONTENT_EXPORT STDMETHODIMP
get_clippedSubstringBounds(
682 unsigned int start_index
,
683 unsigned int end_index
,
689 CONTENT_EXPORT STDMETHODIMP
get_unclippedSubstringBounds(
690 unsigned int start_index
,
691 unsigned int end_index
,
697 CONTENT_EXPORT STDMETHODIMP
scrollToSubstring(unsigned int start_index
,
698 unsigned int end_index
);
700 CONTENT_EXPORT STDMETHODIMP
get_fontFamily(BSTR
*font_family
) {
705 // IServiceProvider methods.
708 CONTENT_EXPORT STDMETHODIMP
QueryService(REFGUID guidService
,
712 // IAccessibleEx methods not implemented.
713 CONTENT_EXPORT STDMETHODIMP
GetObjectForChild(long child_id
,
714 IAccessibleEx
** ret
) {
718 CONTENT_EXPORT STDMETHODIMP
GetIAccessiblePair(IAccessible
** acc
,
723 CONTENT_EXPORT STDMETHODIMP
GetRuntimeId(SAFEARRAY
** runtime_id
) {
727 CONTENT_EXPORT STDMETHODIMP
ConvertReturnedElement(
728 IRawElementProviderSimple
* element
,
729 IAccessibleEx
** acc
) {
734 // IRawElementProviderSimple methods.
736 // The GetPatternProvider/GetPropertyValue methods need to be implemented for
737 // the on-screen keyboard to show up in Windows 8 metro.
738 CONTENT_EXPORT STDMETHODIMP
GetPatternProvider(PATTERNID id
,
739 IUnknown
** provider
);
740 CONTENT_EXPORT STDMETHODIMP
GetPropertyValue(PROPERTYID id
, VARIANT
* ret
);
743 // IRawElementProviderSimple methods not implemented
745 CONTENT_EXPORT STDMETHODIMP
get_ProviderOptions(enum ProviderOptions
* ret
) {
749 CONTENT_EXPORT STDMETHODIMP
get_HostRawElementProvider(
750 IRawElementProviderSimple
** provider
) {
755 // CComObjectRootEx methods.
758 CONTENT_EXPORT HRESULT WINAPI
InternalQueryInterface(
760 const _ATL_INTMAP_ENTRY
* entries
,
765 int32
ia_role() const { return ia_role_
; }
766 int32
ia_state() const { return ia_state_
; }
767 const base::string16
& role_name() const { return role_name_
; }
768 int32
ia2_role() const { return ia2_role_
; }
769 int32
ia2_state() const { return ia2_state_
; }
770 const std::vector
<base::string16
>& ia2_attributes() const {
771 return ia2_attributes_
;
775 // Add one to the reference count and return the same object. Always
776 // use this method when returning a BrowserAccessibilityWin object as
777 // an output parameter to a COM interface, never use it otherwise.
778 BrowserAccessibilityWin
* NewReference();
780 // Many MSAA methods take a var_id parameter indicating that the operation
781 // should be performed on a particular child ID, rather than this object.
782 // This method tries to figure out the target object from |var_id| and
783 // returns a pointer to the target object if it exists, otherwise NULL.
784 // Does not return a new reference.
785 BrowserAccessibilityWin
* GetTargetFromChildID(const VARIANT
& var_id
);
787 // Initialize the role and state metadata from the role enum and state
788 // bitmasks defined in ui::AXNodeData.
789 void InitRoleAndState();
791 // Retrieve the value of an attribute from the string attribute map and
792 // if found and nonempty, allocate a new BSTR (with SysAllocString)
793 // and return S_OK. If not found or empty, return S_FALSE.
794 HRESULT
GetStringAttributeAsBstr(
795 ui::AXStringAttribute attribute
,
798 // If the string attribute |attribute| is present, add its value as an
799 // IAccessible2 attribute with the name |ia2_attr|.
800 void StringAttributeToIA2(ui::AXStringAttribute attribute
,
801 const char* ia2_attr
);
803 // If the bool attribute |attribute| is present, add its value as an
804 // IAccessible2 attribute with the name |ia2_attr|.
805 void BoolAttributeToIA2(ui::AXBoolAttribute attribute
,
806 const char* ia2_attr
);
808 // If the int attribute |attribute| is present, add its value as an
809 // IAccessible2 attribute with the name |ia2_attr|.
810 void IntAttributeToIA2(ui::AXIntAttribute attribute
,
811 const char* ia2_attr
);
813 // Get the value text, which might come from the floating-point
814 // value for some roles.
815 base::string16
GetValueText();
817 // Get the text of this node for the purposes of IAccessibleText - it may
818 // be the name, it may be the value, etc. depending on the role.
819 base::string16
TextForIAccessibleText();
821 // If offset is a member of IA2TextSpecialOffsets this function updates the
822 // value of offset and returns, otherwise offset remains unchanged.
823 void HandleSpecialTextOffset(const base::string16
& text
, LONG
* offset
);
825 // Convert from a IA2TextBoundaryType to a ui::TextBoundaryType.
826 ui::TextBoundaryType
IA2TextBoundaryToTextBoundary(IA2TextBoundaryType type
);
828 // Search forwards (direction == 1) or backwards (direction == -1)
829 // from the given offset until the given boundary is found, and
830 // return the offset of that boundary.
831 LONG
FindBoundary(const base::string16
& text
,
832 IA2TextBoundaryType ia2_boundary
,
834 ui::TextBoundaryDirection direction
);
836 // Return a pointer to the object corresponding to the given id,
837 // does not make a new reference.
838 BrowserAccessibilityWin
* GetFromID(int32 id
);
840 // Windows-specific unique ID (unique within the browser process),
841 // used for get_accChild, NotifyWinEvent, and as the unique ID for
842 // IAccessible2 and ISimpleDOM.
845 // IAccessible role and state.
848 base::string16 role_name_
;
850 // IAccessible2 role and state.
854 // IAccessible2 attributes.
855 std::vector
<base::string16
> ia2_attributes_
;
857 // True in Initialize when the object is first created, and false
861 // The previous text, before the last update to this object.
862 base::string16 previous_text_
;
864 // The old text to return in IAccessibleText::get_oldText - this is like
865 // previous_text_ except that it's NOT updated when the object
866 // is initialized again but the text doesn't change.
867 base::string16 old_text_
;
869 // The previous state, used to see if there was a state change.
872 // Relationships between this node and other nodes.
873 std::vector
<BrowserAccessibilityRelation
*> relations_
;
875 // The text of this node including embedded hyperlink characters.
876 base::string16 hypertext_
;
878 // Maps the |hypertext_| embedded character offset to an index in
880 std::map
<int32
, int32
> hyperlink_offset_to_index_
;
882 // Collection of non-static text child indicies, each of which corresponds to
884 std::vector
<int32
> hyperlinks_
;
886 // The previous scroll position, so we can tell if this object scrolled.
887 int previous_scroll_x_
;
888 int previous_scroll_y_
;
890 // The next unique id to use.
891 static LONG next_unique_id_win_
;
893 // Give BrowserAccessibility::Create access to our constructor.
894 friend class BrowserAccessibility
;
895 friend class BrowserAccessibilityRelation
;
897 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityWin
);
900 } // namespace content
902 #endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_WIN_H_