2 * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nuanti Ltd.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
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.
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.
30 #ifndef AccessibilityObject_h
31 #define AccessibilityObject_h
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>
43 #include <wtf/RetainPtr.h>
44 #elif PLATFORM(WIN) && !OS(WINCE)
45 #include "AccessibilityObjectWrapperWin.h"
51 typedef struct _NSRange NSRange;
54 OBJC_CLASS NSAttributedString;
56 OBJC_CLASS NSMutableAttributedString;
60 OBJC_CLASS WebAccessibilityObjectWrapper;
62 typedef WebAccessibilityObjectWrapper AccessibilityObjectWrapper;
64 #elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
65 typedef struct _AtkObject AtkObject;
66 typedef struct _AtkObject AccessibilityObjectWrapper;
67 #elif PLATFORM(CHROMIUM)
68 // Chromium does not use a wrapper.
70 class AccessibilityObjectWrapper;
75 class AccessibilityObject;
80 class HTMLAnchorElement;
81 class HTMLAreaElement;
89 class VisibleSelection;
92 typedef unsigned AXID;
94 enum AccessibilityRole {
98 ApplicationAlertDialogRole,
99 ApplicationDialogRole,
101 ApplicationMarqueeRole,
102 ApplicationStatusRole,
103 ApplicationTimerRole,
114 DefinitionListTermRole,
115 DefinitionListDefinitionRole,
117 DisclosureTriangleRole,
140 LandmarkApplicationRole,
142 LandmarkComplementaryRole,
143 LandmarkContentInfoRole,
145 LandmarkNavigationRole,
166 ProgressIndicatorRole,
191 TableHeaderContainerRole,
200 UserInterfaceTooltipRole,
207 enum AccessibilityTextSource {
218 struct AccessibilityText {
220 AccessibilityTextSource textSource;
221 Vector<RefPtr<AccessibilityObject> > textElements;
223 AccessibilityText(const String& t, const AccessibilityTextSource& s)
228 AccessibilityText(const String& t, const AccessibilityTextSource& s, const Vector<RefPtr<AccessibilityObject> > elements)
231 , textElements(elements)
234 AccessibilityText(const String& t, const AccessibilityTextSource& s, const RefPtr<AccessibilityObject> element)
238 textElements.append(element);
242 enum AccessibilityOrientation {
243 AccessibilityOrientationVertical,
244 AccessibilityOrientationHorizontal,
247 enum AccessibilityObjectInclusion {
253 enum AccessibilityButtonState {
259 enum AccessibilitySortDirection {
261 SortDirectionAscending,
262 SortDirectionDescending,
265 enum AccessibilitySearchDirection {
266 SearchDirectionNext = 1,
267 SearchDirectionPrevious
270 enum AccessibilitySearchKey {
271 AnyTypeSearchKey = 1,
272 BlockquoteSameLevelSearchKey,
278 DifferentTypeSearchKey,
280 FontColorChangeSearchKey,
283 HeadingLevel1SearchKey,
284 HeadingLevel2SearchKey,
285 HeadingLevel3SearchKey,
286 HeadingLevel4SearchKey,
287 HeadingLevel5SearchKey,
288 HeadingLevel6SearchKey,
289 HeadingSameLevelSearchKey,
291 HighlightedSearchKey,
297 MisspelledWordSearchKey,
302 StyleChangeSearchKey,
303 TableSameLevelSearchKey,
307 UnvisitedLinkSearchKey,
311 struct AccessibilitySearchCriteria {
312 AccessibilityObject* startObject;
313 AccessibilitySearchDirection searchDirection;
314 AccessibilitySearchKey searchKey;
316 unsigned resultsLimit;
319 struct VisiblePositionRange {
321 VisiblePosition start;
324 VisiblePositionRange() {}
326 VisiblePositionRange(const VisiblePosition& s, const VisiblePosition& e)
331 bool isNull() const { return start.isNull() || end.isNull(); }
334 struct PlainTextRange {
344 PlainTextRange(unsigned s, unsigned l)
349 bool isNull() const { return !start && !length; }
352 class AccessibilityObject : public RefCounted<AccessibilityObject> {
354 AccessibilityObject();
357 virtual ~AccessibilityObject();
358 virtual void detach();
359 virtual bool isDetached() const;
361 typedef Vector<RefPtr<AccessibilityObject> > AccessibilityChildrenVector;
363 virtual bool isAccessibilityNodeObject() const { return false; }
364 virtual bool isAccessibilityRenderObject() const { return false; }
365 virtual bool isAccessibilityScrollbar() const { return false; }
366 virtual bool isAccessibilityScrollView() const { return false; }
367 virtual bool isAccessibilitySVGRoot() const { return false; }
369 bool accessibilityObjectContainsText(String *) const;
371 virtual bool isAnchor() const { return false; }
372 virtual bool isAttachment() const { return false; }
373 virtual bool isHeading() const { return false; }
374 virtual bool isLink() const { return false; }
375 virtual bool isImage() const { return false; }
376 virtual bool isNativeImage() const { return false; }
377 virtual bool isImageButton() const { return false; }
378 virtual bool isPasswordField() const { return false; }
379 virtual bool isNativeTextControl() const { return false; }
380 virtual bool isSearchField() const { return false; }
381 bool isWebArea() const { return roleValue() == WebAreaRole; }
382 bool isSeamlessWebArea() const { return roleValue() == SeamlessWebAreaRole; }
383 virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
384 virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
385 virtual bool isListBox() const { return roleValue() == ListBoxRole; }
386 virtual bool isMediaTimeline() const { return false; }
387 virtual bool isMenuRelated() const { return false; }
388 virtual bool isMenu() const { return false; }
389 virtual bool isMenuBar() const { return false; }
390 virtual bool isMenuButton() const { return false; }
391 virtual bool isMenuItem() const { return false; }
392 virtual bool isFileUploadButton() const { return false; }
393 virtual bool isInputImage() const { return false; }
394 virtual bool isProgressIndicator() const { return false; }
395 virtual bool isSlider() const { return false; }
396 virtual bool isInputSlider() const { return false; }
397 virtual bool isControl() const { return false; }
398 virtual bool isList() const { return false; }
399 virtual bool isAccessibilityTable() const { return false; }
400 virtual bool isDataTable() const { return false; }
401 virtual bool isTableRow() const { return false; }
402 virtual bool isTableColumn() const { return false; }
403 virtual bool isTableCell() const { return false; }
404 virtual bool isFieldset() const { return false; }
405 virtual bool isGroup() const { return false; }
406 virtual bool isARIATreeGridRow() const { return false; }
407 virtual bool isImageMapLink() const { return false; }
408 virtual bool isMenuList() const { return false; }
409 virtual bool isMenuListPopup() const { return false; }
410 virtual bool isMenuListOption() const { return false; }
411 virtual bool isSpinButton() const { return roleValue() == SpinButtonRole; }
412 virtual bool isSpinButtonPart() const { return false; }
413 virtual bool isMockObject() const { return false; }
414 virtual bool isMediaControlLabel() const { return false; }
415 bool isTextControl() const { return roleValue() == TextAreaRole || roleValue() == TextFieldRole; }
416 bool isARIATextControl() const;
417 bool isTabList() const { return roleValue() == TabListRole; }
418 bool isTabItem() const { return roleValue() == TabRole; }
419 bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
420 bool isComboBox() const { return roleValue() == ComboBoxRole; }
421 bool isTree() const { return roleValue() == TreeRole; }
422 bool isTreeItem() const { return roleValue() == TreeItemRole; }
423 bool isScrollbar() const { return roleValue() == ScrollBarRole; }
424 bool isButton() const;
425 bool isListItem() const { return roleValue() == ListItemRole; }
426 bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
427 bool isScrollView() const { return roleValue() == ScrollAreaRole; }
428 bool isCanvas() const { return roleValue() == CanvasRole; }
429 bool isPopUpButton() const { return roleValue() == PopUpButtonRole; }
430 bool isBlockquote() const;
431 bool isLandmark() const;
432 bool isColorWell() const { return roleValue() == ColorWellRole; }
434 virtual bool isChecked() const { return false; }
435 virtual bool isEnabled() const { return false; }
436 virtual bool isSelected() const { return false; }
437 virtual bool isFocused() const { return false; }
438 virtual bool isHovered() const { return false; }
439 virtual bool isIndeterminate() const { return false; }
440 virtual bool isLoaded() const { return false; }
441 virtual bool isMultiSelectable() const { return false; }
442 virtual bool isOffScreen() const { return false; }
443 virtual bool isPressed() const { return false; }
444 virtual bool isReadOnly() const { return false; }
445 virtual bool isUnvisited() const { return false; }
446 virtual bool isVisited() const { return false; }
447 virtual bool isRequired() const { return false; }
448 virtual bool isLinked() const { return false; }
449 virtual bool isExpanded() const;
450 virtual bool isVisible() const { return true; }
451 virtual bool isCollapsed() const { return false; }
452 virtual void setIsExpanded(bool) { }
454 // In a multi-select list, many items can be selected but only one is active at a time.
455 virtual bool isSelectedOptionActive() const { return false; }
457 virtual bool hasBoldFont() const { return false; }
458 virtual bool hasItalicFont() const { return false; }
459 bool hasMisspelling() const;
460 virtual bool hasPlainText() const { return false; }
461 virtual bool hasSameFont(RenderObject*) const { return false; }
462 virtual bool hasSameFontColor(RenderObject*) const { return false; }
463 virtual bool hasSameStyle(RenderObject*) const { return false; }
464 bool hasStaticText() const { return roleValue() == StaticTextRole; }
465 virtual bool hasUnderline() const { return false; }
466 bool hasHighlighting() const;
468 virtual bool canSetFocusAttribute() const { return false; }
469 virtual bool canSetTextRangeAttributes() const { return false; }
470 virtual bool canSetValueAttribute() const { return false; }
471 virtual bool canSetNumericValue() const { return false; }
472 virtual bool canSetSelectedAttribute() const { return false; }
473 virtual bool canSetSelectedChildrenAttribute() const { return false; }
474 virtual bool canSetExpandedAttribute() const { return false; }
476 virtual Node* node() const { return 0; }
477 virtual RenderObject* renderer() const { return 0; }
478 virtual bool accessibilityIsIgnored() const { return true; }
480 int blockquoteLevel() const;
481 virtual int headingLevel() const { return 0; }
482 virtual int tableLevel() const { return 0; }
483 virtual AccessibilityButtonState checkboxOrRadioValue() const;
484 virtual String valueDescription() const { return String(); }
485 virtual float valueForRange() const { return 0.0f; }
486 virtual float maxValueForRange() const { return 0.0f; }
487 virtual float minValueForRange() const { return 0.0f; }
488 virtual float stepValueForRange() const { return 0.0f; }
489 virtual AccessibilityObject* selectedRadioButton() { return 0; }
490 virtual AccessibilityObject* selectedTabItem() { return 0; }
491 virtual int layoutCount() const { return 0; }
492 virtual double estimatedLoadingProgress() const { return 0; }
493 static bool isARIAControl(AccessibilityRole);
494 static bool isARIAInput(AccessibilityRole);
495 virtual bool supportsARIAOwns() const { return false; }
496 virtual void ariaOwnsElements(AccessibilityChildrenVector&) const { }
497 virtual bool supportsARIAFlowTo() const { return false; }
498 virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
499 virtual bool ariaHasPopup() const { return false; }
500 virtual bool ariaPressedIsPresent() const;
501 bool ariaIsMultiline() const;
502 virtual const AtomicString& invalidStatus() const;
503 bool supportsARIAExpanded() const;
504 AccessibilitySortDirection sortDirection() const;
505 virtual bool canvasHasFallbackContent() const { return false; }
506 bool supportsRangeValue() const;
508 // ARIA drag and drop
509 virtual bool supportsARIADropping() const { return false; }
510 virtual bool supportsARIADragging() const { return false; }
511 virtual bool isARIAGrabbed() { return false; }
512 virtual void setARIAGrabbed(bool) { }
513 virtual void determineARIADropEffects(Vector<String>&) { }
515 // Called on the root AX object to return the deepest available element.
516 virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
517 // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
518 virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
520 virtual AccessibilityObject* focusedUIElement() const;
522 virtual AccessibilityObject* firstChild() const { return 0; }
523 virtual AccessibilityObject* lastChild() const { return 0; }
524 virtual AccessibilityObject* previousSibling() const { return 0; }
525 virtual AccessibilityObject* nextSibling() const { return 0; }
526 virtual AccessibilityObject* parentObject() const = 0;
527 virtual AccessibilityObject* parentObjectUnignored() const;
528 virtual AccessibilityObject* parentObjectIfExists() const { return 0; }
529 static AccessibilityObject* firstAccessibleObjectFromNode(const Node*);
530 void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
532 virtual AccessibilityObject* observableObject() const { return 0; }
533 virtual void linkedUIElements(AccessibilityChildrenVector&) const { }
534 virtual AccessibilityObject* titleUIElement() const { return 0; }
535 virtual bool exposesTitleUIElement() const { return true; }
536 virtual AccessibilityObject* correspondingLabelForControlElement() const { return 0; }
537 virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; }
538 virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return 0; }
540 virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
541 virtual bool isPresentationalChildOfAriaRole() const { return false; }
542 virtual bool ariaRoleHasPresentationalChildren() const { return false; }
544 // Accessibility Text
545 virtual void accessibilityText(Vector<AccessibilityText>&) { };
547 // A programmatic way to set a name on an AccessibleObject.
548 virtual void setAccessibleName(const AtomicString&) { }
550 // Accessibility Text - (To be deprecated).
551 virtual String accessibilityDescription() const { return String(); }
552 virtual String title() const { return String(); }
553 virtual String helpText() const { return String(); }
555 // Methods for determining accessibility text.
556 virtual String stringValue() const { return String(); }
557 virtual String textUnderElement() const { return String(); }
558 virtual String text() const { return String(); }
559 virtual int textLength() const { return 0; }
560 virtual String ariaLabeledByAttribute() const { return String(); }
561 virtual String ariaDescribedByAttribute() const { return String(); }
562 const AtomicString& placeholderValue() const;
564 // Only if isColorWell()
565 virtual void colorValue(int& r, int& g, int& b) const { r = 0; g = 0; b = 0; }
567 void setRoleValue(AccessibilityRole role) { m_role = role; }
568 virtual AccessibilityRole roleValue() const { return m_role; }
570 virtual AXObjectCache* axObjectCache() const;
571 AXID axObjectID() const { return m_id; }
572 void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
574 static AccessibilityObject* anchorElementForNode(Node*);
575 virtual Element* anchorElement() const { return 0; }
576 virtual Element* actionElement() const { return 0; }
577 virtual LayoutRect boundingBoxRect() const { return LayoutRect(); }
578 IntRect pixelSnappedBoundingBoxRect() const { return pixelSnappedIntRect(boundingBoxRect()); }
579 virtual LayoutRect elementRect() const = 0;
580 IntRect pixelSnappedElementRect() const { return pixelSnappedIntRect(elementRect()); }
581 LayoutSize size() const { return elementRect().size(); }
582 IntSize pixelSnappedSize() const { return elementRect().pixelSnappedSize(); }
583 virtual IntPoint clickPoint();
584 static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&);
586 TextIteratorBehavior textIteratorBehaviorForTextRange() const;
587 virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); }
588 unsigned selectionStart() const { return selectedTextRange().start; }
589 unsigned selectionEnd() const { return selectedTextRange().length; }
591 virtual KURL url() const { return KURL(); }
592 virtual VisibleSelection selection() const { return VisibleSelection(); }
593 virtual String selectedText() const { return String(); }
594 virtual const AtomicString& accessKey() const { return nullAtom; }
595 const String& actionVerb() const;
596 virtual Widget* widget() const { return 0; }
597 virtual Widget* widgetForAttachmentView() const { return 0; }
599 virtual Document* document() const;
600 virtual FrameView* topDocumentFrameView() const { return 0; }
601 virtual FrameView* documentFrameView() const;
602 String language() const;
603 // 1-based, to match the aria-level spec.
604 virtual unsigned hierarchicalLevel() const { return 0; }
606 virtual void setFocused(bool) { }
607 virtual void setSelectedText(const String&) { }
608 virtual void setSelectedTextRange(const PlainTextRange&) { }
609 virtual void setValue(const String&) { }
610 virtual void setValue(float) { }
611 virtual void setSelected(bool) { }
612 virtual void setSelectedRows(AccessibilityChildrenVector&) { }
614 virtual void makeRangeVisible(const PlainTextRange&) { }
615 virtual bool press() const;
616 bool performDefaultAction() const { return press(); }
618 virtual AccessibilityOrientation orientation() const;
619 virtual void increment() { }
620 virtual void decrement() { }
622 virtual void childrenChanged() { }
623 virtual void textChanged() { }
624 virtual void updateAccessibilityRole() { }
625 const AccessibilityChildrenVector& children();
626 virtual void addChildren() { }
627 virtual void addChild(AccessibilityObject*) { }
628 virtual void insertChild(AccessibilityObject*, unsigned) { }
630 virtual bool canHaveChildren() const { return true; }
631 virtual bool hasChildren() const { return m_haveChildren; }
632 virtual void updateChildrenIfNecessary();
633 virtual void setNeedsToUpdateChildren() { }
634 virtual void clearChildren();
636 virtual void detachFromParent();
638 virtual void detachFromParent() { }
641 virtual void selectedChildren(AccessibilityChildrenVector&) { }
642 virtual void visibleChildren(AccessibilityChildrenVector&) { }
643 virtual void tabChildren(AccessibilityChildrenVector&) { }
644 virtual bool shouldFocusActiveDescendant() const { return false; }
645 virtual AccessibilityObject* activeDescendant() const { return 0; }
646 virtual void handleActiveDescendantChanged() { }
647 virtual void handleAriaExpandedChanged() { }
648 bool isDescendantOfObject(const AccessibilityObject*) const;
649 bool isAncestorOfObject(const AccessibilityObject*) const;
650 AccessibilityObject* firstAnonymousBlockChild() const;
652 static AccessibilityRole ariaRoleToWebCoreRole(const String&);
653 bool hasAttribute(const QualifiedName&) const;
654 const AtomicString& getAttribute(const QualifiedName&) const;
656 virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
657 virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
659 VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
660 VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
661 VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
662 VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
663 VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
664 VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
665 VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
666 VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
667 VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
669 String stringForVisiblePositionRange(const VisiblePositionRange&) const;
670 virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); }
671 int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
672 virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { }
674 virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const { return VisiblePosition(); }
675 VisiblePosition nextVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.next(); }
676 VisiblePosition previousVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.previous(); }
677 VisiblePosition nextWordEnd(const VisiblePosition&) const;
678 VisiblePosition previousWordStart(const VisiblePosition&) const;
679 VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
680 VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
681 VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
682 VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
683 VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
684 VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
685 virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const { return VisiblePosition(); }
687 virtual VisiblePosition visiblePositionForIndex(int) const { return VisiblePosition(); }
688 virtual int indexForVisiblePosition(const VisiblePosition&) const { return 0; }
690 AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
691 int lineForPosition(const VisiblePosition&) const;
692 PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
693 virtual int index(const VisiblePosition&) const { return -1; }
695 virtual void lineBreaks(Vector<int>&) const { }
696 virtual PlainTextRange doAXRangeForLine(unsigned) const { return PlainTextRange(); }
697 PlainTextRange doAXRangeForPosition(const IntPoint&) const;
698 virtual PlainTextRange doAXRangeForIndex(unsigned) const { return PlainTextRange(); }
699 PlainTextRange doAXStyleRangeForIndex(unsigned) const;
701 virtual String doAXStringForRange(const PlainTextRange&) const { return String(); }
702 virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); }
703 String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&) const;
705 unsigned doAXLineForIndex(unsigned);
707 virtual String stringValueForMSAA() const { return String(); }
708 virtual String stringRoleForMSAA() const { return String(); }
709 virtual String nameForMSAA() const { return String(); }
710 virtual String descriptionForMSAA() const { return String(); }
711 virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); }
713 virtual String passwordFieldValue() const { return String(); }
715 // Used by an ARIA tree to get all its rows.
716 void ariaTreeRows(AccessibilityChildrenVector&);
717 // Used by an ARIA tree item to get all of its direct rows that it can disclose.
718 void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&);
719 // Used by an ARIA tree item to get only its content, and not its child tree items and groups.
720 void ariaTreeItemContent(AccessibilityChildrenVector&);
722 // ARIA live-region features.
723 bool supportsARIALiveRegion() const;
724 bool isInsideARIALiveRegion() const;
725 virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; }
726 virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
727 virtual bool ariaLiveRegionAtomic() const { return false; }
728 virtual bool ariaLiveRegionBusy() const { return false; }
730 bool supportsARIAAttributes() const;
732 // CSS3 Speech properties.
733 virtual ESpeak speakProperty() const { return SpeakNormal; }
735 // Make this object visible by scrolling as many nested scrollable views as needed.
736 virtual void scrollToMakeVisible() const;
737 // Same, but if the whole object can't be made visible, try for this subrect, in local coordinates.
738 virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const;
739 // Scroll this object to a given point in global coordinates of the top-level window.
740 virtual void scrollToGlobalPoint(const IntPoint&) const;
742 bool cachedIsIgnoredValue();
743 void setCachedIsIgnoredValue(bool);
745 // Fires a children changed notification on the parent if the isIgnored value changed.
746 void notifyIfIgnoredValueChanged();
748 // All math elements return true for isMathElement().
749 virtual bool isMathElement() const { return false; }
750 virtual bool isMathFraction() const { return false; }
751 virtual bool isMathFenced() const { return false; }
752 virtual bool isMathSubscriptSuperscript() const { return false; }
753 virtual bool isMathRow() const { return false; }
754 virtual bool isMathUnderOver() const { return false; }
755 virtual bool isMathRoot() const { return false; }
756 virtual bool isMathSquareRoot() const { return false; }
757 virtual bool isMathText() const { return false; }
758 virtual bool isMathNumber() const { return false; }
759 virtual bool isMathOperator() const { return false; }
760 virtual bool isMathFenceOperator() const { return false; }
761 virtual bool isMathSeparatorOperator() const { return false; }
762 virtual bool isMathIdentifier() const { return false; }
763 virtual bool isMathTable() const { return false; }
764 virtual bool isMathTableRow() const { return false; }
765 virtual bool isMathTableCell() const { return false; }
768 virtual AccessibilityObject* mathRadicandObject() { return 0; }
769 virtual AccessibilityObject* mathRootIndexObject() { return 0; }
771 // Under over components.
772 virtual AccessibilityObject* mathUnderObject() { return 0; }
773 virtual AccessibilityObject* mathOverObject() { return 0; }
775 // Fraction components.
776 virtual AccessibilityObject* mathNumeratorObject() { return 0; }
777 virtual AccessibilityObject* mathDenominatorObject() { return 0; }
779 // Subscript/superscript components.
780 virtual AccessibilityObject* mathBaseObject() { return 0; }
781 virtual AccessibilityObject* mathSubscriptObject() { return 0; }
782 virtual AccessibilityObject* mathSuperscriptObject() { return 0; }
784 // Fenced components.
785 virtual String mathFencedOpenString() const { return String(); }
786 virtual String mathFencedCloseString() const { return String(); }
788 #if HAVE(ACCESSIBILITY)
789 #if PLATFORM(GTK) || PLATFORM(EFL)
790 AccessibilityObjectWrapper* wrapper() const;
791 void setWrapper(AccessibilityObjectWrapper*);
792 #elif !PLATFORM(CHROMIUM)
793 AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
794 void setWrapper(AccessibilityObjectWrapper* wrapper)
802 void overrideAttachmentParent(AccessibilityObject* parent);
804 void overrideAttachmentParent(AccessibilityObject*) { }
807 #if HAVE(ACCESSIBILITY)
808 // a platform-specific method for determining if an attachment is ignored
809 bool accessibilityIgnoreAttachment() const;
810 // gives platforms the opportunity to indicate if and how an object should be included
811 AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const;
813 bool accessibilityIgnoreAttachment() const { return true; }
814 AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const { return DefaultBehavior; }
817 // allows for an AccessibilityObject to update its render tree or perform
818 // other operations update type operations
819 void updateBackingStore();
823 AccessibilityChildrenVector m_children;
824 mutable bool m_haveChildren;
825 AccessibilityRole m_role;
826 AccessibilityObjectInclusion m_cachedIsIgnoredValue;
828 // If this object itself scrolls, return its ScrollableArea.
829 virtual ScrollableArea* getScrollableAreaIfScrollable() const { return 0; }
830 virtual void scrollTo(const IntPoint&) const { }
832 static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
833 static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
834 static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
835 virtual AccessibilityRole buttonRoleType() const;
837 #if PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
838 bool allowsTextRanges() const;
839 unsigned getLengthForTextRange() const;
841 bool allowsTextRanges() const { return isTextControl(); }
842 unsigned getLengthForTextRange() const { return text().length(); }
846 RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
847 #elif PLATFORM(WIN) && !OS(WINCE)
848 COMPtr<AccessibilityObjectWrapper> m_wrapper;
849 #elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
850 AtkObject* m_wrapper;
851 #elif PLATFORM(CHROMIUM)
856 #if !HAVE(ACCESSIBILITY)
857 inline const AccessibilityObject::AccessibilityChildrenVector& AccessibilityObject::children() { return m_children; }
858 inline const String& AccessibilityObject::actionVerb() const { return emptyString(); }
859 inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const { return -1; }
860 inline void AccessibilityObject::updateBackingStore() { }
863 } // namespace WebCore
865 #endif // AccessibilityObject_h