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;
433 virtual bool isChecked() const { return false; }
434 virtual bool isEnabled() const { return false; }
435 virtual bool isSelected() const { return false; }
436 virtual bool isFocused() const { return false; }
437 virtual bool isHovered() const { return false; }
438 virtual bool isIndeterminate() const { return false; }
439 virtual bool isLoaded() const { return false; }
440 virtual bool isMultiSelectable() const { return false; }
441 virtual bool isOffScreen() const { return false; }
442 virtual bool isPressed() const { return false; }
443 virtual bool isReadOnly() const { return false; }
444 virtual bool isUnvisited() const { return false; }
445 virtual bool isVisited() const { return false; }
446 virtual bool isRequired() const { return false; }
447 virtual bool isLinked() const { return false; }
448 virtual bool isExpanded() const;
449 virtual bool isVisible() const { return true; }
450 virtual bool isCollapsed() const { return false; }
451 virtual void setIsExpanded(bool) { }
453 // In a multi-select list, many items can be selected but only one is active at a time.
454 virtual bool isSelectedOptionActive() const { return false; }
456 virtual bool hasBoldFont() const { return false; }
457 virtual bool hasItalicFont() const { return false; }
458 bool hasMisspelling() const;
459 virtual bool hasPlainText() const { return false; }
460 virtual bool hasSameFont(RenderObject*) const { return false; }
461 virtual bool hasSameFontColor(RenderObject*) const { return false; }
462 virtual bool hasSameStyle(RenderObject*) const { return false; }
463 bool hasStaticText() const { return roleValue() == StaticTextRole; }
464 virtual bool hasUnderline() const { return false; }
465 bool hasHighlighting() const;
467 virtual bool canSetFocusAttribute() const { return false; }
468 virtual bool canSetTextRangeAttributes() const { return false; }
469 virtual bool canSetValueAttribute() const { return false; }
470 virtual bool canSetNumericValue() const { return false; }
471 virtual bool canSetSelectedAttribute() const { return false; }
472 virtual bool canSetSelectedChildrenAttribute() const { return false; }
473 virtual bool canSetExpandedAttribute() const { return false; }
475 virtual Node* node() const { return 0; }
476 virtual RenderObject* renderer() const { return 0; }
477 virtual bool accessibilityIsIgnored() const { return true; }
479 int blockquoteLevel() const;
480 virtual int headingLevel() const { return 0; }
481 virtual int tableLevel() const { return 0; }
482 virtual AccessibilityButtonState checkboxOrRadioValue() const;
483 virtual String valueDescription() const { return String(); }
484 virtual float valueForRange() const { return 0.0f; }
485 virtual float maxValueForRange() const { return 0.0f; }
486 virtual float minValueForRange() const { return 0.0f; }
487 virtual float stepValueForRange() const { return 0.0f; }
488 virtual AccessibilityObject* selectedRadioButton() { return 0; }
489 virtual AccessibilityObject* selectedTabItem() { return 0; }
490 virtual int layoutCount() const { return 0; }
491 virtual double estimatedLoadingProgress() const { return 0; }
492 static bool isARIAControl(AccessibilityRole);
493 static bool isARIAInput(AccessibilityRole);
494 virtual bool supportsARIAOwns() const { return false; }
495 virtual void ariaOwnsElements(AccessibilityChildrenVector&) const { }
496 virtual bool supportsARIAFlowTo() const { return false; }
497 virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
498 virtual bool ariaHasPopup() const { return false; }
499 virtual bool ariaPressedIsPresent() const;
500 bool ariaIsMultiline() const;
501 virtual const AtomicString& invalidStatus() const;
502 bool supportsARIAExpanded() const;
503 AccessibilitySortDirection sortDirection() const;
504 virtual bool canvasHasFallbackContent() const { return false; }
505 bool supportsRangeValue() const;
507 // ARIA drag and drop
508 virtual bool supportsARIADropping() const { return false; }
509 virtual bool supportsARIADragging() const { return false; }
510 virtual bool isARIAGrabbed() { return false; }
511 virtual void setARIAGrabbed(bool) { }
512 virtual void determineARIADropEffects(Vector<String>&) { }
514 // Called on the root AX object to return the deepest available element.
515 virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
516 // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
517 virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
519 virtual AccessibilityObject* focusedUIElement() const;
521 virtual AccessibilityObject* firstChild() const { return 0; }
522 virtual AccessibilityObject* lastChild() const { return 0; }
523 virtual AccessibilityObject* previousSibling() const { return 0; }
524 virtual AccessibilityObject* nextSibling() const { return 0; }
525 virtual AccessibilityObject* parentObject() const = 0;
526 virtual AccessibilityObject* parentObjectUnignored() const;
527 virtual AccessibilityObject* parentObjectIfExists() const { return 0; }
528 static AccessibilityObject* firstAccessibleObjectFromNode(const Node*);
529 void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
531 virtual AccessibilityObject* observableObject() const { return 0; }
532 virtual void linkedUIElements(AccessibilityChildrenVector&) const { }
533 virtual AccessibilityObject* titleUIElement() const { return 0; }
534 virtual bool exposesTitleUIElement() const { return true; }
535 virtual AccessibilityObject* correspondingLabelForControlElement() const { return 0; }
536 virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; }
537 virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return 0; }
539 virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
540 virtual bool isPresentationalChildOfAriaRole() const { return false; }
541 virtual bool ariaRoleHasPresentationalChildren() const { return false; }
543 // Accessibility Text
544 virtual void accessibilityText(Vector<AccessibilityText>&) { };
546 // A programmatic way to set a name on an AccessibleObject.
547 virtual void setAccessibleName(const AtomicString&) { }
549 // Accessibility Text - (To be deprecated).
550 virtual String accessibilityDescription() const { return String(); }
551 virtual String title() const { return String(); }
552 virtual String helpText() const { return String(); }
554 // Methods for determining accessibility text.
555 virtual String stringValue() const { return String(); }
556 virtual String textUnderElement() const { return String(); }
557 virtual String text() const { return String(); }
558 virtual int textLength() const { return 0; }
559 virtual String ariaLabeledByAttribute() const { return String(); }
560 virtual String ariaDescribedByAttribute() const { return String(); }
561 const AtomicString& placeholderValue() const;
563 void setRoleValue(AccessibilityRole role) { m_role = role; }
564 virtual AccessibilityRole roleValue() const { return m_role; }
566 virtual AXObjectCache* axObjectCache() const;
567 AXID axObjectID() const { return m_id; }
568 void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
570 static AccessibilityObject* anchorElementForNode(Node*);
571 virtual Element* anchorElement() const { return 0; }
572 virtual Element* actionElement() const { return 0; }
573 virtual LayoutRect boundingBoxRect() const { return LayoutRect(); }
574 IntRect pixelSnappedBoundingBoxRect() const { return pixelSnappedIntRect(boundingBoxRect()); }
575 virtual LayoutRect elementRect() const = 0;
576 IntRect pixelSnappedElementRect() const { return pixelSnappedIntRect(elementRect()); }
577 LayoutSize size() const { return elementRect().size(); }
578 IntSize pixelSnappedSize() const { return elementRect().pixelSnappedSize(); }
579 virtual IntPoint clickPoint();
580 static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&);
582 TextIteratorBehavior textIteratorBehaviorForTextRange() const;
583 virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); }
584 unsigned selectionStart() const { return selectedTextRange().start; }
585 unsigned selectionEnd() const { return selectedTextRange().length; }
587 virtual KURL url() const { return KURL(); }
588 virtual VisibleSelection selection() const { return VisibleSelection(); }
589 virtual String selectedText() const { return String(); }
590 virtual const AtomicString& accessKey() const { return nullAtom; }
591 const String& actionVerb() const;
592 virtual Widget* widget() const { return 0; }
593 virtual Widget* widgetForAttachmentView() const { return 0; }
595 virtual Document* document() const;
596 virtual FrameView* topDocumentFrameView() const { return 0; }
597 virtual FrameView* documentFrameView() const;
598 String language() const;
599 // 1-based, to match the aria-level spec.
600 virtual unsigned hierarchicalLevel() const { return 0; }
602 virtual void setFocused(bool) { }
603 virtual void setSelectedText(const String&) { }
604 virtual void setSelectedTextRange(const PlainTextRange&) { }
605 virtual void setValue(const String&) { }
606 virtual void setValue(float) { }
607 virtual void setSelected(bool) { }
608 virtual void setSelectedRows(AccessibilityChildrenVector&) { }
610 virtual void makeRangeVisible(const PlainTextRange&) { }
611 virtual bool press() const;
612 bool performDefaultAction() const { return press(); }
614 virtual AccessibilityOrientation orientation() const;
615 virtual void increment() { }
616 virtual void decrement() { }
618 virtual void childrenChanged() { }
619 virtual void textChanged() { }
620 virtual void updateAccessibilityRole() { }
621 const AccessibilityChildrenVector& children();
622 virtual void addChildren() { }
623 virtual void addChild(AccessibilityObject*) { }
624 virtual void insertChild(AccessibilityObject*, unsigned) { }
626 virtual bool canHaveChildren() const { return true; }
627 virtual bool hasChildren() const { return m_haveChildren; }
628 virtual void updateChildrenIfNecessary();
629 virtual void setNeedsToUpdateChildren() { }
630 virtual void clearChildren();
632 virtual void detachFromParent();
634 virtual void detachFromParent() { }
637 virtual void selectedChildren(AccessibilityChildrenVector&) { }
638 virtual void visibleChildren(AccessibilityChildrenVector&) { }
639 virtual void tabChildren(AccessibilityChildrenVector&) { }
640 virtual bool shouldFocusActiveDescendant() const { return false; }
641 virtual AccessibilityObject* activeDescendant() const { return 0; }
642 virtual void handleActiveDescendantChanged() { }
643 virtual void handleAriaExpandedChanged() { }
644 bool isDescendantOfObject(const AccessibilityObject*) const;
645 bool isAncestorOfObject(const AccessibilityObject*) const;
646 AccessibilityObject* firstAnonymousBlockChild() const;
648 static AccessibilityRole ariaRoleToWebCoreRole(const String&);
649 bool hasAttribute(const QualifiedName&) const;
650 const AtomicString& getAttribute(const QualifiedName&) const;
652 virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
653 virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
655 VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
656 VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
657 VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
658 VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
659 VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
660 VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
661 VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
662 VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
663 VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
665 String stringForVisiblePositionRange(const VisiblePositionRange&) const;
666 virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); }
667 int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
668 virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { }
670 virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const { return VisiblePosition(); }
671 VisiblePosition nextVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.next(); }
672 VisiblePosition previousVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.previous(); }
673 VisiblePosition nextWordEnd(const VisiblePosition&) const;
674 VisiblePosition previousWordStart(const VisiblePosition&) const;
675 VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
676 VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
677 VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
678 VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
679 VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
680 VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
681 virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const { return VisiblePosition(); }
683 virtual VisiblePosition visiblePositionForIndex(int) const { return VisiblePosition(); }
684 virtual int indexForVisiblePosition(const VisiblePosition&) const { return 0; }
686 AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
687 int lineForPosition(const VisiblePosition&) const;
688 PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
689 virtual int index(const VisiblePosition&) const { return -1; }
691 virtual void lineBreaks(Vector<int>&) const { }
692 virtual PlainTextRange doAXRangeForLine(unsigned) const { return PlainTextRange(); }
693 PlainTextRange doAXRangeForPosition(const IntPoint&) const;
694 virtual PlainTextRange doAXRangeForIndex(unsigned) const { return PlainTextRange(); }
695 PlainTextRange doAXStyleRangeForIndex(unsigned) const;
697 virtual String doAXStringForRange(const PlainTextRange&) const { return String(); }
698 virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); }
699 String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&) const;
701 unsigned doAXLineForIndex(unsigned);
703 virtual String stringValueForMSAA() const { return String(); }
704 virtual String stringRoleForMSAA() const { return String(); }
705 virtual String nameForMSAA() const { return String(); }
706 virtual String descriptionForMSAA() const { return String(); }
707 virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); }
709 virtual String passwordFieldValue() const { return String(); }
711 // Used by an ARIA tree to get all its rows.
712 void ariaTreeRows(AccessibilityChildrenVector&);
713 // Used by an ARIA tree item to get all of its direct rows that it can disclose.
714 void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&);
715 // Used by an ARIA tree item to get only its content, and not its child tree items and groups.
716 void ariaTreeItemContent(AccessibilityChildrenVector&);
718 // ARIA live-region features.
719 bool supportsARIALiveRegion() const;
720 bool isInsideARIALiveRegion() const;
721 virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; }
722 virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
723 virtual bool ariaLiveRegionAtomic() const { return false; }
724 virtual bool ariaLiveRegionBusy() const { return false; }
726 bool supportsARIAAttributes() const;
728 // CSS3 Speech properties.
729 virtual ESpeak speakProperty() const { return SpeakNormal; }
731 // Make this object visible by scrolling as many nested scrollable views as needed.
732 virtual void scrollToMakeVisible() const;
733 // Same, but if the whole object can't be made visible, try for this subrect, in local coordinates.
734 virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const;
735 // Scroll this object to a given point in global coordinates of the top-level window.
736 virtual void scrollToGlobalPoint(const IntPoint&) const;
738 bool cachedIsIgnoredValue();
739 void setCachedIsIgnoredValue(bool);
741 // Fires a children changed notification on the parent if the isIgnored value changed.
742 void notifyIfIgnoredValueChanged();
744 // All math elements return true for isMathElement().
745 virtual bool isMathElement() const { return false; }
746 virtual bool isMathFraction() const { return false; }
747 virtual bool isMathFenced() const { return false; }
748 virtual bool isMathSubscriptSuperscript() const { return false; }
749 virtual bool isMathRow() const { return false; }
750 virtual bool isMathUnderOver() const { return false; }
751 virtual bool isMathRoot() const { return false; }
752 virtual bool isMathSquareRoot() const { return false; }
753 virtual bool isMathText() const { return false; }
754 virtual bool isMathNumber() const { return false; }
755 virtual bool isMathOperator() const { return false; }
756 virtual bool isMathFenceOperator() const { return false; }
757 virtual bool isMathSeparatorOperator() const { return false; }
758 virtual bool isMathIdentifier() const { return false; }
759 virtual bool isMathTable() const { return false; }
760 virtual bool isMathTableRow() const { return false; }
761 virtual bool isMathTableCell() const { return false; }
764 virtual AccessibilityObject* mathRadicandObject() { return 0; }
765 virtual AccessibilityObject* mathRootIndexObject() { return 0; }
767 // Under over components.
768 virtual AccessibilityObject* mathUnderObject() { return 0; }
769 virtual AccessibilityObject* mathOverObject() { return 0; }
771 // Fraction components.
772 virtual AccessibilityObject* mathNumeratorObject() { return 0; }
773 virtual AccessibilityObject* mathDenominatorObject() { return 0; }
775 // Subscript/superscript components.
776 virtual AccessibilityObject* mathBaseObject() { return 0; }
777 virtual AccessibilityObject* mathSubscriptObject() { return 0; }
778 virtual AccessibilityObject* mathSuperscriptObject() { return 0; }
780 // Fenced components.
781 virtual String mathFencedOpenString() const { return String(); }
782 virtual String mathFencedCloseString() const { return String(); }
784 #if HAVE(ACCESSIBILITY)
785 #if PLATFORM(GTK) || PLATFORM(EFL)
786 AccessibilityObjectWrapper* wrapper() const;
787 void setWrapper(AccessibilityObjectWrapper*);
788 #elif !PLATFORM(CHROMIUM)
789 AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
790 void setWrapper(AccessibilityObjectWrapper* wrapper)
798 void overrideAttachmentParent(AccessibilityObject* parent);
800 void overrideAttachmentParent(AccessibilityObject*) { }
803 #if HAVE(ACCESSIBILITY)
804 // a platform-specific method for determining if an attachment is ignored
805 bool accessibilityIgnoreAttachment() const;
806 // gives platforms the opportunity to indicate if and how an object should be included
807 AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const;
809 bool accessibilityIgnoreAttachment() const { return true; }
810 AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const { return DefaultBehavior; }
813 // allows for an AccessibilityObject to update its render tree or perform
814 // other operations update type operations
815 void updateBackingStore();
819 AccessibilityChildrenVector m_children;
820 mutable bool m_haveChildren;
821 AccessibilityRole m_role;
822 AccessibilityObjectInclusion m_cachedIsIgnoredValue;
824 // If this object itself scrolls, return its ScrollableArea.
825 virtual ScrollableArea* getScrollableAreaIfScrollable() const { return 0; }
826 virtual void scrollTo(const IntPoint&) const { }
828 static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
829 static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
830 static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
831 virtual AccessibilityRole buttonRoleType() const;
833 #if PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
834 bool allowsTextRanges() const;
835 unsigned getLengthForTextRange() const;
837 bool allowsTextRanges() const { return isTextControl(); }
838 unsigned getLengthForTextRange() const { return text().length(); }
842 RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
843 #elif PLATFORM(WIN) && !OS(WINCE)
844 COMPtr<AccessibilityObjectWrapper> m_wrapper;
845 #elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
846 AtkObject* m_wrapper;
847 #elif PLATFORM(CHROMIUM)
852 #if !HAVE(ACCESSIBILITY)
853 inline const AccessibilityObject::AccessibilityChildrenVector& AccessibilityObject::children() { return m_children; }
854 inline const String& AccessibilityObject::actionVerb() const { return emptyString(); }
855 inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const { return -1; }
856 inline void AccessibilityObject::updateBackingStore() { }
859 } // namespace WebCore
861 #endif // AccessibilityObject_h