AX: Anonymous RenderMathMLOperators are not exposed to the accessibility tree
[WebKit-https.git] / Source / WebCore / accessibility / AccessibilityObject.h
1 /*
2  * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved.
3  * Copyright (C) 2008 Nuanti Ltd.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1.  Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  * 2.  Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
15  *     its contributors may be used to endorse or promote products derived
16  *     from this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #ifndef AccessibilityObject_h
31 #define AccessibilityObject_h
32
33 #include "FloatQuad.h"
34 #include "LayoutRect.h"
35 #include "Path.h"
36 #include "Range.h"
37 #include "TextIteratorBehavior.h"
38 #include "VisiblePosition.h"
39 #include "VisibleSelection.h"
40 #include <wtf/Forward.h>
41 #include <wtf/RefPtr.h>
42 #include <wtf/Vector.h>
43
44 #if PLATFORM(COCOA)
45 #include <wtf/RetainPtr.h>
46 #elif PLATFORM(WIN)
47 #include "AccessibilityObjectWrapperWin.h"
48 #include "COMPtr.h"
49 #endif
50
51 #if PLATFORM(COCOA)
52
53 typedef struct _NSRange NSRange;
54
55 OBJC_CLASS NSArray;
56 OBJC_CLASS NSAttributedString;
57 OBJC_CLASS NSData;
58 OBJC_CLASS NSMutableAttributedString;
59 OBJC_CLASS NSString;
60 OBJC_CLASS NSValue;
61 OBJC_CLASS NSView;
62 OBJC_CLASS WebAccessibilityObjectWrapper;
63
64 typedef WebAccessibilityObjectWrapper AccessibilityObjectWrapper;
65
66 #elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
67 typedef struct _AtkObject AtkObject;
68 typedef struct _AtkObject AccessibilityObjectWrapper;
69 #else
70 class AccessibilityObjectWrapper;
71 #endif
72
73 namespace WebCore {
74
75 class AccessibilityObject;
76 class AXObjectCache;
77 class Element;
78 class Frame;
79 class FrameView;
80 class HTMLAnchorElement;
81 class HTMLAreaElement;
82 class IntPoint;
83 class IntSize;
84 class MainFrame;
85 class Node;
86 class Page;
87 class RenderObject;
88 class RenderListItem;
89 class ScrollableArea;
90 class ScrollView;
91 class Widget;
92
93 typedef unsigned AXID;
94
95 enum AccessibilityRole {
96     AnnotationRole = 1,
97     ApplicationRole,
98     ApplicationAlertRole,
99     ApplicationAlertDialogRole,
100     ApplicationDialogRole,
101     ApplicationLogRole,
102     ApplicationMarqueeRole,
103     ApplicationStatusRole,
104     ApplicationTimerRole,
105     AudioRole,
106     BlockquoteRole,
107     BrowserRole,
108     BusyIndicatorRole,
109     ButtonRole,
110     CanvasRole,
111     CaptionRole,
112     CellRole, 
113     CheckBoxRole,
114     ColorWellRole,
115     ColumnRole,
116     ColumnHeaderRole,
117     ComboBoxRole,
118     DefinitionRole,
119     DescriptionListRole,
120     DescriptionListTermRole,
121     DescriptionListDetailRole,
122     DetailsRole,
123     DirectoryRole,
124     DisclosureTriangleRole,
125     DivRole,
126     DocumentRole,
127     DocumentArticleRole,
128     DocumentMathRole,
129     DocumentNoteRole,
130     DrawerRole,
131     EditableTextRole,
132     FooterRole,
133     FormRole,
134     GridRole,
135     GridCellRole,
136     GroupRole,
137     GrowAreaRole,
138     HeadingRole,
139     HelpTagRole,
140     HorizontalRuleRole,
141     IgnoredRole,
142     InlineRole,
143     ImageRole,
144     ImageMapRole,
145     ImageMapLinkRole,
146     IncrementorRole,
147     LabelRole,
148     LandmarkBannerRole,
149     LandmarkComplementaryRole,
150     LandmarkContentInfoRole,
151     LandmarkMainRole,
152     LandmarkNavigationRole,
153     LandmarkRegionRole,
154     LandmarkSearchRole,
155     LegendRole,
156     LinkRole,
157     ListRole,
158     ListBoxRole,
159     ListBoxOptionRole,
160     ListItemRole,
161     ListMarkerRole,
162     MathElementRole,
163     MatteRole,
164     MenuRole,
165     MenuBarRole,
166     MenuButtonRole,
167     MenuItemRole,
168     MenuItemCheckboxRole,
169     MenuItemRadioRole,
170     MenuListPopupRole,
171     MenuListOptionRole,
172     OutlineRole,
173     ParagraphRole,
174     PopUpButtonRole,
175     PreRole,
176     PresentationalRole,
177     ProgressIndicatorRole,
178     RadioButtonRole,
179     RadioGroupRole,
180     RowHeaderRole,
181     RowRole,
182     RowGroupRole,
183     RubyBaseRole,
184     RubyBlockRole,
185     RubyInlineRole,
186     RubyRunRole,
187     RubyTextRole,
188     RulerRole,
189     RulerMarkerRole,
190     ScrollAreaRole,
191     ScrollBarRole,
192     SearchFieldRole,
193     SheetRole,
194     SliderRole,
195     SliderThumbRole,
196     SpinButtonRole,
197     SpinButtonPartRole,
198     SplitGroupRole,
199     SplitterRole,
200     StaticTextRole,
201     SummaryRole,
202     SwitchRole,
203     SystemWideRole,
204     SVGRootRole,
205     SVGTextRole,
206     SVGTSpanRole,
207     SVGTextPathRole,
208     TabGroupRole,
209     TabListRole,
210     TabPanelRole,            
211     TabRole,
212     TableRole,
213     TableHeaderContainerRole,
214     TextAreaRole,
215     TreeRole,
216     TreeGridRole,
217     TreeItemRole,
218     TextFieldRole,
219     ToggleButtonRole,
220     ToolbarRole,
221     UnknownRole,
222     UserInterfaceTooltipRole,
223     ValueIndicatorRole,
224     VideoRole,
225     WebApplicationRole,
226     WebAreaRole,
227     WebCoreLinkRole,
228     WindowRole,
229 };
230
231 enum AccessibilityTextSource {
232     AlternativeText,
233     ChildrenText,
234     SummaryText,
235     HelpText,
236     VisibleText,
237     TitleTagText,
238     PlaceholderText,
239     LabelByElementText,
240     TitleText,
241     SubtitleText,
242     ActionText,
243 };
244     
245 struct AccessibilityText {
246     String text;
247     AccessibilityTextSource textSource;
248     Vector<RefPtr<AccessibilityObject>> textElements;
249     
250     AccessibilityText(const String& t, const AccessibilityTextSource& s)
251     : text(t)
252     , textSource(s)
253     { }
254
255     AccessibilityText(const String& t, const AccessibilityTextSource& s, Vector<RefPtr<AccessibilityObject>> elements)
256     : text(t)
257     , textSource(s)
258     , textElements(WTFMove(elements))
259     { }
260
261     AccessibilityText(const String& t, const AccessibilityTextSource& s, const RefPtr<AccessibilityObject> element)
262     : text(t)
263     , textSource(s)
264     {
265         textElements.append(element);
266     }
267 };
268
269 struct AccessibilityTextUnderElementMode {
270     enum ChildrenInclusion {
271         TextUnderElementModeSkipIgnoredChildren,
272         TextUnderElementModeIncludeAllChildren,
273         TextUnderElementModeIncludeNameFromContentsChildren, // This corresponds to ARIA concept: nameFrom
274     };
275     
276     ChildrenInclusion childrenInclusion;
277     bool includeFocusableContent;
278     Node* ignoredChildNode;
279     
280     AccessibilityTextUnderElementMode(ChildrenInclusion c = TextUnderElementModeSkipIgnoredChildren, bool i = false, Node* ignored = nullptr)
281         : childrenInclusion(c)
282         , includeFocusableContent(i)
283         , ignoredChildNode(ignored)
284         { }
285 };
286     
287 enum AccessibilityOrientation {
288     AccessibilityOrientationVertical,
289     AccessibilityOrientationHorizontal,
290     AccessibilityOrientationUndefined,
291 };
292     
293 enum AccessibilityObjectInclusion {
294     IncludeObject,
295     IgnoreObject,
296     DefaultBehavior,
297 };
298     
299 enum AccessibilityButtonState {
300     ButtonStateOff = 0,
301     ButtonStateOn, 
302     ButtonStateMixed,
303 };
304     
305 enum AccessibilitySortDirection {
306     SortDirectionNone,
307     SortDirectionAscending,
308     SortDirectionDescending,
309     SortDirectionOther
310 };
311
312 enum AccessibilitySearchDirection {
313     SearchDirectionNext = 1,
314     SearchDirectionPrevious
315 };
316
317 enum AccessibilitySearchKey {
318     AnyTypeSearchKey = 1,
319     BlockquoteSameLevelSearchKey,
320     BlockquoteSearchKey,
321     BoldFontSearchKey,
322     ButtonSearchKey,
323     CheckBoxSearchKey,
324     ControlSearchKey,
325     DifferentTypeSearchKey,
326     FontChangeSearchKey,
327     FontColorChangeSearchKey,
328     FrameSearchKey,
329     GraphicSearchKey,
330     HeadingLevel1SearchKey,
331     HeadingLevel2SearchKey,
332     HeadingLevel3SearchKey,
333     HeadingLevel4SearchKey,
334     HeadingLevel5SearchKey,
335     HeadingLevel6SearchKey,
336     HeadingSameLevelSearchKey,
337     HeadingSearchKey,
338     HighlightedSearchKey,
339     ItalicFontSearchKey,
340     LandmarkSearchKey,
341     LinkSearchKey,
342     ListSearchKey,
343     LiveRegionSearchKey,
344     MisspelledWordSearchKey,
345     OutlineSearchKey,
346     PlainTextSearchKey,
347     RadioGroupSearchKey,
348     SameTypeSearchKey,
349     StaticTextSearchKey,
350     StyleChangeSearchKey,
351     TableSameLevelSearchKey,
352     TableSearchKey,
353     TextFieldSearchKey,
354     UnderlineSearchKey,
355     UnvisitedLinkSearchKey,
356     VisitedLinkSearchKey
357 };
358
359 enum AccessibilityVisiblePositionForBounds {
360     FirstVisiblePositionForBounds,
361     LastVisiblePositionForBounds
362 };
363
364 struct AccessibilitySearchCriteria {
365     AccessibilityObject* startObject;
366     AccessibilitySearchDirection searchDirection;
367     Vector<AccessibilitySearchKey> searchKeys;
368     String searchText;
369     unsigned resultsLimit;
370     bool visibleOnly;
371     bool immediateDescendantsOnly;
372     
373     AccessibilitySearchCriteria(AccessibilityObject* startObject, AccessibilitySearchDirection searchDirection, String searchText, unsigned resultsLimit, bool visibleOnly, bool immediateDescendantsOnly)
374         : startObject(startObject)
375         , searchDirection(searchDirection)
376         , searchText(searchText)
377         , resultsLimit(resultsLimit)
378         , visibleOnly(visibleOnly)
379         , immediateDescendantsOnly(immediateDescendantsOnly)
380     { }
381 };
382     
383 enum AccessibilityDetachmentType { CacheDestroyed, ElementDestroyed };
384
385 struct VisiblePositionRange {
386
387     VisiblePosition start;
388     VisiblePosition end;
389
390     VisiblePositionRange() {}
391
392     VisiblePositionRange(const VisiblePosition& s, const VisiblePosition& e)
393         : start(s)
394         , end(e)
395     { }
396
397     VisiblePositionRange(const VisibleSelection& selection)
398         : start(selection.start())
399         , end(selection.end())
400     { }
401
402     bool isNull() const { return start.isNull() || end.isNull(); }
403 };
404
405 struct PlainTextRange {
406         
407     unsigned start;
408     unsigned length;
409     
410     PlainTextRange()
411         : start(0)
412         , length(0)
413     { }
414     
415     PlainTextRange(unsigned s, unsigned l)
416         : start(s)
417         , length(l)
418     { }
419     
420     bool isNull() const { return !start && !length; }
421 };
422
423 enum AccessibilitySelectTextActivity {
424     FindAndReplaceActivity,
425     FindAndSelectActivity,
426     FindAndCapitalize,
427     FindAndLowercase,
428     FindAndUppercase
429 };
430
431 enum AccessibilitySelectTextAmbiguityResolution {
432     ClosestAfterSelectionAmbiguityResolution,
433     ClosestBeforeSelectionAmbiguityResolution,
434     ClosestToSelectionAmbiguityResolution
435 };
436
437 struct AccessibilitySelectTextCriteria {
438     AccessibilitySelectTextActivity activity;
439     AccessibilitySelectTextAmbiguityResolution ambiguityResolution;
440     String replacementString;
441     Vector<String> searchStrings;
442     
443     AccessibilitySelectTextCriteria(AccessibilitySelectTextActivity activity, AccessibilitySelectTextAmbiguityResolution ambiguityResolution, const String& replacementString)
444         : activity(activity)
445         , ambiguityResolution(ambiguityResolution)
446         , replacementString(replacementString)
447     { }
448 };
449
450 enum AccessibilityMathScriptObjectType { Subscript, Superscript };
451 enum AccessibilityMathMultiscriptObjectType { PreSubscript, PreSuperscript, PostSubscript, PostSuperscript };
452
453 enum AccessibilityARIACurrentState { ARIACurrentFalse, ARIACurrentTrue, ARIACurrentPage, ARIACurrentStep, ARIACurrentLocation, ARIACurrentDate, ARIACurrentTime };
454
455 class AccessibilityObject : public RefCounted<AccessibilityObject> {
456 protected:
457     AccessibilityObject();
458     
459 public:
460     virtual ~AccessibilityObject();
461
462     // After constructing an AccessibilityObject, it must be given a
463     // unique ID, then added to AXObjectCache, and finally init() must
464     // be called last.
465     void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
466     virtual void init() { }
467
468     // When the corresponding WebCore object that this AccessibilityObject
469     // wraps is deleted, it must be detached.
470     virtual void detach(AccessibilityDetachmentType, AXObjectCache* cache = nullptr);
471     virtual bool isDetached() const;
472
473     typedef Vector<RefPtr<AccessibilityObject>> AccessibilityChildrenVector;
474     
475     virtual bool isAccessibilityNodeObject() const { return false; }    
476     virtual bool isAccessibilityRenderObject() const { return false; }
477     virtual bool isAccessibilityScrollbar() const { return false; }
478     virtual bool isAccessibilityScrollView() const { return false; }
479     virtual bool isAccessibilitySVGRoot() const { return false; }
480     virtual bool isAccessibilitySVGElement() const { return false; }
481
482     bool accessibilityObjectContainsText(String *) const;
483
484     virtual bool isAttachmentElement() const { return false; }
485     virtual bool isHeading() const { return false; }
486     virtual bool isLink() const { return false; }
487     virtual bool isImage() const { return false; }
488     virtual bool isImageMap() const { return roleValue() == ImageMapRole; }
489     virtual bool isNativeImage() const { return false; }
490     virtual bool isImageButton() const { return false; }
491     virtual bool isPasswordField() const { return false; }
492     bool isContainedByPasswordField() const;
493     virtual AccessibilityObject* passwordFieldOrContainingPasswordField() { return nullptr; }
494     virtual bool isNativeTextControl() const { return false; }
495     virtual bool isSearchField() const { return false; }
496     bool isWebArea() const { return roleValue() == WebAreaRole; }
497     virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
498     virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
499     virtual bool isListBox() const { return roleValue() == ListBoxRole; }
500     virtual bool isListBoxOption() const { return false; }
501     virtual bool isAttachment() const { return false; }
502     virtual bool isMediaTimeline() const { return false; }
503     virtual bool isMenuRelated() const { return false; }
504     virtual bool isMenu() const { return false; }
505     virtual bool isMenuBar() const { return false; }
506     virtual bool isMenuButton() const { return false; }
507     virtual bool isMenuItem() const { return false; }
508     virtual bool isFileUploadButton() const { return false; }
509     virtual bool isInputImage() const { return false; }
510     virtual bool isProgressIndicator() const { return false; }
511     virtual bool isSlider() const { return false; }
512     virtual bool isSliderThumb() const { return false; }
513     virtual bool isInputSlider() const { return false; }
514     virtual bool isControl() const { return false; }
515     virtual bool isLabel() const { return false; }
516     virtual bool isList() const { return false; }
517     virtual bool isTable() const { return false; }
518     virtual bool isDataTable() const { return false; }
519     virtual bool isTableRow() const { return false; }
520     virtual bool isTableColumn() const { return false; }
521     virtual bool isTableCell() const { return false; }
522     virtual bool isFieldset() const { return false; }
523     virtual bool isGroup() const { return false; }
524     virtual bool isARIATreeGridRow() const { return false; }
525     virtual bool isImageMapLink() const { return false; }
526     virtual bool isMenuList() const { return false; }
527     virtual bool isMenuListPopup() const { return false; }
528     virtual bool isMenuListOption() const { return false; }
529     virtual bool isSpinButton() const { return roleValue() == SpinButtonRole; }
530     virtual bool isNativeSpinButton() const { return false; }
531     virtual bool isSpinButtonPart() const { return false; }
532     virtual bool isMockObject() const { return false; }
533     virtual bool isMediaControlLabel() const { return false; }
534     bool isSwitch() const { return roleValue() == SwitchRole; }
535     bool isToggleButton() const { return roleValue() == ToggleButtonRole; }
536     bool isTextControl() const;
537     bool isARIATextControl() const;
538     bool isNonNativeTextControl() const;
539     bool isTabList() const { return roleValue() == TabListRole; }
540     bool isTabItem() const { return roleValue() == TabRole; }
541     bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
542     bool isComboBox() const { return roleValue() == ComboBoxRole; }
543     bool isTree() const { return roleValue() == TreeRole; }
544     bool isTreeItem() const { return roleValue() == TreeItemRole; }
545     bool isScrollbar() const { return roleValue() == ScrollBarRole; }
546     bool isButton() const;
547     bool isListItem() const { return roleValue() == ListItemRole; }
548     bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
549     bool isScrollView() const { return roleValue() == ScrollAreaRole; }
550     bool isCanvas() const { return roleValue() == CanvasRole; }
551     bool isPopUpButton() const { return roleValue() == PopUpButtonRole; }
552     bool isBlockquote() const;
553     bool isLandmark() const;
554     bool isColorWell() const { return roleValue() == ColorWellRole; }
555     bool isRangeControl() const;
556     bool isMeter() const;
557     bool isSplitter() const { return roleValue() == SplitterRole; }
558     bool isToolbar() const { return roleValue() == ToolbarRole; }
559     bool isStyleFormatGroup() const;
560     bool isSubscriptStyleGroup() const;
561     bool isSuperscriptStyleGroup() const;
562     
563     virtual bool isChecked() const { return false; }
564     virtual bool isEnabled() const { return false; }
565     virtual bool isSelected() const { return false; }
566     virtual bool isFocused() const { return false; }
567     virtual bool isHovered() const { return false; }
568     virtual bool isIndeterminate() const { return false; }
569     virtual bool isLoaded() const { return false; }
570     virtual bool isMultiSelectable() const { return false; }
571     virtual bool isOffScreen() const { return false; }
572     virtual bool isPressed() const { return false; }
573     virtual bool isUnvisited() const { return false; }
574     virtual bool isVisited() const { return false; }
575     virtual bool isRequired() const { return false; }
576     virtual bool supportsRequiredAttribute() const { return false; }
577     virtual bool isLinked() const { return false; }
578     virtual bool isExpanded() const;
579     virtual bool isVisible() const { return true; }
580     virtual bool isCollapsed() const { return false; }
581     virtual void setIsExpanded(bool) { }
582
583     // In a multi-select list, many items can be selected but only one is active at a time.
584     virtual bool isSelectedOptionActive() const { return false; }
585
586     virtual bool hasBoldFont() const { return false; }
587     virtual bool hasItalicFont() const { return false; }
588     bool hasMisspelling() const;
589     virtual bool hasPlainText() const { return false; }
590     virtual bool hasSameFont(RenderObject*) const { return false; }
591     virtual bool hasSameFontColor(RenderObject*) const { return false; }
592     virtual bool hasSameStyle(RenderObject*) const { return false; }
593     bool isStaticText() const { return roleValue() == StaticTextRole; }
594     virtual bool hasUnderline() const { return false; }
595     bool hasHighlighting() const;
596
597     bool supportsDatetimeAttribute() const;
598
599     virtual bool canSetFocusAttribute() const { return false; }
600     virtual bool canSetTextRangeAttributes() const { return false; }
601     virtual bool canSetValueAttribute() const { return false; }
602     virtual bool canSetNumericValue() const { return false; }
603     virtual bool canSetSelectedAttribute() const { return false; }
604     virtual bool canSetSelectedChildrenAttribute() const { return false; }
605     virtual bool canSetExpandedAttribute() const { return false; }
606     
607     virtual Element* element() const;
608     virtual Node* node() const { return nullptr; }
609     virtual RenderObject* renderer() const { return nullptr; }
610     virtual bool accessibilityIsIgnored() const;
611     virtual AccessibilityObjectInclusion defaultObjectInclusion() const;
612     bool accessibilityIsIgnoredByDefault() const;
613     
614     int blockquoteLevel() const;
615     virtual int headingLevel() const { return 0; }
616     virtual int tableLevel() const { return 0; }
617     virtual AccessibilityButtonState checkboxOrRadioValue() const;
618     virtual String valueDescription() const { return String(); }
619     virtual float valueForRange() const { return 0.0f; }
620     virtual float maxValueForRange() const { return 0.0f; }
621     virtual float minValueForRange() const { return 0.0f; }
622     virtual float stepValueForRange() const { return 0.0f; }
623     virtual AccessibilityObject* selectedRadioButton() { return nullptr; }
624     virtual AccessibilityObject* selectedTabItem() { return nullptr; }
625     virtual int layoutCount() const { return 0; }
626     virtual double estimatedLoadingProgress() const { return 0; }
627     static bool isARIAControl(AccessibilityRole);
628     static bool isARIAInput(AccessibilityRole);
629
630     virtual bool supportsARIAOwns() const { return false; }
631     void ariaControlsElements(AccessibilityChildrenVector&) const;
632     void ariaDescribedByElements(AccessibilityChildrenVector&) const;
633     void ariaFlowToElements(AccessibilityChildrenVector&) const;
634     void ariaLabelledByElements(AccessibilityChildrenVector&) const;
635     void ariaOwnsElements(AccessibilityChildrenVector&) const;
636
637     virtual bool ariaHasPopup() const { return false; }
638     bool ariaPressedIsPresent() const;
639     bool ariaIsMultiline() const;
640     String invalidStatus() const;
641     bool supportsARIAPressed() const;
642     bool supportsExpanded() const;
643     bool supportsChecked() const;
644     AccessibilitySortDirection sortDirection() const;
645     virtual bool canvasHasFallbackContent() const { return false; }
646     bool supportsRangeValue() const;
647     String identifierAttribute() const;
648     void classList(Vector<String>&) const;
649     virtual String roleDescription() const;
650     AccessibilityARIACurrentState ariaCurrentState() const;
651     
652     // This function checks if the object should be ignored when there's a modal dialog displayed.
653     bool ignoredFromARIAModalPresence() const;
654     bool isAriaModalDescendant(Node*) const;
655     
656     bool supportsARIASetSize() const;
657     bool supportsARIAPosInSet() const;
658     int ariaSetSize() const;
659     int ariaPosInSet() const;
660     
661     // ARIA drag and drop
662     virtual bool supportsARIADropping() const { return false; }
663     virtual bool supportsARIADragging() const { return false; }
664     virtual bool isARIAGrabbed() { return false; }
665     virtual void setARIAGrabbed(bool) { }
666     virtual void determineARIADropEffects(Vector<String>&) { }
667     
668     // Called on the root AX object to return the deepest available element.
669     virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return nullptr; }
670     // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
671     virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
672
673     virtual AccessibilityObject* focusedUIElement() const;
674
675     virtual AccessibilityObject* firstChild() const { return nullptr; }
676     virtual AccessibilityObject* lastChild() const { return nullptr; }
677     virtual AccessibilityObject* previousSibling() const { return nullptr; }
678     virtual AccessibilityObject* nextSibling() const { return nullptr; }
679     virtual AccessibilityObject* nextSiblingUnignored(int limit) const;
680     virtual AccessibilityObject* previousSiblingUnignored(int limit) const;
681     virtual AccessibilityObject* parentObject() const = 0;
682     virtual AccessibilityObject* parentObjectUnignored() const;
683     virtual AccessibilityObject* parentObjectIfExists() const { return nullptr; }
684     static AccessibilityObject* firstAccessibleObjectFromNode(const Node*);
685     void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
686     virtual bool isDescendantOfBarrenParent() const { return false; }
687     
688     // Text selection
689     RefPtr<Range> rangeOfStringClosestToRangeInDirection(Range*, AccessibilitySearchDirection, Vector<String>&) const;
690     RefPtr<Range> selectionRange() const;
691     String selectText(AccessibilitySelectTextCriteria*);
692     
693     virtual AccessibilityObject* observableObject() const { return nullptr; }
694     virtual void linkedUIElements(AccessibilityChildrenVector&) const { }
695     virtual AccessibilityObject* titleUIElement() const { return nullptr; }
696     virtual bool exposesTitleUIElement() const { return true; }
697     virtual AccessibilityObject* correspondingLabelForControlElement() const { return nullptr; }
698     virtual AccessibilityObject* correspondingControlForLabelElement() const { return nullptr; }
699     virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return nullptr; }
700     
701     virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
702     virtual bool isPresentationalChildOfAriaRole() const { return false; }
703     virtual bool ariaRoleHasPresentationalChildren() const { return false; }
704     virtual bool inheritsPresentationalRole() const { return false; }
705
706     // Accessibility Text
707     virtual void accessibilityText(Vector<AccessibilityText>&) { };
708     // A single method for getting a computed label for an AXObject. It condenses the nuances of accessibilityText. Used by Inspector.
709     String computedLabel();
710     
711     // A programmatic way to set a name on an AccessibleObject.
712     virtual void setAccessibleName(const AtomicString&) { }
713     virtual bool hasAttributesRequiredForInclusion() const;
714
715     // Accessibility Text - (To be deprecated).
716     virtual String accessibilityDescription() const { return String(); }
717     virtual String title() const { return String(); }
718     virtual String helpText() const { return String(); }
719
720     // Methods for determining accessibility text.
721     virtual String stringValue() const { return String(); }
722     virtual String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const { return String(); }
723     virtual String text() const { return String(); }
724     virtual int textLength() const { return 0; }
725     virtual String ariaLabeledByAttribute() const { return String(); }
726     virtual String ariaDescribedByAttribute() const { return String(); }
727     const AtomicString& placeholderValue() const;
728     bool accessibleNameDerivesFromContent() const;
729     
730     // Abbreviations
731     virtual String expandedTextValue() const { return String(); }
732     virtual bool supportsExpandedTextValue() const { return false; }
733     
734     void elementsFromAttribute(Vector<Element*>&, const QualifiedName&) const;
735
736     // Only if isColorWell()
737     virtual void colorValue(int& r, int& g, int& b) const { r = 0; g = 0; b = 0; }
738
739     virtual AccessibilityRole roleValue() const { return m_role; }
740
741     virtual AXObjectCache* axObjectCache() const;
742     AXID axObjectID() const { return m_id; }
743     
744     static AccessibilityObject* anchorElementForNode(Node*);
745     static AccessibilityObject* headingElementForNode(Node*);
746     virtual Element* anchorElement() const { return nullptr; }
747     bool supportsPressAction() const;
748     virtual Element* actionElement() const { return nullptr; }
749     virtual LayoutRect boundingBoxRect() const { return LayoutRect(); }
750     IntRect pixelSnappedBoundingBoxRect() const { return snappedIntRect(boundingBoxRect()); }
751     virtual LayoutRect elementRect() const = 0;
752     LayoutSize size() const { return elementRect().size(); }
753     virtual IntPoint clickPoint();
754     static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&);
755     virtual Path elementPath() const { return Path(); }
756     virtual bool supportsPath() const { return false; }
757     
758     TextIteratorBehavior textIteratorBehaviorForTextRange() const;
759     virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); }
760     unsigned selectionStart() const { return selectedTextRange().start; }
761     unsigned selectionEnd() const { return selectedTextRange().length; }
762     
763     virtual URL url() const { return URL(); }
764     virtual VisibleSelection selection() const { return VisibleSelection(); }
765     virtual String selectedText() const { return String(); }
766     virtual const AtomicString& accessKey() const { return nullAtom; }
767     const String& actionVerb() const;
768     virtual Widget* widget() const { return nullptr; }
769     virtual Widget* widgetForAttachmentView() const { return nullptr; }
770     Page* page() const;
771     virtual Document* document() const;
772     virtual FrameView* documentFrameView() const;
773     Frame* frame() const;
774     MainFrame* mainFrame() const;
775     Document* topDocument() const;
776     ScrollView* scrollViewAncestor() const;
777     String language() const;
778     // 1-based, to match the aria-level spec.
779     virtual unsigned hierarchicalLevel() const { return 0; }
780     
781     virtual void setFocused(bool) { }
782     virtual void setSelectedText(const String&) { }
783     virtual void setSelectedTextRange(const PlainTextRange&) { }
784     virtual void setValue(const String&) { }
785     virtual void setValue(float) { }
786     virtual void setSelected(bool) { }
787     virtual void setSelectedRows(AccessibilityChildrenVector&) { }
788     
789     virtual void makeRangeVisible(const PlainTextRange&) { }
790     virtual bool press();
791     bool performDefaultAction() { return press(); }
792     
793     virtual AccessibilityOrientation orientation() const;
794     virtual void increment() { }
795     virtual void decrement() { }
796
797     virtual void childrenChanged() { }
798     virtual void textChanged() { }
799     virtual void updateAccessibilityRole() { }
800     const AccessibilityChildrenVector& children(bool updateChildrenIfNeeded = true);
801     virtual void addChildren() { }
802     virtual void addChild(AccessibilityObject*) { }
803     virtual void insertChild(AccessibilityObject*, unsigned) { }
804
805     virtual bool shouldIgnoreAttributeRole() const { return false; }
806     
807     virtual bool canHaveChildren() const { return true; }
808     virtual bool hasChildren() const { return m_haveChildren; }
809     virtual void updateChildrenIfNecessary();
810     virtual void setNeedsToUpdateChildren() { }
811     virtual void clearChildren();
812 #if PLATFORM(COCOA)
813     virtual void detachFromParent();
814 #else
815     virtual void detachFromParent() { }
816 #endif
817     virtual bool isDetachedFromParent() { return false; }
818
819     virtual void selectedChildren(AccessibilityChildrenVector&) { }
820     virtual void visibleChildren(AccessibilityChildrenVector&) { }
821     virtual void tabChildren(AccessibilityChildrenVector&) { }
822     virtual bool shouldFocusActiveDescendant() const { return false; }
823     virtual AccessibilityObject* activeDescendant() const { return nullptr; }
824     virtual void handleActiveDescendantChanged() { }
825     virtual void handleAriaExpandedChanged() { }
826     bool isDescendantOfObject(const AccessibilityObject*) const;
827     bool isAncestorOfObject(const AccessibilityObject*) const;
828     AccessibilityObject* firstAnonymousBlockChild() const;
829
830     static AccessibilityRole ariaRoleToWebCoreRole(const String&);
831     bool hasAttribute(const QualifiedName&) const;
832     const AtomicString& getAttribute(const QualifiedName&) const;
833     bool hasTagName(const QualifiedName&) const;
834
835     virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
836     virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
837     
838     RefPtr<Range> elementRange() const;
839     static bool replacedNodeNeedsCharacter(Node* replacedNode);
840     
841     VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
842     VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
843     VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
844     VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
845     VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
846     VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
847     VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
848     VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
849     VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
850     VisiblePositionRange lineRangeForPosition(const VisiblePosition&) const;
851     
852     RefPtr<Range> rangeForPlainTextRange(const PlainTextRange&) const;
853
854     static String stringForVisiblePositionRange(const VisiblePositionRange&);
855     String stringForRange(RefPtr<Range>) const;
856     virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); }
857     virtual IntRect boundsForRange(const RefPtr<Range>) const { return IntRect(); }
858     int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
859     virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { }
860
861     VisiblePosition visiblePositionForBounds(const IntRect&, AccessibilityVisiblePositionForBounds) const;
862     virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const { return VisiblePosition(); }
863     VisiblePosition nextVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.next(); }
864     VisiblePosition previousVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.previous(); }
865     VisiblePosition nextWordEnd(const VisiblePosition&) const;
866     VisiblePosition previousWordStart(const VisiblePosition&) const;
867     VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
868     VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
869     VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
870     VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
871     VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
872     VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
873     virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const { return VisiblePosition(); }
874     
875     virtual VisiblePosition visiblePositionForIndex(int) const { return VisiblePosition(); }
876     virtual int indexForVisiblePosition(const VisiblePosition&) const { return 0; }
877
878     AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
879     int lineForPosition(const VisiblePosition&) const;
880     PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
881     virtual int index(const VisiblePosition&) const { return -1; }
882
883     virtual void lineBreaks(Vector<int>&) const { }
884     virtual PlainTextRange doAXRangeForLine(unsigned) const { return PlainTextRange(); }
885     PlainTextRange doAXRangeForPosition(const IntPoint&) const;
886     virtual PlainTextRange doAXRangeForIndex(unsigned) const { return PlainTextRange(); }
887     PlainTextRange doAXStyleRangeForIndex(unsigned) const;
888
889     virtual String doAXStringForRange(const PlainTextRange&) const { return String(); }
890     virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); }
891     virtual IntRect doAXBoundsForRangeUsingCharacterOffset(const PlainTextRange&) const { return IntRect(); }
892     static String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&);
893
894     unsigned doAXLineForIndex(unsigned);
895
896     String computedRoleString() const;
897
898     virtual String stringValueForMSAA() const { return String(); }
899     virtual String stringRoleForMSAA() const { return String(); }
900     virtual String nameForMSAA() const { return String(); }
901     virtual String descriptionForMSAA() const { return String(); }
902     virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); }
903
904     virtual String passwordFieldValue() const { return String(); }
905     bool isValueAutofilled() const;
906     bool isValueAutofillAvailable() const;
907     
908     // Used by an ARIA tree to get all its rows.
909     void ariaTreeRows(AccessibilityChildrenVector&);
910     // Used by an ARIA tree item to get all of its direct rows that it can disclose.
911     void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&);
912     // Used by an ARIA tree item to get only its content, and not its child tree items and groups. 
913     void ariaTreeItemContent(AccessibilityChildrenVector&);
914     
915     // ARIA live-region features.
916     bool supportsARIALiveRegion() const;
917     bool isInsideARIALiveRegion() const;
918     virtual const String ariaLiveRegionStatus() const { return String(); }
919     virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
920     virtual bool ariaLiveRegionAtomic() const { return false; }
921     virtual bool ariaLiveRegionBusy() const { return false; }
922     static const String defaultLiveRegionStatusForRole(AccessibilityRole);
923     static bool liveRegionStatusIsEnabled(const AtomicString&);
924     static bool contentEditableAttributeIsEnabled(Element*);
925     bool hasContentEditableAttributeSet() const;
926
927     bool supportsARIAReadOnly() const;
928     String ariaReadOnlyValue() const;
929     
930     bool supportsARIAAttributes() const;
931     
932     // CSS3 Speech properties.
933     virtual ESpeak speakProperty() const { return SpeakNormal; }
934
935     // Make this object visible by scrolling as many nested scrollable views as needed.
936     virtual void scrollToMakeVisible() const;
937     // Same, but if the whole object can't be made visible, try for this subrect, in local coordinates.
938     virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const;
939     // Scroll this object to a given point in global coordinates of the top-level window.
940     virtual void scrollToGlobalPoint(const IntPoint&) const;
941     
942     enum ScrollByPageDirection { Up, Down, Left, Right };
943     bool scrollByPage(ScrollByPageDirection) const;
944     IntPoint scrollPosition() const;
945     IntSize scrollContentsSize() const;    
946     IntRect scrollVisibleContentRect() const;
947     
948     bool lastKnownIsIgnoredValue();
949     void setLastKnownIsIgnoredValue(bool);
950
951     // Fires a children changed notification on the parent if the isIgnored value changed.
952     void notifyIfIgnoredValueChanged();
953
954     // All math elements return true for isMathElement().
955     virtual bool isMathElement() const { return false; }
956     virtual bool isMathFraction() const { return false; }
957     virtual bool isMathFenced() const { return false; }
958     virtual bool isMathSubscriptSuperscript() const { return false; }
959     virtual bool isMathRow() const { return false; }
960     virtual bool isMathUnderOver() const { return false; }
961     virtual bool isMathRoot() const { return false; }
962     virtual bool isMathSquareRoot() const { return false; }
963     virtual bool isMathText() const { return false; }
964     virtual bool isMathNumber() const { return false; }
965     virtual bool isMathOperator() const { return false; }
966     virtual bool isMathFenceOperator() const { return false; }
967     virtual bool isMathSeparatorOperator() const { return false; }
968     virtual bool isMathIdentifier() const { return false; }
969     virtual bool isMathTable() const { return false; }
970     virtual bool isMathTableRow() const { return false; }
971     virtual bool isMathTableCell() const { return false; }
972     virtual bool isMathMultiscript() const { return false; }
973     virtual bool isMathToken() const { return false; }
974     virtual bool isMathScriptObject(AccessibilityMathScriptObjectType) const { return false; }
975     virtual bool isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const { return false; }
976
977     // Root components.
978     virtual AccessibilityObject* mathRadicandObject() { return nullptr; }
979     virtual AccessibilityObject* mathRootIndexObject() { return nullptr; }
980     
981     // Under over components.
982     virtual AccessibilityObject* mathUnderObject() { return nullptr; }
983     virtual AccessibilityObject* mathOverObject() { return nullptr; }
984
985     // Fraction components.
986     virtual AccessibilityObject* mathNumeratorObject() { return nullptr; }
987     virtual AccessibilityObject* mathDenominatorObject() { return nullptr; }
988
989     // Subscript/superscript components.
990     virtual AccessibilityObject* mathBaseObject() { return nullptr; }
991     virtual AccessibilityObject* mathSubscriptObject() { return nullptr; }
992     virtual AccessibilityObject* mathSuperscriptObject() { return nullptr; }
993     
994     // Fenced components.
995     virtual String mathFencedOpenString() const { return String(); }
996     virtual String mathFencedCloseString() const { return String(); }
997     virtual int mathLineThickness() const { return 0; }
998     virtual bool isAnonymousMathOperator() const { return false; }
999     
1000     // Multiscripts components.
1001     typedef Vector<std::pair<AccessibilityObject*, AccessibilityObject*>> AccessibilityMathMultiscriptPairs;
1002     virtual void mathPrescripts(AccessibilityMathMultiscriptPairs&) { }
1003     virtual void mathPostscripts(AccessibilityMathMultiscriptPairs&) { }
1004     
1005     // Visibility.
1006     bool isARIAHidden() const;
1007     bool isDOMHidden() const;
1008     bool isHidden() const { return isARIAHidden() || isDOMHidden(); }
1009     
1010 #if HAVE(ACCESSIBILITY)
1011 #if PLATFORM(GTK) || PLATFORM(EFL)
1012     AccessibilityObjectWrapper* wrapper() const;
1013     void setWrapper(AccessibilityObjectWrapper*);
1014 #else
1015     AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
1016     void setWrapper(AccessibilityObjectWrapper* wrapper) 
1017     {
1018         m_wrapper = wrapper;
1019     }
1020 #endif
1021 #endif
1022     
1023 #if PLATFORM(COCOA)
1024     void overrideAttachmentParent(AccessibilityObject* parent);
1025 #else
1026     void overrideAttachmentParent(AccessibilityObject*) { }
1027 #endif
1028     
1029 #if HAVE(ACCESSIBILITY)
1030     // a platform-specific method for determining if an attachment is ignored
1031     bool accessibilityIgnoreAttachment() const;
1032     // gives platforms the opportunity to indicate if and how an object should be included
1033     AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const;
1034 #else
1035     bool accessibilityIgnoreAttachment() const { return true; }
1036     AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const { return DefaultBehavior; }
1037 #endif
1038
1039 #if PLATFORM(IOS)
1040     int accessibilityPasswordFieldLength();
1041 #endif
1042     
1043     // allows for an AccessibilityObject to update its render tree or perform
1044     // other operations update type operations
1045     void updateBackingStore();
1046     
1047 #if PLATFORM(COCOA)
1048     bool preventKeyboardDOMEventDispatch() const;
1049     void setPreventKeyboardDOMEventDispatch(bool);
1050 #endif
1051     
1052 #if PLATFORM(COCOA) && !PLATFORM(IOS)
1053     bool caretBrowsingEnabled() const;
1054     void setCaretBrowsingEnabled(bool);
1055 #endif
1056
1057     AccessibilityObject* focusableAncestor();
1058     AccessibilityObject* editableAncestor();
1059     AccessibilityObject* highestEditableAncestor();
1060     
1061 protected:
1062     AXID m_id;
1063     AccessibilityChildrenVector m_children;
1064     mutable bool m_haveChildren;
1065     AccessibilityRole m_role;
1066     AccessibilityObjectInclusion m_lastKnownIsIgnoredValue;
1067
1068     virtual bool computeAccessibilityIsIgnored() const { return true; }
1069
1070     // If this object itself scrolls, return its ScrollableArea.
1071     virtual ScrollableArea* getScrollableAreaIfScrollable() const { return nullptr; }
1072     virtual void scrollTo(const IntPoint&) const { }
1073     ScrollableArea* scrollableAreaAncestor() const;
1074     void scrollAreaAndAncestor(std::pair<ScrollableArea*, AccessibilityObject*>&) const;
1075     
1076     static bool isAccessibilityObjectSearchMatchAtIndex(AccessibilityObject*, AccessibilitySearchCriteria*, size_t);
1077     static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
1078     static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
1079     static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
1080     virtual AccessibilityRole buttonRoleType() const;
1081     bool isOnscreen() const;
1082     bool dispatchTouchEvent();
1083
1084     void ariaElementsFromAttribute(AccessibilityChildrenVector&, const QualifiedName&) const;
1085
1086 #if (PLATFORM(GTK) || PLATFORM(EFL)) && HAVE(ACCESSIBILITY)
1087     bool allowsTextRanges() const;
1088     unsigned getLengthForTextRange() const;
1089 #else
1090     bool allowsTextRanges() const { return isTextControl(); }
1091     unsigned getLengthForTextRange() const { return text().length(); }
1092 #endif
1093
1094 #if PLATFORM(COCOA)
1095     RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
1096 #elif PLATFORM(WIN)
1097     COMPtr<AccessibilityObjectWrapper> m_wrapper;
1098 #elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
1099     AtkObject* m_wrapper;
1100 #endif
1101 };
1102
1103 #if !HAVE(ACCESSIBILITY)
1104 inline const AccessibilityObject::AccessibilityChildrenVector& AccessibilityObject::children(bool) { return m_children; }
1105 inline const String& AccessibilityObject::actionVerb() const { return emptyString(); }
1106 inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const { return -1; }
1107 inline void AccessibilityObject::updateBackingStore() { }
1108 #endif
1109
1110 } // namespace WebCore
1111
1112 #define SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(ToValueTypeName, predicate) \
1113 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \
1114     static bool isType(const WebCore::AccessibilityObject& object) { return object.predicate; } \
1115 SPECIALIZE_TYPE_TRAITS_END()
1116
1117 #endif // AccessibilityObject_h