AXIsolatedObject implementation of the title method.
[WebKit.git] / Source / WebCore / accessibility / isolatedtree / AXIsolatedObject.h
1 /*
2 * Copyright (C) 2019 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #pragma once
27
28 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
29
30 #include "AXObjectCache.h"
31 #include "AccessibilityObjectInterface.h"
32 #include "IntPoint.h"
33 #include "LayoutRect.h"
34 #include "Path.h"
35 #include <wtf/Forward.h>
36 #include <wtf/HashMap.h>
37 #include <wtf/RefPtr.h>
38 #include <wtf/RetainPtr.h>
39 #include <wtf/ThreadSafeRefCounted.h>
40 #include <wtf/Variant.h>
41 #include <wtf/Vector.h>
42 #include <wtf/WeakPtr.h>
43
44 namespace WebCore {
45
46 class AXIsolatedTree;
47
48 class AXIsolatedObject final : public AXCoreObject {
49     friend class AXIsolatedTree;
50 public:
51     static Ref<AXIsolatedObject> create(AXCoreObject&, AXIsolatedTreeID, AXID parentID);
52     ~AXIsolatedObject();
53
54     void setObjectID(AXID id) override { m_id = id; }
55     AXID objectID() const override { return m_id; }
56     void init() override { }
57
58     void attachPlatformWrapper(AccessibilityObjectWrapper*);
59     bool isDetached() const override;
60
61     void setParent(AXID);
62     void appendChild(AXID);
63
64 private:
65     void detachRemoteParts(AccessibilityDetachmentType) override;
66     void detachPlatformWrapper(AccessibilityDetachmentType) override;
67
68     AXID parent() const { return m_parentID; }
69
70     AXIsolatedTreeID treeIdentifier() const { return m_treeID; }
71     AXIsolatedTree* tree() const { return m_cachedTree.get(); }
72
73     AXIsolatedObject() = default;
74     AXIsolatedObject(AXCoreObject&, AXIsolatedTreeID, AXID parentID);
75     void initializeAttributeData(AXCoreObject&, bool isRoot);
76     AXCoreObject* associatedAXObject() const
77     {
78         ASSERT(isMainThread());
79         return axObjectCache()->objectFromAXID(objectID());
80     }
81
82     enum class AXPropertyName : uint8_t {
83         None = 0,
84         AccessKey,
85         ActionVerb,
86         AccessibilityButtonState,
87         AccessibilityText,
88         AutoCompleteValue,
89         ARIAControlsElements,
90         ARIADetailsElements,
91         ARIADropEffects,
92         ARIAErrorMessageElements,
93         ARIAIsMultiline,
94         ARIAFlowToElements,
95         ARIALandmarkRoleDescription,
96         ARIATreeItemContent,
97         ARIATreeRows,
98         ARIARoleAttribute,
99         ARIAOwnsElements,
100         AXColumnCount,
101         AXColumnIndex,
102         AXRowCount,
103         AXRowIndex,
104         BlockquoteLevel,
105         BoundingBoxRect,
106         CanHaveSelectedChildren,
107         CanSetExpandedAttribute,
108         CanSetFocusAttribute,
109         CanSetNumericValue,
110         CanSetSelectedAttribute,
111         CanSetSelectedChildrenAttribute,
112         CanSetTextRangeAttributes,
113         CanSetValueAttribute,
114         CanvasHasFallbackContent,
115 #if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)
116         CaretBrowsingEnabled,
117 #endif
118         Cells,
119         ClassList,
120         ClickPoint,
121         ColorValue,
122         Columns,
123         ColumnCount,
124         ColumnHeader,
125         ColumnHeaders,
126         ColumnIndex,
127         ColumnIndexRange,
128         ComputedLabel,
129         ComputedRoleString,
130         CurrentState,
131         CurrentValue,
132         DatetimeAttributeValue,
133         DecrementButton,
134         Description,
135         DisclosedByRow,
136         DisclosedRows,
137         DocumentEncoding,
138         DocumentLinks,
139         DocumentURI,
140         EditableAncestor,
141         ElementRect,
142         EstimatedLoadingProgress,
143         ExpandedTextValue,
144         ExposesTitleUIElement,
145         FileUploadButtonReturnsValueInTitle,
146         FocusableAncestor,
147         HasARIAValueNow,
148         HasApplePDFAnnotationAttribute,
149         HasChildren,
150         HasPopup,
151         HeaderContainer,
152         HeadingLevel,
153         HelpText,
154         HierarchicalLevel,
155         HighestEditableAncestor,
156         HorizontalScrollBar,
157         IdentifierAttribute,
158         InvalidStatus,
159         IncrementButton,
160         IsAccessibilityIgnored,
161         IsActiveDescendantOfFocusedContainer,
162         IsAnonymousMathOperator,
163         IsARIAGrabbed,
164         IsARIATreeGridRow,
165         IsAttachment,
166         IsButton,
167         IsBusy,
168         IsChecked,
169         IsCollapsed,
170         IsControl,
171         IsDataTable,
172         IsDescriptionList,
173         IsEnabled,
174         IsExpanded,
175         IsExposable,
176         IsFieldset,
177         IsFileUploadButton,
178         IsFocused,
179         IsGroup,
180         IsImage,
181         IsImageMapLink,
182         IsIncrementor,
183         IsIndeterminate,
184         IsInlineText,
185         IsInputImage,
186         IsInsideLiveRegion,
187         IsHeading,
188         IsHovered,
189         IsLandmark,
190         IsLink,
191         IsLinked,
192         IsList,
193         IsListBox,
194         IsLoaded,
195         IsMathElement,
196         IsMathFraction,
197         IsMathFenced,
198         IsMathSubscriptSuperscript,
199         IsMathRow,
200         IsMathUnderOver,
201         IsMathRoot,
202         IsMathSquareRoot,
203         IsMathText,
204         IsMathNumber,
205         IsMathOperator,
206         IsMathFenceOperator,
207         IsMathSeparatorOperator,
208         IsMathIdentifier,
209         IsMathTable,
210         IsMathTableRow,
211         IsMathTableCell,
212         IsMathMultiscript,
213         IsMathToken,
214         IsMathScriptObject,
215         IsMediaTimeline,
216         IsMenu,
217         IsMenuBar,
218         IsMenuButton,
219         IsMenuItem,
220         IsMenuList,
221         IsMenuListOption,
222         IsMenuListPopup,
223         IsMenuRelated,
224         IsMeter,
225         IsMultiSelectable,
226         IsOffScreen,
227         IsOnScreen,
228         IsOrderedList,
229         IsOutput,
230         IsPasswordField,
231         IsPressed,
232         IsProgressIndicator,
233         IsRangeControl,
234         IsRequired,
235         IsScrollbar,
236         IsSearchField,
237         IsSelected,
238         IsSelectedOptionActive,
239         IsShowingValidationMessage,
240         IsSlider,
241         IsStyleFormatGroup,
242         IsTable,
243         IsTableCell,
244         IsTableColumn,
245         IsTableRow,
246         IsTextControl,
247         IsTree,
248         IsTreeItem,
249         IsUnorderedList,
250         IsUnvisited,
251         IsValueAutofilled,
252         IsValueAutofillAvailable,
253         IsVisible,
254         IsVisited,
255         KeyShortcutsValue,
256         Language,
257         LayoutCount,
258         LinkRelValue,
259         LinkedUIElements,
260         LiveRegionAtomic,
261         LiveRegionRelevant,
262         LiveRegionStatus,
263         MathFencedOpenString,
264         MathFencedCloseString,
265         MathLineThickness,
266         MathPrescripts,
267         MathPostscripts,
268         MathRadicandObject,
269         MathRootIndexObject,
270         MathUnderObject,
271         MathOverObject,
272         MathNumeratorObject,
273         MathDenominatorObject,
274         MathBaseObject,
275         MathSubscriptObject,
276         MathSuperscriptObject,
277         MaxValueForRange,
278         MinValueForRange,
279         Orientation,
280         PlaceholderValue,
281         PressedIsPresent,
282         PopupValue,
283         PosInSet,
284         PreventKeyboardDOMEventDispatch,
285         ReadOnlyValue,
286         RelativeFrame,
287         RoleValue,
288         RolePlatformString,
289         RoleDescription,
290         Rows,
291         RowCount,
292         RowHeaders,
293         RowIndex,
294         RowIndexRange,
295         SelectedChildren,
296         SelectedRadioButton,
297         SelectedTabItem,
298         SessionID,
299         SetSize,
300         SortDirection,
301         SpeakAs,
302         SpeechHint,
303         StringValue,
304         SupportsARIADragging,
305         SupportsARIADropping,
306         SupportsARIAOwns,
307         SupportsCurrent,
308         SupportsDatetimeAttribute,
309         SupportsExpanded,
310         SupportsExpandedTextValue,
311         SupportsLiveRegion,
312         SupportsPath,
313         SupportsPosInSet,
314         SupportsPressAction,
315         SupportsRangeValue,
316         SupportsRequiredAttribute,
317         SupportsSelectedRows,
318         SupportsSetSize,
319         TabChildren,
320         TableLevel,
321         TagName,
322         TextLength,
323         Title,
324         TitleAttributeValue,
325         TitleUIElement,
326         URL,
327         ValueAutofillButtonType,
328         ValueDescription,
329         ValueForRange,
330         ValidationMessage,
331         VerticalScrollBar,
332         VisibleChildren,
333         VisibleRows,
334         WebArea,
335     };
336     
337     typedef std::pair<AXID, AXID> AccessibilityIsolatedTreeMathMultiscriptPair;
338     struct AccessibilityIsolatedTreeText {
339         String text;
340         AccessibilityTextSource textSource;
341     };
342
343     using AttributeValueVariant = Variant<std::nullptr_t, String, bool, int, unsigned, double, float, uint64_t, Color, URL, LayoutRect, FloatRect, AXID, IntPoint, OptionSet<SpeakAs>, std::pair<unsigned, unsigned>, Vector<AccessibilityIsolatedTreeText>, Vector<AXID>, Vector<AccessibilityIsolatedTreeMathMultiscriptPair>, Vector<String>>;
344     void setProperty(AXPropertyName, AttributeValueVariant&&, bool shouldRemove = false);
345     void setObjectProperty(AXPropertyName, AXCoreObject*);
346     void setObjectVectorProperty(AXPropertyName, const AccessibilityChildrenVector&);
347
348     // FIXME: consolidate all AttributeValue retrieval in a single template method.
349     bool boolAttributeValue(AXPropertyName) const;
350     String stringAttributeValue(AXPropertyName) const;
351     int intAttributeValue(AXPropertyName) const;
352     unsigned unsignedAttributeValue(AXPropertyName) const;
353     double doubleAttributeValue(AXPropertyName) const;
354     float floatAttributeValue(AXPropertyName) const;
355     AXCoreObject* objectAttributeValue(AXPropertyName) const;
356     IntPoint intPointAttributeValue(AXPropertyName) const;
357     Color colorAttributeValue(AXPropertyName) const;
358     URL urlAttributeValue(AXPropertyName) const;
359     uint64_t uint64AttributeValue(AXPropertyName) const;
360     template<typename T> T rectAttributeValue(AXPropertyName) const;
361     template<typename T> Vector<T> vectorAttributeValue(AXPropertyName) const;
362     template<typename T> OptionSet<T> optionSetAttributeValue(AXPropertyName) const;
363     template<typename T> std::pair<T, T> pairAttributeValue(AXPropertyName) const;
364
365     void fillChildrenVectorForProperty(AXPropertyName, AccessibilityChildrenVector&) const;
366     void setMathscripts(AXPropertyName, AXCoreObject&);
367     void insertMathPairs(Vector<AccessibilityIsolatedTreeMathMultiscriptPair>&, AccessibilityMathMultiscriptPairs&);
368     template<typename U> void performFunctionOnMainThread(U&&);
369
370     // Attribute retrieval overrides.
371     bool isHeading() const override { return boolAttributeValue(AXPropertyName::IsHeading); }
372     bool isLandmark() const override { return boolAttributeValue(AXPropertyName::IsLandmark); }
373     bool isLink() const override { return boolAttributeValue(AXPropertyName::IsLink); }
374     bool isImage() const override { return boolAttributeValue(AXPropertyName::IsImage); }
375     bool isPasswordField() const override { return boolAttributeValue(AXPropertyName::IsPasswordField); }
376     bool isSearchField() const override { return boolAttributeValue(AXPropertyName::IsSearchField); }
377     bool isAttachment() const override { return boolAttributeValue(AXPropertyName::IsAttachment); }
378     bool isMediaTimeline() const override { return boolAttributeValue(AXPropertyName::IsMediaTimeline); }
379     bool isMenuRelated() const override { return boolAttributeValue(AXPropertyName::IsMenuRelated); }
380     bool isMenu() const override { return boolAttributeValue(AXPropertyName::IsMenu); }
381     bool isMenuBar() const override { return boolAttributeValue(AXPropertyName::IsMenuBar); }
382     bool isMenuButton() const override { return boolAttributeValue(AXPropertyName::IsMenuButton); }
383     bool isMenuItem() const override { return boolAttributeValue(AXPropertyName::IsMenuItem); }
384     bool isFileUploadButton() const override { return boolAttributeValue(AXPropertyName::IsFileUploadButton); }
385     bool isInputImage() const override { return boolAttributeValue(AXPropertyName::IsInputImage); }
386     bool isProgressIndicator() const override { return boolAttributeValue(AXPropertyName::IsProgressIndicator); }
387     bool isSlider() const override { return boolAttributeValue(AXPropertyName::IsSlider); }
388     bool isControl() const override { return boolAttributeValue(AXPropertyName::IsControl); }
389
390     bool isList() const override { return boolAttributeValue(AXPropertyName::IsList); }
391     bool isUnorderedList() const override { return boolAttributeValue(AXPropertyName::IsUnorderedList); }
392     bool isOrderedList() const override { return boolAttributeValue(AXPropertyName::IsOrderedList); }
393     bool isDescriptionList() const override { return boolAttributeValue(AXPropertyName::IsDescriptionList); }
394
395     // Table support.
396     bool isTable() const override { return boolAttributeValue(AXPropertyName::IsTable); }
397     bool isExposable() const override { return boolAttributeValue(AXPropertyName::IsExposable); }
398     bool isDataTable() const override { return boolAttributeValue(AXPropertyName::IsDataTable); }
399     int tableLevel() const override { return intAttributeValue(AXPropertyName::TableLevel); }
400     bool supportsSelectedRows() const override { return boolAttributeValue(AXPropertyName::SupportsSelectedRows); }
401     AccessibilityChildrenVector columns() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::Columns)); }
402     AccessibilityChildrenVector rows() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::Rows)); }
403     unsigned columnCount() override { return unsignedAttributeValue(AXPropertyName::ColumnCount); }
404     unsigned rowCount() override { return unsignedAttributeValue(AXPropertyName::RowCount); }
405     AccessibilityChildrenVector cells() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::Cells)); }
406     AXCoreObject* cellForColumnAndRow(unsigned, unsigned) override;
407     AccessibilityChildrenVector columnHeaders() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::ColumnHeaders)); }
408     AccessibilityChildrenVector rowHeaders() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::RowHeaders)); }
409     AccessibilityChildrenVector visibleRows() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::VisibleRows)); }
410     AXCoreObject* headerContainer() override { return objectAttributeValue(AXPropertyName::HeaderContainer); }
411     int axColumnCount() const override { return intAttributeValue(AXPropertyName::AXColumnCount); }
412     int axRowCount() const override { return intAttributeValue(AXPropertyName::AXRowCount); }
413
414     // Table cell support.
415     bool isTableCell() const override { return boolAttributeValue(AXPropertyName::IsTableCell); }
416     // Returns the start location and row span of the cell.
417     std::pair<unsigned, unsigned> rowIndexRange() const override { return pairAttributeValue<unsigned>(AXPropertyName::RowIndexRange); }
418     // Returns the start location and column span of the cell.
419     std::pair<unsigned, unsigned> columnIndexRange() const override { return pairAttributeValue<unsigned>(AXPropertyName::ColumnIndexRange); }
420     int axColumnIndex() const override { return intAttributeValue(AXPropertyName::AXColumnIndex); }
421     int axRowIndex() const override { return intAttributeValue(AXPropertyName::AXRowIndex); }
422
423     // Table column support.
424     bool isTableColumn() const override { return boolAttributeValue(AXPropertyName::IsTableColumn); }
425     unsigned columnIndex() const override { return unsignedAttributeValue(AXPropertyName::ColumnIndex); }
426     AXCoreObject* columnHeader() override { return objectAttributeValue(AXPropertyName::ColumnHeader); }
427
428     // Table row support.
429     bool isTableRow() const override { return boolAttributeValue(AXPropertyName::IsTableRow); }
430     unsigned rowIndex() const override { return unsignedAttributeValue(AXPropertyName::RowIndex); }
431
432     // ARIA tree/grid row support.
433     bool isARIATreeGridRow() const override { return boolAttributeValue(AXPropertyName::IsARIATreeGridRow); }
434     AccessibilityChildrenVector disclosedRows() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::DisclosedRows)); }
435     AXCoreObject* disclosedByRow() const override { return objectAttributeValue(AXPropertyName::DisclosedByRow); }
436
437     bool isFieldset() const override { return boolAttributeValue(AXPropertyName::IsFieldset); }
438     bool isGroup() const override { return boolAttributeValue(AXPropertyName::IsGroup); }
439     bool isMenuList() const override { return boolAttributeValue(AXPropertyName::IsMenuList); }
440     bool isMenuListPopup() const override { return boolAttributeValue(AXPropertyName::IsMenuListPopup); }
441     bool isMenuListOption() const override { return boolAttributeValue(AXPropertyName::IsMenuListOption); }
442     bool isTextControl() const override { return boolAttributeValue(AXPropertyName::IsTextControl); }
443     bool isButton() const override { return boolAttributeValue(AXPropertyName::IsButton); }
444     bool isRangeControl() const override { return boolAttributeValue(AXPropertyName::IsRangeControl); }
445     bool isMeter() const override { return boolAttributeValue(AXPropertyName::IsMeter); }
446     bool isStyleFormatGroup() const override { return boolAttributeValue(AXPropertyName::IsStyleFormatGroup); }
447     bool isOutput() const override { return boolAttributeValue(AXPropertyName::IsOutput); }
448     bool isChecked() const override { return boolAttributeValue(AXPropertyName::IsChecked); }
449     bool isEnabled() const override { return boolAttributeValue(AXPropertyName::IsEnabled); }
450     bool isSelected() const override { return boolAttributeValue(AXPropertyName::IsSelected); }
451     bool isFocused() const override { return boolAttributeValue(AXPropertyName::IsFocused); }
452     bool isMultiSelectable() const override { return boolAttributeValue(AXPropertyName::IsMultiSelectable); }
453     bool isVisited() const override { return boolAttributeValue(AXPropertyName::IsVisited); }
454     bool isRequired() const override { return boolAttributeValue(AXPropertyName::IsRequired); }
455     bool supportsRequiredAttribute() const override { return boolAttributeValue(AXPropertyName::SupportsRequiredAttribute); }
456     bool isExpanded() const override { return boolAttributeValue(AXPropertyName::IsExpanded); }
457     FloatRect relativeFrame() const override { return rectAttributeValue<FloatRect>(AXPropertyName::RelativeFrame); }
458     bool supportsDatetimeAttribute() const override { return boolAttributeValue(AXPropertyName::SupportsDatetimeAttribute); }
459     String datetimeAttributeValue() const override { return stringAttributeValue(AXPropertyName::DatetimeAttributeValue); }
460     bool canSetFocusAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetFocusAttribute); }
461     bool canSetTextRangeAttributes() const override { return boolAttributeValue(AXPropertyName::CanSetTextRangeAttributes); }
462     bool canSetValueAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetValueAttribute); }
463     bool canSetNumericValue() const override { return boolAttributeValue(AXPropertyName::CanSetNumericValue); }
464     bool canSetSelectedAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetSelectedAttribute); }
465     bool canSetSelectedChildrenAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetSelectedChildrenAttribute); }
466     bool canSetExpandedAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetExpandedAttribute); }
467     bool accessibilityIsIgnored() const override { return boolAttributeValue(AXPropertyName::IsAccessibilityIgnored); }
468     bool isShowingValidationMessage() const override { return boolAttributeValue(AXPropertyName::IsShowingValidationMessage); }
469     String validationMessage() const override { return stringAttributeValue(AXPropertyName::ValidationMessage); }
470     unsigned blockquoteLevel() const override { return unsignedAttributeValue(AXPropertyName::BlockquoteLevel); }
471     int headingLevel() const override { return intAttributeValue(AXPropertyName::HeadingLevel); }
472     AccessibilityButtonState checkboxOrRadioValue() const override { return static_cast<AccessibilityButtonState>(intAttributeValue(AXPropertyName::AccessibilityButtonState)); }
473     String valueDescription() const override { return stringAttributeValue(AXPropertyName::ValueDescription); }
474     float valueForRange() const override { return floatAttributeValue(AXPropertyName::ValueForRange); }
475     float maxValueForRange() const override { return floatAttributeValue(AXPropertyName::MaxValueForRange); }
476     float minValueForRange() const override { return floatAttributeValue(AXPropertyName::MinValueForRange); }
477     AXCoreObject* selectedRadioButton() override { return objectAttributeValue(AXPropertyName::SelectedRadioButton); }
478     AXCoreObject* selectedTabItem() override { return objectAttributeValue(AXPropertyName::SelectedTabItem); }
479     int layoutCount() const override { return intAttributeValue(AXPropertyName::LayoutCount); }
480     double estimatedLoadingProgress() const override { return doubleAttributeValue(AXPropertyName::EstimatedLoadingProgress); }
481     bool supportsARIAOwns() const override { return boolAttributeValue(AXPropertyName::SupportsARIAOwns); }
482     bool isActiveDescendantOfFocusedContainer() const override { return boolAttributeValue(AXPropertyName::IsActiveDescendantOfFocusedContainer); }
483     void ariaControlsElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIAControlsElements, children); }
484     void ariaDetailsElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIADetailsElements, children); }
485     void ariaErrorMessageElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIAErrorMessageElements, children); }
486     void ariaFlowToElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIAFlowToElements, children); }
487     void ariaOwnsElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIAOwnsElements, children); }
488     bool hasPopup() const override { return boolAttributeValue(AXPropertyName::HasPopup); }
489     String popupValue() const override { return stringAttributeValue(AXPropertyName::PopupValue); }
490     bool pressedIsPresent() const override { return boolAttributeValue(AXPropertyName::PressedIsPresent); }
491     bool ariaIsMultiline() const override { return boolAttributeValue(AXPropertyName::ARIAIsMultiline); }
492     String invalidStatus() const override { return stringAttributeValue(AXPropertyName::InvalidStatus); }
493     bool supportsExpanded() const override { return boolAttributeValue(AXPropertyName::SupportsExpanded); }
494     AccessibilitySortDirection sortDirection() const override { return static_cast<AccessibilitySortDirection>(intAttributeValue(AXPropertyName::SortDirection)); }
495     bool canvasHasFallbackContent() const override { return boolAttributeValue(AXPropertyName::CanvasHasFallbackContent); }
496     bool supportsRangeValue() const override { return boolAttributeValue(AXPropertyName::SupportsRangeValue); }
497     String identifierAttribute() const override { return stringAttributeValue(AXPropertyName::IdentifierAttribute); }
498     String linkRelValue() const override { return stringAttributeValue(AXPropertyName::LinkRelValue); }
499     void classList(Vector<String>&) const override;
500     AccessibilityCurrentState currentState() const override { return static_cast<AccessibilityCurrentState>(intAttributeValue(AXPropertyName::CurrentState)); }
501     String currentValue() const override { return stringAttributeValue(AXPropertyName::CurrentValue); }
502     bool supportsCurrent() const override { return boolAttributeValue(AXPropertyName::SupportsCurrent); }
503     const String keyShortcutsValue() const override { return stringAttributeValue(AXPropertyName::KeyShortcutsValue); }
504     bool supportsSetSize() const override { return boolAttributeValue(AXPropertyName::SupportsSetSize); }
505     bool supportsPosInSet() const override { return boolAttributeValue(AXPropertyName::SupportsPosInSet); }
506     int setSize() const override { return intAttributeValue(AXPropertyName::SetSize); }
507     int posInSet() const override { return intAttributeValue(AXPropertyName::PosInSet); }
508     bool supportsARIADropping() const override { return boolAttributeValue(AXPropertyName::SupportsARIADropping); }
509     bool supportsARIADragging() const override { return boolAttributeValue(AXPropertyName::SupportsARIADragging); }
510     bool isARIAGrabbed() override { return boolAttributeValue(AXPropertyName::IsARIAGrabbed); }
511     Vector<String> determineARIADropEffects() override { return vectorAttributeValue<String>(AXPropertyName::ARIADropEffects); }
512     AXCoreObject* accessibilityHitTest(const IntPoint&) const override;
513     AXCoreObject* focusedUIElement() const override;
514     AXCoreObject* parentObject() const override { return parentObjectUnignored(); }
515     AXCoreObject* parentObjectUnignored() const override;
516     void linkedUIElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::LinkedUIElements, children); }
517     AXCoreObject* titleUIElement() const override { return objectAttributeValue(AXPropertyName::TitleUIElement); }
518     bool exposesTitleUIElement() const override { return boolAttributeValue(AXPropertyName::ExposesTitleUIElement); }
519     AXCoreObject* scrollBar(AccessibilityOrientation) override;
520     AccessibilityRole ariaRoleAttribute() const override { return static_cast<AccessibilityRole>(intAttributeValue(AXPropertyName::ARIARoleAttribute)); }
521     String computedLabel() override { return stringAttributeValue(AXPropertyName::ComputedLabel); }
522     int textLength() const override { return intAttributeValue(AXPropertyName::TextLength); }
523     const String placeholderValue() const override { return stringAttributeValue(AXPropertyName::PlaceholderValue); }
524     String expandedTextValue() const override { return stringAttributeValue(AXPropertyName::ExpandedTextValue); }
525     bool supportsExpandedTextValue() const override { return boolAttributeValue(AXPropertyName::SupportsExpandedTextValue); }
526     void colorValue(int&, int&, int&) const override;
527     AccessibilityRole roleValue() const override { return static_cast<AccessibilityRole>(intAttributeValue(AXPropertyName::RoleValue)); }
528     String rolePlatformString() const override { return stringAttributeValue(AXPropertyName::RolePlatformString); }
529     String roleDescription() const override { return stringAttributeValue(AXPropertyName::RoleDescription); }
530     String ariaLandmarkRoleDescription() const override { return stringAttributeValue(AXPropertyName::ARIALandmarkRoleDescription); }
531     bool supportsPressAction() const override { return boolAttributeValue(AXPropertyName::SupportsPressAction); }
532     LayoutRect boundingBoxRect() const override { return rectAttributeValue<LayoutRect>(AXPropertyName::BoundingBoxRect); }
533     LayoutRect elementRect() const override { return rectAttributeValue<LayoutRect>(AXPropertyName::ElementRect); }
534     IntPoint clickPoint() override { return intPointAttributeValue(AXPropertyName::ClickPoint); }
535     void accessibilityText(Vector<AccessibilityText>& texts) const override;
536     String computedRoleString() const override { return stringAttributeValue(AXPropertyName::ComputedRoleString); }
537     bool isValueAutofilled() const override { return boolAttributeValue(AXPropertyName::IsValueAutofilled); }
538     bool isValueAutofillAvailable() const override { return boolAttributeValue(AXPropertyName::IsValueAutofillAvailable); }
539     AutoFillButtonType valueAutofillButtonType() const override { return static_cast<AutoFillButtonType>(intAttributeValue(AXPropertyName::ValueAutofillButtonType)); }
540     void ariaTreeRows(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::ARIATreeRows, children); }
541     void ariaTreeItemContent(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::ARIATreeItemContent, children); }
542     URL url() const override { return urlAttributeValue(AXPropertyName::URL); }
543     String accessKey() const override { return stringAttributeValue(AXPropertyName::AccessKey); }
544     String actionVerb() const override { return stringAttributeValue(AXPropertyName::ActionVerb); }
545     String readOnlyValue() const override { return stringAttributeValue(AXPropertyName::ReadOnlyValue); }
546     String autoCompleteValue() const override { return stringAttributeValue(AXPropertyName::AutoCompleteValue); }
547     OptionSet<SpeakAs> speakAsProperty() const override { return optionSetAttributeValue<SpeakAs>(AXPropertyName::SpeakAs); }
548     bool isMathElement() const override { return boolAttributeValue(AXPropertyName::IsMathElement); }
549     bool isMathFraction() const override { return boolAttributeValue(AXPropertyName::IsMathFraction); }
550     bool isMathFenced() const override { return boolAttributeValue(AXPropertyName::IsMathFenced); }
551     bool isMathSubscriptSuperscript() const override { return boolAttributeValue(AXPropertyName::IsMathSubscriptSuperscript); }
552     bool isMathRow() const override { return boolAttributeValue(AXPropertyName::IsMathRow); }
553     bool isMathUnderOver() const override { return boolAttributeValue(AXPropertyName::IsMathUnderOver); }
554     bool isMathRoot() const override { return boolAttributeValue(AXPropertyName::IsMathRoot); }
555     bool isMathSquareRoot() const override { return boolAttributeValue(AXPropertyName::IsMathSquareRoot); }
556     bool isMathText() const override { return boolAttributeValue(AXPropertyName::IsMathText); }
557     bool isMathNumber() const override { return boolAttributeValue(AXPropertyName::IsMathNumber); }
558     bool isMathOperator() const override { return boolAttributeValue(AXPropertyName::IsMathOperator); }
559     bool isMathFenceOperator() const override { return boolAttributeValue(AXPropertyName::IsMathFenceOperator); }
560     bool isMathSeparatorOperator() const override { return boolAttributeValue(AXPropertyName::IsMathSeparatorOperator); }
561     bool isMathIdentifier() const override { return boolAttributeValue(AXPropertyName::IsMathIdentifier); }
562     bool isMathTable() const override { return boolAttributeValue(AXPropertyName::IsMathTable); }
563     bool isMathTableRow() const override { return boolAttributeValue(AXPropertyName::IsMathTableRow); }
564     bool isMathTableCell() const override { return boolAttributeValue(AXPropertyName::IsMathTableCell); }
565     bool isMathMultiscript() const override { return boolAttributeValue(AXPropertyName::IsMathMultiscript); }
566     bool isMathToken() const override { return boolAttributeValue(AXPropertyName::IsMathToken); }
567     AXCoreObject* mathRadicandObject() override { return objectAttributeValue(AXPropertyName::MathRadicandObject); }
568     AXCoreObject* mathRootIndexObject() override { return objectAttributeValue(AXPropertyName::MathRootIndexObject); }
569     AXCoreObject* mathUnderObject() override { return objectAttributeValue(AXPropertyName::MathUnderObject); }
570     AXCoreObject* mathOverObject() override { return objectAttributeValue(AXPropertyName::MathOverObject); }
571     AXCoreObject* mathNumeratorObject() override { return objectAttributeValue(AXPropertyName::MathNumeratorObject); }
572     AXCoreObject* mathDenominatorObject() override { return objectAttributeValue(AXPropertyName::MathDenominatorObject); }
573     AXCoreObject* mathBaseObject() override { return objectAttributeValue(AXPropertyName::MathBaseObject); }
574     AXCoreObject* mathSubscriptObject() override { return objectAttributeValue(AXPropertyName::MathSubscriptObject); }
575     AXCoreObject* mathSuperscriptObject() override { return objectAttributeValue(AXPropertyName::MathSuperscriptObject); }
576     String mathFencedOpenString() const override { return stringAttributeValue(AXPropertyName::MathFencedOpenString); }
577     String mathFencedCloseString() const override { return stringAttributeValue(AXPropertyName::MathFencedCloseString); }
578     int mathLineThickness() const override { return intAttributeValue(AXPropertyName::MathLineThickness); }
579     bool isAnonymousMathOperator() const override { return boolAttributeValue(AXPropertyName::IsAnonymousMathOperator); }
580     void mathPrescripts(AccessibilityMathMultiscriptPairs&) override;
581     void mathPostscripts(AccessibilityMathMultiscriptPairs&) override;
582     bool fileUploadButtonReturnsValueInTitle() const override { return boolAttributeValue(AXPropertyName::FileUploadButtonReturnsValueInTitle); }
583     String speechHintAttributeValue() const override { return stringAttributeValue(AXPropertyName::SpeechHint); }
584     String descriptionAttributeValue() const override { return stringAttributeValue(AXPropertyName::Description); }
585     String helpTextAttributeValue() const override { return stringAttributeValue(AXPropertyName::HelpText); }
586     String titleAttributeValue() const override { return stringAttributeValue(AXPropertyName::TitleAttributeValue); }
587 #if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)
588     bool caretBrowsingEnabled() const override { return boolAttributeValue(AXPropertyName::CaretBrowsingEnabled); }
589 #endif
590     AXCoreObject* focusableAncestor() override { return objectAttributeValue(AXPropertyName::FocusableAncestor); }
591     AXCoreObject* editableAncestor() override { return objectAttributeValue(AXPropertyName::EditableAncestor); }
592     AXCoreObject* highestEditableAncestor() override { return objectAttributeValue(AXPropertyName::HighestEditableAncestor); }
593     AccessibilityOrientation orientation() const override { return static_cast<AccessibilityOrientation>(intAttributeValue(AXPropertyName::Orientation)); }
594     unsigned hierarchicalLevel() const override { return unsignedAttributeValue(AXPropertyName::HierarchicalLevel); }
595     String language() const override { return stringAttributeValue(AXPropertyName::Language); }
596     bool canHaveSelectedChildren() const override { return boolAttributeValue(AXPropertyName::CanHaveSelectedChildren); }
597     void selectedChildren(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::SelectedChildren, children); }
598     void visibleChildren(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::VisibleChildren, children); }
599     void tabChildren(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::TabChildren, children); }
600     bool hasARIAValueNow() const override { return boolAttributeValue(AXPropertyName::HasARIAValueNow); }
601     String tagName() const override { return stringAttributeValue(AXPropertyName::TagName); }
602     const AccessibilityChildrenVector& children(bool updateChildrenIfNeeded = true) override;
603     void updateChildrenIfNecessary() override { }
604     bool isDetachedFromParent() override;
605     bool supportsLiveRegion(bool = true) const override { return boolAttributeValue(AXPropertyName::SupportsLiveRegion); }
606     bool isInsideLiveRegion(bool = true) const override { return boolAttributeValue(AXPropertyName::IsInsideLiveRegion); }
607     const String liveRegionStatus() const override { return stringAttributeValue(AXPropertyName::LiveRegionStatus); }
608     const String liveRegionRelevant() const override { return stringAttributeValue(AXPropertyName::LiveRegionRelevant); }
609     bool liveRegionAtomic() const override { return boolAttributeValue(AXPropertyName::LiveRegionAtomic); }
610     bool isBusy() const override { return boolAttributeValue(AXPropertyName::IsBusy); }
611     bool isInlineText() const override { return boolAttributeValue(AXPropertyName::IsInlineText); }
612     // Spin button support.
613     AXCoreObject* incrementButton() override { return objectAttributeValue(AXPropertyName::IncrementButton); }
614     AXCoreObject* decrementButton() override { return objectAttributeValue(AXPropertyName::DecrementButton); }
615     bool isIncrementor() const override { return boolAttributeValue(AXPropertyName::IsIncrementor); }
616     AccessibilityChildrenVector documentLinks() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::DocumentLinks)); }
617
618     String stringValue() const override { return stringAttributeValue(AXPropertyName::StringValue); }
619
620     // Parameterized attribute retrieval.
621     Vector<RefPtr<Range>> findTextRanges(AccessibilitySearchTextCriteria const&) const override;
622     Vector<String> performTextOperation(AccessibilityTextOperation const&) override;
623     void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&) override;
624
625     // Attributes retrieved from the root node only so that the data isn't duplicated on each node.
626     uint64_t sessionID() const override;
627     String documentURI() const override;
628     String documentEncoding() const override;
629     bool preventKeyboardDOMEventDispatch() const override;
630
631     // TODO: Text ranges and selection.
632     PlainTextRange selectedTextRange() const override { return PlainTextRange(); }
633     unsigned selectionStart() const override { return 0; }
634     unsigned selectionEnd() const override { return 0; }
635     VisibleSelection selection() const override { return VisibleSelection(); }
636     String selectedText() const override { return String(); }
637     VisiblePositionRange visiblePositionRange() const override { return VisiblePositionRange(); }
638     VisiblePositionRange visiblePositionRangeForLine(unsigned) const override { return VisiblePositionRange(); }
639     RefPtr<Range> elementRange() const override { return nullptr; }
640     VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const override { return VisiblePositionRange(); }
641     VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const override { return VisiblePositionRange(); }
642     VisiblePositionRange positionOfRightWord(const VisiblePosition&) const override { return VisiblePositionRange(); }
643     VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const override { return VisiblePositionRange(); }
644     VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const override { return VisiblePositionRange(); }
645     VisiblePositionRange sentenceForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
646     VisiblePositionRange paragraphForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
647     VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
648     VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const override { return VisiblePositionRange(); }
649     VisiblePositionRange lineRangeForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
650     RefPtr<Range> rangeForPlainTextRange(const PlainTextRange&) const override { return nullptr; }
651     String stringForRange(RefPtr<Range>) const override;
652     IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const override { return IntRect(); }
653     IntRect boundsForRange(const RefPtr<Range>) const override { return IntRect(); }
654     int lengthForVisiblePositionRange(const VisiblePositionRange&) const override { return 0; }
655     void setSelectedVisiblePositionRange(const VisiblePositionRange&) const override { }
656     VisiblePosition visiblePositionForBounds(const IntRect&, AccessibilityVisiblePositionForBounds) const override { return VisiblePosition(); }
657     VisiblePosition visiblePositionForPoint(const IntPoint&) const override { return VisiblePosition(); }
658     VisiblePosition nextVisiblePosition(const VisiblePosition&) const override { return VisiblePosition(); }
659     VisiblePosition previousVisiblePosition(const VisiblePosition&) const override { return VisiblePosition(); }
660     VisiblePosition nextWordEnd(const VisiblePosition&) const override { return VisiblePosition(); }
661     VisiblePosition previousWordStart(const VisiblePosition&) const override { return VisiblePosition(); }
662     VisiblePosition nextLineEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
663     VisiblePosition previousLineStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
664     VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
665     VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
666     VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
667     VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
668     VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const override { return VisiblePosition(); }
669     VisiblePosition visiblePositionForIndex(int) const override { return VisiblePosition(); }
670     int indexForVisiblePosition(const VisiblePosition&) const override { return 0; }
671     AXCoreObject* accessibilityObjectForPosition(const VisiblePosition&) const override { return nullptr; }
672     int lineForPosition(const VisiblePosition&) const override { return 0; }
673     PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const override { return PlainTextRange(); }
674     int index(const VisiblePosition&) const override { return 0; }
675     void lineBreaks(Vector<int>&) const override { }
676     PlainTextRange doAXRangeForLine(unsigned) const override { return PlainTextRange(); }
677     PlainTextRange doAXRangeForPosition(const IntPoint&) const override { return PlainTextRange(); }
678     PlainTextRange doAXRangeForIndex(unsigned) const override { return PlainTextRange(); }
679     PlainTextRange doAXStyleRangeForIndex(unsigned) const override { return PlainTextRange(); }
680     String doAXStringForRange(const PlainTextRange&) const override { return String(); }
681     IntRect doAXBoundsForRange(const PlainTextRange&) const override { return IntRect(); }
682     IntRect doAXBoundsForRangeUsingCharacterOffset(const PlainTextRange&) const override { return IntRect(); }
683     unsigned doAXLineForIndex(unsigned) override { return 0; }
684
685     // Attribute setters.
686     void setARIAGrabbed(bool) override;
687     void setIsExpanded(bool) override;
688     void setValue(float) override;
689     void setSelected(bool) override;
690     void setSelectedRows(AccessibilityChildrenVector&) override;
691     void setFocused(bool) override;
692     void setSelectedText(const String&) override;
693     void setSelectedTextRange(const PlainTextRange&) override;
694     void setValue(const String&) override;
695 #if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)
696     void setCaretBrowsingEnabled(bool) override;
697 #endif
698     void setPreventKeyboardDOMEventDispatch(bool) override;
699
700     // TODO: Functions
701     String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const override { return String(); }
702     RefPtr<Range> getMisspellingRange(RefPtr<Range> const&, AccessibilitySearchDirection) const override { return nullptr; }
703     FloatRect convertFrameToSpace(const FloatRect&, AccessibilityConversionSpace) const override { return FloatRect(); }
704     void increment() override { }
705     void decrement() override { }
706     void scrollToMakeVisible() const override { }
707     void scrollToMakeVisibleWithSubFocus(const IntRect&) const override { }
708     void scrollToGlobalPoint(const IntPoint&) const override { }
709     bool replaceTextInRange(const String&, const PlainTextRange&) override;
710     bool insertText(const String&) override;
711     void makeRangeVisible(const PlainTextRange&) override { }
712     bool press() override;
713     bool performDefaultAction() override;
714
715     // Functions that should never be called on an isolated tree object. ASSERT that these are not reached;
716     bool isAccessibilityObject() const override;
717     bool isAccessibilityNodeObject() const override;
718     bool isAccessibilityRenderObject() const override;
719     bool isAccessibilityScrollbar() const override;
720     bool isAccessibilityScrollViewInstance() const override;
721     bool isAccessibilitySVGRoot() const override;
722     bool isAccessibilitySVGElement() const override;
723     bool isAccessibilityTableInstance() const override;
724     bool isAccessibilityTableColumnInstance() const override;
725     bool isAccessibilityProgressIndicatorInstance() const override;
726
727     bool isAttachmentElement() const override;
728     bool isNativeImage() const override;
729     bool isImageButton() const override;
730     bool isContainedByPasswordField() const override;
731     AXCoreObject* passwordFieldOrContainingPasswordField() override;
732     bool isNativeTextControl() const override;
733     bool isNativeListBox() const override;
734     bool isListBoxOption() const override;
735     bool isSliderThumb() const override;
736     bool isInputSlider() const override;
737     bool isLabel() const override;
738     bool isImageMapLink() const override;
739     bool isNativeSpinButton() const override;
740     bool isSpinButtonPart() const override;
741     bool isMockObject() const override;
742     bool isMediaObject() const override;
743     bool isARIATextControl() const override;
744     bool isNonNativeTextControl() const override;
745     bool isBlockquote() const override;
746     bool isFigureElement() const override;
747     bool isKeyboardFocusable() const override;
748     bool isHovered() const override;
749     bool isIndeterminate() const override;
750     bool isLoaded() const override { return boolAttributeValue(AXPropertyName::IsLoaded); }
751     bool isOnScreen() const override;
752     bool isOffScreen() const override;
753     bool isPressed() const override;
754     bool isUnvisited() const override;
755     bool isLinked() const override;
756     bool isVisible() const override;
757     bool isCollapsed() const override;
758     bool isSelectedOptionActive() const override;
759     bool hasBoldFont() const override;
760     bool hasItalicFont() const override;
761     bool hasMisspelling() const override;
762     bool hasPlainText() const override;
763     bool hasSameFont(RenderObject*) const override;
764     bool hasSameFontColor(RenderObject*) const override;
765     bool hasSameStyle(RenderObject*) const override;
766     bool hasUnderline() const override;
767     bool hasHighlighting() const override;
768     Element* element() const override;
769     Node* node() const override;
770     RenderObject* renderer() const override;
771     AccessibilityObjectInclusion defaultObjectInclusion() const override;
772     bool accessibilityIsIgnoredByDefault() const override;
773     float stepValueForRange() const override;
774     AXCoreObject* selectedListItem() override;
775     void ariaActiveDescendantReferencingElements(AccessibilityChildrenVector&) const override;
776     void ariaControlsReferencingElements(AccessibilityChildrenVector&) const override;
777     void ariaDescribedByElements(AccessibilityChildrenVector&) const override;
778     void ariaDescribedByReferencingElements(AccessibilityChildrenVector&) const override;
779     void ariaDetailsReferencingElements(AccessibilityChildrenVector&) const override;
780     void ariaErrorMessageReferencingElements(AccessibilityChildrenVector&) const override;
781     void ariaFlowToReferencingElements(AccessibilityChildrenVector&) const override;
782     void ariaLabelledByElements(AccessibilityChildrenVector&) const override;
783     void ariaLabelledByReferencingElements(AccessibilityChildrenVector&) const override;
784     void ariaOwnsReferencingElements(AccessibilityChildrenVector&) const override;
785     bool hasDatalist() const override;
786     bool supportsHasPopup() const override;
787     bool supportsPressed() const override;
788     bool supportsChecked() const override;
789     bool ignoredFromModalPresence() const override;
790     bool isModalDescendant(Node*) const override;
791     bool isModalNode() const override;
792     AXCoreObject* elementAccessibilityHitTest(const IntPoint&) const override;
793     AXCoreObject* firstChild() const override;
794     AXCoreObject* lastChild() const override;
795     AXCoreObject* previousSibling() const override;
796     AXCoreObject* nextSibling() const override;
797     AXCoreObject* nextSiblingUnignored(int limit) const override;
798     AXCoreObject* previousSiblingUnignored(int limit) const override;
799     AXCoreObject* parentObjectIfExists() const override;
800     bool isDescendantOfBarrenParent() const override;
801     bool isDescendantOfRole(AccessibilityRole) const override;
802     AXCoreObject* observableObject() const override;
803     AXCoreObject* correspondingLabelForControlElement() const override;
804     AXCoreObject* correspondingControlForLabelElement() const override;
805     bool isPresentationalChildOfAriaRole() const override;
806     bool ariaRoleHasPresentationalChildren() const override;
807     bool inheritsPresentationalRole() const override;
808     void setAccessibleName(const AtomString&) override;
809     bool hasAttributesRequiredForInclusion() const override;
810     String accessibilityDescription() const override;
811     String title() const override { return stringAttributeValue(AXPropertyName::Title); }
812     String helpText() const override;
813     bool isARIAStaticText() const override;
814     String text() const override;
815     String ariaLabeledByAttribute() const override;
816     String ariaDescribedByAttribute() const override;
817     bool accessibleNameDerivesFromContent() const override;
818     void elementsFromAttribute(Vector<Element*>&, const QualifiedName&) const override;
819     AXObjectCache* axObjectCache() const override;
820     Element* anchorElement() const override;
821     Element* actionElement() const override;
822     Path elementPath() const override;
823     bool supportsPath() const override { return boolAttributeValue(AXPropertyName::SupportsPath); }
824     TextIteratorBehavior textIteratorBehaviorForTextRange() const override;
825     Widget* widget() const override;
826     PlatformWidget platformWidget() const override;
827     Widget* widgetForAttachmentView() const override;
828     Page* page() const override;
829     Document* document() const override;
830     FrameView* documentFrameView() const override;
831     Frame* frame() const override;
832     Frame* mainFrame() const override;
833     Document* topDocument() const override;
834     ScrollView* scrollView() const override;
835     ScrollView* scrollViewAncestor() const override;
836     void childrenChanged() override;
837     void textChanged() override;
838     void updateAccessibilityRole() override;
839     void addChildren() override;
840     void addChild(AXCoreObject*) override;
841     void insertChild(AXCoreObject*, unsigned) override;
842     bool shouldIgnoreAttributeRole() const override;
843     bool canHaveChildren() const override;
844     bool hasChildren() const override { return boolAttributeValue(AXPropertyName::HasChildren); }
845     void setNeedsToUpdateChildren() override;
846     void setNeedsToUpdateSubtree() override;
847     void clearChildren() override;
848     bool needsToUpdateChildren() const override;
849     void detachFromParent() override;
850     bool shouldFocusActiveDescendant() const override;
851     AXCoreObject* activeDescendant() const override;
852     void handleActiveDescendantChanged() override;
853     void handleAriaExpandedChanged() override;
854     AXCoreObject* firstAnonymousBlockChild() const override;
855     bool hasAttribute(const QualifiedName&) const override;
856     const AtomString& getAttribute(const QualifiedName&) const override;
857     bool hasTagName(const QualifiedName&) const override;
858     String stringValueForMSAA() const override;
859     String stringRoleForMSAA() const override;
860     String nameForMSAA() const override;
861     String descriptionForMSAA() const override;
862     AccessibilityRole roleValueForMSAA() const override;
863     String passwordFieldValue() const override;
864     AXCoreObject* liveRegionAncestor(bool excludeIfOff = true) const override;
865     bool hasContentEditableAttributeSet() const override;
866     bool supportsReadOnly() const override;
867     bool supportsAutoComplete() const override;
868     bool supportsARIAAttributes() const override;
869     bool scrollByPage(ScrollByPageDirection) const override;
870     IntPoint scrollPosition() const override;
871     IntSize scrollContentsSize() const override;
872     IntRect scrollVisibleContentRect() const override;
873     void scrollToMakeVisible(const ScrollRectToVisibleOptions&) const override;
874     bool lastKnownIsIgnoredValue() override;
875     void setLastKnownIsIgnoredValue(bool) override;
876     void notifyIfIgnoredValueChanged() override;
877     bool isMathScriptObject(AccessibilityMathScriptObjectType) const override;
878     bool isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const override;
879     bool isAXHidden() const override;
880     bool isDOMHidden() const override;
881     bool isHidden() const override;
882     void overrideAttachmentParent(AXCoreObject* parent) override;
883     bool accessibilityIgnoreAttachment() const override;
884     AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const override;
885     bool hasApplePDFAnnotationAttribute() const override { return boolAttributeValue(AXPropertyName::HasApplePDFAnnotationAttribute); }
886     const AccessibilityScrollView* ancestorAccessibilityScrollView(bool includeSelf) const override;
887     AXCoreObject* webAreaObject() const override { return objectAttributeValue(AXPropertyName::WebArea); }
888     void setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData&) override;
889     void clearIsIgnoredFromParentData() override;
890     void setIsIgnoredFromParentDataForChild(AXCoreObject*) override;
891
892     void updateBackingStore() override;
893
894     AXIsolatedTreeID m_treeID;
895     RefPtr<AXIsolatedTree> m_cachedTree;
896     AXID m_parentID { InvalidAXID };
897     AXID m_id { InvalidAXID };
898     Vector<AXID> m_childrenIDs;
899     Vector<RefPtr<AXCoreObject>> m_children;
900
901     HashMap<AXPropertyName, AttributeValueVariant, WTF::IntHash<AXPropertyName>, WTF::StrongEnumHashTraits<AXPropertyName>> m_attributeMap;
902
903 #if PLATFORM(COCOA)
904     RetainPtr<NSView> m_platformWidget;
905 #else
906     PlatformWidget m_platformWidget;
907 #endif
908 };
909
910 } // namespace WebCore
911
912 #endif // ENABLE((ACCESSIBILITY_ISOLATED_TREE))