~ubuntu-branches/ubuntu/raring/qtwebkit-source/raring-proposed

« back to all changes in this revision

Viewing changes to Source/WebCore/accessibility/AccessibilityObject.h

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-02-18 14:24:18 UTC
  • Revision ID: package-import@ubuntu.com-20130218142418-eon0jmjg3nj438uy
Tags: upstream-2.3
ImportĀ upstreamĀ versionĀ 2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 "FloatQuad.h"
 
34
#include "LayoutRect.h"
 
35
#include "TextIterator.h"
 
36
#include "VisiblePosition.h"
 
37
#include "VisibleSelection.h"
 
38
#include <wtf/Forward.h>
 
39
#include <wtf/RefPtr.h>
 
40
#include <wtf/Vector.h>
 
41
 
 
42
#if PLATFORM(MAC)
 
43
#include <wtf/RetainPtr.h>
 
44
#elif PLATFORM(WIN) && !OS(WINCE)
 
45
#include "AccessibilityObjectWrapperWin.h"
 
46
#include "COMPtr.h"
 
47
#endif
 
48
 
 
49
#if PLATFORM(MAC)
 
50
 
 
51
typedef struct _NSRange NSRange;
 
52
 
 
53
OBJC_CLASS NSArray;
 
54
OBJC_CLASS NSAttributedString;
 
55
OBJC_CLASS NSData;
 
56
OBJC_CLASS NSMutableAttributedString;
 
57
OBJC_CLASS NSString;
 
58
OBJC_CLASS NSValue;
 
59
OBJC_CLASS NSView;
 
60
OBJC_CLASS WebAccessibilityObjectWrapper;
 
61
 
 
62
typedef WebAccessibilityObjectWrapper AccessibilityObjectWrapper;
 
63
 
 
64
#elif PLATFORM(GTK) || PLATFORM(EFL)
 
65
typedef struct _AtkObject AtkObject;
 
66
typedef struct _AtkObject AccessibilityObjectWrapper;
 
67
#elif PLATFORM(CHROMIUM)
 
68
// Chromium does not use a wrapper.
 
69
#else
 
70
class AccessibilityObjectWrapper;
 
71
#endif
 
