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,
115 DescriptionListTermRole,
116 DescriptionListDetailRole,
118 DisclosureTriangleRole,
141 LandmarkApplicationRole,
143 LandmarkComplementaryRole,
144 LandmarkContentInfoRole,
146 LandmarkNavigationRole,
167 ProgressIndicatorRole,
192 TableHeaderContainerRole,
201 UserInterfaceTooltipRole,
208 enum AccessibilityTextSource {
219 struct AccessibilityText {
221 AccessibilityTextSource textSource;
222 Vector<RefPtr<AccessibilityObject> > textElements;
224 AccessibilityText(const String& t, const AccessibilityTextSource& s)
229 AccessibilityText(const String& t, const AccessibilityTextSource& s, const Vector<RefPtr<AccessibilityObject> > elements)
232 , textElements(elements)
235 AccessibilityText(const String& t, const AccessibilityTextSource& s, const RefPtr<AccessibilityObject> element)
239 textElements.append(element);
243 enum AccessibilityOrientation {
244 AccessibilityOrientationVertical,
245 AccessibilityOrientationHorizontal,
248 enum AccessibilityObjectInclusion {
254 enum AccessibilityButtonState {
260 enum AccessibilitySortDirection {
262 SortDirectionAscending,
263 SortDirectionDescending,
266 enum AccessibilitySearchDirection {
267 SearchDirectionNext = 1,
268 SearchDirectionPrevious
271 enum AccessibilitySearchKey {
272 AnyTypeSearchKey = 1,
273 BlockquoteSameLevelSearchKey,
279 DifferentTypeSearchKey,
281 FontColorChangeSearchKey,
284 HeadingLevel1SearchKey,
285 HeadingLevel2SearchKey,
286 HeadingLevel3SearchKey,
287 HeadingLevel4SearchKey,
288 HeadingLevel5SearchKey,
289 HeadingLevel6SearchKey,
290 HeadingSameLevelSearchKey,
292 HighlightedSearchKey,
298 MisspelledWordSearchKey,
303 StyleChangeSearchKey,
304 TableSameLevelSearchKey,
308 UnvisitedLinkSearchKey,
312 struct AccessibilitySearchCriteria {
313 AccessibilityObject* startObject;
314 AccessibilitySearchDirection searchDirection;
315 AccessibilitySearchKey searchKey;
317 unsigned resultsLimit;
320 struct VisiblePositionRange {
322 VisiblePosition start;
325 VisiblePositionRange() {}
327 VisiblePositionRange(const VisiblePosition& s, const VisiblePosition& e)
332 bool isNull() const { return start.isNull() || end.isNull(); }
335 struct PlainTextRange {
345 PlainTextRange(unsigned s, unsigned l)
350 bool isNull() const { return !start && !length; }
353 class AccessibilityObject : public RefCounted<AccessibilityObject> {
355 AccessibilityObject();
358 virtual ~AccessibilityObject();
360 // After constructing an AccessibilityObject, it must be given a
361 // unique ID, then added to AXObjectCache, and finally init() must
363 void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
364 virtual void init() { }
366 // When the corresponding WebCore object that this AccessibilityObject
367 // wraps is deleted, it must be detached.
368 virtual void detach();
369 virtual bool isDetached() const;
371 typedef Vector<RefPtr<AccessibilityObject> > AccessibilityChildrenVector;
373 virtual bool isAccessibilityNodeObject() const { return false; }
374 virtual bool isAccessibilityRenderObject() const { return false; }
375 virtual bool isAccessibilityScrollbar() const { return false; }
376 virtual bool isAccessibilityScrollView() const { return false; }
377 virtual bool isAccessibilitySVGRoot() const { return false; }
379 bool accessibilityObjectContainsText(String *) const;
381 virtual bool isAnchor() const { return false; }
382 virtual bool isAttachment() const { return false; }
383 virtual bool isHeading() const { return false; }
384 virtual bool isLink() const { return false; }
385 virtual bool isImage() const { return false; }
386 virtual bool isNativeImage() const { return false; }
387 virtual bool isImageButton() const { return false; }
388 virtual bool isPasswordField() const { return false; }
389 virtual bool isNativeTextControl() const { return false; }
390 virtual bool isSearchField() const { return false; }
391 bool isWebArea() const { return roleValue() == WebAreaRole; }
392 bool isSeamlessWebArea() const { return roleValue() == SeamlessWebAreaRole; }
393 virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
394 virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
395 virtual bool isListBox() const { return roleValue() == ListBoxRole; }
396 virtual bool isMediaTimeline() const { return false; }
397 virtual bool isMenuRelated() const { return false; }
398 virtual bool isMenu() const { return false; }
399 virtual bool isMenuBar() const { return false; }
400 virtual bool isMenuButton() const { return false; }
401 virtual bool isMenuItem() const { return false; }
402 virtual bool isFileUploadButton() const { return false; }
403 virtual bool isInputImage() const { return false; }
404 virtual bool isProgressIndicator() const { return false; }
405 virtual bool isSlider() const { return false; }
406 virtual bool isInputSlider() const { return false; }
407 virtual bool isControl() const { return false; }
408 virtual bool isList() const { return false; }
409 virtual bool isAccessibilityTable() const { return false; }
410 virtual bool isDataTable() const { return false; }
411 virtual bool isTableRow() const { return false; }
412 virtual bool isTableColumn() const { return false; }
413 virtual bool isTableCell() const { return false; }
414 virtual bool isFieldset() const { return false; }
415 virtual bool isGroup() const { return false; }
416 virtual bool isARIATreeGridRow() const { return false; }
417 virtual bool isImageMapLink() const { return false; }
418 virtual bool isMenuList() const { return false; }
419 virtual bool isMenuListPopup() const { return false; }
420 virtual bool isMenuListOption() const { return false; }
421 virtual bool isSpinButton() const { return roleValue() == SpinButtonRole; }
422 virtual bool isSpinButtonPart() const { return false; }
423 virtual bool isMockObject() const { return false; }
424 virtual bool isMediaControlLabel() const { return false; }
425 bool isTextControl() const;
426 bool isARIATextControl() const;
427 bool isTabList() const { return roleValue() == TabListRole; }
428 bool isTabItem() const { return roleValue() == TabRole; }
429 bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
430 bool isComboBox() const { return roleValue() == ComboBoxRole; }
431 bool isTree() const { return roleValue() == TreeRole; }
432 bool isTreeItem() const { return roleValue() == TreeItemRole; }
433 bool isScrollbar() const { return roleValue() == ScrollBarRole; }
434 bool isButton() const;
435 bool isListItem() const { return roleValue() == ListItemRole; }
436 bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
437 bool isScrollView() const { return roleValue() == ScrollAreaRole; }
438 bool isCanvas() const { return roleValue() == CanvasRole; }
439 bool isPopUpButton() const { return roleValue() == PopUpButtonRole; }
440 bool isBlockquote() const;
441 bool isLandmark() const;
442 bool isColorWell() const { return roleValue() == ColorWellRole; }
444 virtual bool isChecked() const { return false; }
445 virtual bool isEnabled() const { return false; }
446 virtual bool isSelected() const { return false; }
447 virtual bool isFocused() const { return false; }
448 virtual bool isHovered() const { return false; }
449 virtual bool isIndeterminate() const { return false; }
450 virtual bool isLoaded() const { return false; }
451 virtual bool isMultiSelectable() const { return false; }
452 virtual bool isOffScreen() const { return false; }
453 virtual bool isPressed() const { return false; }
454 virtual bool isReadOnly() const { return false; }
455 virtual bool isUnvisited() const { return false; }
456 virtual bool isVisited() const { return false; }
457 virtual bool isRequired() const { return false; }
458 virtual bool isLinked() const { return false; }
459 virtual bool isExpanded() const;
460 virtual bool isVisible() const { return true; }
461 virtual bool isCollapsed() const { return false; }
462 virtual void setIsExpanded(bool) { }
464 // In a multi-select list, many items can be selected but only one is active at a time.
465 virtual bool isSelectedOptionActive() const { return false; }
467 virtual bool hasBoldFont() const { return false; }
468 virtual bool hasItalicFont() const { return false; }
469 bool hasMisspelling() const;
470 virtual bool hasPlainText() const { return false; }
471 virtual bool hasSameFont(RenderObject*) const { return false; }
472 virtual bool hasSameFontColor(RenderObject*) const { return false; }
473 virtual bool hasSameStyle(RenderObject*) const { return false; }
474 bool hasStaticText() const { return roleValue() == StaticTextRole; }
475 virtual bool hasUnderline() const { return false; }
476 bool hasHighlighting() const;
478 virtual bool canSetFocusAttribute() const { return false; }
479 virtual bool canSetTextRangeAttributes() const { return false; }
480 virtual bool canSetValueAttribute() const { return false; }
481 virtual bool canSetNumericValue() const { return false; }
482 virtual bool canSetSelectedAttribute() const { return false; }
483 virtual bool canSetSelectedChildrenAttribute() const { return false; }
484 virtual bool canSetExpandedAttribute() const { return false; }
486 virtual Node* node() const { return 0; }
487 virtual RenderObject* renderer() const { return 0; }
488 virtual bool accessibilityIsIgnored() const;
490 int blockquoteLevel() const;
491 virtual int headingLevel() const { return 0; }
492 virtual int tableLevel() const { return 0; }
493 virtual AccessibilityButtonState checkboxOrRadioValue() const;
494 virtual String valueDescription() const { return String(); }
495 virtual float valueForRange() const { return 0.0f; }
496 virtual float maxValueForRange() const { return 0.0f; }
497 virtual float minValueForRange() const { return 0.0f; }
498 virtual float stepValueForRange() const { return 0.0f; }
499 virtual AccessibilityObject* selectedRadioButton() { return 0; }
500 virtual AccessibilityObject* selectedTabItem() { return 0; }
501 virtual int layoutCount() const { return 0; }
502 virtual double estimatedLoadingProgress() const { return 0; }
503 static bool isARIAControl(AccessibilityRole);
504 static bool isARIAInput(AccessibilityRole);
505 virtual bool supportsARIAOwns() const { return false; }
506 virtual void ariaOwnsElements(AccessibilityChildrenVector&) const { }
507 virtual bool supportsARIAFlowTo() const { return false; }
508 virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
509 virtual bool ariaHasPopup() const { return false; }
510 virtual bool ariaPressedIsPresent() const;
511 bool ariaIsMultiline() const;
512 virtual const AtomicString& invalidStatus() const;
513 bool supportsARIAExpanded() const;
514 AccessibilitySortDirection sortDirection() const;
515 virtual bool canvasHasFallbackContent() const { return false; }
516 bool supportsRangeValue() const;
518 bool supportsARIASetSize() const;
519 bool supportsARIAPosInSet() const;
520 int ariaSetSize() const;
521 int ariaPosInSet() const;
523 // ARIA drag and drop
524 virtual bool supportsARIADropping() const { return false; }
525 virtual bool supportsARIADragging() const { return false; }
526 virtual bool isARIAGrabbed() { return false; }
527 virtual void setARIAGrabbed(bool) { }
528 virtual void determineARIADropEffects(Vector<String>&) { }
530 // Called on the root AX object to return the deepest available element.
531 virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
532 // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
533 virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
535 virtual AccessibilityObject* focusedUIElement() const;
537 virtual AccessibilityObject* firstChild() const { return 0; }
538 virtual AccessibilityObject* lastChild() const { return 0; }
539 virtual AccessibilityObject* previousSibling() const { return 0; }
540 virtual AccessibilityObject* nextSibling() const { return 0; }
541 virtual AccessibilityObject* parentObject() const = 0;
542 virtual AccessibilityObject* parentObjectUnignored() const;
543 virtual AccessibilityObject* parentObjectIfExists() const { return 0; }
544 static AccessibilityObject* firstAccessibleObjectFromNode(const Node*);
545 void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
547 virtual AccessibilityObject* observableObject() const { return 0; }
548 virtual void linkedUIElements(AccessibilityChildrenVector&) const { }
549 virtual AccessibilityObject* titleUIElement() const { return 0; }
550 virtual bool exposesTitleUIElement() const { return true; }
551 virtual AccessibilityObject* correspondingLabelForControlElement() const { return 0; }
552 virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; }
553 virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return 0; }
555 virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
556 virtual bool isPresentationalChildOfAriaRole() const { return false; }
557 virtual bool ariaRoleHasPresentationalChildren() const { return false; }
559 // Accessibility Text
560 virtual void accessibilityText(Vector<AccessibilityText>&) { };
562 // A programmatic way to set a name on an AccessibleObject.
563 virtual void setAccessibleName(const AtomicString&) { }
565 // Accessibility Text - (To be deprecated).
566 virtual String accessibilityDescription() const { return String(); }
567 virtual String title() const { return String(); }
568 virtual String helpText() const { return String(); }
570 // Methods for determining accessibility text.
571 virtual String stringValue() const { return String(); }
572 virtual String textUnderElement() const { return String(); }
573 virtual String text() const { return String(); }
574 virtual int textLength() const { return 0; }
575 virtual String ariaLabeledByAttribute() const { return String(); }
576 virtual String ariaDescribedByAttribute() const { return String(); }
577 const AtomicString& placeholderValue() const;
579 // Only if isColorWell()
580 virtual void colorValue(int& r, int& g, int& b) const { r = 0; g = 0; b = 0; }
582 void setRoleValue(AccessibilityRole role) { m_role = role; }
583 virtual AccessibilityRole roleValue() const { return m_role; }
585 virtual AXObjectCache* axObjectCache() const;
586 AXID axObjectID() const { return m_id; }
588 static AccessibilityObject* anchorElementForNode(Node*);
589 virtual Element* anchorElement() const { return 0; }
590 virtual Element* actionElement() const { return 0; }
591 virtual LayoutRect boundingBoxRect() const { return LayoutRect(); }
592 IntRect pixelSnappedBoundingBoxRect() const { return pixelSnappedIntRect(boundingBoxRect()); }
593 virtual LayoutRect elementRect() const = 0;
594 IntRect pixelSnappedElementRect() const { return pixelSnappedIntRect(elementRect()); }
595 LayoutSize size() const { return elementRect().size(); }
596 IntSize pixelSnappedSize() const { return elementRect().pixelSnappedSize(); }
597 virtual IntPoint clickPoint();
598 static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&);
600 TextIteratorBehavior textIteratorBehaviorForTextRange() const;
601 virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); }
602 unsigned selectionStart() const { return selectedTextRange().start; }
603 unsigned selectionEnd() const { return selectedTextRange().length; }
605 virtual KURL url() const { return KURL(); }
606 virtual VisibleSelection selection() const { return VisibleSelection(); }
607 virtual String selectedText() const { return String(); }
608 virtual const AtomicString& accessKey() const { return nullAtom; }
609 const String& actionVerb() const;
610 virtual Widget* widget() const { return 0; }
611 virtual Widget* widgetForAttachmentView() const { return 0; }
613 virtual Document* document() const;
614 virtual FrameView* topDocumentFrameView() const { return 0; }
615 virtual FrameView* documentFrameView() const;
616 String language() const;
617 // 1-based, to match the aria-level spec.
618 virtual unsigned hierarchicalLevel() const { return 0; }
620 virtual void setFocused(bool) { }
621 virtual void setSelectedText(const String&) { }
622 virtual void setSelectedTextRange(const PlainTextRange&) { }
623 virtual void setValue(const String&) { }
624 virtual void setValue(float) { }
625 virtual void setSelected(bool) { }
626 virtual void setSelectedRows(AccessibilityChildrenVector&) { }
628 virtual void makeRangeVisible(const PlainTextRange&) { }
629 virtual bool press() const;
630 bool performDefaultAction() const { return press(); }
632 virtual AccessibilityOrientation orientation() const;
633 virtual void increment() { }
634 virtual void decrement() { }
636 virtual void childrenChanged() { }
637 virtual void textChanged() { }
638 virtual void updateAccessibilityRole() { }
639 const AccessibilityChildrenVector& children();
640 virtual void addChildren() { }
641 virtual void addChild(AccessibilityObject*) { }
642 virtual void insertChild(AccessibilityObject*, unsigned) { }
644 virtual bool canHaveChildren() const { return true; }
645 virtual bool hasChildren() const { return m_haveChildren; }
646 virtual void updateChildrenIfNecessary();
647 virtual void setNeedsToUpdateChildren() { }
648 virtual void clearChildren();
650 virtual void detachFromParent();
652 virtual void detachFromParent() { }
655 virtual void selectedChildren(AccessibilityChildrenVector&) { }
656 virtual void visibleChildren(AccessibilityChildrenVector&) { }
657 virtual void tabChildren(AccessibilityChildrenVector&) { }
658 virtual bool shouldFocusActiveDescendant() const { return false; }
659 virtual AccessibilityObject* activeDescendant() const { return 0; }
660 virtual void handleActiveDescendantChanged() { }
661 virtual void handleAriaExpandedChanged() { }
662 bool isDescendantOfObject(const AccessibilityObject*) const;
663 bool isAncestorOfObject(const AccessibilityObject*) const;
664 AccessibilityObject* firstAnonymousBlockChild() const;
666 static AccessibilityRole ariaRoleToWebCoreRole(const String&);
667 bool hasAttribute(const QualifiedName&) const;
668 const AtomicString& getAttribute(const QualifiedName&) const;
670 virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
671 virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
673 VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
674 VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
675 VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
676 VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
677 VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
678 VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
679 VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
680 VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
681 VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
683 String stringForVisiblePositionRange(const VisiblePositionRange&) const;
684 virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); }
685 int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
686 virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { }
688 virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const { return VisiblePosition(); }
689 VisiblePosition nextVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.next(); }
690 VisiblePosition previousVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.previous(); }
691 VisiblePosition nextWordEnd(const VisiblePosition&) const;
692 VisiblePosition previousWordStart(const VisiblePosition&) const;
693 VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
694 VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
695 VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
696 VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
697 VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
698 VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
699 virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const { return VisiblePosition(); }
701 virtual VisiblePosition visiblePositionForIndex(int) const { return VisiblePosition(); }
702 virtual int indexForVisiblePosition(const VisiblePosition&) const { return 0; }
704 AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
705 int lineForPosition(const VisiblePosition&) const;
706 PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
707 virtual int index(const VisiblePosition&) const { return -1; }
709 virtual void lineBreaks(Vector<int>&) const { }
710 virtual PlainTextRange doAXRangeForLine(unsigned) const { return PlainTextRange(); }
711 PlainTextRange doAXRangeForPosition(const IntPoint&) const;
712 virtual PlainTextRange doAXRangeForIndex(unsigned) const { return PlainTextRange(); }
713 PlainTextRange doAXStyleRangeForIndex(unsigned) const;
715 virtual String doAXStringForRange(const PlainTextRange&) const { return String(); }
716 virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); }
717 String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&) const;
719 unsigned doAXLineForIndex(unsigned);
721 virtual String stringValueForMSAA() const { return String(); }
722 virtual String stringRoleForMSAA() const { return String(); }
723 virtual String nameForMSAA() const { return String(); }
724 virtual String descriptionForMSAA() const { return String(); }
725 virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); }
727 virtual String passwordFieldValue() const { return String(); }
729 // Used by an ARIA tree to get all its rows.
730 void ariaTreeRows(AccessibilityChildrenVector&);
731 // Used by an ARIA tree item to get all of its direct rows that it can disclose.
732 void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&);
733 // Used by an ARIA tree item to get only its content, and not its child tree items and groups.
734 void ariaTreeItemContent(AccessibilityChildrenVector&);
736 // ARIA live-region features.
737 bool supportsARIALiveRegion() const;
738 bool isInsideARIALiveRegion() const;
739 virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; }
740 virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; }
741 virtual bool ariaLiveRegionAtomic() const { return false; }
742 virtual bool ariaLiveRegionBusy() const { return false; }
744 bool supportsARIAAttributes() const;
746 // CSS3 Speech properties.
747 virtual ESpeak speakProperty() const { return SpeakNormal; }
749 // Make this object visible by scrolling as many nested scrollable views as needed.
750 virtual void scrollToMakeVisible() const;
751 // Same, but if the whole object can't be made visible, try for this subrect, in local coordinates.
752 virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const;
753 // Scroll this object to a given point in global coordinates of the top-level window.
754 virtual void scrollToGlobalPoint(const IntPoint&) const;
756 bool lastKnownIsIgnoredValue();
757 void setLastKnownIsIgnoredValue(bool);
759 // Fires a children changed notification on the parent if the isIgnored value changed.
760 void notifyIfIgnoredValueChanged();
762 // All math elements return true for isMathElement().
763 virtual bool isMathElement() const { return false; }
764 virtual bool isMathFraction() const { return false; }
765 virtual bool isMathFenced() const { return false; }
766 virtual bool isMathSubscriptSuperscript() const { return false; }
767 virtual bool isMathRow() const { return false; }
768 virtual bool isMathUnderOver() const { return false; }
769 virtual bool isMathRoot() const { return false; }
770 virtual bool isMathSquareRoot() const { return false; }
771 virtual bool isMathText() const { return false; }
772 virtual bool isMathNumber() const { return false; }
773 virtual bool isMathOperator() const { return false; }
774 virtual bool isMathFenceOperator() const { return false; }
775 virtual bool isMathSeparatorOperator() const { return false; }
776 virtual bool isMathIdentifier() const { return false; }
777 virtual bool isMathTable() const { return false; }
778 virtual bool isMathTableRow() const { return false; }
779 virtual bool isMathTableCell() const { return false; }
782 virtual AccessibilityObject* mathRadicandObject() { return 0; }
783 virtual AccessibilityObject* mathRootIndexObject() { return 0; }
785 // Under over components.
786 virtual AccessibilityObject* mathUnderObject() { return 0; }
787 virtual AccessibilityObject* mathOverObject() { return 0; }
789 // Fraction components.
790 virtual AccessibilityObject* mathNumeratorObject() { return 0; }
791 virtual AccessibilityObject* mathDenominatorObject() { return 0; }
793 // Subscript/superscript components.
794 virtual AccessibilityObject* mathBaseObject() { return 0; }
795 virtual AccessibilityObject* mathSubscriptObject() { return 0; }
796 virtual AccessibilityObject* mathSuperscriptObject() { return 0; }
798 // Fenced components.
799 virtual String mathFencedOpenString() const { return String(); }
800 virtual String mathFencedCloseString() const { return String(); }
802 #if HAVE(ACCESSIBILITY)
803 #if PLATFORM(GTK) || PLATFORM(EFL)
804 AccessibilityObjectWrapper* wrapper() const;
805 void setWrapper(AccessibilityObjectWrapper*);
806 #elif !PLATFORM(CHROMIUM)
807 AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
808 void setWrapper(AccessibilityObjectWrapper* wrapper)
816 void overrideAttachmentParent(AccessibilityObject* parent);
818 void overrideAttachmentParent(AccessibilityObject*) { }
821 #if HAVE(ACCESSIBILITY)
822 // a platform-specific method for determining if an attachment is ignored
823 bool accessibilityIgnoreAttachment() const;
824 // gives platforms the opportunity to indicate if and how an object should be included
825 AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const;
827 bool accessibilityIgnoreAttachment() const { return true; }
828 AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const { return DefaultBehavior; }
831 // allows for an AccessibilityObject to update its render tree or perform
832 // other operations update type operations
833 void updateBackingStore();
837 AccessibilityChildrenVector m_children;
838 mutable bool m_haveChildren;
839 AccessibilityRole m_role;
840 AccessibilityObjectInclusion m_lastKnownIsIgnoredValue;
842 virtual bool computeAccessibilityIsIgnored() const { return true; }
844 // If this object itself scrolls, return its ScrollableArea.
845 virtual ScrollableArea* getScrollableAreaIfScrollable() const { return 0; }
846 virtual void scrollTo(const IntPoint&) const { }
848 static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
849 static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*);
850 static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
851 virtual AccessibilityRole buttonRoleType() const;
853 #if PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
854 bool allowsTextRanges() const;
855 unsigned getLengthForTextRange() const;
857 bool allowsTextRanges() const { return isTextControl(); }
858 unsigned getLengthForTextRange() const { return text().length(); }
862 RetainPtr<WebAccessibilityObjectWrapper> m_wrapper;
863 #elif PLATFORM(WIN) && !OS(WINCE)
864 COMPtr<AccessibilityObjectWrapper> m_wrapper;
865 #elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY))
866 AtkObject* m_wrapper;
867 #elif PLATFORM(CHROMIUM)
872 #if !HAVE(ACCESSIBILITY)
873 inline const AccessibilityObject::AccessibilityChildrenVector& AccessibilityObject::children() { return m_children; }
874 inline const String& AccessibilityObject::actionVerb() const { return emptyString(); }
875 inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const { return -1; }
876 inline void AccessibilityObject::updateBackingStore() { }
879 } // namespace WebCore
881 #endif // AccessibilityObject_h