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