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