72
 
 
73
namespace WebCore {
 
74
 
 
75
class AccessibilityObject;
 
76
class AXObjectCache;
 
77
class Element;
 
78
class Frame;
 
79
class FrameView;
 
80
class HTMLAnchorElement;
 
81
class HTMLAreaElement;
 
82
class IntPoint;
 
83
class IntSize;
 
84
class Node;
 
85
class Page;
 
86
class RenderObject;
 
87
class RenderListItem;
 
88
class ScrollableArea;
 
89
class VisibleSelection;
 
90
class Widget;
 
91
 
 
92
typedef unsigned AXID;
 
93
 
 
94
enum AccessibilityRole {
 
95
    AnnotationRole = 1,
 
96
    ApplicationRole,
 
97
    ApplicationAlertRole,
 
98
    ApplicationAlertDialogRole,
 
99
    ApplicationDialogRole,
 
100
    ApplicationLogRole,
 
101
    ApplicationMarqueeRole,
 
102
    ApplicationStatusRole,
 
103
    ApplicationTimerRole, 
 
104
    BrowserRole,
 
105
    BusyIndicatorRole,
 
106
    ButtonRole,
 
107
    CanvasRole,
 
108
    CellRole, 
 
109
    CheckBoxRole,
 
110
    ColorWellRole,
 
111
    ColumnRole,
 
112
    ColumnHeaderRole,
 
113
    ComboBoxRole,
 
114
    DefinitionListTermRole,
 
115
    DefinitionListDefinitionRole,
 
116
    DirectoryRole,
 
117
    DisclosureTriangleRole,
 
118
    DivRole,
 
119
    DocumentRole,
 
120
    DocumentArticleRole,
 
121
    DocumentMathRole,
 
122
    DocumentNoteRole,
 
123
    DocumentRegionRole,            
 
124
    DrawerRole,
 
125
    EditableTextRole,
 
126
    FooterRole,
 
127
    FormRole,
 
128
    GridRole,
 
129
    GroupRole,
 
130
    GrowAreaRole,
 
131
    HeadingRole,
 
132
    HelpTagRole,
 
133
    HorizontalRuleRole,
 
134
    IgnoredRole,
 
135
    ImageRole,
 
136
    ImageMapRole,
 
137
    ImageMapLinkRole,
 
138
    IncrementorRole,
 
139
    LabelRole,
 
140
    LandmarkApplicationRole,
 
141
    LandmarkBannerRole,
 
142
    LandmarkComplementaryRole,
 
143
    LandmarkContentInfoRole,
 
144
    LandmarkMainRole,
 
145
    LandmarkNavigationRole,
 
146
    LandmarkSearchRole,
 
147
    LegendRole,
 
148
    LinkRole,
 
149
    ListRole,
 
150
    ListBoxRole,
 
151
    ListBoxOptionRole,
 
152
    ListItemRole,
 
153
    ListMarkerRole,
 
154
    MathElementRole,
 
155
    MatteRole,
 
156
    MenuRole,
 
157
    MenuBarRole,
 
158
    MenuButtonRole,
 
159
    MenuItemRole,
 
160
    MenuListPopupRole,
 
161
    MenuListOptionRole,
 
162
    OutlineRole,
 
163
    ParagraphRole,
 
164
    PopUpButtonRole,
 
165
    PresentationalRole,
 
166
    ProgressIndicatorRole,
 
167
    RadioButtonRole,
 
168
    RadioGroupRole,
 
169
    RowHeaderRole,
 
170
    RowRole,
 
171
    RulerRole,
 
172
    RulerMarkerRole,
 
173
    ScrollAreaRole,
 
174
    ScrollBarRole,
 
175
    SheetRole,
 
176
    SliderRole,
 
177
    SliderThumbRole,
 
178
    SpinButtonRole,
 
179
    SpinButtonPartRole,
 
180
    SplitGroupRole,
 
181
    SplitterRole,
 
182
    StaticTextRole,
 
183
    SystemWideRole,
 
184
    SVGRootRole,
 
185
    TabGroupRole,
 
186
    TabListRole,
 
187
    TabPanelRole,            
 
188
    TabRole,
 
189
    TableRole,
 
190
    TableHeaderContainerRole,
 
191
    TextAreaRole,
 
192
    TreeRole,
 
193
    TreeGridRole,
 
194
    TreeItemRole,
 
195
    TextFieldRole,
 
196
    ToggleButtonRole,
 
197
    ToolbarRole,
 
198
    UnknownRole,
 
199
    UserInterfaceTooltipRole,
 
200
    ValueIndicatorRole,            
 
201
    WebAreaRole,
 
202
    WebCoreLinkRole,
 
203
    WindowRole,
 
204
};
 
205
 
 
206
enum AccessibilityTextSource {
 
207
    AlternativeText,
 
208
    ChildrenText,
 
209
    SummaryText,
 
210
    HelpText,
 
211
    VisibleText,
 
212
    TitleTagText,
 
213
    PlaceholderText,
 
214
    LabelByElementText,
 
215
};
 
216
    
 
217
struct AccessibilityText {
 
218
    String text;
 
219
    AccessibilityTextSource textSource;
 
220
    Vector<RefPtr<AccessibilityObject> > textElements;
 
221
    
 
222
    AccessibilityText(const String& t, const AccessibilityTextSource& s)
 
223
    : text(t)
 
224
    , textSource(s)
 
225
    { }
 
226
 
 
227
    AccessibilityText(const String& t, const AccessibilityTextSource& s, const Vector<RefPtr<AccessibilityObject> > elements)
 
228
    : text(t)
 
229
    , textSource(s)
 
230
    , textElements(elements)
 
231
    { }
 
232
 
 
233
    AccessibilityText(const String& t, const AccessibilityTextSource& s, const RefPtr<AccessibilityObject> element)
 
234
    : text(t)
 
235
    , textSource(s)
 
236
    {
 
237
        textElements.append(element);
 
238
    }
 
239
};
 
240
    
 
241
enum AccessibilityOrientation {
 
242
    AccessibilityOrientationVertical,
 
243
    AccessibilityOrientationHorizontal,
 
244
};
 
245
    
 
246
enum AccessibilityObjectInclusion {
 
247
    IncludeObject,
 
248
    IgnoreObject,
 
249
    DefaultBehavior,
 
250
};
 
251
    
 
252
enum AccessibilityButtonState {
 
253
    ButtonStateOff = 0,
 
254
    ButtonStateOn, 
 
255
    ButtonStateMixed,
 
256
};
 
257
    
 
258
enum AccessibilitySortDirection {
 
259
    SortDirectionNone,
 
260
    SortDirectionAscending,
 
261
    SortDirectionDescending,
 
262
};
 
263
 
 
264
enum AccessibilitySearchDirection {
 
265
    SearchDirectionNext = 1,
 
266
    SearchDirectionPrevious
 
267
};
 
268
 
 
269
enum AccessibilitySearchKey {
 
270
    AnyTypeSearchKey = 1,
 
271
    BlockquoteSameLevelSearchKey,
 
272
    BlockquoteSearchKey,
 
273
    BoldFontSearchKey,
 
274
    ButtonSearchKey,
 
275
    CheckBoxSearchKey,
 
276
    ControlSearchKey,
 
277
    DifferentTypeSearchKey,
 
278
    FontChangeSearchKey,
 
279
    FontColorChangeSearchKey,
 
280
    FrameSearchKey,
 
281
    GraphicSearchKey,
 
282
    HeadingLevel1SearchKey,
 
283
    HeadingLevel2SearchKey,
 
284
    HeadingLevel3SearchKey,
 
285
    HeadingLevel4SearchKey,
 
286
    HeadingLevel5SearchKey,
 
287
    HeadingLevel6SearchKey,
 
288
    HeadingSameLevelSearchKey,
 
289
    HeadingSearchKey,
 
290
    HighlightedSearchKey,
 
291
    ItalicFontSearchKey,
 
292
    LandmarkSearchKey,
 
293
    LinkSearchKey,
 
294
    ListSearchKey,
 
295
    LiveRegionSearchKey,
 
296
    MisspelledWordSearchKey,
 
297
    PlainTextSearchKey,
 
298
    RadioGroupSearchKey,
 
299
    SameTypeSearchKey,
 
300
    StaticTextSearchKey,
 
301
    StyleChangeSearchKey,
 
302
    TableSameLevelSearchKey,
 
303
    TableSearchKey,
 
304
    TextFieldSearchKey,
 
305
    UnderlineSearchKey,
 
306
    UnvisitedLinkSearchKey,
 
307
    VisitedLinkSearchKey
 
308
};
 
309
 
 
310
struct AccessibilitySearchCriteria {
 
311
    AccessibilityObject* startObject;
 
312
    AccessibilitySearchDirection searchDirection;
 
313
    AccessibilitySearchKey searchKey;
 
314
    String* searchText;
 
315
    unsigned resultsLimit;
 
316
};
 
317
 
 
318
struct VisiblePositionRange {
 
319
 
 
320
    VisiblePosition start;
 
321
    VisiblePosition end;
 
322
 
 
323
    VisiblePositionRange() {}
 
324
 
 
325
    VisiblePositionRange(const VisiblePosition& s, const VisiblePosition& e)
 
326
        : start(s)
 
327
        , end(e)
 
328
    { }
 
329
 
 
330
    bool isNull() const { return start.isNull() || end.isNull(); }
 
331
};
 
332
 
 
333
struct PlainTextRange {
 
334
        
 
335
    unsigned start;
 
336
    unsigned length;
 
337
    
 
338
    PlainTextRange()
 
339
        : start(0)
 
340
        , length(0)
 
341
    { }
 
342
    
 
343
    PlainTextRange(unsigned s, unsigned l)
 
344
        : start(s)
 
345
        , length(l)
 
346
    { }
 
347
    
 
348
    bool isNull() const { return !start && !length; }
 
349
};
 
350
 
 
351
class AccessibilityObject : public RefCounted<AccessibilityObject> {
 
352
protected:
 
353
    AccessibilityObject();
 
354
    
 
355
public:
 
356
    virtual ~AccessibilityObject();
 
357
    virtual void detach();
 
358
    virtual bool isDetached() const;
 
359
 
 
360
    typedef Vector<RefPtr<AccessibilityObject> > AccessibilityChildrenVector;
 
361
    
 
362
    virtual bool isAccessibilityNodeObject() const { return false; }    
 
363
    virtual bool isAccessibilityRenderObject() const { return false; }
 
364
    virtual bool isAccessibilityScrollbar() const { return false; }
 
365
    virtual bool isAccessibilityScrollView() const { return false; }
 
366
    virtual bool isAccessibilitySVGRoot() const { return false; }
 
367
 
 
368
    bool accessibilityObjectContainsText(String *) const;
 
369
    
 
370
    virtual bool isAnchor() const { return false; }
 
371
    virtual bool isAttachment() const { return false; }
 
372
    virtual bool isHeading() const { return false; }
 
373
    virtual bool isLink() const { return false; }
 
374
    virtual bool isImage() const { return false; }
 
375
    virtual bool isNativeImage() const { return false; }
 
376
    virtual bool isImageButton() const { return false; }
 
377
    virtual bool isPasswordField() const { return false; }
 
378
    virtual bool isNativeTextControl() const { return false; }
 
379
    virtual bool isSearchField() const { return false; }
 
380
    virtual bool isWebArea() const { return false; }
 
381
    virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
 
382
    virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
 
383
    virtual bool isListBox() const { return roleValue() == ListBoxRole; }
 
384
    virtual bool isMediaTimeline() const { return false; }
 
385
    virtual bool isMenuRelated() const { return false; }
 
386
    virtual bool isMenu() const { return false; }
 
387
    virtual bool isMenuBar() const { return false; }
 
388
    virtual bool isMenuButton() const { return false; }
 
389
    virtual bool isMenuItem() const { return false; }
 
390
    virtual bool isFileUploadButton() const { return false; }
 
391
    virtual bool isInputImage() const { return false; }
 
392
    virtual bool isProgressIndicator() const { return false; }
 
393
    virtual bool isSlider() const { return false; }
 
394
    virtual bool isInputSlider() const { return false; }
 
395
    virtual bool isControl() const { return false; }
 
396
    virtual bool isList() const { return false; }
 
397
    virtual bool isAccessibilityTable() const { return false; }
 
398
    virtual bool isDataTable() const { return false; }
 
399
    virtual bool isTableRow() const { return false; }
 
400
    virtual bool isTableColumn() const { return false; }
 
401
    virtual bool isTableCell() const { return false; }
 
402
    virtual bool isFieldset() const { return false; }
 
403
    virtual bool isGroup() const { return false; }
 
404
    virtual bool isARIATreeGridRow() const { return false; }
 
405
    virtual bool isImageMapLink() const { return false; }
 
406
    virtual bool isMenuList() const { return false; }
 
407
    virtual bool isMenuListPopup() const { return false; }
 
408
    virtual bool isMenuListOption() const { return false; }
 
409
    virtual bool isSpinButton() const { return roleValue() == SpinButtonRole; }
 
410
    virtual bool isSpinButtonPart() const { return false; }
 
411
    virtual bool isMockObject() const { return false; }
 
412
    virtual bool isMediaControlLabel() const { return false; }
 
413
    bool isTextControl() const { return roleValue() == TextAreaRole || roleValue() == TextFieldRole; }
 
414
    bool isARIATextControl() const;
 
415
    bool isTabList() const { return roleValue() == TabListRole; }
 
416
    bool isTabItem() const { return roleValue() == TabRole; }
 
417
    bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
 
418
    bool isComboBox() const { return roleValue() == ComboBoxRole; }
 
419
    bool isTree() const { return roleValue() == TreeRole; }
 
420
    bool isTreeItem() const { return roleValue() == TreeItemRole; }
 
421
    bool isScrollbar() const { return roleValue() == ScrollBarRole; }
 
422
    bool isButton() const;
 
423
    bool isListItem() const { return roleValue() == ListItemRole; }
 
424
    bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
 
425
    bool isScrollView() const { return roleValue() == ScrollAreaRole; }
 
426
    bool isCanvas() const { return roleValue() == CanvasRole; }
 
427
    bool isBlockquote() const;
 
428
    bool isLandmark() const;
 
429
    
 
430
    virtual bool isChecked() const { return false; }
 
431
    virtual bool isEnabled() const { return false; }
 
432
    virtual bool isSelected() const { return false; }
 
433
    virtual bool isFocused() const { return false; }
 
434
    virtual bool isHovered() const { return false; }
 
435
    virtual bool isIndeterminate() const { return false; }
 
436
    virtual bool isLoaded() const { return false; }
 
437
    virtual bool isMultiSelectable() const { return false; }
 
438
    virtual bool isOffScreen() const { return false; }
 
439
    virtual bool isPressed() const { return false; }
 
440
    virtual bool isReadOnly() const { return false; }
 
441
    virtual bool isUnvisited() const { return false; }
 
442
    virtual bool isVisited() const { return false; }
 
443
    virtual bool isRequired() const { return false; }
 
444
    virtual bool isLinked() const { return false; }
 
445
    virtual bool isExpanded() const;
 
446
    virtual bool isVisible() const { return true; }
 
447
    virtual bool isCollapsed() const { return false; }
 
448
    virtual void setIsExpanded(bool) { }
 
449
 
 
450
    // In a multi-select list, many items can be selected but only one is active at a time.
 
451
    virtual bool isSelectedOptionActive() const { return false; }
 
452
 
 
453
    virtual bool hasBoldFont() const { return false; }
 
454
    virtual bool hasItalicFont() const { return false; }
 
455
    bool hasMisspelling() const;
 
456
    virtual bool hasPlainText() const { return false; }
 
457
    virtual bool hasSameFont(RenderObject*) const { return false; }
 
458
    virtual bool hasSameFontColor(RenderObject*) const { return false; }
 
459
    virtual bool hasSameStyle(RenderObject*) const { return false; }
 
460
    bool hasStaticText() const { return roleValue() == StaticTextRole; }
 
461
    virtual bool hasUnderline() const { return false; }
 
462
    bool hasHighlighting() const;
 
463
 
 
464
    virtual bool canSetFocusAttribute() const { return false; }
 
465
    virtual bool canSetTextRangeAttributes() const { return false; }
 
466
    virtual bool canSetValueAttribute() const { return false; }
 
467
    virtual bool canSetNumericValue() const { return false; }
 
468
    virtual bool canSetSelectedAttribute() const { return false; }
 
469
    virtual bool canSetSelectedChildrenAttribute() const { return false; }
 
470
    virtual bool canSetExpandedAttribute() const { return false; }
 
471
    
 
472
    virtual Node* node() const { return 0; }
 
473
    virtual RenderObject* renderer() const { return 0; }
 
474
    virtual bool accessibilityIsIgnored() const  { return true; }
 
475
 
 
476
    int blockquoteLevel() const;
 
477
    virtual int headingLevel() const { return 0; }
 
478
    virtual int tableLevel() const { return 0; }
 
479
    virtual AccessibilityButtonState checkboxOrRadioValue() const;
 
480
    virtual String valueDescription() const { return String(); }
 
481
    virtual float valueForRange() const { return 0.0f; }
 
482
    virtual float maxValueForRange() const { return 0.0f; }
 
483
    virtual float minValueForRange() const { return 0.0f; }
 
484
    virtual float stepValueForRange() const { return 0.0f; }
 
485
    virtual AccessibilityObject* selectedRadioButton() { return 0; }
 
486
    virtual AccessibilityObject* selectedTabItem() { return 0; }    
 
487
    virtual int layoutCount() const { return 0; }
 
488
    virtual double estimatedLoadingProgress() const { return 0; }
 
489
    static bool isARIAControl(AccessibilityRole);
 
490
    static bool isARIAInput(AccessibilityRole);
 
491
    virtual bool supportsARIAOwns() const { return false; }
 
492
    virtual void ariaOwnsElements(AccessibilityChildrenVector&) const { }
 
493
    virtual bool supportsARIAFlowTo() const { return false; }
 
494
    virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
 
495
    virtual bool ariaHasPopup() const { return false; }
 
496
    virtual bool ariaPressedIsPresent() const;
 
497
    bool ariaIsMultiline() const;
 
498
    virtual const AtomicString& invalidStatus() const;
 
499
    bool supportsARIAExpanded() const;
 
500
    AccessibilitySortDirection sortDirection() const;
 
501
    virtual bool canvasHasFallbackContent() const { return false; }
 
502
    bool supportsRangeValue() const;
 
503
    
 
504
    // ARIA drag and drop
 
505
    virtual bool supportsARIADropping() const { return false; }
 
506
    virtual bool supportsARIADragging() const { return false; }
 
507
    virtual bool isARIAGrabbed() { return false; }
 
508
    virtual void setARIAGrabbed(bool) { }
 
509
    virtual void determineARIADropEffects(Vector<String>&) { }
 
510
    
 
511
    // Called on the root AX object to return the deepest available element.
 
512
    virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
 
513
    // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
 
514
    virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
 
515
 
 
516
    virtual AccessibilityObject* focusedUIElement() const;
 
517
 
 
518
    virtual AccessibilityObject* firstChild() const { return 0; }
 
519
    virtual AccessibilityObject* lastChild() const { return 0; }
 
520
    virtual AccessibilityObject* previousSibling() const { return 0; }
 
521
    virtual AccessibilityObject* nextSibling() const { return 0; }
 
522
    virtual AccessibilityObject* parentObject() const = 0;
 
523
    virtual AccessibilityObject* parentObjectUnignored() const;
 
524
    virtual AccessibilityObject* parentObjectIfExists() const { return 0; }
 
525
    static AccessibilityObject* firstAccessibleObjectFromNode(const Node*);
 
526
    void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
 
527
 
 
528
    virtual AccessibilityObject* observableObject() const { return 0; }
 
529
    virtual void linkedUIElements(AccessibilityChildrenVector&) const { }
 
530
    virtual AccessibilityObject* titleUIElement() const { return 0; }
 
531
    virtual bool exposesTitleUIElement() const { return true; }
 
532
    virtual AccessibilityObject* correspondingLabelForControlElement() const { return 0; }
 
533
    virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; }
 
534
    virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return 0; }
 
