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