WK2: Support Accessibility
[WebKit-https.git] / WebCore / accessibility / AccessibilityObject.h
1 /*
2  * Copyright (C) 2008, 2009 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 Computer, Inc. ("Apple") nor the names of
15  *     its contributors may be used to endorse or promote products derived
16  *     from this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #ifndef AccessibilityObject_h
31 #define AccessibilityObject_h
32
33 #include "IntRect.h"
34 #include "Range.h"
35 #include "VisiblePosition.h"
36 #include "VisibleSelection.h"
37 #include <wtf/Forward.h>
38 #include <wtf/RefPtr.h>
39 #include <wtf/Vector.h>
40
41 #if PLATFORM(MAC)
42 #include <wtf/RetainPtr.h>
43 #elif PLATFORM(WIN) && !OS(WINCE)
44 #include "AccessibilityObjectWrapperWin.h"
45 #include "COMPtr.h"
46 #elif PLATFORM(CHROMIUM)
47 #include "AccessibilityObjectWrapper.h"
48 #endif
49
50 typedef struct _NSRange NSRange;
51
52 #ifdef __OBJC__
53 @class AccessibilityObjectWrapper;
54 @class NSArray;
55 @class NSAttributedString;
56 @class NSData;
57 @class NSMutableAttributedString;
58 @class NSString;
59 @class NSValue;
60 @class NSView;
61 #else
62 class NSArray;
63 class NSAttributedString;
64 class NSData;
65 class NSMutableAttributedString;
66 class NSString;
67 class NSValue;
68 class NSView;
69 #if PLATFORM(GTK)
70 typedef struct _AtkObject AtkObject;
71 typedef struct _AtkObject AccessibilityObjectWrapper;
72 #else
73 class AccessibilityObjectWrapper;
74 #endif
75 #endif
76
77 namespace WebCore {
78
79 class AXObjectCache;
80 class Element;
81 class Frame;
82 class FrameView;
83 class HTMLAnchorElement;
84 class HTMLAreaElement;
85 class IntPoint;
86 class IntSize;
87 class Node;
88 class RenderObject;
89 class RenderListItem;
90 class VisibleSelection;
91 class Widget;
92
93 typedef unsigned AXID;
94
95 enum AccessibilityRole {
96     UnknownRole = 1,
97     ButtonRole,
98     RadioButtonRole,
99     CheckBoxRole,
100     SliderRole,
101     TabGroupRole,
102     TextFieldRole,
103     StaticTextRole,
104     TextAreaRole,
105     ScrollAreaRole,
106     PopUpButtonRole,
107     MenuButtonRole,
108     TableRole,
109     ApplicationRole,
110     GroupRole,
111     RadioGroupRole,
112     ListRole,
113     ScrollBarRole,
114     ValueIndicatorRole,
115     ImageRole,
116     MenuBarRole,
117     MenuRole,
118     MenuItemRole,
119     ColumnRole,
120     RowRole,
121     ToolbarRole,
122     BusyIndicatorRole,
123     ProgressIndicatorRole,
124     WindowRole,
125     DrawerRole,
126     SystemWideRole,
127     OutlineRole,
128     IncrementorRole,
129     BrowserRole,
130     ComboBoxRole,
131     SplitGroupRole,
132     SplitterRole,
133     ColorWellRole,
134     GrowAreaRole,
135     SheetRole,
136     HelpTagRole,
137     MatteRole,
138     RulerRole,
139     RulerMarkerRole,
140     LinkRole,
141     DisclosureTriangleRole,
142     GridRole,
143     CellRole, 
144     ColumnHeaderRole,
145     RowHeaderRole,
146     // AppKit includes SortButtonRole but it is misnamed and really a subrole of ButtonRole so we do not include it here.
147
148     // WebCore-specific roles
149     WebCoreLinkRole,
150     ImageMapLinkRole,
151     ImageMapRole,
152     ListMarkerRole,
153     WebAreaRole,
154     HeadingRole,
155     ListBoxRole,
156     ListBoxOptionRole,
157     TableHeaderContainerRole,
158     DefinitionListTermRole,
159     DefinitionListDefinitionRole,
160     AnnotationRole,
161     SliderThumbRole,
162     IgnoredRole,
163     PresentationalRole,
164     TabRole,
165     TabListRole,
166     TabPanelRole,
167     TreeRole,
168     TreeGridRole,
169     TreeItemRole,
170     DirectoryRole,
171     EditableTextRole,
172     ListItemRole,
173     MenuListPopupRole,
174     MenuListOptionRole,
175
176     // ARIA Grouping roles
177     LandmarkApplicationRole,
178     LandmarkBannerRole,
179     LandmarkComplementaryRole,
180     LandmarkContentInfoRole,
181     LandmarkMainRole,
182     LandmarkNavigationRole,
183     LandmarkSearchRole,
184     
185     ApplicationAlertRole,
186     ApplicationAlertDialogRole,
187     ApplicationDialogRole,
188     ApplicationLogRole,
189     ApplicationMarqueeRole,
190     ApplicationStatusRole,
191     ApplicationTimerRole,
192     
193     DocumentRole,
194     DocumentArticleRole,
195     DocumentMathRole,
196     DocumentNoteRole,
197     DocumentRegionRole,
198     
199     UserInterfaceTooltipRole
200 };
201
202 enum AccessibilityOrientation {
203     AccessibilityOrientationVertical,
204     AccessibilityOrientationHorizontal,
205 };
206     
207 enum AccessibilityObjectInclusion {
208     IncludeObject,
209     IgnoreObject,
210     DefaultBehavior,
211 };
212     
213 enum AccessibilityButtonState {
214     ButtonStateOff = 0,
215     ButtonStateOn, 
216     ButtonStateMixed,
217 };
218
219 struct VisiblePositionRange {
220
221     VisiblePosition start;
222     VisiblePosition end;
223
224     VisiblePositionRange() {}
225
226     VisiblePositionRange(const VisiblePosition& s, const VisiblePosition& e)
227         : start(s)
228         , end(e)
229     { }
230
231     bool isNull() const { return start.isNull() || end.isNull(); }
232 };
233
234 struct PlainTextRange {
235         
236     unsigned start;
237     unsigned length;
238     
239     PlainTextRange()
240         : start(0)
241         , length(0)
242     { }
243     
244     PlainTextRange(unsigned s, unsigned l)
245         : start(s)
246         , length(l)
247     { }
248     
249     bool isNull() const { return !start && !length; }
250 };
251
252 class AccessibilityObject : public RefCounted<AccessibilityObject> {
253 protected:
254     AccessibilityObject();
255 public:
256     virtual ~AccessibilityObject();
257     virtual void detach();
258         
259     typedef Vector<RefPtr<AccessibilityObject> > AccessibilityChildrenVector;
260     
261     virtual bool isAccessibilityRenderObject() const { return false; }
262     virtual bool isAccessibilityScrollbar() const { return false; }
263     virtual bool isAccessibilityScrollView() const { return false; }
264     
265     virtual bool isAnchor() const { return false; }
266     virtual bool isAttachment() const { return false; }
267     virtual bool isHeading() const { return false; }
268     virtual bool isLink() const { return false; }
269     virtual bool isImage() const { return false; }
270     virtual bool isNativeImage() const { return false; }
271     virtual bool isImageButton() const { return false; }
272     virtual bool isPasswordField() const { return false; }
273     virtual bool isNativeTextControl() const { return false; }
274     virtual bool isWebArea() const { return false; }
275     virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
276     virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
277     virtual bool isListBox() const { return roleValue() == ListBoxRole; }
278     virtual bool isMediaTimeline() const { return false; }
279     virtual bool isMenuRelated() const { return false; }
280     virtual bool isMenu() const { return false; }
281     virtual bool isMenuBar() const { return false; }
282     virtual bool isMenuButton() const { return false; }
283     virtual bool isMenuItem() const { return false; }
284     virtual bool isFileUploadButton() const { return false; }
285     virtual bool isInputImage() const { return false; }
286     virtual bool isProgressIndicator() const { return false; }
287     virtual bool isSlider() const { return false; }
288     virtual bool isInputSlider() const { return false; }
289     virtual bool isControl() const { return false; }
290     virtual bool isList() const { return false; }
291     virtual bool isAccessibilityTable() const { return false; }
292     virtual bool isDataTable() const { return false; }
293     virtual bool isTableRow() const { return false; }
294     virtual bool isTableColumn() const { return false; }
295     virtual bool isTableCell() const { return false; }
296     virtual bool isFieldset() const { return false; }
297     virtual bool isGroup() const { return false; }
298     virtual bool isARIATreeGridRow() const { return false; }
299     virtual bool isImageMapLink() const { return false; }
300     virtual bool isMenuList() const { return false; }
301     virtual bool isMenuListPopup() const { return false; }
302     virtual bool isMenuListOption() const { return false; }
303     bool isTextControl() const { return roleValue() == TextAreaRole || roleValue() == TextFieldRole; }
304     bool isTabList() const { return roleValue() == TabListRole; }
305     bool isTabItem() const { return roleValue() == TabRole; }
306     bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
307     bool isComboBox() const { return roleValue() == ComboBoxRole; }
308     bool isTree() const { return roleValue() == TreeRole; }
309     bool isTreeItem() const { return roleValue() == TreeItemRole; }
310     bool isScrollbar() const { return roleValue() == ScrollBarRole; }
311     bool isButton() const { return roleValue() == ButtonRole; }
312     bool isListItem() const { return roleValue() == ListItemRole; }
313     bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
314     bool isScrollView() const { return roleValue() == ScrollAreaRole; }
315     
316     virtual bool isChecked() const { return false; }
317     virtual bool isEnabled() const { return false; }
318     virtual bool isSelected() const { return false; }
319     virtual bool isFocused() const { return false; }
320     virtual bool isHovered() const { return false; }
321     virtual bool isIndeterminate() const { return false; }
322     virtual bool isLoaded() const { return false; }
323     virtual bool isMultiSelectable() const { return false; }
324     virtual bool isOffScreen() const { return false; }
325     virtual bool isPressed() const { return false; }
326     virtual bool isReadOnly() const { return false; }
327     virtual bool isVisited() const { return false; }
328     virtual bool isRequired() const { return false; }
329     virtual bool isLinked() const { return false; }
330     virtual bool isExpanded() const { return false; }
331     virtual bool isVisible() const { return true; }
332     virtual bool isCollapsed() const { return false; }
333     virtual void setIsExpanded(bool) { }
334
335     virtual bool canSetFocusAttribute() const { return false; }
336     virtual bool canSetTextRangeAttributes() const { return false; }
337     virtual bool canSetValueAttribute() const { return false; }
338     virtual bool canSetNumericValue() const { return false; }
339     virtual bool canSetSelectedAttribute() const { return false; }
340     virtual bool canSetSelectedChildrenAttribute() const { return false; }
341     virtual bool canSetExpandedAttribute() const { return false; }
342     
343     // A programmatic way to set a name on an AccessibleObject.
344     virtual void setAccessibleName(String&) { }
345     
346     virtual Node* node() const { return 0; }
347     bool accessibilityShouldUseUniqueId() const { return true; }
348     virtual bool accessibilityIsIgnored() const  { return true; }
349
350     virtual int headingLevel() const { return 0; }
351     virtual AccessibilityButtonState checkboxOrRadioValue() const;
352     virtual String valueDescription() const { return String(); }
353     virtual float valueForRange() const { return 0.0f; }
354     virtual float maxValueForRange() const { return 0.0f; }
355     virtual float minValueForRange() const { return 0.0f; }
356     virtual AccessibilityObject* selectedRadioButton() { return 0; }
357     virtual AccessibilityObject* selectedTabItem() { return 0; }    
358     virtual int layoutCount() const { return 0; }
359     virtual double estimatedLoadingProgress() const { return 0; }
360     static bool isARIAControl(AccessibilityRole);
361     static bool isARIAInput(AccessibilityRole);
362     virtual bool supportsARIAOwns() const { return false; }
363     virtual void ariaOwnsElements(AccessibilityChildrenVector&) const { }
364     virtual bool supportsARIAFlowTo() const { return false; }
365     virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
366     virtual bool ariaHasPopup() const { return false; }
367     bool ariaIsMultiline() const;
368     virtual const AtomicString& invalidStatus() const;
369
370     // ARIA drag and drop
371     virtual bool supportsARIADropping() const { return false; }
372     virtual bool supportsARIADragging() const { return false; }
373     virtual bool isARIAGrabbed() { return false; }
374     virtual void setARIAGrabbed(bool) { }
375     virtual void determineARIADropEffects(Vector<String>&) { }
376     
377     // Called on the root AX object to return the deepest available element.
378     virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
379     // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
380     virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
381
382     virtual AccessibilityObject* focusedUIElement() const;
383
384     virtual AccessibilityObject* firstChild() const { return 0; }
385     virtual AccessibilityObject* lastChild() const { return 0; }
386     virtual AccessibilityObject* previousSibling() const { return 0; }
387     virtual AccessibilityObject* nextSibling() const { return 0; }
388     virtual AccessibilityObject* parentObject() const = 0;
389     virtual AccessibilityObject* parentObjectUnignored() const;
390     virtual AccessibilityObject* parentObjectIfExists() const { return 0; }
391     static AccessibilityObject* firstAccessibleObjectFromNode(const Node*);
392
393     virtual AccessibilityObject* observableObject() const { return 0; }
394     virtual void linkedUIElements(AccessibilityChildrenVector&) const { }
395     virtual AccessibilityObject* titleUIElement() const { return 0; }
396     virtual bool exposesTitleUIElement() const { return true; }
397     virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; }
398     virtual AccessibilityObject* scrollBar(AccessibilityOrientation) const { return 0; }
399     
400     virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
401     virtual bool isPresentationalChildOfAriaRole() const { return false; }
402     virtual bool ariaRoleHasPresentationalChildren() const { return false; }
403
404     void setRoleValue(AccessibilityRole role) { m_role = role; }
405     virtual AccessibilityRole roleValue() const { return m_role; }
406     virtual String ariaLabeledByAttribute() const { return String(); }
407     virtual String ariaDescribedByAttribute() const { return String(); }
408     virtual String accessibilityDescription() const { return String(); }
409
410     virtual AXObjectCache* axObjectCache() const;
411     AXID axObjectID() const { return m_id; }
412     void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
413     
414     static AccessibilityObject* anchorElementForNode(Node*);
415     virtual Element* anchorElement() const { return 0; }
416     virtual Element* actionElement() const { return 0; }
417     virtual IntRect boundingBoxRect() const { return IntRect(); }
418     virtual IntRect elementRect() const = 0;
419     virtual IntSize size() const { return elementRect().size(); }
420     virtual IntPoint clickPoint() const;
421
422     virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); }
423     unsigned selectionStart() const { return selectedTextRange().start; }
424     unsigned selectionEnd() const { return selectedTextRange().length; }
425     
426     virtual KURL url() const { return KURL(); }
427     virtual VisibleSelection selection() const { return VisibleSelection(); }
428     virtual String stringValue() const { return String(); }
429     virtual String title() const { return String(); }
430     virtual String helpText() const { return String(); }
431     virtual String textUnderElement() const { return String(); }
432     virtual String text() const { return String(); }
433     virtual int textLength() const { return 0; }
434     virtual String selectedText() const { return String(); }
435     virtual const AtomicString& accessKey() const { return nullAtom; }
436     const String& actionVerb() const;
437     virtual Widget* widget() const { return 0; }
438     virtual Widget* widgetForAttachmentView() const { return 0; }
439     virtual Document* document() const { return 0; }
440     virtual FrameView* topDocumentFrameView() const { return 0; }
441     virtual FrameView* documentFrameView() const;
442     String language() const;
443     virtual unsigned hierarchicalLevel() const { return 0; }
444     const AtomicString& placeholderValue() const;
445     
446     virtual void setFocused(bool) { }
447     virtual void setSelectedText(const String&) { }
448     virtual void setSelectedTextRange(const PlainTextRange&) { }
449     virtual void setValue(const String&) { }
450     virtual void setValue(float) { }
451     virtual void setSelected(bool) { }
452     virtual void setSelectedRows(AccessibilityChildrenVector&) { }
453     
454     virtual void makeRangeVisible(const PlainTextRange&) { }
455     virtual bool press() const;
456     bool performDefaultAction() const { return press(); }
457     
458     virtual AccessibilityOrientation orientation() const;
459     virtual void increment() { }
460     virtual void decrement() { }
461
462     virtual void childrenChanged() { }
463     virtual void contentChanged() { }
464     virtual const AccessibilityChildrenVector& children() { return m_children; }
465     virtual void addChildren() { }
466     virtual bool canHaveChildren() const { return true; }
467     virtual bool hasChildren() const { return m_haveChildren; }
468     virtual void updateChildrenIfNecessary();
469     virtual void selectedChildren(AccessibilityChildrenVector&) { }
470     virtual void visibleChildren(AccessibilityChildrenVector&) { }
471     virtual void tabChildren(AccessibilityChildrenVector&) { }
472     virtual bool shouldFocusActiveDescendant() const { return false; }
473     virtual AccessibilityObject* activeDescendant() const { return 0; }    
474     virtual void handleActiveDescendantChanged() { }
475     virtual void handleAriaExpandedChanged() { }
476     
477     static AccessibilityRole ariaRoleToWebCoreRole(const String&);
478     const AtomicString& getAttribute(const QualifiedName&) const;
479
480     virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
481     virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
482     
483     VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
484     VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
485     VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
486     VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
487     VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
488     VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
489     VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
490     VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
491     VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
492
493     String stringForVisiblePositionRange(const VisiblePositionRange&) const;
494     virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); }
495     int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
496     virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { }
497
498     virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const { return VisiblePosition(); }
499     VisiblePosition nextVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.next(); }
500     VisiblePosition previousVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.previous(); }
501     VisiblePosition nextWordEnd(const VisiblePosition&) const;
502     VisiblePosition previousWordStart(const VisiblePosition&) const;
503     VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
504     VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
505     VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
506     VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
507     VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
508     VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
509     virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const { return VisiblePosition(); }
510     
511     virtual VisiblePosition visiblePositionForIndex(int) const { return VisiblePosition(); }
512     virtual int indexForVisiblePosition(const VisiblePosition&) const { return 0; }
513
514     AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
515     int lineForPosition(const VisiblePosition&) const;
516     PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
517     virtual int index(const VisiblePosition&) const { return -1; }
518
519     virtual PlainTextRange doAXRangeForLine(unsigned) const { return PlainTextRange(); }
520     PlainTextRange doAXRangeForPosition(const IntPoint&) const;
521     virtual PlainTextRange doAXRangeForIndex(unsigned) const { return PlainTextRange(); }
522     PlainTextRange doAXStyleRangeForIndex(unsigned) const;
523
524     virtual String doAXStringForRange(const PlainTextRange&) const { return String(); }
525     virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); }
526     String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&) const;
527
528     unsigned doAXLineForIndex(unsigned);
529
530     virtual String stringValueForMSAA() const { return String(); }
531     virtual String stringRoleForMSAA() const { return String(); }
532     virtual String nameForMSAA() const { return String(); }
533     virtual String descriptionForMSAA() const { return String(); }
534     virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); }
535
536     // Used by an ARIA tree to get all its rows.
537     void ariaTreeRows(AccessibilityChildrenVector&);
538     // Used by an ARIA tree item to get all of its direct rows that it can disclose.
539     void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&);
540     // Used by an ARIA tree item to get only its content, and not its child tree items and groups. 
541     void ariaTreeItemContent(AccessibilityChildrenVector&);
542     
543     // ARIA live-region features.
544     bool supportsARIALiveRegion() const;
545     bool isInsideARIALiveRegion() const;
546     virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; }
547     virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
548     virtual bool ariaLiveRegionAtomic() const { return false; }
549     virtual bool ariaLiveRegionBusy() const { return false; }
550     
551     bool supportsARIAAttributes() const;
552     
553     // CSS3 Speech properties.
554     virtual ESpeak speakProperty() const { return SpeakNormal; }
555     
556 #if HAVE(ACCESSIBILITY)
557 #if PLATFORM(GTK)
558     AccessibilityObjectWrapper* wrapper() const;
559     void setWrapper(AccessibilityObjectWrapper*);
560 #else
561     AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
562     void setWrapper(AccessibilityObjectWrapper* wrapper) 
563     {
564         m_wrapper = wrapper;
565     }
566 #endif
567 #endif
568
569 #if HAVE(ACCESSIBILITY)
570     // a platform-specific method for determining if an attachment is ignored
571     bool accessibilityIgnoreAttachment() const;
572     // gives platforms the opportunity to indicate if and how an object should be included
573     AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const;
574 #else
575     bool accessibilityIgnoreAttachment() const { return true; }
576     AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const { return DefaultBehavior; }
577 #endif
578
579     // allows for an AccessibilityObject to update its render tree or perform
580     // other operations update type operations
581     virtual void updateBackingStore() { }
582     
583 protected:
584     AXID m_id;
585     AccessibilityChildrenVector m_children;
586     mutable bool m_haveChildren;
587     AccessibilityRole m_role;
588     
589     virtual void clearChildren();
590     virtual bool isDetached() const { return true; }
591     
592 #if PLATFORM(GTK)
593     bool allowsTextRanges() const;
594     unsigned getLengthForTextRange() const;
595 #else
596     bool allowsTextRanges() const { return isTextControl(); }
597     unsigned getLengthForTextRange() const { return text().length(); }
598 #endif
599
600 #if PLATFORM(MAC)
601     RetainPtr<AccessibilityObjectWrapper> m_wrapper;
602 #elif PLATFORM(WIN) && !OS(WINCE)
603     COMPtr<AccessibilityObjectWrapper> m_wrapper;
604 #elif PLATFORM(GTK)
605     AtkObject* m_wrapper;
606 #elif PLATFORM(CHROMIUM)
607     RefPtr<AccessibilityObjectWrapper> m_wrapper;
608 #endif
609 };
610
611 } // namespace WebCore
612
613 #endif // AccessibilityObject_h