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