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