535
    
 
536
    virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
 
537
    virtual bool isPresentationalChildOfAriaRole() const { return false; }
 
538
    virtual bool ariaRoleHasPresentationalChildren() const { return false; }
 
539
 
 
540
    // Accessibility Text
 
541
    virtual void accessibilityText(Vector<AccessibilityText>&) { };
 
542
 
 
543
    // A programmatic way to set a name on an AccessibleObject.
 
544
    virtual void setAccessibleName(const AtomicString&) { }
 
545
 
 
546
    // Accessibility Text - (To be deprecated).
 
547
    virtual String accessibilityDescription() const { return String(); }
 
548
    virtual String title() const { return String(); }
 
549
    virtual String helpText() const { return String(); }
 
550
 
 
551
    // Methods for determining accessibility text.
 
552
    virtual String stringValue() const { return String(); }
 
553
    virtual String textUnderElement() const { return String(); }
 
554
    virtual String text() const { return String(); }
 
555
    virtual int textLength() const { return 0; }
 
556
    virtual String ariaLabeledByAttribute() const { return String(); }
 
557
    virtual String ariaDescribedByAttribute() const { return String(); }
 
558
    const AtomicString& placeholderValue() const;
 
559
 
 
560
    void setRoleValue(AccessibilityRole role) { m_role = role; }
 
