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