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