561
    virtual AccessibilityRole roleValue() const { return m_role; }
 
562
 
 
563
    virtual AXObjectCache* axObjectCache() const;
 
564
    AXID axObjectID() const { return m_id; }
 
565
    void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
 
566
    
 
567
    static AccessibilityObject* anchorElementForNode(Node*);
 
568
    virtual Element* anchorElement() const { return 0; }
 
569
    virtual Element* actionElement() const { return 0; }
 
570
    virtual LayoutRect boundingBoxRect() const { return LayoutRect(); }
 
571
    IntRect pixelSnappedBoundingBoxRect() const { return pixelSnappedIntRect(boundingBoxRect()); }
 
572
    virtual LayoutRect elementRect() const = 0;
 
573
    IntRect pixelSnappedElementRect() const { return pixelSnappedIntRect(elementRect()); }
 
574
    LayoutSize size() const { return elementRect().size(); }
 
575
    IntSize pixelSnappedSize() const { return elementRect().pixelSnappedSize(); }
 
576
    virtual IntPoint clickPoint();
 
577
    static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&);
 
578
    
 
579
    TextIteratorBehavior textIteratorBehaviorForTextRange() const;
 
580
    virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); }
 
581
    unsigned selectionStart() const { return selectedTextRange().start; }
 
