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