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