582
    unsigned selectionEnd() const { return selectedTextRange().length; }
 
583
    
 
584
    virtual KURL url() const { return KURL(); }
 
585
    virtual VisibleSelection selection() const { return VisibleSelection(); }
 
586
    virtual String selectedText() const { return String(); }
 
587
    virtual const AtomicString& accessKey() const { return nullAtom; }
 
588
    const String& actionVerb() const;
 
589
    virtual Widget* widget() const { return 0; }
 
590
    virtual Widget* widgetForAttachmentView() const { return 0; }
 
591
    Page* page() const;
 
592
    virtual Document* document() const;
 
593
    virtual FrameView* topDocumentFrameView() const { return 0; }
 
594
    virtual FrameView* documentFrameView() const;
 
595
    String language() const;
 
596
    virtual unsigned hierarchicalLevel() const { return 0; }
 
597
    
 
598
    virtual void setFocused(bool) { }
 
599
    virtual void setSelectedText(const String&) { }
 
600
    virtual void setSelectedTextRange(const PlainTextRange&) { }
 
601
    virtual void setValue(const String&) { }
 
602
    virtual void setValue(float) { }
 
603
    virtual void setSelected(bool) { }
 
604
    virtual void setSelectedRows(AccessibilityChildrenVector&) { }
 
