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