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