Implementation for AXIsolatedObject::nextSibling and previousSibling.
[WebKit-https.git] / Source / WebCore / accessibility / isolatedtree / AXIsolatedObject.cpp
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 #include "config.h"
27
28 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
29 #include "AXIsolatedObject.h"
30
31 #include "AXIsolatedTree.h"
32
33 #if PLATFORM(COCOA)
34 #include <pal/spi/cocoa/AccessibilitySupportSoftLink.h>
35 #endif
36
37 namespace WebCore {
38
39 AXIsolatedObject::AXIsolatedObject(AXCoreObject& object, AXIsolatedTreeID treeID, AXID parentID)
40     : m_treeID(treeID)
41     , m_parentID(parentID)
42     , m_id(object.objectID())
43 {
44     ASSERT(isMainThread());
45     if (auto tree = AXIsolatedTree::treeForID(m_treeID))
46         m_cachedTree = tree;
47     if (m_id != InvalidAXID)
48         initializeAttributeData(object, parentID == InvalidAXID);
49     else {
50         // Should never happen under normal circumstances.
51         ASSERT_NOT_REACHED();
52     }
53 }
54
55 Ref<AXIsolatedObject> AXIsolatedObject::create(AXCoreObject& object, AXIsolatedTreeID treeID, AXID parentID)
56 {
57     return adoptRef(*new AXIsolatedObject(object, treeID, parentID));
58 }
59
60 AXIsolatedObject::~AXIsolatedObject()
61 {
62     ASSERT(!wrapper());
63 }
64
65 void AXIsolatedObject::initializeAttributeData(AXCoreObject& object, bool isRoot)
66 {
67     setProperty(AXPropertyName::ARIALandmarkRoleDescription, object.ariaLandmarkRoleDescription().isolatedCopy());
68     setProperty(AXPropertyName::AccessibilityDescription, object.accessibilityDescription().isolatedCopy());
69     setProperty(AXPropertyName::BoundingBoxRect, object.boundingBoxRect());
70     setProperty(AXPropertyName::Description, object.descriptionAttributeValue().isolatedCopy());
71     setProperty(AXPropertyName::ElementRect, object.elementRect());
72     setProperty(AXPropertyName::HasARIAValueNow, object.hasARIAValueNow());
73     setProperty(AXPropertyName::HasApplePDFAnnotationAttribute, object.hasApplePDFAnnotationAttribute());
74     setProperty(AXPropertyName::HelpText, object.helpTextAttributeValue().isolatedCopy());
75     setProperty(AXPropertyName::IsAccessibilityIgnored, object.accessibilityIsIgnored());
76     setProperty(AXPropertyName::IsActiveDescendantOfFocusedContainer, object.isActiveDescendantOfFocusedContainer());
77     setProperty(AXPropertyName::IsAttachment, object.isAttachment());
78     setProperty(AXPropertyName::IsBusy, object.isBusy());
79     setProperty(AXPropertyName::IsButton, object.isButton());
80     setProperty(AXPropertyName::IsChecked, object.isChecked());
81     setProperty(AXPropertyName::IsCollapsed, object.isCollapsed());
82     setProperty(AXPropertyName::IsControl, object.isControl());
83     setProperty(AXPropertyName::IsDescriptionList, object.isDescriptionList());
84     setProperty(AXPropertyName::IsEnabled, object.isEnabled());
85     setProperty(AXPropertyName::IsExpanded, object.isExpanded());
86     setProperty(AXPropertyName::IsFieldset, object.isFieldset());
87     setProperty(AXPropertyName::IsFileUploadButton, object.isFileUploadButton());
88     setProperty(AXPropertyName::IsFocused, object.isFocused());
89     setProperty(AXPropertyName::IsGroup, object.isGroup());
90     setProperty(AXPropertyName::IsHeading, object.isHeading());
91     setProperty(AXPropertyName::IsHovered, object.isHovered());
92     setProperty(AXPropertyName::IsImageMapLink, object.isImageMapLink());
93     setProperty(AXPropertyName::IsIndeterminate, object.isIndeterminate());
94     setProperty(AXPropertyName::IsInlineText, object.isInlineText());
95     setProperty(AXPropertyName::IsInputImage, object.isInputImage());
96     setProperty(AXPropertyName::IsLandmark, object.isLandmark());
97     setProperty(AXPropertyName::IsLink, object.isLink());
98     setProperty(AXPropertyName::IsLinked, object.isLinked());
99     setProperty(AXPropertyName::IsList, object.isList());
100     setProperty(AXPropertyName::IsLoaded, object.isLoaded());
101     setProperty(AXPropertyName::IsMediaTimeline, object.isMediaTimeline());
102     setProperty(AXPropertyName::IsMenu, object.isMenu());
103     setProperty(AXPropertyName::IsMenuBar, object.isMenuBar());
104     setProperty(AXPropertyName::IsMenuButton, object.isMenuButton());
105     setProperty(AXPropertyName::IsMenuItem, object.isMenuItem());
106     setProperty(AXPropertyName::IsMenuList, object.isMenuList());
107     setProperty(AXPropertyName::IsMenuListOption, object.isMenuListOption());
108     setProperty(AXPropertyName::IsMenuListPopup, object.isMenuListPopup());
109     setProperty(AXPropertyName::IsMenuRelated, object.isMenuRelated());
110     setProperty(AXPropertyName::IsMeter, object.isMeter());
111     setProperty(AXPropertyName::IsMultiSelectable, object.isMultiSelectable());
112     setProperty(AXPropertyName::IsOrderedList, object.isOrderedList());
113     setProperty(AXPropertyName::IsOutput, object.isOutput());
114     setProperty(AXPropertyName::IsPasswordField, object.isPasswordField());
115     setProperty(AXPropertyName::IsPressed, object.isPressed());
116     setProperty(AXPropertyName::IsProgressIndicator, object.isProgressIndicator());
117     setProperty(AXPropertyName::IsRangeControl, object.isRangeControl());
118     setProperty(AXPropertyName::IsRequired, object.isRequired());
119     setProperty(AXPropertyName::IsScrollbar, object.isScrollbar());
120     setProperty(AXPropertyName::IsSearchField, object.isSearchField());
121     setProperty(AXPropertyName::IsSelected, object.isSelected());
122     setProperty(AXPropertyName::IsSelectedOptionActive, object.isSelectedOptionActive());
123     setProperty(AXPropertyName::IsSlider, object.isSlider());
124     setProperty(AXPropertyName::IsStyleFormatGroup, object.isStyleFormatGroup());
125     setProperty(AXPropertyName::IsTextControl, object.isTextControl());
126     setProperty(AXPropertyName::IsTree, object.isTree());
127     setProperty(AXPropertyName::IsUnorderedList, object.isUnorderedList());
128     setProperty(AXPropertyName::IsUnvisited, object.isUnvisited());
129     setProperty(AXPropertyName::IsValueAutofillAvailable, object.isValueAutofillAvailable());
130     setProperty(AXPropertyName::IsValueAutofilled, object.isValueAutofilled());
131     setProperty(AXPropertyName::IsVisible, object.isVisible());
132     setProperty(AXPropertyName::IsVisited, object.isVisited());
133     setProperty(AXPropertyName::RoleDescription, object.roleDescription().isolatedCopy());
134     setProperty(AXPropertyName::RolePlatformString, object.rolePlatformString().isolatedCopy());
135     setProperty(AXPropertyName::RoleValue, static_cast<int>(object.roleValue()));
136     setProperty(AXPropertyName::SpeechHint, object.speechHintAttributeValue().isolatedCopy());
137     setProperty(AXPropertyName::SupportsDatetimeAttribute, object.supportsDatetimeAttribute());
138     setProperty(AXPropertyName::SupportsRowCountChange, object.supportsRowCountChange());
139     setProperty(AXPropertyName::Title, object.title().isolatedCopy());
140     setProperty(AXPropertyName::TitleAttributeValue, object.titleAttributeValue().isolatedCopy());
141     setProperty(AXPropertyName::DatetimeAttributeValue, object.datetimeAttributeValue());
142     setProperty(AXPropertyName::CanSetFocusAttribute, object.canSetFocusAttribute());
143     setProperty(AXPropertyName::CanSetTextRangeAttributes, object.canSetTextRangeAttributes());
144     setProperty(AXPropertyName::CanSetValueAttribute, object.canSetValueAttribute());
145     setProperty(AXPropertyName::CanSetNumericValue, object.canSetNumericValue());
146     setProperty(AXPropertyName::SupportsRequiredAttribute, object.supportsRequiredAttribute());
147     setProperty(AXPropertyName::CanSetSelectedAttribute, object.canSetSelectedAttribute());
148     setProperty(AXPropertyName::CanSetSelectedChildrenAttribute, object.canSetSelectedChildrenAttribute());
149     setProperty(AXPropertyName::CanSetExpandedAttribute, object.canSetExpandedAttribute());
150     setProperty(AXPropertyName::IsShowingValidationMessage, object.isShowingValidationMessage());
151     setProperty(AXPropertyName::ValidationMessage, object.validationMessage());
152     setProperty(AXPropertyName::BlockquoteLevel, object.blockquoteLevel());
153     setProperty(AXPropertyName::HeadingLevel, object.headingLevel());
154     setProperty(AXPropertyName::AccessibilityButtonState, static_cast<int>(object.checkboxOrRadioValue()));
155     setProperty(AXPropertyName::ValueDescription, object.valueDescription());
156     setProperty(AXPropertyName::ValueForRange, object.valueForRange());
157     setProperty(AXPropertyName::MaxValueForRange, object.maxValueForRange());
158     setProperty(AXPropertyName::MinValueForRange, object.minValueForRange());
159     setObjectProperty(AXPropertyName::SelectedRadioButton, object.selectedRadioButton());
160     setObjectProperty(AXPropertyName::SelectedTabItem, object.selectedTabItem());
161     setProperty(AXPropertyName::LayoutCount, object.layoutCount());
162     setProperty(AXPropertyName::EstimatedLoadingProgress, object.estimatedLoadingProgress());
163     setProperty(AXPropertyName::SupportsARIAOwns, object.supportsARIAOwns());
164     setProperty(AXPropertyName::HasChildren, object.hasChildren());
165     setProperty(AXPropertyName::HasPopup, object.hasPopup());
166     setProperty(AXPropertyName::PopupValue, object.popupValue());
167     setProperty(AXPropertyName::PressedIsPresent, object.pressedIsPresent());
168     setProperty(AXPropertyName::ARIAIsMultiline, object.ariaIsMultiline());
169     setProperty(AXPropertyName::InvalidStatus, object.invalidStatus());
170     setProperty(AXPropertyName::SupportsExpanded, object.supportsExpanded());
171     setProperty(AXPropertyName::SortDirection, static_cast<int>(object.sortDirection()));
172     setProperty(AXPropertyName::CanvasHasFallbackContent, object.canvasHasFallbackContent());
173     setProperty(AXPropertyName::SupportsRangeValue, object.supportsRangeValue());
174     setProperty(AXPropertyName::IdentifierAttribute, object.identifierAttribute().isolatedCopy());
175     setProperty(AXPropertyName::LinkRelValue, object.linkRelValue());
176     setProperty(AXPropertyName::CurrentState, static_cast<int>(object.currentState()));
177     setProperty(AXPropertyName::CurrentValue, object.currentValue());
178     setProperty(AXPropertyName::SupportsCurrent, object.supportsCurrent());
179     setProperty(AXPropertyName::KeyShortcutsValue, object.keyShortcutsValue());
180     setProperty(AXPropertyName::SupportsSetSize, object.supportsSetSize());
181     setProperty(AXPropertyName::SupportsPath, object.supportsPath());
182     setProperty(AXPropertyName::SupportsPosInSet, object.supportsPosInSet());
183     setProperty(AXPropertyName::SetSize, object.setSize());
184     setProperty(AXPropertyName::PosInSet, object.posInSet());
185     setProperty(AXPropertyName::SupportsDropping, object.supportsDropping());
186     setProperty(AXPropertyName::SupportsDragging, object.supportsDragging());
187     setProperty(AXPropertyName::IsGrabbed, object.isGrabbed());
188     setProperty(AXPropertyName::DropEffects, object.determineDropEffects());
189     setObjectProperty(AXPropertyName::TitleUIElement, object.titleUIElement());
190     setProperty(AXPropertyName::ExposesTitleUIElement, object.exposesTitleUIElement());
191     setObjectProperty(AXPropertyName::VerticalScrollBar, object.scrollBar(AccessibilityOrientation::Vertical));
192     setObjectProperty(AXPropertyName::HorizontalScrollBar, object.scrollBar(AccessibilityOrientation::Horizontal));
193     setProperty(AXPropertyName::ARIARoleAttribute, static_cast<int>(object.ariaRoleAttribute()));
194     setProperty(AXPropertyName::ComputedLabel, object.computedLabel());
195     setProperty(AXPropertyName::PlaceholderValue, object.placeholderValue());
196     setProperty(AXPropertyName::ExpandedTextValue, object.expandedTextValue());
197     setProperty(AXPropertyName::SupportsExpandedTextValue, object.supportsExpandedTextValue());
198     setProperty(AXPropertyName::SupportsPressAction, object.supportsPressAction());
199     setProperty(AXPropertyName::ClickPoint, object.clickPoint());
200     setProperty(AXPropertyName::ComputedRoleString, object.computedRoleString());
201     setProperty(AXPropertyName::ValueAutofillButtonType, static_cast<int>(object.valueAutofillButtonType()));
202     setProperty(AXPropertyName::URL, object.url().isolatedCopy());
203     setProperty(AXPropertyName::AccessKey, object.accessKey());
204     setProperty(AXPropertyName::ActionVerb, object.actionVerb());
205     setProperty(AXPropertyName::ReadOnlyValue, object.readOnlyValue());
206     setProperty(AXPropertyName::AutoCompleteValue, object.autoCompleteValue());
207     setProperty(AXPropertyName::SpeakAs, object.speakAsProperty());
208     setProperty(AXPropertyName::StringValue, object.stringValue().isolatedCopy());
209 #if PLATFORM(MAC)
210     setProperty(AXPropertyName::CaretBrowsingEnabled, object.caretBrowsingEnabled());
211 #endif
212     setObjectProperty(AXPropertyName::FocusableAncestor, object.focusableAncestor());
213     setObjectProperty(AXPropertyName::EditableAncestor, object.editableAncestor());
214     setObjectProperty(AXPropertyName::HighestEditableAncestor, object.highestEditableAncestor());
215     setProperty(AXPropertyName::Orientation, static_cast<int>(object.orientation()));
216     setProperty(AXPropertyName::HierarchicalLevel, object.hierarchicalLevel());
217     setProperty(AXPropertyName::Language, object.language());
218     setProperty(AXPropertyName::CanHaveSelectedChildren, object.canHaveSelectedChildren());
219     setProperty(AXPropertyName::TagName, object.tagName().isolatedCopy());
220     setProperty(AXPropertyName::SupportsLiveRegion, object.supportsLiveRegion());
221     setProperty(AXPropertyName::IsInsideLiveRegion, object.isInsideLiveRegion());
222     setProperty(AXPropertyName::LiveRegionStatus, object.liveRegionStatus());
223     setProperty(AXPropertyName::LiveRegionRelevant, object.liveRegionRelevant());
224     setProperty(AXPropertyName::LiveRegionAtomic, object.liveRegionAtomic());
225     setProperty(AXPropertyName::Path, object.elementPath());
226     setProperty(AXPropertyName::HasHighlighting, object.hasHighlighting());
227     setProperty(AXPropertyName::HasBoldFont, object.hasBoldFont());
228     setProperty(AXPropertyName::HasItalicFont, object.hasItalicFont());
229     setProperty(AXPropertyName::HasPlainText, object.hasPlainText());
230     setProperty(AXPropertyName::HasUnderline, object.hasUnderline());
231     setProperty(AXPropertyName::IsKeyboardFocusable, object.isKeyboardFocusable());
232     setObjectProperty(AXPropertyName::NextSibling, object.nextSibling());
233     setObjectProperty(AXPropertyName::PreviousSibling, object.previousSibling());
234
235     if (object.isTable()) {
236         setProperty(AXPropertyName::IsTable, true);
237         setProperty(AXPropertyName::IsExposable, object.isExposable());
238         setProperty(AXPropertyName::IsDataTable, object.isDataTable());
239         setProperty(AXPropertyName::TableLevel, object.tableLevel());
240         setProperty(AXPropertyName::SupportsSelectedRows, object.supportsSelectedRows());
241         setObjectVectorProperty(AXPropertyName::Columns, object.columns());
242         setObjectVectorProperty(AXPropertyName::Rows, object.rows());
243         setProperty(AXPropertyName::ColumnCount, object.columnCount());
244         setProperty(AXPropertyName::RowCount, object.rowCount());
245         setObjectVectorProperty(AXPropertyName::Cells, object.cells());
246         setObjectVectorProperty(AXPropertyName::ColumnHeaders, object.columnHeaders());
247         setObjectVectorProperty(AXPropertyName::RowHeaders, object.rowHeaders());
248         setObjectVectorProperty(AXPropertyName::VisibleRows, object.visibleRows());
249         setObjectProperty(AXPropertyName::HeaderContainer, object.headerContainer());
250         setProperty(AXPropertyName::AXColumnCount, object.axColumnCount());
251         setProperty(AXPropertyName::AXRowCount, object.axRowCount());
252     }
253
254     if (object.isTableCell()) {
255         setProperty(AXPropertyName::IsTableCell, true);
256         setProperty(AXPropertyName::ColumnIndexRange, object.columnIndexRange());
257         setProperty(AXPropertyName::RowIndexRange, object.rowIndexRange());
258         setObjectVectorProperty(AXPropertyName::ColumnHeaders, object.columnHeaders());
259         setObjectVectorProperty(AXPropertyName::RowHeaders, object.rowHeaders());
260         setProperty(AXPropertyName::IsColumnHeaderCell, object.isColumnHeaderCell());
261         setProperty(AXPropertyName::IsRowHeaderCell, object.isRowHeaderCell());
262         setProperty(AXPropertyName::AXColumnIndex, object.axColumnIndex());
263         setProperty(AXPropertyName::AXRowIndex, object.axRowIndex());
264     }
265
266     if (object.isTableColumn()) {
267         setProperty(AXPropertyName::IsTableColumn, true);
268         setProperty(AXPropertyName::ColumnIndex, object.columnIndex());
269         setObjectProperty(AXPropertyName::ColumnHeader, object.columnHeader());
270     } else if (object.isTableRow()) {
271         setProperty(AXPropertyName::IsTableRow, true);
272         setProperty(AXPropertyName::RowIndex, object.rowIndex());
273     }
274
275     if (object.isARIATreeGridRow()) {
276         setProperty(AXPropertyName::IsARIATreeGridRow, true);
277         setObjectVectorProperty(AXPropertyName::DisclosedRows, object.disclosedRows());
278         setObjectProperty(AXPropertyName::DisclosedByRow, object.disclosedByRow());
279     }
280
281     if (object.isTreeItem())
282         setObjectVectorProperty(AXPropertyName::DisclosedRows, object.disclosedRows());
283
284     if (object.isTextControl())
285         setProperty(AXPropertyName::TextLength, object.textLength());
286
287     AccessibilityChildrenVector selectedChildren;
288     object.selectedChildren(selectedChildren);
289     setObjectVectorProperty(AXPropertyName::SelectedChildren, selectedChildren);
290
291     AccessibilityChildrenVector visibleChildren;
292     object.visibleChildren(visibleChildren);
293     setObjectVectorProperty(AXPropertyName::VisibleChildren, visibleChildren);
294
295     AccessibilityChildrenVector tabChildren;
296     object.tabChildren(tabChildren);
297     setObjectVectorProperty(AXPropertyName::TabChildren, tabChildren);
298
299     AccessibilityChildrenVector ariaTreeRows;
300     object.ariaTreeRows(ariaTreeRows);
301     setObjectVectorProperty(AXPropertyName::ARIATreeRows, ariaTreeRows);
302
303     AccessibilityChildrenVector ariaTreeItemContent;
304     object.ariaTreeItemContent(ariaTreeItemContent);
305     setObjectVectorProperty(AXPropertyName::ARIATreeItemContent, ariaTreeItemContent);
306
307     AccessibilityChildrenVector linkedUIElements;
308     object.linkedUIElements(linkedUIElements);
309     setObjectVectorProperty(AXPropertyName::LinkedUIElements, linkedUIElements);
310
311     AccessibilityChildrenVector ariaControlsElements;
312     object.ariaControlsElements(ariaControlsElements);
313     setObjectVectorProperty(AXPropertyName::ARIAControlsElements, ariaControlsElements);
314
315     AccessibilityChildrenVector ariaDetailsElements;
316     object.ariaDetailsElements(ariaDetailsElements);
317     setObjectVectorProperty(AXPropertyName::ARIADetailsElements, ariaDetailsElements);
318
319     AccessibilityChildrenVector ariaErrorMessageElements;
320     object.ariaErrorMessageElements(ariaErrorMessageElements);
321     setObjectVectorProperty(AXPropertyName::ARIAErrorMessageElements, ariaErrorMessageElements);
322
323     AccessibilityChildrenVector ariaFlowToElements;
324     object.ariaFlowToElements(ariaFlowToElements);
325     setObjectVectorProperty(AXPropertyName::ARIAFlowToElements, ariaFlowToElements);
326
327     AccessibilityChildrenVector ariaOwnsElements;
328     object.ariaOwnsElements(ariaOwnsElements);
329     setObjectVectorProperty(AXPropertyName::ARIAOwnsElements, ariaOwnsElements);
330
331     Vector<AccessibilityText> texts;
332     object.accessibilityText(texts);
333     Vector<AccessibilityText> isolatedTexts;
334     isolatedTexts.reserveCapacity(texts.size());
335     for (const auto& text : texts) {
336         AccessibilityText isolatedText(text.text.isolatedCopy(), text.textSource);
337         isolatedTexts.uncheckedAppend(isolatedText);
338     }
339     setProperty(AXPropertyName::AccessibilityText, isolatedTexts);
340
341     // Spin button support.
342     setObjectProperty(AXPropertyName::DecrementButton, object.decrementButton());
343     setObjectProperty(AXPropertyName::IncrementButton, object.incrementButton());
344     setProperty(AXPropertyName::IsIncrementor, object.isIncrementor());
345
346     Vector<String> classList;
347     object.classList(classList);
348     String combinedClassList;
349     for (auto it = classList.begin(), end = classList.end(); it != end; ++it) {
350         combinedClassList.append(*it);
351         combinedClassList.append(" ");
352     }
353     setProperty(AXPropertyName::ClassList, combinedClassList);
354
355     setProperty(AXPropertyName::ColorValue, object.colorValue());
356     
357     if (bool isMathElement = object.isMathElement()) {
358         setProperty(AXPropertyName::IsMathElement, isMathElement);
359         setProperty(AXPropertyName::IsAnonymousMathOperator, object.isAnonymousMathOperator());
360         setProperty(AXPropertyName::IsMathFraction, object.isMathFraction());
361         setProperty(AXPropertyName::IsMathFenced, object.isMathFenced());
362         setProperty(AXPropertyName::IsMathSubscriptSuperscript, object.isMathSubscriptSuperscript());
363         setProperty(AXPropertyName::IsMathRow, object.isMathRow());
364         setProperty(AXPropertyName::IsMathUnderOver, object.isMathUnderOver());
365         setProperty(AXPropertyName::IsMathRoot, object.isMathRoot());
366         setProperty(AXPropertyName::IsMathSquareRoot, object.isMathSquareRoot());
367         setProperty(AXPropertyName::IsMathText, object.isMathText());
368         setProperty(AXPropertyName::IsMathNumber, object.isMathNumber());
369         setProperty(AXPropertyName::IsMathOperator, object.isMathOperator());
370         setProperty(AXPropertyName::IsMathFenceOperator, object.isMathFenceOperator());
371         setProperty(AXPropertyName::IsMathSeparatorOperator, object.isMathSeparatorOperator());
372         setProperty(AXPropertyName::IsMathIdentifier, object.isMathIdentifier());
373         setProperty(AXPropertyName::IsMathTable, object.isMathTable());
374         setProperty(AXPropertyName::IsMathTableRow, object.isMathTableRow());
375         setProperty(AXPropertyName::IsMathTableCell, object.isMathTableCell());
376         setProperty(AXPropertyName::IsMathMultiscript, object.isMathMultiscript());
377         setProperty(AXPropertyName::IsMathToken, object.isMathToken());
378         setProperty(AXPropertyName::MathFencedOpenString, object.mathFencedOpenString());
379         setProperty(AXPropertyName::MathFencedCloseString, object.mathFencedCloseString());
380         setProperty(AXPropertyName::MathLineThickness, object.mathLineThickness());
381         setObjectProperty(AXPropertyName::MathRadicandObject, object.mathRadicandObject());
382         setObjectProperty(AXPropertyName::MathRootIndexObject, object.mathRootIndexObject());
383         setObjectProperty(AXPropertyName::MathUnderObject, object.mathUnderObject());
384         setObjectProperty(AXPropertyName::MathOverObject, object.mathOverObject());
385         setObjectProperty(AXPropertyName::MathNumeratorObject, object.mathNumeratorObject());
386         setObjectProperty(AXPropertyName::MathDenominatorObject, object.mathDenominatorObject());
387         setObjectProperty(AXPropertyName::MathBaseObject, object.mathBaseObject());
388         setObjectProperty(AXPropertyName::MathSubscriptObject, object.mathSubscriptObject());
389         setObjectProperty(AXPropertyName::MathSuperscriptObject, object.mathSuperscriptObject());
390         setMathscripts(AXPropertyName::MathPrescripts, object);
391         setMathscripts(AXPropertyName::MathPostscripts, object);
392     }
393
394     if (isRoot) {
395         setObjectProperty(AXPropertyName::WebArea, object.webAreaObject());
396         setProperty(AXPropertyName::PreventKeyboardDOMEventDispatch, object.preventKeyboardDOMEventDispatch());
397         setProperty(AXPropertyName::SessionID, object.sessionID());
398         setProperty(AXPropertyName::DocumentURI, object.documentURI());
399         setProperty(AXPropertyName::DocumentEncoding, object.documentEncoding());
400         setObjectVectorProperty(AXPropertyName::DocumentLinks, object.documentLinks());
401     }
402
403     initializePlatformProperties(object);
404 }
405
406 void AXIsolatedObject::setMathscripts(AXPropertyName propertyName, AXCoreObject& object)
407 {
408     AccessibilityMathMultiscriptPairs pairs;
409     if (propertyName == AXPropertyName::MathPrescripts)
410         object.mathPrescripts(pairs);
411     else if (propertyName == AXPropertyName::MathPostscripts)
412         object.mathPostscripts(pairs);
413     
414     size_t mathSize = pairs.size();
415     if (!mathSize)
416         return;
417
418     Vector<std::pair<AXID, AXID>> idPairs;
419     idPairs.reserveCapacity(mathSize);
420     for (auto mathPair : pairs) {
421         std::pair<AXID, AXID> idPair;
422         if (mathPair.first)
423             idPair.first = mathPair.first->objectID();
424         if (mathPair.second)
425             idPair.second = mathPair.second->objectID();
426         idPairs.uncheckedAppend(idPair);
427     }
428     setProperty(propertyName, idPairs);
429 }
430
431 void AXIsolatedObject::setObjectProperty(AXPropertyName propertyName, AXCoreObject* object)
432 {
433     if (object)
434         setProperty(propertyName, object->objectID());
435     else
436         setProperty(propertyName, nullptr, true);
437 }
438
439 void AXIsolatedObject::setObjectVectorProperty(AXPropertyName propertyName, const AccessibilityChildrenVector& children)
440 {
441     if (!children.size())
442         return;
443
444     Vector<AXID> childIDs;
445     childIDs.reserveCapacity(children.size());
446
447     for (auto child : children)
448         childIDs.uncheckedAppend(child->objectID());
449
450     setProperty(propertyName, childIDs);
451 }
452
453 void AXIsolatedObject::setProperty(AXPropertyName propertyName, AXPropertyValueVariant&& value, bool shouldRemove)
454 {
455     if (shouldRemove)
456         m_propertyMap.remove(propertyName);
457     else
458         m_propertyMap.set(propertyName, value);
459 }
460
461 void AXIsolatedObject::setParent(AXID parent)
462 {
463     ASSERT(isMainThread());
464     m_parentID = parent;
465 }
466
467 void AXIsolatedObject::detachRemoteParts(AccessibilityDetachmentType)
468 {
469     for (const auto& childID : m_childrenIDs) {
470         if (auto child = tree()->nodeForID(childID))
471             child->detachFromParent();
472     }
473     m_childrenIDs.clear();
474 }
475
476 bool AXIsolatedObject::isDetached() const
477 {
478     ASSERT_NOT_REACHED();
479     return false;
480 }
481
482 void AXIsolatedObject::detachFromParent()
483 {
484     m_parentID = InvalidAXID;
485 }
486
487 const AXCoreObject::AccessibilityChildrenVector& AXIsolatedObject::children(bool)
488 {
489     ASSERT(_AXSIsolatedTreeModeFunctionIsAvailable() && ((_AXSIsolatedTreeMode_Soft() == AXSIsolatedTreeModeSecondaryThread && !isMainThread())
490         || (_AXSIsolatedTreeMode_Soft() == AXSIsolatedTreeModeMainThread && isMainThread())));
491     updateBackingStore();
492     m_children.clear();
493     m_children.reserveInitialCapacity(m_childrenIDs.size());
494     for (const auto& childID : m_childrenIDs) {
495         if (auto child = tree()->nodeForID(childID))
496             m_children.uncheckedAppend(child);
497     }
498     return m_children;
499 }
500
501 bool AXIsolatedObject::isDetachedFromParent()
502 {
503     if (parent() != InvalidAXID)
504         return false;
505
506     // Check whether this is the root node, in which case we should return false.
507     if (auto root = tree()->rootNode())
508         return root->objectID() != m_id;
509     return false;
510 }
511
512 AXCoreObject* AXIsolatedObject::cellForColumnAndRow(unsigned columnIndex, unsigned rowIndex)
513 {
514     AXID cellID = Accessibility::retrieveValueFromMainThread<AXID>([&columnIndex, &rowIndex, this] () -> AXID {
515         if (auto* object = associatedAXObject()) {
516             if (auto cell = object->cellForColumnAndRow(columnIndex, rowIndex))
517                 return cell->objectID();
518         }
519         return InvalidAXID;
520     });
521
522     return tree()->nodeForID(cellID).get();
523 }
524
525 void AXIsolatedObject::accessibilityText(Vector<AccessibilityText>& texts) const
526 {
527     texts = vectorAttributeValue<AccessibilityText>(AXPropertyName::AccessibilityText);
528 }
529
530 void AXIsolatedObject::classList(Vector<String>& list) const
531 {
532     String classList = stringAttributeValue(AXPropertyName::ClassList);
533     list.appendVector(classList.split(" "));
534 }
535
536 uint64_t AXIsolatedObject::sessionID() const
537 {
538     if (auto root = tree()->rootNode())
539         return root->uint64AttributeValue(AXPropertyName::SessionID);
540     return 0;
541 }
542
543 String AXIsolatedObject::documentURI() const
544 {
545     if (auto root = tree()->rootNode())
546         return root->stringAttributeValue(AXPropertyName::DocumentURI);
547     return String();
548 }
549
550 bool AXIsolatedObject::preventKeyboardDOMEventDispatch() const
551 {
552     if (auto root = tree()->rootNode())
553         return root->boolAttributeValue(AXPropertyName::PreventKeyboardDOMEventDispatch);
554     return false;
555 }
556
557 String AXIsolatedObject::documentEncoding() const
558 {
559     if (auto root = tree()->rootNode())
560         return root->stringAttributeValue(AXPropertyName::DocumentEncoding);
561     return String();
562 }
563
564 void AXIsolatedObject::insertMathPairs(Vector<std::pair<AXID, AXID>>& isolatedPairs, AccessibilityMathMultiscriptPairs& pairs)
565 {
566     for (const auto& pair : isolatedPairs) {
567         AccessibilityMathMultiscriptPair prescriptPair;
568         if (auto coreObject = tree()->nodeForID(pair.first).get())
569             prescriptPair.first = coreObject;
570         if (auto coreObject = tree()->nodeForID(pair.second).get())
571             prescriptPair.second = coreObject;
572         pairs.append(prescriptPair);
573     }
574 }
575
576 void AXIsolatedObject::mathPrescripts(AccessibilityMathMultiscriptPairs& pairs)
577 {
578     auto isolatedPairs = vectorAttributeValue<std::pair<AXID, AXID>>(AXPropertyName::MathPrescripts);
579     insertMathPairs(isolatedPairs, pairs);
580 }
581
582 void AXIsolatedObject::mathPostscripts(AccessibilityMathMultiscriptPairs& pairs)
583 {
584     auto isolatedPairs = vectorAttributeValue<std::pair<AXID, AXID>>(AXPropertyName::MathPostscripts);
585     insertMathPairs(isolatedPairs, pairs);
586 }
587
588 AXCoreObject* AXIsolatedObject::focusedUIElement() const
589 {
590     return tree()->focusedNode().get();
591 }
592     
593 AXCoreObject* AXIsolatedObject::parentObjectUnignored() const
594 {
595     return tree()->nodeForID(parent()).get();
596 }
597
598 AXCoreObject* AXIsolatedObject::scrollBar(AccessibilityOrientation orientation)
599 {
600     return objectAttributeValue(orientation == AccessibilityOrientation::Vertical ? AXPropertyName::VerticalScrollBar : AXPropertyName::HorizontalScrollBar);
601 }
602
603 template<typename U>
604 void AXIsolatedObject::performFunctionOnMainThread(U&& lambda)
605 {
606     Accessibility::performFunctionOnMainThread([&lambda, this] () {
607         if (auto* object = associatedAXObject())
608             lambda(object);
609     });
610 }
611
612 void AXIsolatedObject::setARIAGrabbed(bool value)
613 {
614     performFunctionOnMainThread([&value](AXCoreObject* object) {
615         object->setARIAGrabbed(value);
616     });
617 }
618
619 void AXIsolatedObject::setIsExpanded(bool value)
620 {
621     performFunctionOnMainThread([&value](AXCoreObject* object) {
622         object->setIsExpanded(value);
623     });
624 }
625
626 bool AXIsolatedObject::performDismissAction()
627 {
628     return Accessibility::retrieveValueFromMainThread<bool>([this] () -> bool {
629         if (auto* axObject = associatedAXObject())
630             return axObject->performDismissAction();
631         return false;
632     });
633 }
634
635 bool AXIsolatedObject::setValue(float value)
636 {
637     return Accessibility::retrieveValueFromMainThread<bool>([&value, this] () -> bool {
638         if (auto* axObject = associatedAXObject())
639             return axObject->setValue(value);
640         return false;
641     });
642 }
643
644 bool AXIsolatedObject::setValue(const String& value)
645 {
646     return Accessibility::retrieveValueFromMainThread<bool>([&value, this] () -> bool {
647         if (auto* axObject = associatedAXObject())
648             return axObject->setValue(value);
649         return false;
650     });
651 }
652
653 void AXIsolatedObject::setSelected(bool value)
654 {
655     performFunctionOnMainThread([&value](AXCoreObject* object) {
656         object->setSelected(value);
657     });
658 }
659
660 void AXIsolatedObject::setSelectedRows(AccessibilityChildrenVector& value)
661 {
662     performFunctionOnMainThread([&value](AXCoreObject* object) {
663         object->setSelectedRows(value);
664     });
665 }
666
667 void AXIsolatedObject::setFocused(bool value)
668 {
669     performFunctionOnMainThread([&value](AXCoreObject* object) {
670         object->setFocused(value);
671     });
672 }
673
674 void AXIsolatedObject::setSelectedText(const String& value)
675 {
676     performFunctionOnMainThread([&value](AXCoreObject* object) {
677         object->setSelectedText(value);
678     });
679 }
680
681 void AXIsolatedObject::setSelectedTextRange(const PlainTextRange& value)
682 {
683     performFunctionOnMainThread([&value](AXCoreObject* object) {
684         object->setSelectedTextRange(value);
685     });
686 }
687
688 #if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)
689 void AXIsolatedObject::setCaretBrowsingEnabled(bool value)
690 {
691     performFunctionOnMainThread([&value](AXCoreObject* object) {
692         object->setCaretBrowsingEnabled(value);
693     });
694 }
695 #endif
696
697 void AXIsolatedObject::setPreventKeyboardDOMEventDispatch(bool value)
698 {
699     performFunctionOnMainThread([&value](AXCoreObject* object) {
700         object->setPreventKeyboardDOMEventDispatch(value);
701     });
702 }
703
704 SRGBA<uint8_t> AXIsolatedObject::colorValue() const
705 {
706     return colorAttributeValue(AXPropertyName::ColorValue).toSRGBALossy<uint8_t>();
707 }
708
709 AXCoreObject* AXIsolatedObject::accessibilityHitTest(const IntPoint& point) const
710 {
711     AXID axID = Accessibility::retrieveValueFromMainThread<AXID>([&point, this] () -> AXID {
712         if (auto* object = associatedAXObject()) {
713             object->updateChildrenIfNecessary();
714             if (auto* axObject = object->accessibilityHitTest(point))
715                 return axObject->objectID();
716         }
717
718         return InvalidAXID;
719     });
720
721     return tree()->nodeForID(axID).get();
722 }
723
724 IntPoint AXIsolatedObject::intPointAttributeValue(AXPropertyName propertyName) const
725 {
726     auto value = m_propertyMap.get(propertyName);
727     return WTF::switchOn(value,
728         [] (IntPoint& typedValue) { return typedValue; },
729         [] (auto&) { return IntPoint(); }
730     );
731 }
732
733 AXCoreObject* AXIsolatedObject::objectAttributeValue(AXPropertyName propertyName) const
734 {
735     auto value = m_propertyMap.get(propertyName);
736     AXID nodeID = WTF::switchOn(value,
737         [] (AXID& typedValue) { return typedValue; },
738         [] (auto&) { return InvalidAXID; }
739     );
740
741     return tree()->nodeForID(nodeID).get();
742 }
743
744 template<typename T>
745 T AXIsolatedObject::rectAttributeValue(AXPropertyName propertyName) const
746 {
747     auto value = m_propertyMap.get(propertyName);
748     return WTF::switchOn(value,
749         [] (T& typedValue) { return typedValue; },
750         [] (auto&) { return T { }; }
751     );
752 }
753
754 template<typename T>
755 Vector<T> AXIsolatedObject::vectorAttributeValue(AXPropertyName propertyName) const
756 {
757     auto value = m_propertyMap.get(propertyName);
758     return WTF::switchOn(value,
759         [] (Vector<T>& typedValue) { return typedValue; },
760         [] (auto&) { return Vector<T>(); }
761     );
762 }
763
764 template<typename T>
765 OptionSet<T> AXIsolatedObject::optionSetAttributeValue(AXPropertyName propertyName) const
766 {
767     auto value = m_propertyMap.get(propertyName);
768     return WTF::switchOn(value,
769         [] (T& typedValue) { return typedValue; },
770         [] (auto&) { return OptionSet<T>(); }
771     );
772 }
773
774 template<typename T>
775 std::pair<T, T> AXIsolatedObject::pairAttributeValue(AXPropertyName propertyName) const
776 {
777     auto value = m_propertyMap.get(propertyName);
778     return WTF::switchOn(value,
779         [] (std::pair<T, T>& typedValue) { return typedValue; },
780         [] (auto&) { return std::pair<T, T>(0, 1); }
781     );
782 }
783
784 uint64_t AXIsolatedObject::uint64AttributeValue(AXPropertyName propertyName) const
785 {
786     auto value = m_propertyMap.get(propertyName);
787     return WTF::switchOn(value,
788         [] (uint64_t& typedValue) { return typedValue; },
789         [] (auto&) { return 0; }
790     );
791 }
792
793 URL AXIsolatedObject::urlAttributeValue(AXPropertyName propertyName) const
794 {
795     auto value = m_propertyMap.get(propertyName);
796     return WTF::switchOn(value,
797         [] (URL& typedValue) { return typedValue; },
798         [] (auto&) { return URL(); }
799     );
800 }
801
802 Path AXIsolatedObject::pathAttributeValue(AXPropertyName propertyName) const
803 {
804     auto value = m_propertyMap.get(propertyName);
805     return WTF::switchOn(value,
806         [] (Path& typedValue) { return typedValue; },
807         [] (auto&) { return Path(); }
808     );
809 }
810
811 Color AXIsolatedObject::colorAttributeValue(AXPropertyName propertyName) const
812 {
813     auto value = m_propertyMap.get(propertyName);
814     return WTF::switchOn(value,
815         [] (Color& typedValue) { return typedValue; },
816         [] (auto&) { return Color(); }
817     );
818 }
819
820 float AXIsolatedObject::floatAttributeValue(AXPropertyName propertyName) const
821 {
822     auto value = m_propertyMap.get(propertyName);
823     return WTF::switchOn(value,
824         [] (float& typedValue) { return typedValue; },
825         [] (auto&) { return 0; }
826     );
827 }
828
829 double AXIsolatedObject::doubleAttributeValue(AXPropertyName propertyName) const
830 {
831     auto value = m_propertyMap.get(propertyName);
832     return WTF::switchOn(value,
833         [] (double& typedValue) { return typedValue; },
834         [] (auto&) { return 0; }
835     );
836 }
837
838 unsigned AXIsolatedObject::unsignedAttributeValue(AXPropertyName propertyName) const
839 {
840     auto value = m_propertyMap.get(propertyName);
841     return WTF::switchOn(value,
842         [] (unsigned& typedValue) { return typedValue; },
843         [] (auto&) { return 0; }
844     );
845 }
846
847 bool AXIsolatedObject::boolAttributeValue(AXPropertyName propertyName) const
848 {
849     auto value = m_propertyMap.get(propertyName);
850     return WTF::switchOn(value,
851         [] (bool& typedValue) { return typedValue; },
852         [] (auto&) { return false; }
853     );
854 }
855
856 String AXIsolatedObject::stringAttributeValue(AXPropertyName propertyName) const
857 {
858     auto value = m_propertyMap.get(propertyName);
859     return WTF::switchOn(value,
860         [] (String& typedValue) { return typedValue; },
861         [] (auto&) { return emptyString(); }
862     );
863 }
864
865 int AXIsolatedObject::intAttributeValue(AXPropertyName propertyName) const
866 {
867     auto value = m_propertyMap.get(propertyName);
868     return WTF::switchOn(value,
869         [] (int& typedValue) { return typedValue; },
870         [] (auto&) { return 0; }
871     );
872 }
873
874 void AXIsolatedObject::fillChildrenVectorForProperty(AXPropertyName propertyName, AccessibilityChildrenVector& children) const
875 {
876     Vector<AXID> childIDs = vectorAttributeValue<AXID>(propertyName);
877     children.reserveCapacity(childIDs.size());
878     for (const auto& childID : childIDs) {
879         if (auto object = tree()->nodeForID(childID))
880             children.uncheckedAppend(object);
881     }
882 }
883
884 void AXIsolatedObject::updateBackingStore()
885 {
886     // This method can be called on either the main or the AX threads.
887     if (auto tree = this->tree())
888         tree->applyPendingChanges();
889 }
890
891 String AXIsolatedObject::stringForRange(const SimpleRange& range) const
892 {
893     return Accessibility::retrieveValueFromMainThread<String>([&range, this] () -> String {
894         if (auto* object = associatedAXObject())
895             return object->stringForRange(range);
896         return String();
897     });
898 }
899
900 Vector<SimpleRange> AXIsolatedObject::findTextRanges(const AccessibilitySearchTextCriteria& criteria) const
901 {
902     return Accessibility::retrieveValueFromMainThread<Vector<SimpleRange>>([&criteria, this] () -> Vector<SimpleRange> {
903         if (auto* object = associatedAXObject())
904             return object->findTextRanges(criteria);
905         return { };
906     });
907 }
908
909 Vector<String> AXIsolatedObject::performTextOperation(AccessibilityTextOperation const& textOperation)
910 {
911     return Accessibility::retrieveValueFromMainThread<Vector<String>>([&textOperation, this] () -> Vector<String> {
912         if (auto* object = associatedAXObject())
913             return object->performTextOperation(textOperation);
914         return Vector<String>();
915     });
916 }
917
918 void AXIsolatedObject::findMatchingObjects(AccessibilitySearchCriteria* criteria, AccessibilityChildrenVector& results)
919 {
920     ASSERT(criteria);
921     if (!criteria)
922         return;
923
924     criteria->anchorObject = this;
925     Accessibility::findMatchingObjects(*criteria, results);
926 }
927
928 FloatRect AXIsolatedObject::relativeFrame() const
929 {
930     // Retrieve this on the main thread because we require the scroll ancestor to convert to the right scroll offset.
931     return Accessibility::retrieveValueFromMainThread<FloatRect>([this] () -> FloatRect {
932         if (auto* axObject = associatedAXObject())
933             return axObject->relativeFrame();
934         return { };
935     });
936 }
937
938 bool AXIsolatedObject::replaceTextInRange(const String& replacementText, const PlainTextRange& textRange)
939 {
940     return Accessibility::retrieveValueFromMainThread<bool>([&replacementText, &textRange, this] () -> bool {
941         if (auto* axObject = associatedAXObject())
942             return axObject->replaceTextInRange(replacementText, textRange);
943         return false;
944     });
945 }
946
947 bool AXIsolatedObject::insertText(const String& text)
948 {
949     return Accessibility::retrieveValueFromMainThread<bool>([&text, this] () -> bool {
950         if (auto* axObject = associatedAXObject())
951             return axObject->insertText(text);
952         return false;
953     });
954 }
955
956 bool AXIsolatedObject::press()
957 {
958     if (auto* object = associatedAXObject())
959         return object->press();
960     return false;
961 }
962
963 bool AXIsolatedObject::performDefaultAction()
964 {
965     ASSERT_NOT_REACHED();
966     return false;
967 }
968
969 bool AXIsolatedObject::isAccessibilityObject() const
970 {
971     ASSERT_NOT_REACHED();
972     return false;
973 }
974
975 bool AXIsolatedObject::isAccessibilityNodeObject() const
976 {
977     ASSERT_NOT_REACHED();
978     return false;
979 }
980
981 bool AXIsolatedObject::isAccessibilityRenderObject() const
982 {
983     ASSERT_NOT_REACHED();
984     return false;
985 }
986
987 bool AXIsolatedObject::isAccessibilityScrollbar() const
988 {
989     ASSERT_NOT_REACHED();
990     return false;
991 }
992
993 bool AXIsolatedObject::isAccessibilityScrollViewInstance() const
994 {
995     ASSERT_NOT_REACHED();
996     return false;
997 }
998
999 bool AXIsolatedObject::isAccessibilitySVGRoot() const
1000 {
1001     ASSERT_NOT_REACHED();
1002     return false;
1003 }
1004
1005 bool AXIsolatedObject::isAccessibilitySVGElement() const
1006 {
1007     ASSERT_NOT_REACHED();
1008     return false;
1009 }
1010
1011 bool AXIsolatedObject::isAccessibilityTableInstance() const
1012 {
1013     ASSERT_NOT_REACHED();
1014     return false;
1015 }
1016
1017 bool AXIsolatedObject::isAccessibilityTableColumnInstance() const
1018 {
1019     ASSERT_NOT_REACHED();
1020     return false;
1021 }
1022
1023 bool AXIsolatedObject::isAccessibilityProgressIndicatorInstance() const
1024 {
1025     ASSERT_NOT_REACHED();
1026     return false;
1027 }
1028
1029 bool AXIsolatedObject::isAttachmentElement() const
1030 {
1031     ASSERT_NOT_REACHED();
1032     return false;
1033 }
1034
1035 bool AXIsolatedObject::isNativeImage() const
1036 {
1037     ASSERT_NOT_REACHED();
1038     return false;
1039 }
1040
1041 bool AXIsolatedObject::isImageButton() const
1042 {
1043     ASSERT_NOT_REACHED();
1044     return false;
1045 }
1046
1047 bool AXIsolatedObject::isContainedByPasswordField() const
1048 {
1049     ASSERT_NOT_REACHED();
1050     return false;
1051 }
1052
1053 AXCoreObject* AXIsolatedObject::passwordFieldOrContainingPasswordField()
1054 {
1055     ASSERT_NOT_REACHED();
1056     return nullptr;
1057 }
1058
1059 bool AXIsolatedObject::isNativeTextControl() const
1060 {
1061     ASSERT_NOT_REACHED();
1062     return false;
1063 }
1064
1065 PlainTextRange AXIsolatedObject::selectedTextRange() const
1066 {
1067     return Accessibility::retrieveValueFromMainThread<PlainTextRange>([this] () -> PlainTextRange {
1068         if (auto* object = associatedAXObject())
1069             return object->selectedTextRange();
1070         return PlainTextRange();
1071     });
1072 }
1073
1074 VisibleSelection AXIsolatedObject::selection() const
1075 {
1076     ASSERT(isMainThread());
1077
1078     auto* object = associatedAXObject();
1079     return object ? object->selection() : VisibleSelection();
1080 }
1081
1082 void AXIsolatedObject::setSelectedVisiblePositionRange(const VisiblePositionRange& visiblePositionRange) const
1083 {
1084     ASSERT(isMainThread());
1085
1086     if (auto* object = associatedAXObject())
1087         object->setSelectedVisiblePositionRange(visiblePositionRange);
1088 }
1089
1090 bool AXIsolatedObject::isListBoxOption() const
1091 {
1092     ASSERT_NOT_REACHED();
1093     return false;
1094 }
1095
1096 bool AXIsolatedObject::isSliderThumb() const
1097 {
1098     ASSERT_NOT_REACHED();
1099     return false;
1100 }
1101
1102 bool AXIsolatedObject::isInputSlider() const
1103 {
1104     ASSERT_NOT_REACHED();
1105     return false;
1106 }
1107
1108 bool AXIsolatedObject::isLabel() const
1109 {
1110     ASSERT_NOT_REACHED();
1111     return false;
1112 }
1113
1114 bool AXIsolatedObject::isImageMapLink() const
1115 {
1116     ASSERT_NOT_REACHED();
1117     return false;
1118 }
1119
1120 bool AXIsolatedObject::isNativeSpinButton() const
1121 {
1122     ASSERT_NOT_REACHED();
1123     return false;
1124 }
1125
1126 bool AXIsolatedObject::isSpinButtonPart() const
1127 {
1128     ASSERT_NOT_REACHED();
1129     return false;
1130 }
1131
1132 bool AXIsolatedObject::isMockObject() const
1133 {
1134     ASSERT_NOT_REACHED();
1135     return false;
1136 }
1137
1138 bool AXIsolatedObject::isMediaObject() const
1139 {
1140     ASSERT_NOT_REACHED();
1141     return false;
1142 }
1143
1144 bool AXIsolatedObject::isARIATextControl() const
1145 {
1146     ASSERT_NOT_REACHED();
1147     return false;
1148 }
1149
1150 bool AXIsolatedObject::isNonNativeTextControl() const
1151 {
1152     ASSERT_NOT_REACHED();
1153     return false;
1154 }
1155
1156 bool AXIsolatedObject::isFigureElement() const
1157 {
1158     ASSERT_NOT_REACHED();
1159     return false;
1160 }
1161
1162 bool AXIsolatedObject::isHovered() const
1163 {
1164     ASSERT_NOT_REACHED();
1165     return false;
1166 }
1167
1168 bool AXIsolatedObject::isIndeterminate() const
1169 {
1170     ASSERT_NOT_REACHED();
1171     return false;
1172 }
1173
1174 HashMap<String, AXEditingStyleValueVariant> AXIsolatedObject::resolvedEditingStyles() const
1175 {
1176     return Accessibility::retrieveValueFromMainThread<HashMap<String, AXEditingStyleValueVariant>>([this] () -> HashMap<String, AXEditingStyleValueVariant> {
1177         if (auto* object = associatedAXObject())
1178             return object->resolvedEditingStyles();
1179         return { };
1180     });
1181 }
1182
1183 bool AXIsolatedObject::isOnScreen() const
1184 {
1185     return Accessibility::retrieveValueFromMainThread<bool>([this] () -> bool {
1186         if (auto* object = associatedAXObject())
1187             return object->isOnScreen();
1188         return false;
1189     });
1190 }
1191
1192 bool AXIsolatedObject::isOffScreen() const
1193 {
1194     ASSERT_NOT_REACHED();
1195     return false;
1196 }
1197
1198 bool AXIsolatedObject::isPressed() const
1199 {
1200     ASSERT_NOT_REACHED();
1201     return false;
1202 }
1203
1204 bool AXIsolatedObject::isLinked() const
1205 {
1206     ASSERT_NOT_REACHED();
1207     return false;
1208 }
1209
1210 bool AXIsolatedObject::isVisible() const
1211 {
1212     ASSERT_NOT_REACHED();
1213     return false;
1214 }
1215
1216 bool AXIsolatedObject::isCollapsed() const
1217 {
1218     ASSERT_NOT_REACHED();
1219     return false;
1220 }
1221
1222 bool AXIsolatedObject::isSelectedOptionActive() const
1223 {
1224     ASSERT_NOT_REACHED();
1225     return false;
1226 }
1227
1228 bool AXIsolatedObject::hasMisspelling() const
1229 {
1230     ASSERT_NOT_REACHED();
1231     return false;
1232 }
1233
1234 bool AXIsolatedObject::hasSameFont(const AXCoreObject& otherObject) const
1235 {
1236     if (!is<AXIsolatedObject>(otherObject))
1237         return false;
1238
1239     return Accessibility::retrieveValueFromMainThread<bool>([&otherObject, this] () -> bool {
1240         if (auto* axObject = associatedAXObject()) {
1241             if (auto* axOtherObject = downcast<AXIsolatedObject>(otherObject).associatedAXObject())
1242                 return axObject->hasSameFont(*axOtherObject);
1243         }
1244         return false;
1245     });
1246 }
1247
1248 bool AXIsolatedObject::hasSameFontColor(const AXCoreObject& otherObject) const
1249 {
1250     if (!is<AXIsolatedObject>(otherObject))
1251         return false;
1252
1253     return Accessibility::retrieveValueFromMainThread<bool>([&otherObject, this] () -> bool {
1254         if (auto* axObject = associatedAXObject()) {
1255             if (auto* axOtherObject = downcast<AXIsolatedObject>(otherObject).associatedAXObject())
1256                 return axObject->hasSameFontColor(*axOtherObject);
1257         }
1258         return false;
1259     });
1260 }
1261
1262 bool AXIsolatedObject::hasSameStyle(const AXCoreObject& otherObject) const
1263 {
1264     if (!is<AXIsolatedObject>(otherObject))
1265         return false;
1266
1267     return Accessibility::retrieveValueFromMainThread<bool>([&otherObject, this] () -> bool {
1268         if (auto* axObject = associatedAXObject()) {
1269             if (auto* axOtherObject = downcast<AXIsolatedObject>(otherObject).associatedAXObject())
1270                 return axObject->hasSameStyle(*axOtherObject);
1271         }
1272         return false;
1273     });
1274 }
1275
1276 Element* AXIsolatedObject::element() const
1277 {
1278     ASSERT_NOT_REACHED();
1279     return nullptr;
1280 }
1281
1282 Node* AXIsolatedObject::node() const
1283 {
1284     ASSERT_NOT_REACHED();
1285     return nullptr;
1286 }
1287
1288 RenderObject* AXIsolatedObject::renderer() const
1289 {
1290     ASSERT_NOT_REACHED();
1291     return nullptr;
1292 }
1293
1294 AccessibilityObjectInclusion AXIsolatedObject::defaultObjectInclusion() const
1295 {
1296     ASSERT_NOT_REACHED();
1297     return AccessibilityObjectInclusion::DefaultBehavior;
1298 }
1299
1300 bool AXIsolatedObject::accessibilityIsIgnoredByDefault() const
1301 {
1302     ASSERT_NOT_REACHED();
1303     return false;
1304 }
1305
1306 float AXIsolatedObject::stepValueForRange() const
1307 {
1308     ASSERT_NOT_REACHED();
1309     return 0;
1310 }
1311
1312 AXCoreObject* AXIsolatedObject::selectedListItem()
1313 {
1314     ASSERT_NOT_REACHED();
1315     return nullptr;
1316 }
1317
1318 void AXIsolatedObject::ariaActiveDescendantReferencingElements(AccessibilityChildrenVector&) const
1319 {
1320     ASSERT_NOT_REACHED();
1321 }
1322
1323 void AXIsolatedObject::ariaControlsReferencingElements(AccessibilityChildrenVector&) const
1324 {
1325     ASSERT_NOT_REACHED();
1326 }
1327
1328 void AXIsolatedObject::ariaDescribedByElements(AccessibilityChildrenVector&) const
1329 {
1330     ASSERT_NOT_REACHED();
1331 }
1332
1333 void AXIsolatedObject::ariaDescribedByReferencingElements(AccessibilityChildrenVector&) const
1334 {
1335     ASSERT_NOT_REACHED();
1336 }
1337
1338 void AXIsolatedObject::ariaDetailsReferencingElements(AccessibilityChildrenVector&) const
1339 {
1340     ASSERT_NOT_REACHED();
1341 }
1342
1343 void AXIsolatedObject::ariaErrorMessageReferencingElements(AccessibilityChildrenVector&) const
1344 {
1345     ASSERT_NOT_REACHED();
1346 }
1347
1348 void AXIsolatedObject::ariaFlowToReferencingElements(AccessibilityChildrenVector&) const
1349 {
1350     ASSERT_NOT_REACHED();
1351 }
1352
1353 void AXIsolatedObject::ariaLabelledByElements(AccessibilityChildrenVector&) const
1354 {
1355     ASSERT_NOT_REACHED();
1356 }
1357
1358 void AXIsolatedObject::ariaLabelledByReferencingElements(AccessibilityChildrenVector&) const
1359 {
1360     ASSERT_NOT_REACHED();
1361 }
1362
1363 void AXIsolatedObject::ariaOwnsReferencingElements(AccessibilityChildrenVector&) const
1364 {
1365     ASSERT_NOT_REACHED();
1366 }
1367
1368 bool AXIsolatedObject::hasDatalist() const
1369 {
1370     ASSERT_NOT_REACHED();
1371     return false;
1372 }
1373
1374 bool AXIsolatedObject::supportsHasPopup() const
1375 {
1376     ASSERT_NOT_REACHED();
1377     return false;
1378 }
1379
1380 bool AXIsolatedObject::supportsPressed() const
1381 {
1382     ASSERT_NOT_REACHED();
1383     return false;
1384 }
1385
1386 bool AXIsolatedObject::supportsChecked() const
1387 {
1388     ASSERT_NOT_REACHED();
1389     return false;
1390 }
1391
1392 bool AXIsolatedObject::ignoredFromModalPresence() const
1393 {
1394     ASSERT_NOT_REACHED();
1395     return false;
1396 }
1397
1398 bool AXIsolatedObject::isModalDescendant(Node*) const
1399 {
1400     ASSERT_NOT_REACHED();
1401     return false;
1402 }
1403
1404 bool AXIsolatedObject::isModalNode() const
1405 {
1406     ASSERT_NOT_REACHED();
1407     return false;
1408 }
1409
1410 AXCoreObject* AXIsolatedObject::elementAccessibilityHitTest(const IntPoint&) const
1411 {
1412     ASSERT_NOT_REACHED();
1413     return nullptr;
1414 }
1415
1416 AXCoreObject* AXIsolatedObject::firstChild() const
1417 {
1418     ASSERT_NOT_REACHED();
1419     return nullptr;
1420 }
1421
1422 AXCoreObject* AXIsolatedObject::lastChild() const
1423 {
1424     ASSERT_NOT_REACHED();
1425     return nullptr;
1426 }
1427
1428 AXCoreObject* AXIsolatedObject::nextSiblingUnignored(int) const
1429 {
1430     ASSERT_NOT_REACHED();
1431     return nullptr;
1432 }
1433
1434 AXCoreObject* AXIsolatedObject::previousSiblingUnignored(int) const
1435 {
1436     ASSERT_NOT_REACHED();
1437     return nullptr;
1438 }
1439
1440 AXCoreObject* AXIsolatedObject::parentObjectIfExists() const
1441 {
1442     ASSERT_NOT_REACHED();
1443     return nullptr;
1444 }
1445
1446 bool AXIsolatedObject::isDescendantOfBarrenParent() const
1447 {
1448     ASSERT_NOT_REACHED();
1449     return false;
1450 }
1451
1452 bool AXIsolatedObject::isDescendantOfRole(AccessibilityRole) const
1453 {
1454     ASSERT_NOT_REACHED();
1455     return false;
1456 }
1457
1458 AXCoreObject* AXIsolatedObject::observableObject() const
1459 {
1460     ASSERT_NOT_REACHED();
1461     return nullptr;
1462 }
1463
1464 AXCoreObject* AXIsolatedObject::correspondingLabelForControlElement() const
1465 {
1466     ASSERT_NOT_REACHED();
1467     return nullptr;
1468 }
1469
1470 AXCoreObject* AXIsolatedObject::correspondingControlForLabelElement() const
1471 {
1472     ASSERT_NOT_REACHED();
1473     return nullptr;
1474 }
1475
1476 bool AXIsolatedObject::isPresentationalChildOfAriaRole() const
1477 {
1478     ASSERT_NOT_REACHED();
1479     return false;
1480 }
1481
1482 bool AXIsolatedObject::ariaRoleHasPresentationalChildren() const
1483 {
1484     ASSERT_NOT_REACHED();
1485     return false;
1486 }
1487
1488 bool AXIsolatedObject::inheritsPresentationalRole() const
1489 {
1490     ASSERT_NOT_REACHED();
1491     return false;
1492 }
1493
1494 void AXIsolatedObject::setAccessibleName(const AtomString&)
1495 {
1496     ASSERT_NOT_REACHED();
1497 }
1498
1499 bool AXIsolatedObject::hasAttributesRequiredForInclusion() const
1500 {
1501     ASSERT_NOT_REACHED();
1502     return false;
1503 }
1504
1505 String AXIsolatedObject::helpText() const
1506 {
1507     ASSERT_NOT_REACHED();
1508     return String();
1509 }
1510
1511 bool AXIsolatedObject::isARIAStaticText() const
1512 {
1513     ASSERT_NOT_REACHED();
1514     return false;
1515 }
1516
1517 String AXIsolatedObject::text() const
1518 {
1519     ASSERT_NOT_REACHED();
1520     return String();
1521 }
1522
1523 String AXIsolatedObject::ariaLabeledByAttribute() const
1524 {
1525     ASSERT_NOT_REACHED();
1526     return String();
1527 }
1528
1529 String AXIsolatedObject::ariaDescribedByAttribute() const
1530 {
1531     ASSERT_NOT_REACHED();
1532     return String();
1533 }
1534
1535 bool AXIsolatedObject::accessibleNameDerivesFromContent() const
1536 {
1537     ASSERT_NOT_REACHED();
1538     return false;
1539 }
1540
1541 void AXIsolatedObject::elementsFromAttribute(Vector<Element*>&, const QualifiedName&) const
1542 {
1543     ASSERT_NOT_REACHED();
1544 }
1545
1546 AXObjectCache* AXIsolatedObject::axObjectCache() const
1547 {
1548     ASSERT(isMainThread());
1549     return tree()->axObjectCache();
1550 }
1551
1552 Element* AXIsolatedObject::anchorElement() const
1553 {
1554     ASSERT_NOT_REACHED();
1555     return nullptr;
1556 }
1557
1558 Element* AXIsolatedObject::actionElement() const
1559 {
1560     ASSERT_NOT_REACHED();
1561     return nullptr;
1562 }
1563
1564 TextIteratorBehavior AXIsolatedObject::textIteratorBehaviorForTextRange() const
1565 {
1566     ASSERT_NOT_REACHED();
1567     return false;
1568 }
1569
1570 Widget* AXIsolatedObject::widget() const
1571 {
1572     if (auto* object = associatedAXObject())
1573         return object->widget();
1574     return nullptr;
1575 }
1576
1577 PlatformWidget AXIsolatedObject::platformWidget() const
1578 {
1579 #if PLATFORM(COCOA)
1580     return m_platformWidget.get();
1581 #else
1582     return m_platformWidget;
1583 #endif
1584 }
1585
1586 Widget* AXIsolatedObject::widgetForAttachmentView() const
1587 {
1588     ASSERT_NOT_REACHED();
1589     return nullptr;
1590 }
1591
1592 Page* AXIsolatedObject::page() const
1593 {
1594     if (auto* object = associatedAXObject())
1595         return object->page();
1596     ASSERT_NOT_REACHED();
1597     return nullptr;
1598 }
1599
1600 Document* AXIsolatedObject::document() const
1601 {
1602     if (auto* object = associatedAXObject())
1603         return object->document();
1604     ASSERT_NOT_REACHED();
1605     return nullptr;
1606 }
1607
1608 FrameView* AXIsolatedObject::documentFrameView() const
1609 {
1610     if (auto* object = associatedAXObject())
1611         return object->documentFrameView();
1612     return nullptr;
1613 }
1614
1615 Frame* AXIsolatedObject::frame() const
1616 {
1617     ASSERT_NOT_REACHED();
1618     return nullptr;
1619 }
1620
1621 Frame* AXIsolatedObject::mainFrame() const
1622 {
1623     ASSERT_NOT_REACHED();
1624     return nullptr;
1625 }
1626
1627 Document* AXIsolatedObject::topDocument() const
1628 {
1629     ASSERT_NOT_REACHED();
1630     return nullptr;
1631 }
1632
1633 ScrollView* AXIsolatedObject::scrollView() const
1634 {
1635     if (auto* object = associatedAXObject())
1636         return object->scrollView();
1637     return nullptr;
1638 }
1639
1640 ScrollView* AXIsolatedObject::scrollViewAncestor() const
1641 {
1642     ASSERT_NOT_REACHED();
1643     return nullptr;
1644 }
1645
1646 void AXIsolatedObject::childrenChanged()
1647 {
1648     ASSERT_NOT_REACHED();
1649 }
1650
1651 void AXIsolatedObject::textChanged()
1652 {
1653     ASSERT_NOT_REACHED();
1654 }
1655
1656 void AXIsolatedObject::updateAccessibilityRole()
1657 {
1658     ASSERT_NOT_REACHED();
1659 }
1660
1661 void AXIsolatedObject::addChildren()
1662 {
1663     ASSERT_NOT_REACHED();
1664 }
1665
1666 void AXIsolatedObject::addChild(AXCoreObject*)
1667 {
1668     ASSERT_NOT_REACHED();
1669 }
1670
1671 void AXIsolatedObject::insertChild(AXCoreObject*, unsigned)
1672 {
1673     ASSERT_NOT_REACHED();
1674 }
1675
1676 bool AXIsolatedObject::shouldIgnoreAttributeRole() const
1677 {
1678     ASSERT_NOT_REACHED();
1679     return false;
1680 }
1681
1682 bool AXIsolatedObject::canHaveChildren() const
1683 {
1684     ASSERT_NOT_REACHED();
1685     return false;
1686 }
1687
1688 void AXIsolatedObject::setNeedsToUpdateChildren()
1689 {
1690     ASSERT_NOT_REACHED();
1691 }
1692
1693 void AXIsolatedObject::setNeedsToUpdateSubtree()
1694 {
1695     ASSERT_NOT_REACHED();
1696 }
1697
1698 void AXIsolatedObject::clearChildren()
1699 {
1700     ASSERT_NOT_REACHED();
1701 }
1702
1703 bool AXIsolatedObject::needsToUpdateChildren() const
1704 {
1705     ASSERT_NOT_REACHED();
1706     return false;
1707 }
1708
1709 bool AXIsolatedObject::shouldFocusActiveDescendant() const
1710 {
1711     ASSERT_NOT_REACHED();
1712     return false;
1713 }
1714
1715 AXCoreObject* AXIsolatedObject::activeDescendant() const
1716 {
1717     ASSERT_NOT_REACHED();
1718     return nullptr;
1719 }
1720
1721 void AXIsolatedObject::handleActiveDescendantChanged()
1722 {
1723     ASSERT_NOT_REACHED();
1724 }
1725
1726 AXCoreObject* AXIsolatedObject::firstAnonymousBlockChild() const
1727 {
1728     ASSERT_NOT_REACHED();
1729     return nullptr;
1730 }
1731
1732 bool AXIsolatedObject::hasAttribute(const QualifiedName&) const
1733 {
1734     ASSERT_NOT_REACHED();
1735     return false;
1736 }
1737
1738 const AtomString& AXIsolatedObject::getAttribute(const QualifiedName&) const
1739 {
1740     ASSERT_NOT_REACHED();
1741     return nullAtom();
1742 }
1743
1744 bool AXIsolatedObject::hasTagName(const QualifiedName&) const
1745 {
1746     ASSERT_NOT_REACHED();
1747     return false;
1748 }
1749
1750 String AXIsolatedObject::stringValueForMSAA() const
1751 {
1752     ASSERT_NOT_REACHED();
1753     return String();
1754 }
1755
1756 String AXIsolatedObject::stringRoleForMSAA() const
1757 {
1758     ASSERT_NOT_REACHED();
1759     return String();
1760 }
1761
1762 String AXIsolatedObject::nameForMSAA() const
1763 {
1764     ASSERT_NOT_REACHED();
1765     return String();
1766 }
1767
1768 String AXIsolatedObject::descriptionForMSAA() const
1769 {
1770     ASSERT_NOT_REACHED();
1771     return String();
1772 }
1773
1774 AccessibilityRole AXIsolatedObject::roleValueForMSAA() const
1775 {
1776     ASSERT_NOT_REACHED();
1777     return AccessibilityRole::Unknown;
1778 }
1779
1780 String AXIsolatedObject::passwordFieldValue() const
1781 {
1782     ASSERT_NOT_REACHED();
1783     return String();
1784 }
1785
1786 AXCoreObject* AXIsolatedObject::liveRegionAncestor(bool) const
1787 {
1788     ASSERT_NOT_REACHED();
1789     return nullptr;
1790 }
1791
1792 bool AXIsolatedObject::hasContentEditableAttributeSet() const
1793 {
1794     ASSERT_NOT_REACHED();
1795     return false;
1796 }
1797
1798 bool AXIsolatedObject::supportsReadOnly() const
1799 {
1800     ASSERT_NOT_REACHED();
1801     return false;
1802 }
1803
1804 bool AXIsolatedObject::supportsAutoComplete() const
1805 {
1806     ASSERT_NOT_REACHED();
1807     return false;
1808 }
1809
1810 bool AXIsolatedObject::supportsARIAAttributes() const
1811 {
1812     ASSERT_NOT_REACHED();
1813     return false;
1814 }
1815
1816 bool AXIsolatedObject::scrollByPage(ScrollByPageDirection) const
1817 {
1818     ASSERT_NOT_REACHED();
1819     return false;
1820 }
1821
1822 IntPoint AXIsolatedObject::scrollPosition() const
1823 {
1824     ASSERT_NOT_REACHED();
1825     return IntPoint();
1826 }
1827
1828 IntSize AXIsolatedObject::scrollContentsSize() const
1829 {
1830     ASSERT_NOT_REACHED();
1831     return IntSize();
1832 }
1833
1834 IntRect AXIsolatedObject::scrollVisibleContentRect() const
1835 {
1836     ASSERT_NOT_REACHED();
1837     return IntRect();
1838 }
1839
1840 void AXIsolatedObject::scrollToMakeVisible(const ScrollRectToVisibleOptions&) const
1841 {
1842     ASSERT_NOT_REACHED();
1843 }
1844
1845 bool AXIsolatedObject::lastKnownIsIgnoredValue()
1846 {
1847     ASSERT_NOT_REACHED();
1848     return false;
1849 }
1850
1851 void AXIsolatedObject::setLastKnownIsIgnoredValue(bool)
1852 {
1853     ASSERT_NOT_REACHED();
1854 }
1855
1856 void AXIsolatedObject::notifyIfIgnoredValueChanged()
1857 {
1858     ASSERT_NOT_REACHED();
1859 }
1860
1861 bool AXIsolatedObject::isMathScriptObject(AccessibilityMathScriptObjectType) const
1862 {
1863     ASSERT_NOT_REACHED();
1864     return false;
1865 }
1866
1867 bool AXIsolatedObject::isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const
1868 {
1869     ASSERT_NOT_REACHED();
1870     return false;
1871 }
1872
1873 bool AXIsolatedObject::isAXHidden() const
1874 {
1875     ASSERT_NOT_REACHED();
1876     return false;
1877 }
1878
1879 bool AXIsolatedObject::isDOMHidden() const
1880 {
1881     ASSERT_NOT_REACHED();
1882     return false;
1883 }
1884
1885 bool AXIsolatedObject::isHidden() const
1886 {
1887     ASSERT_NOT_REACHED();
1888     return false;
1889 }
1890
1891 void AXIsolatedObject::overrideAttachmentParent(AXCoreObject*)
1892 {
1893     ASSERT_NOT_REACHED();
1894 }
1895
1896 bool AXIsolatedObject::accessibilityIgnoreAttachment() const
1897 {
1898     ASSERT_NOT_REACHED();
1899     return false;
1900 }
1901
1902 AccessibilityObjectInclusion AXIsolatedObject::accessibilityPlatformIncludesObject() const
1903 {
1904     ASSERT_NOT_REACHED();
1905     return AccessibilityObjectInclusion::DefaultBehavior;
1906 }
1907
1908 const AccessibilityScrollView* AXIsolatedObject::ancestorAccessibilityScrollView(bool) const
1909 {
1910     ASSERT_NOT_REACHED();
1911     return nullptr;
1912 }
1913
1914 void AXIsolatedObject::setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData&)
1915 {
1916     ASSERT_NOT_REACHED();
1917 }
1918
1919 void AXIsolatedObject::clearIsIgnoredFromParentData()
1920 {
1921     ASSERT_NOT_REACHED();
1922 }
1923
1924 void AXIsolatedObject::setIsIgnoredFromParentDataForChild(AXCoreObject*)
1925 {
1926     ASSERT_NOT_REACHED();
1927 }
1928
1929 } // namespace WebCore
1930
1931 #endif // ENABLE((ACCESSIBILITY_ISOLATED_TREE)