41 {};
42
44namespace win {
45class VariantVector;
46}
47}
48
50
51class AXPlatformNodeWin;
52
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,
59 public IGridProvider,
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;
76
77 public:
78 BEGIN_COM_MAP(AXPlatformNodeWin)
79
80
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)
103 END_COM_MAP()
104
105 ~AXPlatformNodeWin() override;
106
107 void Init(AXPlatformNodeDelegate* delegate) override;
108
109
112
113
114 void Destroy() override;
115 std::u16string GetValue() const override;
116 bool IsPlatformCheckable() const override;
117
118
119
120
121
122
123 IFACEMETHODIMP accHitTest(
LONG screen_physical_pixel_x,
124 LONG screen_physical_pixel_y,
125 VARIANT* child) override;
126
127
128 IFACEMETHODIMP accDoDefaultAction(VARIANT var_id) override;
129
130
131 IFACEMETHODIMP accLocation(
LONG* physical_pixel_left,
132 LONG* physical_pixel_top,
135 VARIANT var_id) override;
136
137
138 IFACEMETHODIMP accNavigate(
LONG nav_dir,
139 VARIANT start,
140 VARIANT*
end)
override;
141
142
143 IFACEMETHODIMP get_accChild(VARIANT var_child,
144 IDispatch** disp_child) override;
145
146
147 IFACEMETHODIMP get_accChildCount(
LONG* child_count)
override;
148
149
150 IFACEMETHODIMP get_accDefaultAction(VARIANT var_id,
151 BSTR* default_action) override;
152
153
154 IFACEMETHODIMP get_accDescription(VARIANT var_id, BSTR* desc) override;
155
156
157 IFACEMETHODIMP get_accFocus(VARIANT* focus_child) override;
158
159
160 IFACEMETHODIMP get_accKeyboardShortcut(VARIANT var_id,
161 BSTR* access_key) override;
162
163
164 IFACEMETHODIMP get_accName(VARIANT var_id, BSTR*
name)
override;
165
166
167 IFACEMETHODIMP get_accParent(IDispatch** disp_parent) override;
168
169
170 IFACEMETHODIMP get_accRole(VARIANT var_id, VARIANT* role) override;
171
172
173 IFACEMETHODIMP get_accState(VARIANT var_id, VARIANT* state) override;
174
175
176 IFACEMETHODIMP get_accHelp(VARIANT var_id, BSTR* help) override;
177
178
179
180
181 IFACEMETHODIMP get_accValue(VARIANT var_id, BSTR* value) override;
182 IFACEMETHODIMP put_accValue(VARIANT var_id, BSTR new_value) override;
183
184
185 IFACEMETHODIMP get_accSelection(VARIANT* selected) override;
186 IFACEMETHODIMP accSelect(
LONG flags_sel, VARIANT var_id)
override;
187 IFACEMETHODIMP get_accHelpTopic(BSTR* help_file,
188 VARIANT var_id,
189 LONG* topic_id)
override;
190 IFACEMETHODIMP put_accName(VARIANT var_id, BSTR put_name) override;
191
192
193
194
195
196 IFACEMETHODIMP GetObjectForChild(
LONG child_id,
197 IAccessibleEx** result) override;
198
199 IFACEMETHODIMP GetIAccessiblePair(IAccessible**
accessible,
200 LONG* child_id)
override;
201
202
203 IFACEMETHODIMP
204 ConvertReturnedElement(IRawElementProviderSimple* element,
205 IAccessibleEx** acc) override;
206
207
208
209
210
211 IFACEMETHODIMP Collapse() override;
212
213 IFACEMETHODIMP Expand() override;
214
215 IFACEMETHODIMP get_ExpandCollapseState(ExpandCollapseState* result) override;
216
217
218
219
220
221 IFACEMETHODIMP get_Column(int* result) override;
222
223 IFACEMETHODIMP get_ColumnSpan(int* result) override;
224
225 IFACEMETHODIMP get_ContainingGrid(
226 IRawElementProviderSimple** result) override;
227
228 IFACEMETHODIMP get_Row(int* result) override;
229
230 IFACEMETHODIMP get_RowSpan(int* result) override;
231
232
233
234
235
236 IFACEMETHODIMP GetItem(int row,
237 int column,
238 IRawElementProviderSimple** result) override;
239
240 IFACEMETHODIMP get_RowCount(int* result) override;
241
242 IFACEMETHODIMP get_ColumnCount(int* result) override;
243
244
245
246
247
248 IFACEMETHODIMP Invoke() override;
249
250
251
252
253
254 IFACEMETHODIMP ScrollIntoView() override;
255
256
257
258
259
260 IFACEMETHODIMP Scroll(ScrollAmount horizontal_amount,
261 ScrollAmount vertical_amount) override;
262
263 IFACEMETHODIMP SetScrollPercent(double horizontal_percent,
264 double vertical_percent) override;
265
266 IFACEMETHODIMP get_HorizontallyScrollable(
BOOL* result)
override;
267
268 IFACEMETHODIMP get_HorizontalScrollPercent(double* result) override;
269
270
271
272 IFACEMETHODIMP get_HorizontalViewSize(double* result) override;
273
274 IFACEMETHODIMP get_VerticallyScrollable(
BOOL* result)
override;
275
276 IFACEMETHODIMP get_VerticalScrollPercent(double* result) override;
277
278
279
280 IFACEMETHODIMP get_VerticalViewSize(double* result) override;
281
282
283
284
285
286 IFACEMETHODIMP AddToSelection() override;
287
288 IFACEMETHODIMP RemoveFromSelection() override;
289
290 IFACEMETHODIMP Select() override;
291
292 IFACEMETHODIMP get_IsSelected(
BOOL* result)
override;
293
294 IFACEMETHODIMP get_SelectionContainer(
295 IRawElementProviderSimple** result) override;
296
297
298
299
300
301 IFACEMETHODIMP GetSelection(SAFEARRAY** result) override;
302
303 IFACEMETHODIMP get_CanSelectMultiple(
BOOL* result)
override;
304
305 IFACEMETHODIMP get_IsSelectionRequired(
BOOL* result)
override;
306
307
308
309
310
311 IFACEMETHODIMP GetColumnHeaderItems(SAFEARRAY** result) override;
312
313 IFACEMETHODIMP GetRowHeaderItems(SAFEARRAY** result) override;
314
315
316
317
318
319 IFACEMETHODIMP GetColumnHeaders(SAFEARRAY** result) override;
320
321 IFACEMETHODIMP GetRowHeaders(SAFEARRAY** result) override;
322
323 IFACEMETHODIMP get_RowOrColumnMajor(RowOrColumnMajor* result) override;
324
325
326
327
328
329 IFACEMETHODIMP Toggle() override;
330
331 IFACEMETHODIMP get_ToggleState(ToggleState* result) override;
332
333
334
335
336
337 IFACEMETHODIMP SetValue(LPCWSTR val) override;
338
339 IFACEMETHODIMP get_IsReadOnly(
BOOL* result)
override;
340
341 IFACEMETHODIMP get_Value(BSTR* result) override;
342
343
344
345
346
347 IFACEMETHODIMP SetVisualState(WindowVisualState window_visual_state) override;
348
349 IFACEMETHODIMP
Close()
override;
350
351 IFACEMETHODIMP WaitForInputIdle(
int milliseconds,
BOOL* result)
override;
352
353 IFACEMETHODIMP get_CanMaximize(
BOOL* result)
override;
354
355 IFACEMETHODIMP get_CanMinimize(
BOOL* result)
override;
356
357 IFACEMETHODIMP get_IsModal(
BOOL* result)
override;
358
359 IFACEMETHODIMP get_WindowVisualState(WindowVisualState* result) override;
360
361 IFACEMETHODIMP get_WindowInteractionState(
362 WindowInteractionState* result) override;
363
364 IFACEMETHODIMP get_IsTopmost(
BOOL* result)
override;
365
366
367
368
369
370 IFACEMETHODIMP SetValue(double val) override;
371
372 IFACEMETHODIMP get_LargeChange(double* result) override;
373
374 IFACEMETHODIMP get_Maximum(double* result) override;
375
376 IFACEMETHODIMP get_Minimum(double* result) override;
377
378 IFACEMETHODIMP get_SmallChange(double* result) override;
379
380 IFACEMETHODIMP get_Value(double* result) override;
381
382
383
384
385
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;
397
398
399
400
401
402 IFACEMETHODIMP GetPatternProvider(PATTERNID pattern_id,
403 IUnknown** result) override;
404
405 IFACEMETHODIMP GetPropertyValue(PROPERTYID property_id,
406 VARIANT* result) override;
407
408 IFACEMETHODIMP
409 get_ProviderOptions(enum ProviderOptions* ret) override;
410
411 IFACEMETHODIMP
412 get_HostRawElementProvider(IRawElementProviderSimple** provider) override;
413
414
415
416
417
418 IFACEMETHODIMP ShowContextMenu() override;
419
420
421
422
423
424 IFACEMETHODIMP QueryService(
REFGUID guidService,
425 REFIID riid,
426 void** object) override;
427
428
429
430
431
432
433 static STDMETHODIMP InternalQueryInterface(void* this_ptr,
434 const _ATL_INTMAP_ENTRY* entries,
435 REFIID riid,
436 void** object);
437
438
439
440
441 HRESULT GetTextAttributeValue(TEXTATTRIBUTEID attribute_id,
442 const std::optional<int>& start_offset,
443 const std::optional<int>& end_offset,
445
446
447 bool IsPatternProviderSupported(PATTERNID pattern_id);
448
449
450
451
452 HRESULT GetPatternProviderImpl(PATTERNID pattern_id, IUnknown** result);
453
454
455
456
457 HRESULT GetPropertyValueImpl(PROPERTYID property_id, VARIANT* result);
458
459
460 using RuntimeIdArray = std::array<int, 2>;
461 void GetRuntimeIdArray(RuntimeIdArray& runtime_id);
462
463
464
465 void OnActiveComposition(
const gfx::Range& range,
466 const std::u16string& active_composition_text,
467 bool is_composition_committed);
468
469 bool HasActiveComposition() const;
470
471 gfx::Range GetActiveCompositionOffsets()
const;
472
473
474 void FireLiveRegionChangeRecursive();
475
476
477 AXPlatformNodeWin* GetLowestAccessibleElement();
478
479
480
481 AXPlatformNodeWin* GetFirstTextOnlyDescendant();
482
483
485
486
488
489
491
492
493 bool IsDescendantOf(AXPlatformNode* ancestor) const override;
494
495 protected:
496
497
498
499 static constexpr const wchar_t* FRAMEWORK_ID = L"Chrome";
500
501 AXPlatformNodeWin();
502
503 int MSAAState() const;
504
505 int MSAARole();
506
507 std::u16string UIAAriaRole();
508
509 std::u16string ComputeUIAProperties();
510
511 LONG ComputeUIAControlType();
512
513 AXPlatformNodeWin* ComputeUIALabeledBy();
514
515 bool CanHaveUIALabeledBy();
516
517 bool IsNameExposed() const;
518
519 bool IsUIAControl() const;
520
521 std::optional<LONG> ComputeUIALandmarkType() const;
522
523 bool IsInaccessibleDueToAncestor() const;
524
525 bool ShouldHideChildrenForUIA() const;
526
527 ExpandCollapseState ComputeExpandCollapseState() const;
528
529
530 void Dispose() override;
531
532 AXHypertext old_hypertext_;
533
534
535
536
537
538
539 void AddAttributeToList(
const char*
name,
540 const char* value,
541 PlatformAttributeList* attributes) override;
542
543 private:
544 bool IsWebAreaForPresentationalIframe();
545 bool ShouldNodeHaveFocusableState(const AXNodeData& data) const;
546
547
548
549 static BSTR GetValueAttributeAsBstr(AXPlatformNodeWin*
target);
550
552 BSTR* value_bstr) const;
553
554 HRESULT GetNameAsBstr(BSTR* value_bstr) const;
555
556
557
558 static void SanitizeStringAttributeForUIAAriaProperty(
559 const std::u16string&
input,
560 std::u16string* output);
561
562
563
564 void StringAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
566 const char* uia_aria_property);
567
568
569
570 void BoolAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
572 const char* uia_aria_property);
573
574
575
576 void IntAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
578 const char* uia_aria_property);
579
580
581
582 void FloatAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
584 const char* uia_aria_property);
585
586
587
588
589 void StateToUIAAriaProperty(std::vector<std::u16string>& properties,
591 const char* uia_aria_property);
592
593
594
595 void HtmlAttributeToUIAAriaProperty(std::vector<std::u16string>& properties,
596 const char* html_attribute_name,
597 const char* uia_aria_property);
598
599
600
601
602
603 SAFEARRAY* CreateUIAElementsArrayForRelation(
605
606
607
608
609
610
611 SAFEARRAY* CreateUIAControllerForArray();
612
613
614
615 SAFEARRAY* CreateUIAElementsArrayForReverseRelation(
617
618
619
620
621 std::vector<AXPlatformNodeWin*> CreatePlatformNodeVectorFromRelationIdVector(
622 std::vector<int32_t>& relation_id_list);
623
624
625
626
627
628 SAFEARRAY* CreateUIAElementsSafeArray(
629 std::vector<AXPlatformNodeWin*>& platform_node_list);
630
631
632
633 SAFEARRAY* CreateClickablePointArray();
634
635
636
638 const ScrollAmount horizontal_amount,
639 const ScrollAmount vertical_amount) const;
640
641 void AddAlertTarget();
642 void RemoveAlertTarget();
643
644
645
646 enum class TextOffsetType { kAtOffset, kBeforeOffset, kAfterOffset };
647
648
649
650
651
652
653 AXPlatformNodeWin* GetTargetFromChildID(const VARIANT& var_id);
654
655
656 bool IsInTreeGrid();
657
658
659
660 HRESULT AllocateComArrayFromVector(std::vector<LONG>& results,
664
665
666 HRESULT ISelectionItemProviderSetSelected(bool selected) const;
667
668
669 bool ISelectionItemProviderIsSelected() const;
670
671
672
673
674
675
676 HRESULT GetAnnotationTypesAttribute(const std::optional<int>& start_offset,
677 const std::optional<int>& end_offset,
679
680
681 std::optional<LCID> GetCultureAttributeAsLCID() const;
682
684
685 BulletStyle ComputeUIABulletStyle() const;
686
687 LONG ComputeUIAStyleId()
const;
688
689 static std::optional<HorizontalTextAlignment>
691
692 static LONG AXHierarchicalLevelToUIAStyleId(int32_t hierarchical_level);
693
695
696 static FlowDirections TextDirectionToFlowDirections(
698
699
700
701 static void AggregateRangesForMarkerType(
702 AXPlatformNodeBase* node,
704 int offset_ranges_amount,
705 std::vector<std::pair<int, int>>* ranges);
706
707 enum class MarkerTypeRangeResult {
708
710
711 kMatch,
712
714 };
715
716
717
718 MarkerTypeRangeResult GetMarkerTypeFromRange(
719 const std::optional<int>& start_offset,
720 const std::optional<int>& end_offset,
722
723 bool IsAncestorComboBox();
724
725 bool IsPlaceholderText() const;
726
727
728 double GetHorizontalScrollPercent();
729
730
731 double GetVerticalScrollPercent();
732
733
734 BSTR GetFontNameAttributeAsBSTR() const;
735
736
737 BSTR GetStyleNameAttributeAsBSTR() const;
738
739
740 TextDecorationLineStyle GetUIATextDecorationStyle(
742
743
744
745 using PatternProviderFactoryMethod = void (*)(AXPlatformNodeWin*, IUnknown**);
746
747 PatternProviderFactoryMethod GetPatternProviderFactoryMethod(
748 PATTERNID pattern_id);
749
750
751 void FireUiaTextEditTextChangedEvent(
753 const std::u16string& active_composition_text,
754 bool is_composition_committed);
755
756
757
758 static bool IsValidUiaRelationTarget(AXPlatformNode* ax_platform_node);
759
760
762};
763
764}
765
766#endif
ax::mojom::Event event_type
FlViewAccessible * accessible
UnimplementedNativeViewAccessible * NativeViewAccessible
void Close(PathBuilder *builder)