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