605
    
 
606
    virtual void makeRangeVisible(const PlainTextRange&) { }
 
607
    virtual bool press() const;
 
608
    bool performDefaultAction() const { return press(); }
 
609
    
 
610
    virtual AccessibilityOrientation orientation() const;
 
611
    virtual void increment() { }
 
612
    virtual void decrement() { }
 
613
 
 
614
    virtual void childrenChanged() { }
 
615
    virtual void textChanged() { }
 
616
    virtual void updateAccessibilityRole() { }
 
617
    const AccessibilityChildrenVector& children();
 
618
    virtual void addChildren() { }
 
619
    virtual void addChild(AccessibilityObject*) { }
 
620
    virtual void insertChild(AccessibilityObject*, unsigned) { }
 
621
    
 
622
    virtual bool canHaveChildren() const { return true; }
 
623
    virtual bool hasChildren() const { return m_haveChildren; }
 
624
    virtual void updateChildrenIfNecessary();
 
625
    virtual void setNeedsToUpdateChildren() { }
 
626
    virtual void clearChildren();
 
627
#if PLATFORM(MAC)
 
628
    virtual void detachFromParent();
 
629
#else
 
630
    virtual void detachFromParent() { }
 
631
#endif
 
632
 
 
633
    virtual void selectedChildren(AccessibilityChildrenVector&) { }
 
634
    virtual void visibleChildren(AccessibilityChildrenVector&) { }
 
635
    virtual void tabChildren(AccessibilityChildrenVector&) { }
 
636
    virtual bool shouldFocusActiveDescendant() const { return false; }
 
637
    virtual AccessibilityObject* activeDescendant() const { return 0; }    
 
638
    virtual void handleActiveDescendantChanged() { }
 
639
    virtual void handleAriaExpandedChanged() { }
 
640
    bool isDescendantOfObject(const AccessibilityObject*) const;
 
641
    bool isAncestorOfObject(const AccessibilityObject*) const;
 
642
    AccessibilityObject* firstAnonymousBlockChild() const;
 
643
    
 
644
    static AccessibilityRole ariaRoleToWebCoreRole(const String&);
 
645
    bool hasAttribute(const QualifiedName&) const;
 
646
    const AtomicString& getAttribute(const QualifiedName&) const;
 
647
 
 
648
    virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
 
649
    virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
 
650
    
 
651
    VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
 
652
    VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
 
653
    VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
 
654
    VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
 
655
    VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
 
656
    VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
 
657
    VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
 
