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