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