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