6#ifndef UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_WIN_H_
7#define UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_WIN_H_
14#include <uiautomation.h>
15#include <wrl/client.h>
33#define UIA_VALIDATE_CALL() \
34 if (!AXPlatformNodeBase::GetDelegate()) \
35 return UIA_E_ELEMENTNOTAVAILABLE;
36#define UIA_VALIDATE_CALL_1_ARG(arg) \
37 if (!AXPlatformNodeBase::GetDelegate()) \
38 return UIA_E_ELEMENTNOTAVAILABLE; \
40 return E_INVALIDARG; \
51class AXPlatformNodeWin;
53class AX_EXPORT __declspec(uuid(
"26f5641a-246d-457b-a96d-07f3fae6acf2"))
54 AXPlatformNodeWin :
public CComObjectRootEx<CComMultiThreadModel>,
55 public IDispatchImpl<IAccessible>,
57 public IExpandCollapseProvider,
58 public IGridItemProvider,
60 public IInvokeProvider,
61 public IRangeValueProvider,
62 public IRawElementProviderFragment,
63 public IRawElementProviderSimple2,
64 public IScrollItemProvider,
65 public IScrollProvider,
66 public ISelectionItemProvider,
67 public ISelectionProvider,
68 public IServiceProvider,
69 public ITableItemProvider,
70 public ITableProvider,
71 public IToggleProvider,
72 public IValueProvider,
73 public IWindowProvider,
74 public AXPlatformNodeBase {
75 using IDispatchImpl::Invoke;
78 BEGIN_COM_MAP(AXPlatformNodeWin)
81 COM_INTERFACE_ENTRY(AXPlatformNodeWin)
82 COM_INTERFACE_ENTRY(IAccessible)
83 COM_INTERFACE_ENTRY(IAccessibleEx)
84 COM_INTERFACE_ENTRY(IDispatch)
85 COM_INTERFACE_ENTRY(IExpandCollapseProvider)
86 COM_INTERFACE_ENTRY(IGridItemProvider)
87 COM_INTERFACE_ENTRY(IGridProvider)
88 COM_INTERFACE_ENTRY(IInvokeProvider)
89 COM_INTERFACE_ENTRY(IRangeValueProvider)
90 COM_INTERFACE_ENTRY(IRawElementProviderFragment)
91 COM_INTERFACE_ENTRY(IRawElementProviderSimple)
92 COM_INTERFACE_ENTRY(IRawElementProviderSimple2)
93 COM_INTERFACE_ENTRY(IScrollItemProvider)
94 COM_INTERFACE_ENTRY(IScrollProvider)
95 COM_INTERFACE_ENTRY(ISelectionItemProvider)
96 COM_INTERFACE_ENTRY(ISelectionProvider)
97 COM_INTERFACE_ENTRY(ITableItemProvider)
98 COM_INTERFACE_ENTRY(ITableProvider)
99 COM_INTERFACE_ENTRY(IToggleProvider)
100 COM_INTERFACE_ENTRY(IValueProvider)
101 COM_INTERFACE_ENTRY(IWindowProvider)
102 COM_INTERFACE_ENTRY(IServiceProvider)
105 ~AXPlatformNodeWin()
override;
107 void Init(AXPlatformNodeDelegate* delegate)
override;
114 void Destroy()
override;
115 std::u16string GetValue()
const override;
116 bool IsPlatformCheckable()
const override;
123 IFACEMETHODIMP accHitTest(
LONG screen_physical_pixel_x,
124 LONG screen_physical_pixel_y,
125 VARIANT* child)
override;
128 IFACEMETHODIMP accDoDefaultAction(VARIANT var_id)
override;
131 IFACEMETHODIMP accLocation(
LONG* physical_pixel_left,
132 LONG* physical_pixel_top,
135 VARIANT var_id)
override;
138 IFACEMETHODIMP accNavigate(
LONG nav_dir,
140 VARIANT*
end)
override;
143 IFACEMETHODIMP get_accChild(VARIANT var_child,
144 IDispatch** disp_child)
override;
147 IFACEMETHODIMP get_accChildCount(
LONG* child_count)
override;
150 IFACEMETHODIMP get_accDefaultAction(VARIANT var_id,
151 BSTR* default_action)
override;
154 IFACEMETHODIMP get_accDescription(VARIANT var_id, BSTR* desc)
override;
157 IFACEMETHODIMP get_accFocus(VARIANT* focus_child)
override;
160 IFACEMETHODIMP get_accKeyboardShortcut(VARIANT var_id,
161 BSTR* access_key)
override;
164 IFACEMETHODIMP get_accName(VARIANT var_id, BSTR*
name)
override;
167 IFACEMETHODIMP get_accParent(IDispatch** disp_parent)
override;
170 IFACEMETHODIMP get_accRole(VARIANT var_id, VARIANT* role)
override;
173 IFACEMETHODIMP get_accState(VARIANT var_id, VARIANT* state)
override;
176 IFACEMETHODIMP get_accHelp(VARIANT var_id, BSTR* help)
override;
181 IFACEMETHODIMP get_accValue(VARIANT var_id, BSTR* value)
override;
182 IFACEMETHODIMP put_accValue(VARIANT var_id, BSTR new_value)
override;
185 IFACEMETHODIMP get_accSelection(VARIANT* selected)
override;
186 IFACEMETHODIMP accSelect(
LONG flags_sel, VARIANT var_id)
override;
187 IFACEMETHODIMP get_accHelpTopic(BSTR* help_file,
189 LONG* topic_id)
override;
190 IFACEMETHODIMP put_accName(VARIANT var_id, BSTR put_name)
override;
196 IFACEMETHODIMP GetObjectForChild(
LONG child_id,
197 IAccessibleEx** result)
override;
199 IFACEMETHODIMP GetIAccessiblePair(IAccessible**
accessible,
200 LONG* child_id)
override;
204 ConvertReturnedElement(IRawElementProviderSimple* element,
205 IAccessibleEx** acc)
override;
211 IFACEMETHODIMP Collapse()
override;
213 IFACEMETHODIMP Expand()
override;
215 IFACEMETHODIMP get_ExpandCollapseState(ExpandCollapseState* result)
override;
221 IFACEMETHODIMP get_Column(
int* result)
override;
223 IFACEMETHODIMP get_ColumnSpan(
int* result)
override;
225 IFACEMETHODIMP get_ContainingGrid(
226 IRawElementProviderSimple** result)
override;
228 IFACEMETHODIMP get_Row(
int* result)
override;
230 IFACEMETHODIMP get_RowSpan(
int* result)
override;
236 IFACEMETHODIMP GetItem(
int row,
238 IRawElementProviderSimple** result)
override;
240 IFACEMETHODIMP get_RowCount(
int* result)
override;
242 IFACEMETHODIMP get_ColumnCount(
int* result)
override;
248 IFACEMETHODIMP Invoke()
override;
254 IFACEMETHODIMP ScrollIntoView()
override;
260 IFACEMETHODIMP Scroll(ScrollAmount horizontal_amount,
261 ScrollAmount vertical_amount)
override;
263 IFACEMETHODIMP SetScrollPercent(
double horizontal_percent,
264 double vertical_percent)
override;
266 IFACEMETHODIMP get_HorizontallyScrollable(
BOOL* result)
override;
268 IFACEMETHODIMP get_HorizontalScrollPercent(
double* result)
override;
272 IFACEMETHODIMP get_HorizontalViewSize(
double* result)
override;
274 IFACEMETHODIMP get_VerticallyScrollable(
BOOL* result)
override;
276 IFACEMETHODIMP get_VerticalScrollPercent(
double* result)
override;
280 IFACEMETHODIMP get_VerticalViewSize(
double* result)
override;
286 IFACEMETHODIMP AddToSelection()
override;
288 IFACEMETHODIMP RemoveFromSelection()
override;
290 IFACEMETHODIMP Select()
override;
292 IFACEMETHODIMP get_IsSelected(
BOOL* result)
override;
294 IFACEMETHODIMP get_SelectionContainer(
295 IRawElementProviderSimple** result)
override;
301 IFACEMETHODIMP GetSelection(SAFEARRAY** result)
override;
303 IFACEMETHODIMP get_CanSelectMultiple(
BOOL* result)
override;
305 IFACEMETHODIMP get_IsSelectionRequired(
BOOL* result)
override;
311 IFACEMETHODIMP GetColumnHeaderItems(SAFEARRAY** result)
override;
313 IFACEMETHODIMP GetRowHeaderItems(SAFEARRAY** result)
override;
319 IFACEMETHODIMP GetColumnHeaders(SAFEARRAY** result)
override;
321 IFACEMETHODIMP GetRowHeaders(SAFEARRAY** result)
override;
323 IFACEMETHODIMP get_RowOrColumnMajor(RowOrColumnMajor* result)
override;
329 IFACEMETHODIMP Toggle()
override;
331 IFACEMETHODIMP get_ToggleState(ToggleState* result)
override;
337 IFACEMETHODIMP SetValue(LPCWSTR val)
override;
339 IFACEMETHODIMP get_IsReadOnly(
BOOL* result)
override;
341 IFACEMETHODIMP get_Value(BSTR* result)
override;
347 IFACEMETHODIMP SetVisualState(WindowVisualState window_visual_state)
override;
349 IFACEMETHODIMP Close()
override;
351 IFACEMETHODIMP WaitForInputIdle(
int milliseconds,
BOOL* result)
override;
353 IFACEMETHODIMP get_CanMaximize(
BOOL* result)
override;
355 IFACEMETHODIMP get_CanMinimize(
BOOL* result)
override;
357 IFACEMETHODIMP get_IsModal(
BOOL* result)
override;
359 IFACEMETHODIMP get_WindowVisualState(WindowVisualState* result)
override;
361 IFACEMETHODIMP get_WindowInteractionState(
362 WindowInteractionState* result)
override;
364 IFACEMETHODIMP get_IsTopmost(
BOOL* result)
override;
370 IFACEMETHODIMP SetValue(
double val)
override;
372 IFACEMETHODIMP get_LargeChange(
double* result)
override;
374 IFACEMETHODIMP get_Maximum(
double* result)
override;
376 IFACEMETHODIMP get_Minimum(
double* result)
override;
378 IFACEMETHODIMP get_SmallChange(
double* result)
override;
380 IFACEMETHODIMP get_Value(
double* result)
override;
386 IFACEMETHODIMP Navigate(
387 NavigateDirection direction,
388 IRawElementProviderFragment** element_provider)
override;
389 IFACEMETHODIMP GetRuntimeId(SAFEARRAY** runtime_id)
override;
390 IFACEMETHODIMP get_BoundingRectangle(
391 UiaRect* screen_physical_pixel_bounds)
override;
392 IFACEMETHODIMP GetEmbeddedFragmentRoots(
393 SAFEARRAY** embedded_fragment_roots)
override;
394 IFACEMETHODIMP SetFocus()
override;
395 IFACEMETHODIMP get_FragmentRoot(
396 IRawElementProviderFragmentRoot** fragment_root)
override;
402 IFACEMETHODIMP GetPatternProvider(PATTERNID pattern_id,
403 IUnknown** result)
override;
405 IFACEMETHODIMP GetPropertyValue(PROPERTYID property_id,
406 VARIANT* result)
override;
409 get_ProviderOptions(
enum ProviderOptions* ret)
override;
412 get_HostRawElementProvider(IRawElementProviderSimple** provider)
override;
418 IFACEMETHODIMP ShowContextMenu()
override;
424 IFACEMETHODIMP QueryService(
REFGUID guidService,
426 void**
object)
override;
433 static STDMETHODIMP InternalQueryInterface(
void* this_ptr,
434 const _ATL_INTMAP_ENTRY* entries,
441 HRESULT GetTextAttributeValue(TEXTATTRIBUTEID attribute_id,
442 const std::optional<int>& start_offset,
443 const std::optional<int>& end_offset,
447 bool IsPatternProviderSupported(PATTERNID pattern_id);
452 HRESULT GetPatternProviderImpl(PATTERNID pattern_id, IUnknown** result);
457 HRESULT GetPropertyValueImpl(PROPERTYID property_id, VARIANT* result);
460 using RuntimeIdArray = std::array<int, 2>;
461 void GetRuntimeIdArray(RuntimeIdArray& runtime_id);
465 void OnActiveComposition(
const gfx::Range& range,
466 const std::u16string& active_composition_text,
467 bool is_composition_committed);
469 bool HasActiveComposition()
const;
471 gfx::Range GetActiveCompositionOffsets()
const;
474 void FireLiveRegionChangeRecursive();
477 AXPlatformNodeWin* GetLowestAccessibleElement();
481 AXPlatformNodeWin* GetFirstTextOnlyDescendant();
493 bool IsDescendantOf(AXPlatformNode* ancestor)
const override;
499 static constexpr const wchar_t* FRAMEWORK_ID = L
"Chrome";
503 int MSAAState()
const;
507 std::u16string UIAAriaRole();
509 std::u16string ComputeUIAProperties();
511 LONG ComputeUIAControlType();
513 AXPlatformNodeWin* ComputeUIALabeledBy();
515 bool CanHaveUIALabeledBy();
517 bool IsNameExposed()
const;
519 bool IsUIAControl()
const;
521 std::optional<LONG> ComputeUIALandmarkType()
const;
523 bool IsInaccessibleDueToAncestor()
const;
525 bool ShouldHideChildrenForUIA()
const;
527 ExpandCollapseState ComputeExpandCollapseState()
const;
530 void Dispose()
override;
532 AXHypertext old_hypertext_;
539 void AddAttributeToList(
const char*
name,
541 PlatformAttributeList* attributes)
override;
544 bool IsWebAreaForPresentationalIframe();
545 bool ShouldNodeHaveFocusableState(
const AXNodeData& data)
const;
549 static BSTR GetValueAttributeAsBstr(AXPlatformNodeWin*
target);
552 BSTR* value_bstr)
const;
554 HRESULT GetNameAsBstr(BSTR* value_bstr)
const;
558 static void SanitizeStringAttributeForUIAAriaProperty(
559 const std::u16string&
input,
560 std::u16string* output);
564 void StringAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
566 const char* uia_aria_property);
570 void BoolAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
572 const char* uia_aria_property);
576 void IntAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
578 const char* uia_aria_property);
582 void FloatAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
584 const char* uia_aria_property);
589 void StateToUIAAriaProperty(std::vector<std::u16string>& properties,
591 const char* uia_aria_property);
595 void HtmlAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
596 const char* html_attribute_name,
597 const char* uia_aria_property);
603 SAFEARRAY* CreateUIAElementsArrayForRelation(
611 SAFEARRAY* CreateUIAControllerForArray();
615 SAFEARRAY* CreateUIAElementsArrayForReverseRelation(
621 std::vector<AXPlatformNodeWin*> CreatePlatformNodeVectorFromRelationIdVector(
622 std::vector<int32_t>& relation_id_list);
628 SAFEARRAY* CreateUIAElementsSafeArray(
629 std::vector<AXPlatformNodeWin*>& platform_node_list);
633 SAFEARRAY* CreateClickablePointArray();
638 const ScrollAmount horizontal_amount,
639 const ScrollAmount vertical_amount)
const;
641 void AddAlertTarget();
642 void RemoveAlertTarget();
646 enum class TextOffsetType { kAtOffset, kBeforeOffset, kAfterOffset };
653 AXPlatformNodeWin* GetTargetFromChildID(
const VARIANT& var_id);
660 HRESULT AllocateComArrayFromVector(std::vector<LONG>& results,
666 HRESULT ISelectionItemProviderSetSelected(
bool selected)
const;
669 bool ISelectionItemProviderIsSelected()
const;
676 HRESULT GetAnnotationTypesAttribute(
const std::optional<int>& start_offset,
677 const std::optional<int>& end_offset,
681 std::optional<LCID> GetCultureAttributeAsLCID()
const;
685 BulletStyle ComputeUIABulletStyle()
const;
687 LONG ComputeUIAStyleId()
const;
689 static std::optional<HorizontalTextAlignment>
692 static LONG AXHierarchicalLevelToUIAStyleId(int32_t hierarchical_level);
696 static FlowDirections TextDirectionToFlowDirections(
701 static void AggregateRangesForMarkerType(
702 AXPlatformNodeBase* node,
704 int offset_ranges_amount,
705 std::vector<std::pair<int, int>>* ranges);
707 enum class MarkerTypeRangeResult {
718 MarkerTypeRangeResult GetMarkerTypeFromRange(
719 const std::optional<int>& start_offset,
720 const std::optional<int>& end_offset,
723 bool IsAncestorComboBox();
725 bool IsPlaceholderText()
const;
728 double GetHorizontalScrollPercent();
731 double GetVerticalScrollPercent();
734 BSTR GetFontNameAttributeAsBSTR()
const;
737 BSTR GetStyleNameAttributeAsBSTR()
const;
740 TextDecorationLineStyle GetUIATextDecorationStyle(
745 using PatternProviderFactoryMethod = void (*)(AXPlatformNodeWin*, IUnknown**);
747 PatternProviderFactoryMethod GetPatternProviderFactoryMethod(
748 PATTERNID pattern_id);
751 void FireUiaTextEditTextChangedEvent(
753 const std::u16string& active_composition_text,
754 bool is_composition_committed);
758 static bool IsValidUiaRelationTarget(AXPlatformNode* ax_platform_node);
ax::mojom::Event event_type
FlViewAccessible * accessible
UnimplementedNativeViewAccessible * NativeViewAccessible