658
    VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
 
659
    VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
 
660
 
 
661
    String stringForVisiblePositionRange(const VisiblePositionRange&) const;
 
662
    virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); }
 
663
    int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
 
664
    virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { }
 
665
 
 
666
    virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const { return VisiblePosition(); }
 
667
    VisiblePosition nextVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.next(); }
 
668
    VisiblePosition previousVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.previous(); }
 
669
    VisiblePosition nextWordEnd(const VisiblePosition&) const;
 
670
    VisiblePosition previousWordStart(const VisiblePosition&) const;
 
671
    VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
 
672
    VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
 
673
    VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
 
674
    VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
 
675
    VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
 
676
    VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
 
677
    virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const { return VisiblePosition(); }
 
678
    
 
679
    virtual VisiblePosition visiblePositionForIndex(int) const { return VisiblePosition(); }
 
680
    virtual int indexForVisiblePosition(const VisiblePosition&) const { return 0; }
 
681
 
 
682
    AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
 
683
    int lineForPosition(const VisiblePosition&) const;
 
684
    PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
 
685
    virtual int index(const VisiblePosition&) const { return -1; }
 
686
 
 
687
    virtual void lineBreaks(Vector<int>&) const { }
 
688
    virtual PlainTextRange doAXRangeForLine(unsigned) const { return PlainTextRange(); }
 
689
    PlainTextRange doAXRangeForPosition(const IntPoint&) const;
 
690
    virtual PlainTextRange doAXRangeForIndex(unsigned) const { return PlainTextRange(); }
 
691
    PlainTextRange doAXStyleRangeForIndex(unsigned) const;
 
692
 
 
693
    virtual String doAXStringForRange(const PlainTextRange&) const { return String(); }
 
694
    virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); }
 
695
    String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&) const;
 
696
 
 
697
    unsigned doAXLineForIndex(unsigned);
 
698
 
 
699
    virtual String stringValueForMSAA() const { return String(); }
 
700
    virtual String stringRoleForMSAA() const { return String(); }
 
701
    virtual String nameForMSAA() const { return String(); }
 
702
    virtual String descriptionForMSAA() const { return String(); }
 
703
    virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); }
 
704
 
 
705
    virtual String passwordFieldValue() const { return String(); }
 
706
 
 
707
    // Used by an ARIA tree to get all its rows.
 
708
    void ariaTreeRows(AccessibilityChildrenVector&);
 
709
    // Used by an ARIA tree item to get all of its direct rows that it can disclose.
 
710
    void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&);
 
711
    // Used by an ARIA tree item to get only its content, and not its child tree items and groups. 
 
712
    void ariaTreeItemContent(AccessibilityChildrenVector&);
 
713
    
 
714
    // ARIA live-region features.
 
715
    bool supportsARIALiveRegion() const;
 
716
    bool isInsideARIALiveRegion() const;
 
717
    virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; }
 
718
    virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
 
719
    virtual bool ariaLiveRegionAtomic() const { return false; }
 
720
    virtual bool ariaLiveRegionBusy() const { return false; }
 
721
    
 
722
    bool supportsARIAAttributes() const;
 
723
    
 
724
    // CSS3 Speech properties.
 
725
    virtual ESpeak speakProperty() const { return SpeakNormal; }
 
726
 
 
727
    // Make this object visible by scrolling as many nested scrollable views as needed.
 
728
    virtual void scrollToMakeVisible() const;
 
729
    // Same, but if the whole object can't be made visible, try for this subrect, in local coordinates.
 
730
    virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const;
 
731
    // Scroll this object to a given point in global coordinates of the top-level window.
 
732
    virtual void scrollToGlobalPoint(const IntPoint&) const;
 
733
 
 
734
    bool cachedIsIgnoredValue();
 
735
    void setCachedIsIgnoredValue(bool);
 
736
 
 
737
    // Fires a children changed notification on the parent if the isIgnored value changed.
 
738
    void notifyIfIgnoredValueChanged();
 
739
 
 
740
    // All math elements return true for isMathElement().
 
741
    virtual bool isMathElement() const { return false; }
 
742
    virtual bool isMathFraction() const { return false; }
 
743
    virtual bool isMathFenced() const { return false; }
 
744
    virtual bool isMathSubscriptSuperscript() const { return false; }
 
745
    virtual bool isMathRow() const { return false; }
 
746
    virtual bool isMathUnderOver() const { return false; }
 
747
    virtual bool isMathRoot() const { return false; }
 
748
    virtual bool isMathSquareRoot() const { return false; }
 
749
    virtual bool isMathText() const { return false; }
 
750
    virtual bool isMathNumber() const { return false; }
 
751
    virtual bool isMathOperator() const { return false; }
 
752
    virtual bool isMathFenceOperator() const { return false; }
 
753
    virtual bool isMathSeparatorOperator() const { return false; }
 
