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