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