2 * Copyright (C) 2019 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
28 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
30 #include "AXObjectCache.h"
31 #include "AccessibilityObjectInterface.h"
33 #include "LayoutRect.h"
35 #include <wtf/Forward.h>
36 #include <wtf/HashMap.h>
37 #include <wtf/RefPtr.h>
38 #include <wtf/ThreadSafeRefCounted.h>
39 #include <wtf/Variant.h>
40 #include <wtf/Vector.h>
41 #include <wtf/WeakPtr.h>
47 class AXIsolatedObject final : public AXCoreObject {
48 friend class AXIsolatedTree;
50 static Ref<AXIsolatedObject> create(AXCoreObject&, AXIsolatedTreeID, AXID parentID);
53 void setObjectID(AXID id) override { m_id = id; }
54 AXID objectID() const override { return m_id; }
55 void init() override { }
57 void attachPlatformWrapper(AccessibilityObjectWrapper*);
58 bool isDetached() const override;
61 void setChildrenIDs(Vector<AXID>&& childrenIDs)
63 // FIXME: The following ASSERT should be met but it is commented out at the
64 // moment because of <rdar://problem/63985646> After calling _AXUIElementUseSecondaryAXThread(true),
65 // still receives client request on main thread.
66 // ASSERT(axObjectCache()->canUseSecondaryAXThread() ? !isMainThread() : isMainThread());
67 m_childrenIDs = childrenIDs;
71 void detachRemoteParts(AccessibilityDetachmentType) override;
72 void detachPlatformWrapper(AccessibilityDetachmentType) override;
74 AXID parent() const { return m_parentID; }
76 AXIsolatedTreeID treeIdentifier() const { return m_treeID; }
77 AXIsolatedTree* tree() const { return m_cachedTree.get(); }
79 AXIsolatedObject() = default;
80 AXIsolatedObject(AXCoreObject&, AXIsolatedTreeID, AXID parentID);
81 bool isAXIsolatedObjectInstance() const override { return true; }
82 void initializeAttributeData(AXCoreObject&, bool isRoot);
83 void initializePlatformProperties(const AXCoreObject&);
84 AXCoreObject* associatedAXObject() const
86 ASSERT(isMainThread());
87 return m_id != InvalidAXID ? axObjectCache()->objectFromAXID(m_id) : nullptr;
90 void setProperty(AXPropertyName, AXPropertyValueVariant&&, bool shouldRemove = false);
91 void setObjectProperty(AXPropertyName, AXCoreObject*);
92 void setObjectVectorProperty(AXPropertyName, const AccessibilityChildrenVector&);
94 // FIXME: consolidate all AttributeValue retrieval in a single template method.
95 bool boolAttributeValue(AXPropertyName) const;
96 String stringAttributeValue(AXPropertyName) const;
97 int intAttributeValue(AXPropertyName) const;
98 unsigned unsignedAttributeValue(AXPropertyName) const;
99 double doubleAttributeValue(AXPropertyName) const;
100 float floatAttributeValue(AXPropertyName) const;
101 AXCoreObject* objectAttributeValue(AXPropertyName) const;
102 IntPoint intPointAttributeValue(AXPropertyName) const;
103 Color colorAttributeValue(AXPropertyName) const;
104 URL urlAttributeValue(AXPropertyName) const;
105 uint64_t uint64AttributeValue(AXPropertyName) const;
106 Path pathAttributeValue(AXPropertyName) const;
107 template<typename T> T rectAttributeValue(AXPropertyName) const;
108 template<typename T> Vector<T> vectorAttributeValue(AXPropertyName) const;
109 template<typename T> OptionSet<T> optionSetAttributeValue(AXPropertyName) const;
110 template<typename T> std::pair<T, T> pairAttributeValue(AXPropertyName) const;
111 template<typename T> T propertyValue(AXPropertyName) const;
113 void fillChildrenVectorForProperty(AXPropertyName, AccessibilityChildrenVector&) const;
114 void setMathscripts(AXPropertyName, AXCoreObject&);
115 void insertMathPairs(Vector<std::pair<AXID, AXID>>&, AccessibilityMathMultiscriptPairs&);
116 template<typename U> void performFunctionOnMainThread(U&&);
118 // Attribute retrieval overrides.
119 bool isHeading() const override { return boolAttributeValue(AXPropertyName::IsHeading); }
120 bool isLandmark() const override { return boolAttributeValue(AXPropertyName::IsLandmark); }
121 bool isLink() const override { return boolAttributeValue(AXPropertyName::IsLink); }
122 bool isPasswordField() const override { return boolAttributeValue(AXPropertyName::IsPasswordField); }
123 bool isSearchField() const override { return boolAttributeValue(AXPropertyName::IsSearchField); }
124 bool isAttachment() const override { return boolAttributeValue(AXPropertyName::IsAttachment); }
125 bool isMediaTimeline() const override { return boolAttributeValue(AXPropertyName::IsMediaTimeline); }
126 bool isMenuRelated() const override { return boolAttributeValue(AXPropertyName::IsMenuRelated); }
127 bool isMenu() const override { return boolAttributeValue(AXPropertyName::IsMenu); }
128 bool isMenuBar() const override { return boolAttributeValue(AXPropertyName::IsMenuBar); }
129 bool isMenuButton() const override { return boolAttributeValue(AXPropertyName::IsMenuButton); }
130 bool isMenuItem() const override { return boolAttributeValue(AXPropertyName::IsMenuItem); }
131 bool isFileUploadButton() const override { return boolAttributeValue(AXPropertyName::IsFileUploadButton); }
132 bool isInputImage() const override { return boolAttributeValue(AXPropertyName::IsInputImage); }
133 bool isProgressIndicator() const override { return boolAttributeValue(AXPropertyName::IsProgressIndicator); }
134 bool isSlider() const override { return boolAttributeValue(AXPropertyName::IsSlider); }
135 bool isControl() const override { return boolAttributeValue(AXPropertyName::IsControl); }
137 bool isList() const override { return boolAttributeValue(AXPropertyName::IsList); }
138 bool isUnorderedList() const override { return boolAttributeValue(AXPropertyName::IsUnorderedList); }
139 bool isOrderedList() const override { return boolAttributeValue(AXPropertyName::IsOrderedList); }
140 bool isDescriptionList() const override { return boolAttributeValue(AXPropertyName::IsDescriptionList); }
141 bool isKeyboardFocusable() const override { return boolAttributeValue(AXPropertyName::IsKeyboardFocusable); }
144 bool isTable() const override { return boolAttributeValue(AXPropertyName::IsTable); }
145 bool isExposable() const override { return boolAttributeValue(AXPropertyName::IsExposable); }
146 bool isDataTable() const override { return boolAttributeValue(AXPropertyName::IsDataTable); }
147 int tableLevel() const override { return intAttributeValue(AXPropertyName::TableLevel); }
148 bool supportsSelectedRows() const override { return boolAttributeValue(AXPropertyName::SupportsSelectedRows); }
149 AccessibilityChildrenVector columns() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::Columns)); }
150 AccessibilityChildrenVector rows() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::Rows)); }
151 unsigned columnCount() override { return unsignedAttributeValue(AXPropertyName::ColumnCount); }
152 unsigned rowCount() override { return unsignedAttributeValue(AXPropertyName::RowCount); }
153 AccessibilityChildrenVector cells() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::Cells)); }
154 AXCoreObject* cellForColumnAndRow(unsigned, unsigned) override;
155 AccessibilityChildrenVector columnHeaders() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::ColumnHeaders)); }
156 AccessibilityChildrenVector rowHeaders() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::RowHeaders)); }
157 AccessibilityChildrenVector visibleRows() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::VisibleRows)); }
158 AXCoreObject* headerContainer() override { return objectAttributeValue(AXPropertyName::HeaderContainer); }
159 int axColumnCount() const override { return intAttributeValue(AXPropertyName::AXColumnCount); }
160 int axRowCount() const override { return intAttributeValue(AXPropertyName::AXRowCount); }
162 // Table cell support.
163 bool isTableCell() const override { return boolAttributeValue(AXPropertyName::IsTableCell); }
164 // Returns the start location and row span of the cell.
165 std::pair<unsigned, unsigned> rowIndexRange() const override { return pairAttributeValue<unsigned>(AXPropertyName::RowIndexRange); }
166 // Returns the start location and column span of the cell.
167 std::pair<unsigned, unsigned> columnIndexRange() const override { return pairAttributeValue<unsigned>(AXPropertyName::ColumnIndexRange); }
168 bool isColumnHeaderCell() const override { return boolAttributeValue(AXPropertyName::IsColumnHeaderCell); }
169 bool isRowHeaderCell() const override { return boolAttributeValue(AXPropertyName::IsRowHeaderCell); }
170 int axColumnIndex() const override { return intAttributeValue(AXPropertyName::AXColumnIndex); }
171 int axRowIndex() const override { return intAttributeValue(AXPropertyName::AXRowIndex); }
173 // Table column support.
174 bool isTableColumn() const override { return boolAttributeValue(AXPropertyName::IsTableColumn); }
175 unsigned columnIndex() const override { return unsignedAttributeValue(AXPropertyName::ColumnIndex); }
176 AXCoreObject* columnHeader() override { return objectAttributeValue(AXPropertyName::ColumnHeader); }
178 // Table row support.
179 bool isTableRow() const override { return boolAttributeValue(AXPropertyName::IsTableRow); }
180 unsigned rowIndex() const override { return unsignedAttributeValue(AXPropertyName::RowIndex); }
182 // ARIA tree/grid row support.
183 bool isARIATreeGridRow() const override { return boolAttributeValue(AXPropertyName::IsARIATreeGridRow); }
184 AccessibilityChildrenVector disclosedRows() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::DisclosedRows)); }
185 AXCoreObject* disclosedByRow() const override { return objectAttributeValue(AXPropertyName::DisclosedByRow); }
187 bool isFieldset() const override { return boolAttributeValue(AXPropertyName::IsFieldset); }
188 bool isGroup() const override { return boolAttributeValue(AXPropertyName::IsGroup); }
189 bool isMenuList() const override { return boolAttributeValue(AXPropertyName::IsMenuList); }
190 bool isMenuListPopup() const override { return boolAttributeValue(AXPropertyName::IsMenuListPopup); }
191 bool isMenuListOption() const override { return boolAttributeValue(AXPropertyName::IsMenuListOption); }
192 bool isTextControl() const override { return boolAttributeValue(AXPropertyName::IsTextControl); }
193 bool isButton() const override { return boolAttributeValue(AXPropertyName::IsButton); }
194 bool isRangeControl() const override { return boolAttributeValue(AXPropertyName::IsRangeControl); }
195 bool isMeter() const override { return boolAttributeValue(AXPropertyName::IsMeter); }
196 bool isStyleFormatGroup() const override { return boolAttributeValue(AXPropertyName::IsStyleFormatGroup); }
197 bool isOutput() const override { return boolAttributeValue(AXPropertyName::IsOutput); }
198 bool isChecked() const override { return boolAttributeValue(AXPropertyName::IsChecked); }
199 bool isEnabled() const override { return boolAttributeValue(AXPropertyName::IsEnabled); }
200 bool isSelected() const override { return boolAttributeValue(AXPropertyName::IsSelected); }
201 bool isFocused() const override { return boolAttributeValue(AXPropertyName::IsFocused); }
202 bool isMultiSelectable() const override { return boolAttributeValue(AXPropertyName::IsMultiSelectable); }
203 bool isVisited() const override { return boolAttributeValue(AXPropertyName::IsVisited); }
204 bool isRequired() const override { return boolAttributeValue(AXPropertyName::IsRequired); }
205 bool supportsRequiredAttribute() const override { return boolAttributeValue(AXPropertyName::SupportsRequiredAttribute); }
206 bool isExpanded() const override { return boolAttributeValue(AXPropertyName::IsExpanded); }
207 FloatRect relativeFrame() const override;
208 bool supportsDatetimeAttribute() const override { return boolAttributeValue(AXPropertyName::SupportsDatetimeAttribute); }
209 String datetimeAttributeValue() const override { return stringAttributeValue(AXPropertyName::DatetimeAttributeValue); }
210 bool canSetFocusAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetFocusAttribute); }
211 bool canSetTextRangeAttributes() const override { return boolAttributeValue(AXPropertyName::CanSetTextRangeAttributes); }
212 bool canSetValueAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetValueAttribute); }
213 bool canSetNumericValue() const override { return boolAttributeValue(AXPropertyName::CanSetNumericValue); }
214 bool canSetSelectedAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetSelectedAttribute); }
215 bool canSetSelectedChildrenAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetSelectedChildrenAttribute); }
216 bool canSetExpandedAttribute() const override { return boolAttributeValue(AXPropertyName::CanSetExpandedAttribute); }
217 bool accessibilityIsIgnored() const override { return boolAttributeValue(AXPropertyName::IsAccessibilityIgnored); }
218 bool isShowingValidationMessage() const override { return boolAttributeValue(AXPropertyName::IsShowingValidationMessage); }
219 String validationMessage() const override { return stringAttributeValue(AXPropertyName::ValidationMessage); }
220 unsigned blockquoteLevel() const override { return unsignedAttributeValue(AXPropertyName::BlockquoteLevel); }
221 int headingLevel() const override { return intAttributeValue(AXPropertyName::HeadingLevel); }
222 AccessibilityButtonState checkboxOrRadioValue() const override { return static_cast<AccessibilityButtonState>(intAttributeValue(AXPropertyName::AccessibilityButtonState)); }
223 String valueDescription() const override { return stringAttributeValue(AXPropertyName::ValueDescription); }
224 float valueForRange() const override { return floatAttributeValue(AXPropertyName::ValueForRange); }
225 float maxValueForRange() const override { return floatAttributeValue(AXPropertyName::MaxValueForRange); }
226 float minValueForRange() const override { return floatAttributeValue(AXPropertyName::MinValueForRange); }
227 AXCoreObject* selectedRadioButton() override { return objectAttributeValue(AXPropertyName::SelectedRadioButton); }
228 AXCoreObject* selectedTabItem() override { return objectAttributeValue(AXPropertyName::SelectedTabItem); }
229 int layoutCount() const override { return intAttributeValue(AXPropertyName::LayoutCount); }
230 double estimatedLoadingProgress() const override { return doubleAttributeValue(AXPropertyName::EstimatedLoadingProgress); }
231 bool supportsARIAOwns() const override { return boolAttributeValue(AXPropertyName::SupportsARIAOwns); }
232 bool isActiveDescendantOfFocusedContainer() const override { return boolAttributeValue(AXPropertyName::IsActiveDescendantOfFocusedContainer); }
233 void ariaControlsElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIAControlsElements, children); }
234 void ariaDetailsElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIADetailsElements, children); }
235 void ariaErrorMessageElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIAErrorMessageElements, children); }
236 void ariaFlowToElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIAFlowToElements, children); }
237 void ariaOwnsElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::ARIAOwnsElements, children); }
238 bool hasPopup() const override { return boolAttributeValue(AXPropertyName::HasPopup); }
239 String popupValue() const override { return stringAttributeValue(AXPropertyName::PopupValue); }
240 bool pressedIsPresent() const override { return boolAttributeValue(AXPropertyName::PressedIsPresent); }
241 bool ariaIsMultiline() const override { return boolAttributeValue(AXPropertyName::ARIAIsMultiline); }
242 String invalidStatus() const override { return stringAttributeValue(AXPropertyName::InvalidStatus); }
243 bool supportsExpanded() const override { return boolAttributeValue(AXPropertyName::SupportsExpanded); }
244 AccessibilitySortDirection sortDirection() const override { return static_cast<AccessibilitySortDirection>(intAttributeValue(AXPropertyName::SortDirection)); }
245 bool canvasHasFallbackContent() const override { return boolAttributeValue(AXPropertyName::CanvasHasFallbackContent); }
246 bool supportsRangeValue() const override { return boolAttributeValue(AXPropertyName::SupportsRangeValue); }
247 String identifierAttribute() const override { return stringAttributeValue(AXPropertyName::IdentifierAttribute); }
248 String linkRelValue() const override { return stringAttributeValue(AXPropertyName::LinkRelValue); }
249 void classList(Vector<String>&) const override;
250 AccessibilityCurrentState currentState() const override { return static_cast<AccessibilityCurrentState>(intAttributeValue(AXPropertyName::CurrentState)); }
251 String currentValue() const override { return stringAttributeValue(AXPropertyName::CurrentValue); }
252 bool supportsCurrent() const override { return boolAttributeValue(AXPropertyName::SupportsCurrent); }
253 const String keyShortcutsValue() const override { return stringAttributeValue(AXPropertyName::KeyShortcutsValue); }
254 bool supportsSetSize() const override { return boolAttributeValue(AXPropertyName::SupportsSetSize); }
255 bool supportsPosInSet() const override { return boolAttributeValue(AXPropertyName::SupportsPosInSet); }
256 int setSize() const override { return intAttributeValue(AXPropertyName::SetSize); }
257 int posInSet() const override { return intAttributeValue(AXPropertyName::PosInSet); }
258 bool supportsDropping() const override { return boolAttributeValue(AXPropertyName::SupportsDropping); }
259 bool supportsDragging() const override { return boolAttributeValue(AXPropertyName::SupportsDragging); }
260 bool isGrabbed() override { return boolAttributeValue(AXPropertyName::IsGrabbed); }
261 Vector<String> determineDropEffects() const override { return vectorAttributeValue<String>(AXPropertyName::DropEffects); }
262 AXCoreObject* accessibilityHitTest(const IntPoint&) const override;
263 AXCoreObject* focusedUIElement() const override;
264 AXCoreObject* parentObject() const override { return parentObjectUnignored(); }
265 AXCoreObject* parentObjectUnignored() const override;
266 void linkedUIElements(AccessibilityChildrenVector& children) const override { fillChildrenVectorForProperty(AXPropertyName::LinkedUIElements, children); }
267 AXCoreObject* titleUIElement() const override { return objectAttributeValue(AXPropertyName::TitleUIElement); }
268 bool exposesTitleUIElement() const override { return boolAttributeValue(AXPropertyName::ExposesTitleUIElement); }
269 AXCoreObject* scrollBar(AccessibilityOrientation) override;
270 AccessibilityRole ariaRoleAttribute() const override { return static_cast<AccessibilityRole>(intAttributeValue(AXPropertyName::ARIARoleAttribute)); }
271 String computedLabel() override { return stringAttributeValue(AXPropertyName::ComputedLabel); }
272 int textLength() const override { return intAttributeValue(AXPropertyName::TextLength); }
273 const String placeholderValue() const override { return stringAttributeValue(AXPropertyName::PlaceholderValue); }
274 String expandedTextValue() const override { return stringAttributeValue(AXPropertyName::ExpandedTextValue); }
275 bool supportsExpandedTextValue() const override { return boolAttributeValue(AXPropertyName::SupportsExpandedTextValue); }
276 SRGBA<uint8_t> colorValue() const override;
277 AccessibilityRole roleValue() const override { return static_cast<AccessibilityRole>(intAttributeValue(AXPropertyName::RoleValue)); }
278 String rolePlatformString() const override { return stringAttributeValue(AXPropertyName::RolePlatformString); }
279 String roleDescription() const override { return stringAttributeValue(AXPropertyName::RoleDescription); }
280 String ariaLandmarkRoleDescription() const override { return stringAttributeValue(AXPropertyName::ARIALandmarkRoleDescription); }
281 bool supportsPressAction() const override { return boolAttributeValue(AXPropertyName::SupportsPressAction); }
282 LayoutRect boundingBoxRect() const override { return rectAttributeValue<LayoutRect>(AXPropertyName::BoundingBoxRect); }
283 LayoutRect elementRect() const override { return rectAttributeValue<LayoutRect>(AXPropertyName::ElementRect); }
284 IntPoint clickPoint() override { return intPointAttributeValue(AXPropertyName::ClickPoint); }
285 void accessibilityText(Vector<AccessibilityText>& texts) const override;
286 String computedRoleString() const override { return stringAttributeValue(AXPropertyName::ComputedRoleString); }
287 bool isValueAutofilled() const override { return boolAttributeValue(AXPropertyName::IsValueAutofilled); }
288 bool isValueAutofillAvailable() const override { return boolAttributeValue(AXPropertyName::IsValueAutofillAvailable); }
289 AutoFillButtonType valueAutofillButtonType() const override { return static_cast<AutoFillButtonType>(intAttributeValue(AXPropertyName::ValueAutofillButtonType)); }
290 void ariaTreeRows(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::ARIATreeRows, children); }
291 void ariaTreeItemContent(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::ARIATreeItemContent, children); }
292 URL url() const override { return urlAttributeValue(AXPropertyName::URL); }
293 String accessKey() const override { return stringAttributeValue(AXPropertyName::AccessKey); }
294 String actionVerb() const override { return stringAttributeValue(AXPropertyName::ActionVerb); }
295 String readOnlyValue() const override { return stringAttributeValue(AXPropertyName::ReadOnlyValue); }
296 String autoCompleteValue() const override { return stringAttributeValue(AXPropertyName::AutoCompleteValue); }
297 OptionSet<SpeakAs> speakAsProperty() const override { return optionSetAttributeValue<SpeakAs>(AXPropertyName::SpeakAs); }
298 bool isMathElement() const override { return boolAttributeValue(AXPropertyName::IsMathElement); }
299 bool isMathFraction() const override { return boolAttributeValue(AXPropertyName::IsMathFraction); }
300 bool isMathFenced() const override { return boolAttributeValue(AXPropertyName::IsMathFenced); }
301 bool isMathSubscriptSuperscript() const override { return boolAttributeValue(AXPropertyName::IsMathSubscriptSuperscript); }
302 bool isMathRow() const override { return boolAttributeValue(AXPropertyName::IsMathRow); }
303 bool isMathUnderOver() const override { return boolAttributeValue(AXPropertyName::IsMathUnderOver); }
304 bool isMathRoot() const override { return boolAttributeValue(AXPropertyName::IsMathRoot); }
305 bool isMathSquareRoot() const override { return boolAttributeValue(AXPropertyName::IsMathSquareRoot); }
306 bool isMathText() const override { return boolAttributeValue(AXPropertyName::IsMathText); }
307 bool isMathNumber() const override { return boolAttributeValue(AXPropertyName::IsMathNumber); }
308 bool isMathOperator() const override { return boolAttributeValue(AXPropertyName::IsMathOperator); }
309 bool isMathFenceOperator() const override { return boolAttributeValue(AXPropertyName::IsMathFenceOperator); }
310 bool isMathSeparatorOperator() const override { return boolAttributeValue(AXPropertyName::IsMathSeparatorOperator); }
311 bool isMathIdentifier() const override { return boolAttributeValue(AXPropertyName::IsMathIdentifier); }
312 bool isMathTable() const override { return boolAttributeValue(AXPropertyName::IsMathTable); }
313 bool isMathTableRow() const override { return boolAttributeValue(AXPropertyName::IsMathTableRow); }
314 bool isMathTableCell() const override { return boolAttributeValue(AXPropertyName::IsMathTableCell); }
315 bool isMathMultiscript() const override { return boolAttributeValue(AXPropertyName::IsMathMultiscript); }
316 bool isMathToken() const override { return boolAttributeValue(AXPropertyName::IsMathToken); }
317 AXCoreObject* mathRadicandObject() override { return objectAttributeValue(AXPropertyName::MathRadicandObject); }
318 AXCoreObject* mathRootIndexObject() override { return objectAttributeValue(AXPropertyName::MathRootIndexObject); }
319 AXCoreObject* mathUnderObject() override { return objectAttributeValue(AXPropertyName::MathUnderObject); }
320 AXCoreObject* mathOverObject() override { return objectAttributeValue(AXPropertyName::MathOverObject); }
321 AXCoreObject* mathNumeratorObject() override { return objectAttributeValue(AXPropertyName::MathNumeratorObject); }
322 AXCoreObject* mathDenominatorObject() override { return objectAttributeValue(AXPropertyName::MathDenominatorObject); }
323 AXCoreObject* mathBaseObject() override { return objectAttributeValue(AXPropertyName::MathBaseObject); }
324 AXCoreObject* mathSubscriptObject() override { return objectAttributeValue(AXPropertyName::MathSubscriptObject); }
325 AXCoreObject* mathSuperscriptObject() override { return objectAttributeValue(AXPropertyName::MathSuperscriptObject); }
326 String mathFencedOpenString() const override { return stringAttributeValue(AXPropertyName::MathFencedOpenString); }
327 String mathFencedCloseString() const override { return stringAttributeValue(AXPropertyName::MathFencedCloseString); }
328 int mathLineThickness() const override { return intAttributeValue(AXPropertyName::MathLineThickness); }
329 bool isAnonymousMathOperator() const override { return boolAttributeValue(AXPropertyName::IsAnonymousMathOperator); }
330 void mathPrescripts(AccessibilityMathMultiscriptPairs&) override;
331 void mathPostscripts(AccessibilityMathMultiscriptPairs&) override;
332 bool fileUploadButtonReturnsValueInTitle() const override { return boolAttributeValue(AXPropertyName::FileUploadButtonReturnsValueInTitle); }
333 String speechHintAttributeValue() const override { return stringAttributeValue(AXPropertyName::SpeechHint); }
334 String descriptionAttributeValue() const override { return stringAttributeValue(AXPropertyName::Description); }
335 String helpTextAttributeValue() const override { return stringAttributeValue(AXPropertyName::HelpText); }
336 String titleAttributeValue() const override { return stringAttributeValue(AXPropertyName::TitleAttributeValue); }
337 #if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)
338 bool caretBrowsingEnabled() const override { return boolAttributeValue(AXPropertyName::CaretBrowsingEnabled); }
340 AXCoreObject* focusableAncestor() override { return objectAttributeValue(AXPropertyName::FocusableAncestor); }
341 AXCoreObject* editableAncestor() override { return objectAttributeValue(AXPropertyName::EditableAncestor); }
342 AXCoreObject* highestEditableAncestor() override { return objectAttributeValue(AXPropertyName::HighestEditableAncestor); }
343 AccessibilityOrientation orientation() const override { return static_cast<AccessibilityOrientation>(intAttributeValue(AXPropertyName::Orientation)); }
344 unsigned hierarchicalLevel() const override { return unsignedAttributeValue(AXPropertyName::HierarchicalLevel); }
345 String language() const override { return stringAttributeValue(AXPropertyName::Language); }
346 bool canHaveSelectedChildren() const override { return boolAttributeValue(AXPropertyName::CanHaveSelectedChildren); }
347 void selectedChildren(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::SelectedChildren, children); }
348 void visibleChildren(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::VisibleChildren, children); }
349 void tabChildren(AccessibilityChildrenVector& children) override { fillChildrenVectorForProperty(AXPropertyName::TabChildren, children); }
350 bool hasARIAValueNow() const override { return boolAttributeValue(AXPropertyName::HasARIAValueNow); }
351 String tagName() const override { return stringAttributeValue(AXPropertyName::TagName); }
352 const AccessibilityChildrenVector& children(bool updateChildrenIfNeeded = true) override;
353 void updateChildrenIfNecessary() override { }
354 bool isDetachedFromParent() override;
355 bool supportsLiveRegion(bool = true) const override { return boolAttributeValue(AXPropertyName::SupportsLiveRegion); }
356 bool isInsideLiveRegion(bool = true) const override { return boolAttributeValue(AXPropertyName::IsInsideLiveRegion); }
357 const String liveRegionStatus() const override { return stringAttributeValue(AXPropertyName::LiveRegionStatus); }
358 const String liveRegionRelevant() const override { return stringAttributeValue(AXPropertyName::LiveRegionRelevant); }
359 bool liveRegionAtomic() const override { return boolAttributeValue(AXPropertyName::LiveRegionAtomic); }
360 bool isBusy() const override { return boolAttributeValue(AXPropertyName::IsBusy); }
361 bool isInlineText() const override { return boolAttributeValue(AXPropertyName::IsInlineText); }
362 // Spin button support.
363 AXCoreObject* incrementButton() override { return objectAttributeValue(AXPropertyName::IncrementButton); }
364 AXCoreObject* decrementButton() override { return objectAttributeValue(AXPropertyName::DecrementButton); }
365 bool isIncrementor() const override { return boolAttributeValue(AXPropertyName::IsIncrementor); }
366 AccessibilityChildrenVector documentLinks() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::DocumentLinks)); }
368 String stringValue() const override { return stringAttributeValue(AXPropertyName::StringValue); }
370 // Parameterized attribute retrieval.
371 Vector<SimpleRange> findTextRanges(const AccessibilitySearchTextCriteria&) const override;
372 Vector<String> performTextOperation(AccessibilityTextOperation const&) override;
373 void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&) override;
375 // Attributes retrieved from the root node only so that the data isn't duplicated on each node.
376 uint64_t sessionID() const override;
377 String documentURI() const override;
378 String documentEncoding() const override;
379 bool preventKeyboardDOMEventDispatch() const override;
381 PlainTextRange selectedTextRange() const override;
382 VisibleSelection selection() const override;
383 void setSelectedVisiblePositionRange(const VisiblePositionRange&) const override;
384 // TODO: Text ranges and selection.
385 unsigned selectionStart() const override { return 0; }
386 unsigned selectionEnd() const override { return 0; }
387 String selectedText() const override { return String(); }
388 VisiblePositionRange visiblePositionRange() const override { return VisiblePositionRange(); }
389 VisiblePositionRange visiblePositionRangeForLine(unsigned) const override { return VisiblePositionRange(); }
390 Optional<SimpleRange> elementRange() const override { return WTF::nullopt; }
391 VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const override { return VisiblePositionRange(); }
392 VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const override { return VisiblePositionRange(); }
393 VisiblePositionRange positionOfRightWord(const VisiblePosition&) const override { return VisiblePositionRange(); }
394 VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const override { return VisiblePositionRange(); }
395 VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const override { return VisiblePositionRange(); }
396 VisiblePositionRange sentenceForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
397 VisiblePositionRange paragraphForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
398 VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
399 VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const override { return VisiblePositionRange(); }
400 VisiblePositionRange lineRangeForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
401 Optional<SimpleRange> rangeForPlainTextRange(const PlainTextRange&) const override { return WTF::nullopt; }
402 String stringForRange(const SimpleRange&) const override;
403 IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const override { return IntRect(); }
404 IntRect boundsForRange(const SimpleRange&) const override { return IntRect(); }
405 int lengthForVisiblePositionRange(const VisiblePositionRange&) const override { return 0; }
406 VisiblePosition visiblePositionForBounds(const IntRect&, AccessibilityVisiblePositionForBounds) const override { return VisiblePosition(); }
407 VisiblePosition visiblePositionForPoint(const IntPoint&) const override { return VisiblePosition(); }
408 VisiblePosition nextVisiblePosition(const VisiblePosition&) const override { return VisiblePosition(); }
409 VisiblePosition previousVisiblePosition(const VisiblePosition&) const override { return VisiblePosition(); }
410 VisiblePosition nextWordEnd(const VisiblePosition&) const override { return VisiblePosition(); }
411 VisiblePosition previousWordStart(const VisiblePosition&) const override { return VisiblePosition(); }
412 VisiblePosition nextLineEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
413 VisiblePosition previousLineStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
414 VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
415 VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
416 VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
417 VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
418 VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const override { return VisiblePosition(); }
419 VisiblePosition visiblePositionForIndex(int) const override { return VisiblePosition(); }
420 int indexForVisiblePosition(const VisiblePosition&) const override { return 0; }
421 AXCoreObject* accessibilityObjectForPosition(const VisiblePosition&) const override { return nullptr; }
422 int lineForPosition(const VisiblePosition&) const override { return 0; }
423 PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const override { return PlainTextRange(); }
424 int index(const VisiblePosition&) const override { return 0; }
425 void lineBreaks(Vector<int>&) const override { }
426 PlainTextRange doAXRangeForLine(unsigned) const override { return PlainTextRange(); }
427 PlainTextRange doAXRangeForPosition(const IntPoint&) const override { return PlainTextRange(); }
428 PlainTextRange doAXRangeForIndex(unsigned) const override { return PlainTextRange(); }
429 PlainTextRange doAXStyleRangeForIndex(unsigned) const override { return PlainTextRange(); }
430 String doAXStringForRange(const PlainTextRange&) const override { return String(); }
431 IntRect doAXBoundsForRange(const PlainTextRange&) const override { return IntRect(); }
432 IntRect doAXBoundsForRangeUsingCharacterOffset(const PlainTextRange&) const override { return IntRect(); }
433 unsigned doAXLineForIndex(unsigned) override { return 0; }
435 // Attribute setters.
436 void setARIAGrabbed(bool) override;
437 void setIsExpanded(bool) override;
438 bool setValue(float) override;
439 void setSelected(bool) override;
440 void setSelectedRows(AccessibilityChildrenVector&) override;
441 void setFocused(bool) override;
442 void setSelectedText(const String&) override;
443 void setSelectedTextRange(const PlainTextRange&) override;
444 bool setValue(const String&) override;
445 #if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)
446 void setCaretBrowsingEnabled(bool) override;
448 void setPreventKeyboardDOMEventDispatch(bool) override;
451 String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const override { return String(); }
452 Optional<SimpleRange> misspellingRange(const SimpleRange&, AccessibilitySearchDirection) const override { return WTF::nullopt; }
453 FloatRect convertFrameToSpace(const FloatRect&, AccessibilityConversionSpace) const override { return FloatRect(); }
454 void increment() override { }
455 void decrement() override { }
456 bool performDismissAction() override;
457 void scrollToMakeVisible() const override { }
458 void scrollToMakeVisibleWithSubFocus(const IntRect&) const override { }
459 void scrollToGlobalPoint(const IntPoint&) const override { }
460 bool replaceTextInRange(const String&, const PlainTextRange&) override;
461 bool insertText(const String&) override;
462 void makeRangeVisible(const PlainTextRange&) override { }
463 bool press() override;
464 bool performDefaultAction() override;
466 // Functions that should never be called on an isolated tree object. ASSERT that these are not reached;
467 bool isAccessibilityObject() const override;
468 bool isAccessibilityNodeObject() const override;
469 bool isAccessibilityRenderObject() const override;
470 bool isAccessibilityScrollbar() const override;
471 bool isAccessibilityScrollViewInstance() const override;
472 bool isAccessibilitySVGRoot() const override;
473 bool isAccessibilitySVGElement() const override;
474 bool isAccessibilityTableInstance() const override;
475 bool isAccessibilityTableColumnInstance() const override;
476 bool isAccessibilityProgressIndicatorInstance() const override;
478 bool isAttachmentElement() const override;
479 bool isNativeImage() const override;
480 bool isImageButton() const override;
481 bool isContainedByPasswordField() const override;
482 AXCoreObject* passwordFieldOrContainingPasswordField() override;
483 bool isNativeTextControl() const override;
484 bool isListBoxOption() const override;
485 bool isSliderThumb() const override;
486 bool isInputSlider() const override;
487 bool isLabel() const override;
488 bool isImageMapLink() const override;
489 bool isNativeSpinButton() const override;
490 bool isSpinButtonPart() const override;
491 bool isMockObject() const override;
492 bool isMediaObject() const override;
493 bool isARIATextControl() const override;
494 bool isNonNativeTextControl() const override;
495 bool isFigureElement() const override;
496 bool isHovered() const override;
497 bool isIndeterminate() const override;
498 bool isLoaded() const override { return boolAttributeValue(AXPropertyName::IsLoaded); }
499 bool isOnScreen() const override;
500 bool isOffScreen() const override;
501 bool isPressed() const override;
502 bool isUnvisited() const override { return boolAttributeValue(AXPropertyName::IsUnvisited); }
503 bool isLinked() const override;
504 bool isVisible() const override;
505 bool isCollapsed() const override;
506 bool isSelectedOptionActive() const override;
507 bool hasBoldFont() const override { return boolAttributeValue(AXPropertyName::HasBoldFont); }
508 bool hasItalicFont() const override { return boolAttributeValue(AXPropertyName::HasItalicFont); }
509 bool hasMisspelling() const override;
510 bool hasPlainText() const override { return boolAttributeValue(AXPropertyName::HasPlainText); }
511 bool hasSameFont(const AXCoreObject&) const override;
512 bool hasSameFontColor(const AXCoreObject&) const override;
513 bool hasSameStyle(const AXCoreObject&) const override;
514 bool hasUnderline() const override { return boolAttributeValue(AXPropertyName::HasUnderline); }
515 bool hasHighlighting() const override { return boolAttributeValue(AXPropertyName::HasHighlighting); }
516 Element* element() const override;
517 Node* node() const override;
518 RenderObject* renderer() const override;
519 AccessibilityObjectInclusion defaultObjectInclusion() const override;
520 bool accessibilityIsIgnoredByDefault() const override;
521 float stepValueForRange() const override;
522 AXCoreObject* selectedListItem() override;
523 void ariaActiveDescendantReferencingElements(AccessibilityChildrenVector&) const override;
524 void ariaControlsReferencingElements(AccessibilityChildrenVector&) const override;
525 void ariaDescribedByElements(AccessibilityChildrenVector&) const override;
526 void ariaDescribedByReferencingElements(AccessibilityChildrenVector&) const override;
527 void ariaDetailsReferencingElements(AccessibilityChildrenVector&) const override;
528 void ariaErrorMessageReferencingElements(AccessibilityChildrenVector&) const override;
529 void ariaFlowToReferencingElements(AccessibilityChildrenVector&) const override;
530 void ariaLabelledByElements(AccessibilityChildrenVector&) const override;
531 void ariaLabelledByReferencingElements(AccessibilityChildrenVector&) const override;
532 void ariaOwnsReferencingElements(AccessibilityChildrenVector&) const override;
533 bool hasDatalist() const override;
534 bool supportsHasPopup() const override;
535 bool supportsPressed() const override;
536 bool supportsChecked() const override;
537 bool supportsRowCountChange() const override { return boolAttributeValue(AXPropertyName::SupportsRowCountChange); }
538 bool ignoredFromModalPresence() const override;
539 bool isModalDescendant(Node*) const override;
540 bool isModalNode() const override;
541 AXCoreObject* elementAccessibilityHitTest(const IntPoint&) const override;
542 AXCoreObject* firstChild() const override;
543 AXCoreObject* lastChild() const override;
544 AXCoreObject* previousSibling() const override;
545 AXCoreObject* nextSibling() const override;
546 AXCoreObject* nextSiblingUnignored(int limit) const override;
547 AXCoreObject* previousSiblingUnignored(int limit) const override;
548 AXCoreObject* parentObjectIfExists() const override;
549 bool isDescendantOfBarrenParent() const override;
550 bool isDescendantOfRole(AccessibilityRole) const override;
551 AXCoreObject* observableObject() const override;
552 AXCoreObject* correspondingLabelForControlElement() const override;
553 AXCoreObject* correspondingControlForLabelElement() const override;
554 bool isPresentationalChildOfAriaRole() const override;
555 bool ariaRoleHasPresentationalChildren() const override;
556 bool inheritsPresentationalRole() const override;
557 void setAccessibleName(const AtomString&) override;
558 bool hasAttributesRequiredForInclusion() const override;
559 String accessibilityDescription() const override { return stringAttributeValue(AXPropertyName::AccessibilityDescription); }
560 String title() const override { return stringAttributeValue(AXPropertyName::Title); }
561 String helpText() const override;
562 bool isARIAStaticText() const override;
563 String text() const override;
564 String ariaLabeledByAttribute() const override;
565 String ariaDescribedByAttribute() const override;
566 bool accessibleNameDerivesFromContent() const override;
567 void elementsFromAttribute(Vector<Element*>&, const QualifiedName&) const override;
568 AXObjectCache* axObjectCache() const override;
569 Element* anchorElement() const override;
570 Element* actionElement() const override;
571 Path elementPath() const override { return pathAttributeValue(AXPropertyName::Path); };
572 bool supportsPath() const override { return boolAttributeValue(AXPropertyName::SupportsPath); }
573 TextIteratorBehavior textIteratorBehaviorForTextRange() const override;
574 Widget* widget() const override;
575 PlatformWidget platformWidget() const override;
577 HashMap<String, AXEditingStyleValueVariant> resolvedEditingStyles() const override;
579 RemoteAXObjectRef remoteParentObject() const override;
581 Widget* widgetForAttachmentView() const override;
582 Page* page() const override;
583 Document* document() const override;
584 FrameView* documentFrameView() const override;
585 Frame* frame() const override;
586 Frame* mainFrame() const override;
587 Document* topDocument() const override;
588 ScrollView* scrollView() const override;
589 ScrollView* scrollViewAncestor() const override;
590 void childrenChanged() override;
591 void textChanged() override;
592 void updateAccessibilityRole() override;
593 void addChildren() override;
594 void addChild(AXCoreObject*) override;
595 void insertChild(AXCoreObject*, unsigned) override;
596 bool shouldIgnoreAttributeRole() const override;
597 bool canHaveChildren() const override;
598 bool hasChildren() const override { return boolAttributeValue(AXPropertyName::HasChildren); }
599 void setNeedsToUpdateChildren() override;
600 void setNeedsToUpdateSubtree() override;
601 void clearChildren() override;
602 bool needsToUpdateChildren() const override;
603 void detachFromParent() override;
604 bool shouldFocusActiveDescendant() const override;
605 AXCoreObject* activeDescendant() const override;
606 void handleActiveDescendantChanged() override;
607 AXCoreObject* firstAnonymousBlockChild() const override;
608 bool hasAttribute(const QualifiedName&) const override;
609 const AtomString& getAttribute(const QualifiedName&) const override;
610 bool hasTagName(const QualifiedName&) const override;
611 String stringValueForMSAA() const override;
612 String stringRoleForMSAA() const override;
613 String nameForMSAA() const override;
614 String descriptionForMSAA() const override;
615 AccessibilityRole roleValueForMSAA() const override;
616 String passwordFieldValue() const override;
617 AXCoreObject* liveRegionAncestor(bool excludeIfOff = true) const override;
618 bool hasContentEditableAttributeSet() const override;
619 bool supportsReadOnly() const override;
620 bool supportsAutoComplete() const override;
621 bool supportsARIAAttributes() const override;
622 bool scrollByPage(ScrollByPageDirection) const override;
623 IntPoint scrollPosition() const override;
624 IntSize scrollContentsSize() const override;
625 IntRect scrollVisibleContentRect() const override;
626 void scrollToMakeVisible(const ScrollRectToVisibleOptions&) const override;
627 bool lastKnownIsIgnoredValue() override;
628 void setLastKnownIsIgnoredValue(bool) override;
629 void notifyIfIgnoredValueChanged() override;
630 bool isMathScriptObject(AccessibilityMathScriptObjectType) const override;
631 bool isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const override;
632 bool isAXHidden() const override;
633 bool isDOMHidden() const override;
634 bool isHidden() const override;
635 void overrideAttachmentParent(AXCoreObject* parent) override;
636 bool accessibilityIgnoreAttachment() const override;
637 AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const override;
638 bool hasApplePDFAnnotationAttribute() const override { return boolAttributeValue(AXPropertyName::HasApplePDFAnnotationAttribute); }
639 const AccessibilityScrollView* ancestorAccessibilityScrollView(bool includeSelf) const override;
640 AXCoreObject* webAreaObject() const override { return objectAttributeValue(AXPropertyName::WebArea); }
641 void setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData&) override;
642 void clearIsIgnoredFromParentData() override;
643 void setIsIgnoredFromParentDataForChild(AXCoreObject*) override;
645 void updateBackingStore() override;
647 AXIsolatedTreeID m_treeID;
648 RefPtr<AXIsolatedTree> m_cachedTree;
649 AXID m_parentID { InvalidAXID };
650 AXID m_id { InvalidAXID };
651 Vector<AXID> m_childrenIDs;
652 Vector<RefPtr<AXCoreObject>> m_children;
653 AXPropertyMap m_propertyMap;
656 RetainPtr<NSView> m_platformWidget;
657 RetainPtr<RemoteAXObjectRef> m_remoteParent;
659 PlatformWidget m_platformWidget;
663 } // namespace WebCore
665 SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AXIsolatedObject, isAXIsolatedObjectInstance())
667 #endif // ENABLE((ACCESSIBILITY_ISOLATED_TREE))