754
    virtual bool isMathIdentifier() const { return false; }
 
755
    virtual bool isMathTable() const { return false; }
 
756
    virtual bool isMathTableRow() const { return false; }
 
757
    virtual bool isMathTableCell() const { return false; }
 
758
    
 
759
    // Root components.
 
760
    virtual AccessibilityObject* mathRadicandObject() { return 0; }
 
761
    virtual AccessibilityObject* mathRootIndexObject() { return 0; }
 
762
    
 
763
    // Under over components.
 
764
    virtual AccessibilityObject* mathUnderObject() { return 0; }
 
765
    virtual AccessibilityObject* mathOverObject() { return 0; }
 
766
 
 
767
    // Fraction components.
 
768
    virtual AccessibilityObject* mathNumeratorObject() { return 0; }
 
769
    virtual AccessibilityObject* mathDenominatorObject() { return 0; }
 
770
 
 
771
    // Subscript/superscript components.
 
772
    virtual AccessibilityObject* mathBaseObject() { return 0; }
 
773
    virtual AccessibilityObject* mathSubscriptObject() { return 0; }
 
774
    virtual AccessibilityObject* mathSuperscriptObject() { return 0; }
 
775
    
 
776
    // Fenced components.
 
777
    virtual String mathFencedOpenString() const { return String(); }
 
778
    virtual String mathFencedCloseString() const { return String(); }
 
779
    
 
780
#if HAVE(ACCESSIBILITY)
 
781
#if PLATFORM(GTK) || PLATFORM(EFL)
 
782
    AccessibilityObjectWrapper* wrapper() const;
 
783
    void setWrapper(AccessibilityObjectWrapper*);
 
784
#elif !PLATFORM(CHROMIUM)
 
785
    AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
 
786
    void setWrapper(AccessibilityObjectWrapper* wrapper) 
 
787
    {
 
788
        m_wrapper = wrapper;
 
789
    }
 
790
#endif
 
791
#endif
 
792
    
 
793
#if PLATFORM(MAC)
 
794
    void overrideAttachmentParent(AccessibilityObject* parent);
 
795
#else
 
796
    void overrideAttachmentParent(AccessibilityObject*) { }
 
797
#endif
 
798
    
 
799
#if HAVE(ACCESSIBILITY)
 
800
    // a platform-specific method for determining if an attachment is ignored
 
801
    bool accessibilityIgnoreAttachment() const;
 
802
    // gives platforms the opportunity to indicate if and how an object should be included
 
803
    AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const;
 
804
#else
 
805
    bool accessibilityIgnoreAttachment() const { return true; }
 
806
    AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const { return DefaultBehavior; }
 
807
#endif
 
808
 
 
809
    // allows for an AccessibilityObject to update its render tree or perform
 
810
    // other operations update type operations
 
811
    void updateBackingStore();
 
812
    
 
813
protected:
 
814
    AXID m_id;
 
815
    AccessibilityChildrenVector m_children;
 
816
    mutable bool m_haveChildren;
 
817
    AccessibilityRole m_role;
 
818
    AccessibilityObjectInclusion m_cachedIsIgnoredValue;
 
819
    
 
820
    // If this object itself scrolls, return its ScrollableArea.
 
821
    virtual ScrollableArea* getScrollableAreaIfScrollable() const { return 0; }
 
822
    virtual void scrollTo(const IntPoint&) const { }
 
823
 
 
824
    static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
 
825
    static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
 
826
    static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
 
827
    virtual AccessibilityRole buttonRoleType() const;
 
828
    
 
829
#if PLATFORM(GTK) || PLATFORM(EFL)
 
830
    bool allowsTextRanges() const;
 
831
    unsigned getLengthForTextRange() const;
 
832
#else
 
833
    bool allowsTextRanges() const { return isTextControl(); }
 
834
    unsigned getLengthForTextRange() const { return text().length(); }
 
835
#endif
 
836
 
 
837
#if PLATFORM(MAC)
 
838
    RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
 
839
#elif PLATFORM(WIN) && !OS(WINCE)
 
840
    COMPtr<AccessibilityObjectWrapper> m_wrapper;
 
841
#elif PLATFORM(GTK) || PLATFORM(EFL)
 
842
    AtkObject* m_wrapper;
 
843
#elif PLATFORM(CHROMIUM)
 
844
    bool m_detached;
 
845
#endif
 
846
};
 
847
 
 
848
#if !HAVE(ACCESSIBILITY)
 
849
inline const AccessibilityObject::AccessibilityChildrenVector& AccessibilityObject::children() { return m_children; }
 
850
inline const String& AccessibilityObject::actionVerb() const { return emptyString(); }
 
851
inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const { return -1; }
 
852
inline void AccessibilityObject::updateBackingStore() { }
 
853
#endif
 
854
 
 
855
} // namespace WebCore
 
856
 
 
857
#endif // AccessibilityObject_h