AX: Expose autoFillButtonType to accessibility
[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     
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 #endif
1044     
1045     // allows for an AccessibilityObject to update its render tree or perform
1046     // other operations update type operations
1047     void updateBackingStore();
1048     
1049 #if PLATFORM(COCOA)
1050     bool preventKeyboardDOMEventDispatch() const;
1051     void setPreventKeyboardDOMEventDispatch(bool);
1052 #endif
1053     
1054 #if PLATFORM(COCOA) && !PLATFORM(IOS)
1055     bool caretBrowsingEnabled() const;
1056     void setCaretBrowsingEnabled(bool);
1057 #endif
1058
1059     AccessibilityObject* focusableAncestor();
1060     AccessibilityObject* editableAncestor();
1061     AccessibilityObject* highestEditableAncestor();
1062     
1063 protected:
1064     AXID m_id;
1065     AccessibilityChildrenVector m_children;
1066     mutable bool m_haveChildren;
1067     AccessibilityRole m_role;
1068     AccessibilityObjectInclusion m_lastKnownIsIgnoredValue;
1069
1070     virtual bool computeAccessibilityIsIgnored() const { return true; }
1071
1072     // If this object itself scrolls, return its ScrollableArea.
1073     virtual ScrollableArea* getScrollableAreaIfScrollable() const { return nullptr; }
1074     virtual void scrollTo(const IntPoint&) const { }
1075     ScrollableArea* scrollableAreaAncestor() const;
1076     void scrollAreaAndAncestor(std::pair<ScrollableArea*, AccessibilityObject*>&) const;
1077     
1078     static bool isAccessibilityObjectSearchMatchAtIndex(AccessibilityObject*, AccessibilitySearchCriteria*, size_t);
1079     static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
1080     static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
1081     static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
1082     virtual AccessibilityRole buttonRoleType() const;
1083     bool isOnscreen() const;
1084     bool dispatchTouchEvent();
1085
1086     void ariaElementsFromAttribute(AccessibilityChildrenVector&, const QualifiedName&) const;
1087
1088 #if (PLATFORM(GTK) || PLATFORM(EFL)) && HAVE(ACCESSIBILITY)
1089     bool allowsTextRanges() const;
1090     unsigned getLengthForTextRange() const;
1091 #else
1092     bool allowsTextRanges() const { return isTextControl(); }
1093     unsigned getLengthForTextRange() const { return text().length(); }
1094 #endif
1095
1096 #if PLATFORM(COCOA)
1097     RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
1098 #elif PLATFORM(WIN)
1099     COMPtr<AccessibilityObjectWrapper> m_wrapper;
1100 #elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
1101     AtkObject* m_wrapper;
1102 #endif
1103 };
1104
1105 #if !HAVE(ACCESSIBILITY)
1106 inline const AccessibilityObject::AccessibilityChildrenVector& AccessibilityObject::children(bool) { return m_children; }
1107 inline const String& AccessibilityObject::actionVerb() const { return emptyString(); }
1108 inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const { return -1; }
1109 inline void AccessibilityObject::updateBackingStore() { }
1110 #endif
1111
1112 } // namespace WebCore
1113
1114 #define SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(ToValueTypeName, predicate) \
1115 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \
1116     static bool isType(const WebCore::AccessibilityObject& object) { return object.predicate; } \
1117 SPECIALIZE_TYPE_TRAITS_END()
1118
1119 #endif // AccessibilityObject_h