b2be6454fe74c9b0daeb34303829c57402ac8201
[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 "AXIsolatedTree.h"
31 #include "AccessibilityObjectInterface.h"
32 #include "FloatRect.h"
33 #include "IntPoint.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&);
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 { return false; }
60
61     void setTreeIdentifier(AXIsolatedTreeID);
62     void setParent(AXID);
63     void appendChild(AXID);
64
65 private:
66     bool isAccessibilityObject() const override { return false; }
67     bool isAccessibilityNodeObject() const override { return false; }
68     bool isAccessibilityRenderObject() const override { return false; }
69     bool isAccessibilityScrollbar() const override { return false; }
70     bool isAccessibilityScrollView() const override { return false; }
71     bool isAccessibilitySVGRoot() const override { return false; }
72     bool isAccessibilitySVGElement() const override { return false; }
73
74     bool containsText(String *) const override { return false; }
75     bool isAttachmentElement() const override { return false; }
76     bool isHeading() const override { return false; }
77     bool isLink() const override { return boolAttributeValue(AXPropertyName::IsLink); }
78     bool isImage() const override { return boolAttributeValue(AXPropertyName::IsImage); }
79     bool isImageMap() const override { return false; }
80     bool isNativeImage() const override { return false; }
81     bool isImageButton() const override { return false; }
82     bool isPasswordField() const override { return false; }
83     bool isContainedByPasswordField() const override { return false; }
84     AXCoreObject* passwordFieldOrContainingPasswordField() override { return nullptr; }
85     bool isNativeTextControl() const override { return false; }
86     bool isSearchField() const override { return false; }
87     bool isWebArea() const override { return false; }
88     bool isCheckbox() const override { return false; }
89     bool isRadioButton() const override { return false; }
90     bool isNativeListBox() const override { return false; }
91     bool isListBox() const override { return false; }
92     bool isListBoxOption() const override { return false; }
93     bool isAttachment() const override { return boolAttributeValue(AXPropertyName::IsAttachment); }
94     bool isMediaTimeline() const override { return false; }
95     bool isMenuRelated() const override { return false; }
96     bool isMenu() const override { return false; }
97     bool isMenuBar() const override { return false; }
98     bool isMenuButton() const override { return false; }
99     bool isMenuItem() const override { return false; }
100     bool isFileUploadButton() const override { return boolAttributeValue(AXPropertyName::IsFileUploadButton); }
101     bool isInputImage() const override { return false; }
102     bool isProgressIndicator() const override { return false; }
103     bool isSlider() const override { return false; }
104     bool isSliderThumb() const override { return false; }
105     bool isInputSlider() const override { return false; }
106     bool isControl() const override { return false; }
107     bool isLabel() const override { return false; }
108     bool isList() const override { return false; }
109     bool isTable() const override { return false; }
110     bool isDataTable() const override { return false; }
111     bool isTableRow() const override { return false; }
112     bool isTableColumn() const override { return false; }
113     bool isTableCell() const override { return false; }
114     bool isFieldset() const override { return false; }
115     bool isGroup() const override { return false; }
116     bool isARIATreeGridRow() const override { return false; }
117     bool isImageMapLink() const override { return boolAttributeValue(AXPropertyName::IsImageMapLink); }
118     bool isMenuList() const override { return false; }
119     bool isMenuListPopup() const override { return false; }
120     bool isMenuListOption() const override { return false; }
121     bool isSpinButton() const override { return false; }
122     bool isNativeSpinButton() const override { return false; }
123     bool isSpinButtonPart() const override { return false; }
124     bool isMockObject() const override { return false; }
125     bool isMediaControlLabel() const override { return boolAttributeValue(AXPropertyName::IsMediaControlLabel); }
126     bool isMediaObject() const override { return false; }
127     bool isSwitch() const override { return false; }
128     bool isToggleButton() const override { return false; }
129     bool isTextControl() const override { return false; }
130     bool isARIATextControl() const override { return false; }
131     bool isNonNativeTextControl() const override { return false; }
132     bool isTabList() const override { return false; }
133     bool isTabItem() const override { return false; }
134     bool isRadioGroup() const override { return false; }
135     bool isComboBox() const override { return false; }
136     bool isTree() const override { return boolAttributeValue(AXPropertyName::IsTree); }
137     bool isTreeGrid() const override { return false; }
138     bool isTreeItem() const override { return boolAttributeValue(AXPropertyName::IsTreeItem); }
139     bool isScrollbar() const override { return boolAttributeValue(AXPropertyName::IsScrollbar); }
140     bool isButton() const override { return false; }
141     bool isListItem() const override { return false; }
142     bool isCheckboxOrRadio() const override { return false; }
143     bool isScrollView() const override { return false; }
144     bool isCanvas() const override { return false; }
145     bool isPopUpButton() const override { return false; }
146     bool isBlockquote() const override { return false; }
147     bool isLandmark() const override { return false; }
148     bool isColorWell() const override { return false; }
149     bool isRangeControl() const override { return false; }
150     bool isMeter() const override { return false; }
151     bool isSplitter() const override { return false; }
152     bool isToolbar() const override { return false; }
153     bool isStyleFormatGroup() const override { return false; }
154     bool isFigureElement() const override { return false; }
155     bool isKeyboardFocusable() const override { return false; }
156     bool isSummary() const override { return false; }
157     bool isOutput() const override { return false; }
158
159     bool isChecked() const override { return false; }
160     bool isEnabled() const override { return false; }
161     bool isSelected() const override { return false; }
162     bool isFocused() const override { return false; }
163     bool isHovered() const override { return false; }
164     bool isIndeterminate() const override { return false; }
165     bool isLoaded() const override { return false; }
166     bool isMultiSelectable() const override { return false; }
167     bool isOnScreen() const override { return false; }
168     bool isOffScreen() const override { return !isOnScreen(); }
169     bool isPressed() const override { return false; }
170     bool isUnvisited() const override { return false; }
171     bool isVisited() const override { return false; }
172     bool isRequired() const override { return false; }
173     bool supportsRequiredAttribute() const override { return false; }
174     bool isLinked() const override { return false; }
175     bool isExpanded() const override { return false; }
176     bool isVisible() const override { return false; }
177     bool isCollapsed() const override { return false; }
178     void setIsExpanded(bool) override { }
179     FloatRect relativeFrame() const override { return rectAttributeValue(AXPropertyName::RelativeFrame); }
180     FloatRect convertFrameToSpace(const FloatRect&, AccessibilityConversionSpace) const override { return FloatRect(); }
181
182     bool isSelectedOptionActive() const override { return false; }
183
184     bool hasBoldFont() const override { return false; }
185     bool hasItalicFont() const override { return false; }
186     bool hasMisspelling() const override { return false; }
187     RefPtr<Range> getMisspellingRange(RefPtr<Range> const&, AccessibilitySearchDirection) const override { return nullptr; }
188     bool hasPlainText() const override { return false; }
189     bool hasSameFont(RenderObject*) const override { return false; }
190     bool hasSameFontColor(RenderObject*) const override { return false; }
191     bool hasSameStyle(RenderObject*) const override { return false; }
192     bool isStaticText() const override { return false; }
193     bool hasUnderline() const override { return false; }
194     bool hasHighlighting() const override { return false; }
195
196     bool supportsDatetimeAttribute() const override { return false; }
197     const AtomString& datetimeAttributeValue() const override { return nullAtom(); }
198
199     bool canSetFocusAttribute() const override { return false; }
200     bool canSetTextRangeAttributes() const override { return false; }
201     bool canSetValueAttribute() const override { return false; }
202     bool canSetNumericValue() const override { return false; }
203     bool canSetSelectedAttribute() const override { return false; }
204     bool canSetSelectedChildrenAttribute() const override { return false; }
205     bool canSetExpandedAttribute() const override { return false; }
206
207     Element* element() const override { return nullptr; }
208     Node* node() const override { return nullptr; }
209     RenderObject* renderer() const override { return nullptr; }
210
211     bool accessibilityIsIgnored() const override { return boolAttributeValue(AXPropertyName::IsAccessibilityIgnored); }
212     AccessibilityObjectInclusion defaultObjectInclusion() const override { return AccessibilityObjectInclusion::DefaultBehavior; }
213     bool accessibilityIsIgnoredByDefault() const override { return false; }
214
215     bool isShowingValidationMessage() const override { return false; }
216     String validationMessage() const override { return String(); }
217
218     unsigned blockquoteLevel() const override { return 0; }
219     int headingLevel() const override { return 0; }
220     int tableLevel() const override { return 0; }
221     AccessibilityButtonState checkboxOrRadioValue() const override { return AccessibilityButtonState::Off; }
222     String valueDescription() const override { return String(); }
223     float valueForRange() const override { return 0; }
224     float maxValueForRange() const override { return 0; }
225     float minValueForRange() const override { return 0; }
226     float stepValueForRange() const override { return 0; }
227     AXCoreObject* selectedRadioButton() override { return nullptr; }
228     AXCoreObject* selectedTabItem() override { return nullptr; }
229     AXCoreObject* selectedListItem() override { return nullptr; }
230     int layoutCount() const override { return 0; }
231     double estimatedLoadingProgress() const override { return 0; }
232
233     bool supportsARIAOwns() const override { return false; }
234     bool isActiveDescendantOfFocusedContainer() const override { return false; }
235     void ariaActiveDescendantReferencingElements(AccessibilityChildrenVector&) const override { }
236     void ariaControlsElements(AccessibilityChildrenVector&) const override { }
237     void ariaControlsReferencingElements(AccessibilityChildrenVector&) const override { }
238     void ariaDescribedByElements(AccessibilityChildrenVector&) const override { }
239     void ariaDescribedByReferencingElements(AccessibilityChildrenVector&) const override { }
240     void ariaDetailsElements(AccessibilityChildrenVector&) const override { }
241     void ariaDetailsReferencingElements(AccessibilityChildrenVector&) const override { }
242     void ariaErrorMessageElements(AccessibilityChildrenVector&) const override { }
243     void ariaErrorMessageReferencingElements(AccessibilityChildrenVector&) const override { }
244     void ariaFlowToElements(AccessibilityChildrenVector&) const override { }
245     void ariaFlowToReferencingElements(AccessibilityChildrenVector&) const override { }
246     void ariaLabelledByElements(AccessibilityChildrenVector&) const override { }
247     void ariaLabelledByReferencingElements(AccessibilityChildrenVector&) const override { }
248     void ariaOwnsElements(AccessibilityChildrenVector&) const override { }
249     void ariaOwnsReferencingElements(AccessibilityChildrenVector&) const override { }
250
251     bool hasPopup() const override { return false; }
252     String popupValue() const override { return String(); }
253     bool hasDatalist() const override { return false; }
254     bool supportsHasPopup() const override { return false; }
255     bool pressedIsPresent() const override { return false; }
256     bool ariaIsMultiline() const override { return false; }
257     String invalidStatus() const override { return String(); }
258     bool supportsPressed() const override { return false; }
259     bool supportsExpanded() const override { return false; }
260     bool supportsChecked() const override { return false; }
261     AccessibilitySortDirection sortDirection() const override { return AccessibilitySortDirection::None; }
262     bool canvasHasFallbackContent() const override { return false; }
263     bool supportsRangeValue() const override { return false; }
264     const AtomString& identifierAttribute() const override { return nullAtom(); }
265     const AtomString& linkRelValue() const override { return nullAtom(); }
266     void classList(Vector<String>&) const override { }
267     AccessibilityCurrentState currentState() const override { return AccessibilityCurrentState::False; }
268     String currentValue() const override { return String(); }
269     bool supportsCurrent() const override { return false; }
270     const String keyShortcutsValue() const override { return String(); }
271
272     // This function checks if the object should be ignored when there's a modal dialog displayed.
273     bool ignoredFromModalPresence() const override { return false; }
274     bool isModalDescendant(Node*) const override { return false; }
275     bool isModalNode() const override { return false; }
276
277     bool supportsSetSize() const override { return false; }
278     bool supportsPosInSet() const override { return false; }
279     int setSize() const override { return 0; }
280     int posInSet() const override { return 0; }
281
282     bool supportsARIADropping() const override { return false; }
283     bool supportsARIADragging() const override { return false; }
284     bool isARIAGrabbed() override { return false; }
285     void setARIAGrabbed(bool) override { }
286     Vector<String> determineARIADropEffects() override { return Vector<String>(); }
287
288     AXCoreObject* accessibilityHitTest(const IntPoint&) const override;
289     AXCoreObject* elementAccessibilityHitTest(const IntPoint&) const override { return nullptr; }
290
291     AXCoreObject* focusedUIElement() const override;
292
293     AXCoreObject* firstChild() const override { return nullptr; }
294     AXCoreObject* lastChild() const override { return nullptr; }
295     AXCoreObject* previousSibling() const override { return nullptr; }
296     AXCoreObject* nextSibling() const override { return nullptr; }
297     AXCoreObject* nextSiblingUnignored(int) const override { return nullptr; }
298     AXCoreObject* previousSiblingUnignored(int) const override { return nullptr; }
299     AXCoreObject* parentObject() const override { return nullptr; }
300     AXCoreObject* parentObjectUnignored() const override;
301     AXCoreObject* parentObjectIfExists() const override { return nullptr; }
302     void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&) override { }
303     bool isDescendantOfBarrenParent() const override { return false; }
304     bool isDescendantOfRole(AccessibilityRole) const override { return false; }
305
306     Vector<RefPtr<Range>> findTextRanges(AccessibilitySearchTextCriteria const&) const override { return Vector<RefPtr<Range>>(); }
307     Vector<String> performTextOperation(AccessibilityTextOperation const&) override { return Vector<String>(); }
308
309     AXCoreObject* observableObject() const override { return nullptr; }
310     void linkedUIElements(AccessibilityChildrenVector&) const override { }
311     AXCoreObject* titleUIElement() const override { return nullptr; }
312     bool exposesTitleUIElement() const override { return false; }
313     AXCoreObject* correspondingLabelForControlElement() const override { return nullptr; }
314     AXCoreObject* correspondingControlForLabelElement() const override { return nullptr; }
315     AXCoreObject* scrollBar(AccessibilityOrientation) override { return nullptr; }
316
317     AccessibilityRole ariaRoleAttribute() const override { return AccessibilityRole::Unknown; }
318     bool isPresentationalChildOfAriaRole() const override { return false; }
319     bool ariaRoleHasPresentationalChildren() const override { return false; }
320     bool inheritsPresentationalRole() const override { return false; }
321
322     void accessibilityText(Vector<AccessibilityText>&) const override { }
323     String computedLabel() override { return String(); }
324
325     void setAccessibleName(const AtomString&) override { }
326     bool hasAttributesRequiredForInclusion() const override { return false; }
327
328     String accessibilityDescription() const override { return String(); }
329     String title() const override { return String(); }
330     String helpText() const override { return String(); }
331
332     bool isARIAStaticText() const override { return false; }
333     String stringValue() const override { return String(); }
334     String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const override { return String(); }
335     String text() const override { return String(); }
336     int textLength() const override { return 0; }
337     String ariaLabeledByAttribute() const override { return String(); }
338     String ariaDescribedByAttribute() const override { return String(); }
339     const String placeholderValue() const override { return String(); }
340     bool accessibleNameDerivesFromContent() const override { return false; }
341
342     String expandedTextValue() const override { return String(); }
343     bool supportsExpandedTextValue() const override { return false; }
344
345     void elementsFromAttribute(Vector<Element*>&, const QualifiedName&) const override { }
346
347     void colorValue(int&, int&, int&) const override { }
348
349     AccessibilityRole roleValue() const override { return static_cast<AccessibilityRole>(intAttributeValue(AXPropertyName::RoleValue)); }
350     String rolePlatformString() const override { return stringAttributeValue(AXPropertyName::RolePlatformString); }
351     String roleDescription() const override { return stringAttributeValue(AXPropertyName::RoleDescription); }
352     String ariaLandmarkRoleDescription() const override { return stringAttributeValue(AXPropertyName::ARIALandmarkRoleDescription); }
353
354     AXObjectCache* axObjectCache() const override { return nullptr; }
355
356     Element* anchorElement() const override { return nullptr; }
357     bool supportsPressAction() const override { return false; }
358     Element* actionElement() const override { return nullptr; }
359     LayoutRect boundingBoxRect() const override { return LayoutRect(); }
360     IntRect pixelSnappedBoundingBoxRect() const override { return IntRect(); }
361     LayoutRect elementRect() const override { return LayoutRect(); }
362     LayoutSize size() const override { return LayoutSize(); }
363     IntPoint clickPoint() override { return IntPoint(); }
364     Path elementPath() const override { return Path(); }
365     bool supportsPath() const override { return false; }
366
367     TextIteratorBehavior textIteratorBehaviorForTextRange() const override { return TextIteratorDefaultBehavior; }
368     PlainTextRange selectedTextRange() const override { return PlainTextRange(); }
369     unsigned selectionStart() const override { return 0; }
370     unsigned selectionEnd() const override { return 0; }
371
372     URL url() const override { return URL(); }
373     VisibleSelection selection() const override { return VisibleSelection(); }
374     String selectedText() const override { return String(); }
375     const AtomString& accessKey() const override { return nullAtom(); }
376     const String& actionVerb() const override { return nullAtom(); }
377     Widget* widget() const override { return nullptr; }
378     Widget* widgetForAttachmentView() const override { return nullptr; }
379     Page* page() const override { return nullptr; }
380     Document* document() const override { return nullptr; }
381     FrameView* documentFrameView() const override { return nullptr; }
382     Frame* frame() const override { return nullptr; }
383     Frame* mainFrame() const override { return nullptr; }
384     Document* topDocument() const override { return nullptr; }
385     ScrollView* scrollViewAncestor() const override { return nullptr; }
386     String language() const override { return String(); }
387     unsigned hierarchicalLevel() const override { return 0; }
388
389     void setFocused(bool) override { }
390     void setSelectedText(const String&) override { }
391     void setSelectedTextRange(const PlainTextRange&) override { }
392     void setValue(const String&) override { }
393     bool replaceTextInRange(const String&, const PlainTextRange&) override { return false; }
394     bool insertText(const String&) override { return false; }
395
396     void setValue(float) override { }
397     void setSelected(bool) override { }
398     void setSelectedRows(AccessibilityChildrenVector&) override { }
399
400     void makeRangeVisible(const PlainTextRange&) override { }
401     bool press() override { return false; }
402     bool performDefaultAction() override { return false; }
403
404     AccessibilityOrientation orientation() const override { return AccessibilityOrientation::Undefined; }
405     void increment() override { }
406     void decrement() override { }
407
408     void childrenChanged() override { }
409     void textChanged() override { }
410     void updateAccessibilityRole() override { }
411     const AccessibilityChildrenVector& children(bool updateChildrenIfNeeded = true) override;
412     void addChildren() override { }
413     void addChild(AXCoreObject*) override { }
414     void insertChild(AXCoreObject*, unsigned) override { }
415
416     bool shouldIgnoreAttributeRole() const override { return false; }
417
418     bool canHaveChildren() const override { return false; }
419     bool hasChildren() const override { return false; }
420     void updateChildrenIfNecessary() override { }
421     void setNeedsToUpdateChildren() override { }
422     void setNeedsToUpdateSubtree() override { };
423     void clearChildren() override { }
424     bool needsToUpdateChildren() const override { return false; }
425     void detachFromParent() override { }
426     bool isDetachedFromParent() override { return false; }
427
428     bool canHaveSelectedChildren() const override { return false; }
429     void selectedChildren(AccessibilityChildrenVector&) override { }
430     void visibleChildren(AccessibilityChildrenVector&) override { }
431     void tabChildren(AccessibilityChildrenVector&) override { }
432     bool shouldFocusActiveDescendant() const override { return false; }
433     AXCoreObject* activeDescendant() const override { return nullptr; }
434     void handleActiveDescendantChanged() override { }
435     void handleAriaExpandedChanged() override { }
436     bool isDescendantOfObject(const AXCoreObject*) const override { return false; }
437     bool isAncestorOfObject(const AXCoreObject*) const override { return false; }
438     AXCoreObject* firstAnonymousBlockChild() const override { return nullptr; }
439
440     bool hasAttribute(const QualifiedName&) const override { return false; }
441     const AtomString& getAttribute(const QualifiedName&) const override { return nullAtom(); }
442     bool hasTagName(const QualifiedName&) const override { return false; }
443
444     VisiblePositionRange visiblePositionRange() const override { return VisiblePositionRange(); }
445     VisiblePositionRange visiblePositionRangeForLine(unsigned) const override { return VisiblePositionRange(); }
446     RefPtr<Range> elementRange() const override { return nullptr; }
447     VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const override { return VisiblePositionRange(); }
448     VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const override { return VisiblePositionRange(); }
449     VisiblePositionRange positionOfRightWord(const VisiblePosition&) const override { return VisiblePositionRange(); }
450     VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const override { return VisiblePositionRange(); }
451     VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const override { return VisiblePositionRange(); }
452     VisiblePositionRange sentenceForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
453     VisiblePositionRange paragraphForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
454     VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
455     VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const override { return VisiblePositionRange(); }
456     VisiblePositionRange lineRangeForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
457
458     RefPtr<Range> rangeForPlainTextRange(const PlainTextRange&) const override { return nullptr; }
459
460     String stringForRange(RefPtr<Range>) const override { return String(); }
461     IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const override { return IntRect(); }
462     IntRect boundsForRange(const RefPtr<Range>) const override { return IntRect(); }
463     int lengthForVisiblePositionRange(const VisiblePositionRange&) const override { return 0; }
464     void setSelectedVisiblePositionRange(const VisiblePositionRange&) const override { }
465
466     VisiblePosition visiblePositionForBounds(const IntRect&, AccessibilityVisiblePositionForBounds) const override { return VisiblePosition(); }
467     VisiblePosition visiblePositionForPoint(const IntPoint&) const override { return VisiblePosition(); }
468     VisiblePosition nextVisiblePosition(const VisiblePosition&) const override { return VisiblePosition(); }
469     VisiblePosition previousVisiblePosition(const VisiblePosition&) const override { return VisiblePosition(); }
470     VisiblePosition nextWordEnd(const VisiblePosition&) const override { return VisiblePosition(); }
471     VisiblePosition previousWordStart(const VisiblePosition&) const override { return VisiblePosition(); }
472     VisiblePosition nextLineEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
473     VisiblePosition previousLineStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
474     VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
475     VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
476     VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
477     VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
478     VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const override { return VisiblePosition(); }
479
480     VisiblePosition visiblePositionForIndex(int) const override { return VisiblePosition(); }
481     int indexForVisiblePosition(const VisiblePosition&) const override { return 0; }
482
483     AXCoreObject* accessibilityObjectForPosition(const VisiblePosition&) const override { return nullptr; }
484     int lineForPosition(const VisiblePosition&) const override { return 0; }
485     PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const override { return PlainTextRange(); }
486     int index(const VisiblePosition&) const override { return 0; }
487
488     void lineBreaks(Vector<int>&) const override { }
489     PlainTextRange doAXRangeForLine(unsigned) const override { return PlainTextRange(); }
490     PlainTextRange doAXRangeForPosition(const IntPoint&) const override { return PlainTextRange(); }
491     PlainTextRange doAXRangeForIndex(unsigned) const override { return PlainTextRange(); }
492     PlainTextRange doAXStyleRangeForIndex(unsigned) const override { return PlainTextRange(); }
493
494     String doAXStringForRange(const PlainTextRange&) const override { return String(); }
495     IntRect doAXBoundsForRange(const PlainTextRange&) const override { return IntRect(); }
496     IntRect doAXBoundsForRangeUsingCharacterOffset(const PlainTextRange&) const override { return IntRect(); }
497
498     unsigned doAXLineForIndex(unsigned) override { return 0; }
499
500     String computedRoleString() const override { return String(); }
501
502     // MSAA
503     String stringValueForMSAA() const override { return String(); }
504     String stringRoleForMSAA() const override { return String(); }
505     String nameForMSAA() const override { return String(); }
506     String descriptionForMSAA() const override { return String(); }
507     AccessibilityRole roleValueForMSAA() const override { return AccessibilityRole::Unknown; }
508
509     String passwordFieldValue() const override { return String(); }
510     bool isValueAutofilled() const override { return false; }
511     bool isValueAutofillAvailable() const override { return false; }
512     AutoFillButtonType valueAutofillButtonType() const override { return AutoFillButtonType::None; }
513
514     void ariaTreeRows(AccessibilityChildrenVector&) override { }
515     void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&) override { }
516     void ariaTreeItemContent(AccessibilityChildrenVector&) override { }
517
518     bool supportsLiveRegion(bool = true) const override { return false; }
519     bool isInsideLiveRegion(bool = true) const override { return false; }
520     AXCoreObject* liveRegionAncestor(bool = true) const override { return nullptr; }
521     const String liveRegionStatus() const override { return String(); }
522     const String liveRegionRelevant() const override { return String(); }
523     bool liveRegionAtomic() const override { return false; }
524     bool isBusy() const override { return false; }
525
526     bool hasContentEditableAttributeSet() const override { return false; }
527
528     bool supportsReadOnly() const override { return false; }
529     String readOnlyValue() const override { return String(); }
530
531     bool supportsAutoComplete() const override { return false; }
532     String autoCompleteValue() const override { return String(); }
533
534     bool supportsARIAAttributes() const override { return false; }
535
536     OptionSet<SpeakAs> speakAsProperty() const override { return OptionSet<SpeakAs>(); }
537
538     void scrollToMakeVisible() const override { }
539     void scrollToMakeVisibleWithSubFocus(const IntRect&) const override { }
540     void scrollToGlobalPoint(const IntPoint&) const override { }
541
542     bool scrollByPage(ScrollByPageDirection) const override { return false; }
543     IntPoint scrollPosition() const override { return IntPoint(); }
544     IntSize scrollContentsSize() const override { return IntSize(); }
545     IntRect scrollVisibleContentRect() const override { return IntRect(); }
546     void scrollToMakeVisible(const ScrollRectToVisibleOptions&) const override { }
547
548     bool lastKnownIsIgnoredValue() override { return false; }
549     void setLastKnownIsIgnoredValue(bool) override { }
550
551     void notifyIfIgnoredValueChanged() override { }
552
553     bool isMathElement() const override { return boolAttributeValue(AXPropertyName::IsMathElement); }
554     bool isMathFraction() const override { return boolAttributeValue(AXPropertyName::IsMathFraction); }
555     bool isMathFenced() const override { return boolAttributeValue(AXPropertyName::IsMathFenced); }
556     bool isMathSubscriptSuperscript() const override { return boolAttributeValue(AXPropertyName::IsMathSubscriptSuperscript); }
557     bool isMathRow() const override { return boolAttributeValue(AXPropertyName::IsMathRow); }
558     bool isMathUnderOver() const override { return boolAttributeValue(AXPropertyName::IsMathUnderOver); }
559     bool isMathRoot() const override { return boolAttributeValue(AXPropertyName::IsMathRoot); }
560     bool isMathSquareRoot() const override { return boolAttributeValue(AXPropertyName::IsMathSquareRoot); }
561     bool isMathText() const override { return boolAttributeValue(AXPropertyName::IsMathText); }
562     bool isMathNumber() const override { return boolAttributeValue(AXPropertyName::IsMathNumber); }
563     bool isMathOperator() const override { return boolAttributeValue(AXPropertyName::IsMathOperator); }
564     bool isMathFenceOperator() const override { return boolAttributeValue(AXPropertyName::IsMathFenceOperator); }
565     bool isMathSeparatorOperator() const override { return boolAttributeValue(AXPropertyName::IsMathSeparatorOperator); }
566     bool isMathIdentifier() const override { return boolAttributeValue(AXPropertyName::IsMathIdentifier); }
567     bool isMathTable() const override { return boolAttributeValue(AXPropertyName::IsMathTable); }
568     bool isMathTableRow() const override { return boolAttributeValue(AXPropertyName::IsMathTableRow); }
569     bool isMathTableCell() const override { return boolAttributeValue(AXPropertyName::IsMathTableCell); }
570     bool isMathMultiscript() const override { return boolAttributeValue(AXPropertyName::IsMathMultiscript); }
571     bool isMathToken() const override { return boolAttributeValue(AXPropertyName::IsMathToken); }
572     bool isMathScriptObject(AccessibilityMathScriptObjectType) const override { return false; }
573     bool isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const override { return false; }
574
575     AXCoreObject* mathRadicandObject() override { return objectAttributeValue(AXPropertyName::MathRadicandObject); }
576     AXCoreObject* mathRootIndexObject() override { return objectAttributeValue(AXPropertyName::MathRootIndexObject); }
577
578     AXCoreObject* mathUnderObject() override { return objectAttributeValue(AXPropertyName::MathUnderObject); }
579     AXCoreObject* mathOverObject() override { return objectAttributeValue(AXPropertyName::MathOverObject); }
580
581     AXCoreObject* mathNumeratorObject() override { return objectAttributeValue(AXPropertyName::MathNumeratorObject); }
582     AXCoreObject* mathDenominatorObject() override { return objectAttributeValue(AXPropertyName::MathDenominatorObject); }
583
584     AXCoreObject* mathBaseObject() override { return objectAttributeValue(AXPropertyName::MathBaseObject); }
585     AXCoreObject* mathSubscriptObject() override { return objectAttributeValue(AXPropertyName::MathSubscriptObject); }
586     AXCoreObject* mathSuperscriptObject() override { return objectAttributeValue(AXPropertyName::MathSuperscriptObject); }
587
588     String mathFencedOpenString() const override { return stringAttributeValue(AXPropertyName::MathFencedOpenString); }
589     String mathFencedCloseString() const override { return stringAttributeValue(AXPropertyName::MathFencedCloseString); }
590     int mathLineThickness() const override { return intAttributeValue(AXPropertyName::MathLineThickness); }
591     bool isAnonymousMathOperator() const override { return boolAttributeValue(AXPropertyName::IsAnonymousMathOperator); }
592
593     void mathPrescripts(AccessibilityMathMultiscriptPairs&) override { }
594     void mathPostscripts(AccessibilityMathMultiscriptPairs&) override { }
595
596     bool isAXHidden() const override { return false; }
597     bool isDOMHidden() const override { return false; }
598     bool isHidden() const override { return false; }
599
600     void setWrapper(AccessibilityObjectWrapper* wrapper) override { m_wrapper = wrapper; }
601
602     void overrideAttachmentParent(AXCoreObject*) override { }
603
604     bool accessibilityIgnoreAttachment() const override { return false; }
605     AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const override { return AccessibilityObjectInclusion::DefaultBehavior; }
606
607 #if PLATFORM(IOS_FAMILY)
608     int accessibilityPasswordFieldLength() override { return 0; }
609     bool hasTouchEventListener() const override { return false; }
610     bool isInputTypePopupButton() const override { return false; }
611 #endif
612
613     void updateBackingStore() override;
614
615 #if PLATFORM(COCOA)
616     bool preventKeyboardDOMEventDispatch() const override { return false; }
617     void setPreventKeyboardDOMEventDispatch(bool) override { }
618     bool fileUploadButtonReturnsValueInTitle() const override { return false; }
619     String speechHintAttributeValue() const override { return stringAttributeValue(AXPropertyName::SpeechHint); }
620     String descriptionAttributeValue() const override { return stringAttributeValue(AXPropertyName::Description); }
621     String helpTextAttributeValue() const override { return stringAttributeValue(AXPropertyName::HelpText); }
622     String titleAttributeValue() const override { return stringAttributeValue(AXPropertyName::Title); }
623 #endif
624
625 #if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)
626     bool caretBrowsingEnabled() const override { return false; }
627     void setCaretBrowsingEnabled(bool) override { }
628 #endif
629
630     AXCoreObject* focusableAncestor() override { return nullptr; }
631     AXCoreObject* editableAncestor() override { return nullptr; }
632     AXCoreObject* highestEditableAncestor() override { return nullptr; }
633
634     const AccessibilityScrollView* ancestorAccessibilityScrollView(bool) const override { return nullptr; }
635
636     void setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData&) override { };
637     void clearIsIgnoredFromParentData() override { }
638     void setIsIgnoredFromParentDataForChild(AXCoreObject*) override { }
639
640     enum class AXPropertyName : uint8_t {
641         None = 0,
642         Description,
643         HelpText,
644         IsAccessibilityIgnored,
645         IsAnonymousMathOperator,
646         IsAttachment,
647         IsFileUploadButton,
648         IsImage,
649         IsImageMapLink,
650         IsLink,
651         IsMathElement,
652         IsMathFraction,
653         IsMathFenced,
654         IsMathSubscriptSuperscript,
655         IsMathRow,
656         IsMathUnderOver,
657         IsMathRoot,
658         IsMathSquareRoot,
659         IsMathText,
660         IsMathNumber,
661         IsMathOperator,
662         IsMathFenceOperator,
663         IsMathSeparatorOperator,
664         IsMathIdentifier,
665         IsMathTable,
666         IsMathTableRow,
667         IsMathTableCell,
668         IsMathMultiscript,
669         IsMathToken,
670         IsMathScriptObject,
671         IsMediaControlLabel,
672         IsScrollbar,
673         IsTree,
674         IsTreeItem,
675         MathFencedOpenString,
676         MathFencedCloseString,
677         MathLineThickness,
678         MathRadicandObject,
679         MathRootIndexObject,
680         MathUnderObject,
681         MathOverObject,
682         MathNumeratorObject,
683         MathDenominatorObject,
684         MathBaseObject,
685         MathSubscriptObject,
686         MathSuperscriptObject,
687         RelativeFrame,
688         RoleValue,
689         RolePlatformString,
690         RoleDescription,
691         ARIALandmarkRoleDescription,
692         SpeechHint,
693         Title,
694     };
695
696     AXID parent() const { return m_parent; }
697
698     AXIsolatedTreeID treeIdentifier() const { return m_treeIdentifier; }
699     AXIsolatedTree* tree() const;
700
701     AXIsolatedObject() = default;
702     AXIsolatedObject(AXCoreObject&);
703     void initializeAttributeData(AXCoreObject&);
704
705     using AttributeValueVariant = Variant<std::nullptr_t, String, bool, int, unsigned, double, Optional<FloatRect>, AXID>;
706     void setProperty(AXPropertyName, AttributeValueVariant&&, bool shouldRemove = false);
707     void setObjectProperty(AXPropertyName, AXCoreObject*);
708     
709     bool boolAttributeValue(AXPropertyName) const;
710     const String stringAttributeValue(AXPropertyName) const;
711     int intAttributeValue(AXPropertyName) const;
712     unsigned unsignedAttributeValue(AXPropertyName) const;
713     double doubleAttributeValue(AXPropertyName) const;
714     FloatRect rectAttributeValue(AXPropertyName) const;
715     AXCoreObject* objectAttributeValue(AXPropertyName) const;
716
717     AXID m_parent;
718     AXID m_id;
719     bool m_initialized { false };
720     AXIsolatedTreeID m_treeIdentifier;
721     RefPtr<AXIsolatedTree> m_cachedTree;
722     Vector<AXID> m_childrenIDs;
723     Vector<RefPtr<AXCoreObject>> m_children;
724
725 #if PLATFORM(COCOA)
726     RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
727 #endif
728
729     HashMap<AXPropertyName, AttributeValueVariant, WTF::IntHash<AXPropertyName>, WTF::StrongEnumHashTraits<AXPropertyName>> m_attributeMap;
730 };
731
732 } // namespace WebCore
733
734 #endif // ENABLE((ACCESSIBILITY_ISOLATED_TREE))