5fd41af15c12fec3117989e92aaef918102af404
[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 isAnchor() const { return false; }
264     virtual bool isAttachment() const { return false; }
265     virtual bool isHeading() const { return false; }
266     virtual bool isLink() const { return false; }
267     virtual bool isImage() const { return false; }
268     virtual bool isNativeImage() const { return false; }
269     virtual bool isImageButton() const { return false; }
270     virtual bool isPasswordField() const { return false; }
271     virtual bool isNativeTextControl() const { return false; }
272     virtual bool isWebArea() const { return false; }
273     virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
274     virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
275     virtual bool isListBox() const { return roleValue() == ListBoxRole; }
276     virtual bool isMediaTimeline() const { return false; }
277     virtual bool isMenuRelated() const { return false; }
278     virtual bool isMenu() const { return false; }
279     virtual bool isMenuBar() const { return false; }
280     virtual bool isMenuButton() const { return false; }
281     virtual bool isMenuItem() const { return false; }
282     virtual bool isFileUploadButton() const { return false; }
283     virtual bool isInputImage() const { return false; }
284     virtual bool isProgressIndicator() const { return false; }
285     virtual bool isSlider() const { return false; }
286     virtual bool isInputSlider() const { return false; }
287     virtual bool isControl() const { return false; }
288     virtual bool isList() const { return false; }
289     virtual bool isAccessibilityTable() const { return false; }
290     virtual bool isDataTable() const { return false; }
291     virtual bool isTableRow() const { return false; }
292     virtual bool isTableColumn() const { return false; }
293     virtual bool isTableCell() const { return false; }
294     virtual bool isFieldset() const { return false; }
295     virtual bool isGroup() const { return false; }
296     virtual bool isARIATreeGridRow() const { return false; }
297     virtual bool isImageMapLink() const { return false; }
298     virtual bool isMenuList() const { return false; }
299     virtual bool isMenuListPopup() const { return false; }
300     virtual bool isMenuListOption() const { return false; }
301     bool isTextControl() const { return roleValue() == TextAreaRole || roleValue() == TextFieldRole; }
302     bool isTabList() const { return roleValue() == TabListRole; }
303     bool isTabItem() const { return roleValue() == TabRole; }
304     bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
305     bool isComboBox() const { return roleValue() == ComboBoxRole; }
306     bool isTree() const { return roleValue() == TreeRole; }
307     bool isTreeItem() const { return roleValue() == TreeItemRole; }
308     bool isScrollbar() const { return roleValue() == ScrollBarRole; }
309     bool isButton() const { return roleValue() == ButtonRole; }
310     bool isListItem() const { return roleValue() == ListItemRole; }
311     bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
312     
313     virtual bool isChecked() const { return false; }
314     virtual bool isEnabled() const { return false; }
315     virtual bool isSelected() const { return false; }
316     virtual bool isFocused() const { return false; }
317     virtual bool isHovered() const { return false; }
318     virtual bool isIndeterminate() const { return false; }
319     virtual bool isLoaded() const { return false; }
320     virtual bool isMultiSelectable() const { return false; }
321     virtual bool isOffScreen() const { return false; }
322     virtual bool isPressed() const { return false; }
323     virtual bool isReadOnly() const { return false; }
324     virtual bool isVisited() const { return false; }
325     virtual bool isRequired() const { return false; }
326     virtual bool isLinked() const { return false; }
327     virtual bool isExpanded() const { return false; }
328     virtual bool isVisible() const { return true; }
329     virtual bool isCollapsed() const { return false; }
330     virtual void setIsExpanded(bool) { }
331
332     virtual bool canSetFocusAttribute() const { return false; }
333     virtual bool canSetTextRangeAttributes() const { return false; }
334     virtual bool canSetValueAttribute() const { return false; }
335     virtual bool canSetSelectedAttribute() const { return false; }
336     virtual bool canSetSelectedChildrenAttribute() const { return false; }
337     virtual bool canSetExpandedAttribute() const { return false; }
338     
339     // A programmatic way to set a name on an AccessibleObject.
340     virtual void setAccessibleName(String&) { }
341     
342     virtual Node* node() const { return 0; }
343     bool accessibilityShouldUseUniqueId() const { return true; }
344     virtual bool accessibilityIsIgnored() const  { return true; }
345
346     virtual int headingLevel() const { return 0; }
347     virtual AccessibilityButtonState checkboxOrRadioValue() const;
348     virtual String valueDescription() const { return String(); }
349     virtual float valueForRange() const { return 0.0f; }
350     virtual float maxValueForRange() const { return 0.0f; }
351     virtual float minValueForRange() const { return 0.0f; }
352     virtual AccessibilityObject* selectedRadioButton() { return 0; }
353     virtual AccessibilityObject* selectedTabItem() { return 0; }    
354     virtual int layoutCount() const { return 0; }
355     virtual double estimatedLoadingProgress() const { return 0; }
356     static bool isARIAControl(AccessibilityRole);
357     static bool isARIAInput(AccessibilityRole);
358     virtual bool supportsARIAOwns() const { return false; }
359     virtual void ariaOwnsElements(AccessibilityChildrenVector&) const { }
360     virtual bool supportsARIAFlowTo() const { return false; }
361     virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
362     virtual bool ariaHasPopup() const { return false; }
363     bool ariaIsMultiline() const;
364     virtual const AtomicString& invalidStatus() const;
365
366     // ARIA drag and drop
367     virtual bool supportsARIADropping() const { return false; }
368     virtual bool supportsARIADragging() const { return false; }
369     virtual bool isARIAGrabbed() { return false; }
370     virtual void setARIAGrabbed(bool) { }
371     virtual void determineARIADropEffects(Vector<String>&) { }
372     
373     // Called on the root AX object to return the deepest available element.
374     virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
375     // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
376     virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const { return const_cast<AccessibilityObject*>(this); }
377
378     virtual AccessibilityObject* focusedUIElement() const { return 0; }
379
380     virtual AccessibilityObject* firstChild() const { return 0; }
381     virtual AccessibilityObject* lastChild() const { return 0; }
382     virtual AccessibilityObject* previousSibling() const { return 0; }
383     virtual AccessibilityObject* nextSibling() const { return 0; }
384     virtual AccessibilityObject* parentObject() const = 0;
385     virtual AccessibilityObject* parentObjectUnignored() const;
386     virtual AccessibilityObject* parentObjectIfExists() const { return 0; }
387     static AccessibilityObject* firstAccessibleObjectFromNode(const Node*);
388
389     virtual AccessibilityObject* observableObject() const { return 0; }
390     virtual void linkedUIElements(AccessibilityChildrenVector&) const { }
391     virtual AccessibilityObject* titleUIElement() const { return 0; }
392     virtual bool exposesTitleUIElement() const { return true; }
393     virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; }
394
395     virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
396     virtual bool isPresentationalChildOfAriaRole() const { return false; }
397     virtual bool ariaRoleHasPresentationalChildren() const { return false; }
398
399     void setRoleValue(AccessibilityRole role) { m_role = role; }
400     virtual AccessibilityRole roleValue() const { return m_role; }
401     virtual String ariaLabeledByAttribute() const { return String(); }
402     virtual String ariaDescribedByAttribute() const { return String(); }
403     virtual String accessibilityDescription() const { return String(); }
404
405     virtual AXObjectCache* axObjectCache() const { return 0; }
406     AXID axObjectID() const { return m_id; }
407     void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
408     
409     static AccessibilityObject* anchorElementForNode(Node*);
410     virtual Element* anchorElement() const { return 0; }
411     virtual Element* actionElement() const { return 0; }
412     virtual IntRect boundingBoxRect() const { return IntRect(); }
413     virtual IntRect elementRect() const = 0;
414     virtual IntSize size() const = 0;
415     virtual IntPoint clickPoint() const;
416
417     virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); }
418     unsigned selectionStart() const { return selectedTextRange().start; }
419     unsigned selectionEnd() const { return selectedTextRange().length; }
420     
421     virtual KURL url() const { return KURL(); }
422     virtual VisibleSelection selection() const { return VisibleSelection(); }
423     virtual String stringValue() const { return String(); }
424     virtual String title() const { return String(); }
425     virtual String helpText() const { return String(); }
426     virtual String textUnderElement() const { return String(); }
427     virtual String text() const { return String(); }
428     virtual int textLength() const { return 0; }
429     virtual String selectedText() const { return String(); }
430     virtual const AtomicString& accessKey() const { return nullAtom; }
431     const String& actionVerb() const;
432     virtual Widget* widget() const { return 0; }
433     virtual Widget* widgetForAttachmentView() const { return 0; }
434     virtual Document* document() const { return 0; }
435     virtual FrameView* topDocumentFrameView() const { return 0; }
436     virtual FrameView* documentFrameView() const;
437     String language() const;
438     virtual unsigned hierarchicalLevel() const { return 0; }
439     const AtomicString& placeholderValue() const;
440     
441     virtual void setFocused(bool) { }
442     virtual void setSelectedText(const String&) { }
443     virtual void setSelectedTextRange(const PlainTextRange&) { }
444     virtual void setValue(const String&) { }
445     virtual void setSelected(bool) { }
446     virtual void setSelectedRows(AccessibilityChildrenVector&) { }
447     
448     virtual void makeRangeVisible(const PlainTextRange&) { }
449     virtual bool press() const;
450     bool performDefaultAction() const { return press(); }
451     
452     virtual AccessibilityOrientation orientation() const;
453     virtual void increment() { }
454     virtual void decrement() { }
455
456     virtual void childrenChanged() { }
457     virtual void contentChanged() { }
458     virtual const AccessibilityChildrenVector& children() { return m_children; }
459     virtual void addChildren() { }
460     virtual bool canHaveChildren() const { return true; }
461     virtual bool hasChildren() const { return m_haveChildren; }
462     virtual void updateChildrenIfNecessary() { }
463     virtual void selectedChildren(AccessibilityChildrenVector&) { }
464     virtual void visibleChildren(AccessibilityChildrenVector&) { }
465     virtual void tabChildren(AccessibilityChildrenVector&) { }
466     virtual bool shouldFocusActiveDescendant() const { return false; }
467     virtual AccessibilityObject* activeDescendant() const { return 0; }    
468     virtual void handleActiveDescendantChanged() { }
469     virtual void handleAriaExpandedChanged() { }
470     
471     static AccessibilityRole ariaRoleToWebCoreRole(const String&);
472     const AtomicString& getAttribute(const QualifiedName&) const;
473
474     virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
475     virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
476     
477     VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
478     VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
479     VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
480     VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
481     VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
482     VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
483     VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
484     VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
485     VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
486
487     String stringForVisiblePositionRange(const VisiblePositionRange&) const;
488     virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); }
489     int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
490     virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { }
491
492     virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const { return VisiblePosition(); }
493     VisiblePosition nextVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.next(); }
494     VisiblePosition previousVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.previous(); }
495     VisiblePosition nextWordEnd(const VisiblePosition&) const;
496     VisiblePosition previousWordStart(const VisiblePosition&) const;
497     VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
498     VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
499     VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
500     VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
501     VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
502     VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
503     virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const { return VisiblePosition(); }
504     
505     virtual VisiblePosition visiblePositionForIndex(int) const { return VisiblePosition(); }
506     virtual int indexForVisiblePosition(const VisiblePosition&) const { return 0; }
507
508     AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
509     int lineForPosition(const VisiblePosition&) const;
510     PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
511     virtual int index(const VisiblePosition&) const { return -1; }
512
513     virtual PlainTextRange doAXRangeForLine(unsigned) const { return PlainTextRange(); }
514     PlainTextRange doAXRangeForPosition(const IntPoint&) const;
515     virtual PlainTextRange doAXRangeForIndex(unsigned) const { return PlainTextRange(); }
516     PlainTextRange doAXStyleRangeForIndex(unsigned) const;
517
518     virtual String doAXStringForRange(const PlainTextRange&) const { return String(); }
519     virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); }
520     String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&) const;
521
522     unsigned doAXLineForIndex(unsigned);
523
524     virtual String stringValueForMSAA() const { return String(); }
525     virtual String stringRoleForMSAA() const { return String(); }
526     virtual String nameForMSAA() const { return String(); }
527     virtual String descriptionForMSAA() const { return String(); }
528     virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); }
529
530     // Used by an ARIA tree to get all its rows.
531     void ariaTreeRows(AccessibilityChildrenVector&);
532     // Used by an ARIA tree item to get all of its direct rows that it can disclose.
533     void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&);
534     // Used by an ARIA tree item to get only its content, and not its child tree items and groups. 
535     void ariaTreeItemContent(AccessibilityChildrenVector&);
536     
537     // ARIA live-region features.
538     bool supportsARIALiveRegion() const;
539     bool isInsideARIALiveRegion() const;
540     virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; }
541     virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
542     virtual bool ariaLiveRegionAtomic() const { return false; }
543     virtual bool ariaLiveRegionBusy() const { return false; }
544     
545     bool supportsARIAAttributes() const;
546     
547     // CSS3 Speech properties.
548     virtual ESpeak speakProperty() const { return SpeakNormal; }
549     
550 #if HAVE(ACCESSIBILITY)
551 #if PLATFORM(GTK)
552     AccessibilityObjectWrapper* wrapper() const;
553     void setWrapper(AccessibilityObjectWrapper*);
554 #else
555     AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
556     void setWrapper(AccessibilityObjectWrapper* wrapper) 
557     {
558         m_wrapper = wrapper;
559     }
560 #endif
561 #endif
562
563 #if HAVE(ACCESSIBILITY)
564     // a platform-specific method for determining if an attachment is ignored
565     bool accessibilityIgnoreAttachment() const;
566     // gives platforms the opportunity to indicate if and how an object should be included
567     AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const;
568 #else
569     bool accessibilityIgnoreAttachment() const { return true; }
570     AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const { return DefaultBehavior; }
571 #endif
572
573     // allows for an AccessibilityObject to update its render tree or perform
574     // other operations update type operations
575     virtual void updateBackingStore() { }
576     
577 protected:
578     AXID m_id;
579     AccessibilityChildrenVector m_children;
580     mutable bool m_haveChildren;
581     AccessibilityRole m_role;
582     
583     virtual void clearChildren();
584     virtual bool isDetached() const { return true; }
585     
586 #if PLATFORM(GTK)
587     bool allowsTextRanges() const;
588     unsigned getLengthForTextRange() const;
589 #else
590     bool allowsTextRanges() const { return isTextControl(); }
591     unsigned getLengthForTextRange() const { return text().length(); }
592 #endif
593
594 #if PLATFORM(MAC)
595     RetainPtr<AccessibilityObjectWrapper> m_wrapper;
596 #elif PLATFORM(WIN) && !OS(WINCE)
597     COMPtr<AccessibilityObjectWrapper> m_wrapper;
598 #elif PLATFORM(GTK)
599     AtkObject* m_wrapper;
600 #elif PLATFORM(CHROMIUM)
601     RefPtr<AccessibilityObjectWrapper> m_wrapper;
602 #endif
603 };
604
605 } // namespace WebCore
606
607 #endif // AccessibilityObject_h