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