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