diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/accessibility/AccessibilityObject.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/accessibility/AccessibilityObject.h')
-rw-r--r-- | Source/WebCore/accessibility/AccessibilityObject.h | 365 |
1 files changed, 265 insertions, 100 deletions
diff --git a/Source/WebCore/accessibility/AccessibilityObject.h b/Source/WebCore/accessibility/AccessibilityObject.h index 390ae2f9e..63ea8c638 100644 --- a/Source/WebCore/accessibility/AccessibilityObject.h +++ b/Source/WebCore/accessibility/AccessibilityObject.h @@ -11,7 +11,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * 3. Neither the name of Apple Inc. ("Apple") nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * @@ -27,27 +27,28 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef AccessibilityObject_h -#define AccessibilityObject_h +#pragma once #include "FloatQuad.h" +#include "HTMLTextFormControlElement.h" #include "LayoutRect.h" #include "Path.h" -#include "TextIterator.h" +#include "Range.h" +#include "TextIteratorBehavior.h" #include "VisiblePosition.h" #include "VisibleSelection.h" #include <wtf/Forward.h> #include <wtf/RefPtr.h> #include <wtf/Vector.h> -#if PLATFORM(MAC) +#if PLATFORM(COCOA) #include <wtf/RetainPtr.h> #elif PLATFORM(WIN) #include "AccessibilityObjectWrapperWin.h" #include "COMPtr.h" #endif -#if PLATFORM(MAC) +#if PLATFORM(COCOA) typedef struct _NSRange NSRange; @@ -62,7 +63,7 @@ OBJC_CLASS WebAccessibilityObjectWrapper; typedef WebAccessibilityObjectWrapper AccessibilityObjectWrapper; -#elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY)) +#elif PLATFORM(GTK) typedef struct _AtkObject AtkObject; typedef struct _AtkObject AccessibilityObjectWrapper; #else @@ -76,17 +77,14 @@ class AXObjectCache; class Element; class Frame; class FrameView; -class HTMLAnchorElement; -class HTMLAreaElement; class IntPoint; class IntSize; class MainFrame; class Node; class Page; class RenderObject; -class RenderListItem; class ScrollableArea; -class VisibleSelection; +class ScrollView; class Widget; typedef unsigned AXID; @@ -102,10 +100,12 @@ enum AccessibilityRole { ApplicationStatusRole, ApplicationTimerRole, AudioRole, + BlockquoteRole, BrowserRole, BusyIndicatorRole, ButtonRole, CanvasRole, + CaptionRole, CellRole, CheckBoxRole, ColorWellRole, @@ -116,6 +116,7 @@ enum AccessibilityRole { DescriptionListRole, DescriptionListTermRole, DescriptionListDetailRole, + DetailsRole, DirectoryRole, DisclosureTriangleRole, DivRole, @@ -123,29 +124,30 @@ enum AccessibilityRole { DocumentArticleRole, DocumentMathRole, DocumentNoteRole, - DocumentRegionRole, DrawerRole, EditableTextRole, FooterRole, FormRole, GridRole, + GridCellRole, GroupRole, GrowAreaRole, HeadingRole, HelpTagRole, HorizontalRuleRole, IgnoredRole, + InlineRole, ImageRole, ImageMapRole, ImageMapLinkRole, IncrementorRole, LabelRole, - LandmarkApplicationRole, LandmarkBannerRole, LandmarkComplementaryRole, LandmarkContentInfoRole, LandmarkMainRole, LandmarkNavigationRole, + LandmarkRegionRole, LandmarkSearchRole, LegendRole, LinkRole, @@ -154,6 +156,7 @@ enum AccessibilityRole { ListBoxOptionRole, ListItemRole, ListMarkerRole, + MarkRole, MathElementRole, MatteRole, MenuRole, @@ -167,17 +170,24 @@ enum AccessibilityRole { OutlineRole, ParagraphRole, PopUpButtonRole, + PreRole, PresentationalRole, ProgressIndicatorRole, RadioButtonRole, RadioGroupRole, RowHeaderRole, RowRole, + RowGroupRole, + RubyBaseRole, + RubyBlockRole, + RubyInlineRole, + RubyRunRole, + RubyTextRole, RulerRole, RulerMarkerRole, ScrollAreaRole, ScrollBarRole, - SeamlessWebAreaRole, + SearchFieldRole, SheetRole, SliderRole, SliderThumbRole, @@ -186,8 +196,13 @@ enum AccessibilityRole { SplitGroupRole, SplitterRole, StaticTextRole, + SummaryRole, + SwitchRole, SystemWideRole, SVGRootRole, + SVGTextRole, + SVGTSpanRole, + SVGTextPathRole, TabGroupRole, TabListRole, TabPanelRole, @@ -205,6 +220,7 @@ enum AccessibilityRole { UserInterfaceTooltipRole, ValueIndicatorRole, VideoRole, + WebApplicationRole, WebAreaRole, WebCoreLinkRole, WindowRole, @@ -219,6 +235,9 @@ enum AccessibilityTextSource { TitleTagText, PlaceholderText, LabelByElementText, + TitleText, + SubtitleText, + ActionText, }; struct AccessibilityText { @@ -231,10 +250,10 @@ struct AccessibilityText { , textSource(s) { } - AccessibilityText(const String& t, const AccessibilityTextSource& s, const Vector<RefPtr<AccessibilityObject>> elements) + AccessibilityText(const String& t, const AccessibilityTextSource& s, Vector<RefPtr<AccessibilityObject>> elements) : text(t) , textSource(s) - , textElements(elements) + , textElements(WTFMove(elements)) { } AccessibilityText(const String& t, const AccessibilityTextSource& s, const RefPtr<AccessibilityObject> element) @@ -249,20 +268,24 @@ struct AccessibilityTextUnderElementMode { enum ChildrenInclusion { TextUnderElementModeSkipIgnoredChildren, TextUnderElementModeIncludeAllChildren, + TextUnderElementModeIncludeNameFromContentsChildren, // This corresponds to ARIA concept: nameFrom }; ChildrenInclusion childrenInclusion; bool includeFocusableContent; + Node* ignoredChildNode; - AccessibilityTextUnderElementMode(ChildrenInclusion c = TextUnderElementModeSkipIgnoredChildren, bool i = false) - : childrenInclusion(c) - , includeFocusableContent(i) - { } + AccessibilityTextUnderElementMode(ChildrenInclusion c = TextUnderElementModeSkipIgnoredChildren, bool i = false, Node* ignored = nullptr) + : childrenInclusion(c) + , includeFocusableContent(i) + , ignoredChildNode(ignored) + { } }; enum AccessibilityOrientation { AccessibilityOrientationVertical, AccessibilityOrientationHorizontal, + AccessibilityOrientationUndefined, }; enum AccessibilityObjectInclusion { @@ -317,6 +340,7 @@ enum AccessibilitySearchKey { ListSearchKey, LiveRegionSearchKey, MisspelledWordSearchKey, + OutlineSearchKey, PlainTextSearchKey, RadioGroupSearchKey, SameTypeSearchKey, @@ -342,13 +366,15 @@ struct AccessibilitySearchCriteria { String searchText; unsigned resultsLimit; bool visibleOnly; + bool immediateDescendantsOnly; - AccessibilitySearchCriteria(AccessibilityObject* startObject, AccessibilitySearchDirection searchDirection, String searchText, unsigned resultsLimit, bool visibleOnly) - : startObject(startObject) - , searchDirection(searchDirection) - , searchText(searchText) - , resultsLimit(resultsLimit) - , visibleOnly(visibleOnly) + AccessibilitySearchCriteria(AccessibilityObject* startObject, AccessibilitySearchDirection searchDirection, String searchText, unsigned resultsLimit, bool visibleOnly, bool immediateDescendantsOnly) + : startObject(startObject) + , searchDirection(searchDirection) + , searchText(searchText) + , resultsLimit(resultsLimit) + , visibleOnly(visibleOnly) + , immediateDescendantsOnly(immediateDescendantsOnly) { } }; @@ -366,6 +392,11 @@ struct VisiblePositionRange { , end(e) { } + VisiblePositionRange(const VisibleSelection& selection) + : start(selection.start()) + , end(selection.end()) + { } + bool isNull() const { return start.isNull() || end.isNull(); } }; @@ -387,6 +418,38 @@ struct PlainTextRange { bool isNull() const { return !start && !length; } }; +enum AccessibilitySelectTextActivity { + FindAndReplaceActivity, + FindAndSelectActivity, + FindAndCapitalize, + FindAndLowercase, + FindAndUppercase +}; + +enum AccessibilitySelectTextAmbiguityResolution { + ClosestAfterSelectionAmbiguityResolution, + ClosestBeforeSelectionAmbiguityResolution, + ClosestToSelectionAmbiguityResolution +}; + +struct AccessibilitySelectTextCriteria { + AccessibilitySelectTextActivity activity; + AccessibilitySelectTextAmbiguityResolution ambiguityResolution; + String replacementString; + Vector<String> searchStrings; + + AccessibilitySelectTextCriteria(AccessibilitySelectTextActivity activity, AccessibilitySelectTextAmbiguityResolution ambiguityResolution, const String& replacementString) + : activity(activity) + , ambiguityResolution(ambiguityResolution) + , replacementString(replacementString) + { } +}; + +enum AccessibilityMathScriptObjectType { Subscript, Superscript }; +enum AccessibilityMathMultiscriptObjectType { PreSubscript, PreSuperscript, PostSubscript, PostSuperscript }; + +enum AccessibilityARIACurrentState { ARIACurrentFalse, ARIACurrentTrue, ARIACurrentPage, ARIACurrentStep, ARIACurrentLocation, ARIACurrentDate, ARIACurrentTime }; + class AccessibilityObject : public RefCounted<AccessibilityObject> { protected: AccessibilityObject(); @@ -412,25 +475,29 @@ public: virtual bool isAccessibilityScrollbar() const { return false; } virtual bool isAccessibilityScrollView() const { return false; } virtual bool isAccessibilitySVGRoot() const { return false; } + virtual bool isAccessibilitySVGElement() const { return false; } bool accessibilityObjectContainsText(String *) const; - - virtual bool isAnchor() const { return false; } - virtual bool isAttachment() const { return false; } + + virtual bool isAttachmentElement() const { return false; } virtual bool isHeading() const { return false; } virtual bool isLink() const { return false; } virtual bool isImage() const { return false; } + virtual bool isImageMap() const { return roleValue() == ImageMapRole; } virtual bool isNativeImage() const { return false; } virtual bool isImageButton() const { return false; } virtual bool isPasswordField() const { return false; } + bool isContainedByPasswordField() const; + virtual AccessibilityObject* passwordFieldOrContainingPasswordField() { return nullptr; } virtual bool isNativeTextControl() const { return false; } virtual bool isSearchField() const { return false; } bool isWebArea() const { return roleValue() == WebAreaRole; } - bool isSeamlessWebArea() const { return roleValue() == SeamlessWebAreaRole; } virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; } virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; } - virtual bool isListBox() const { return roleValue() == ListBoxRole; } + virtual bool isNativeListBox() const { return false; } + bool isListBox() const { return roleValue() == ListBoxRole; } virtual bool isListBoxOption() const { return false; } + virtual bool isAttachment() const { return false; } virtual bool isMediaTimeline() const { return false; } virtual bool isMenuRelated() const { return false; } virtual bool isMenu() const { return false; } @@ -444,9 +511,9 @@ public: virtual bool isSliderThumb() const { return false; } virtual bool isInputSlider() const { return false; } virtual bool isControl() const { return false; } + virtual bool isLabel() const { return false; } virtual bool isList() const { return false; } virtual bool isTable() const { return false; } - virtual bool isAccessibilityTable() const { return false; } virtual bool isDataTable() const { return false; } virtual bool isTableRow() const { return false; } virtual bool isTableColumn() const { return false; } @@ -463,8 +530,11 @@ public: virtual bool isSpinButtonPart() const { return false; } virtual bool isMockObject() const { return false; } virtual bool isMediaControlLabel() const { return false; } + bool isSwitch() const { return roleValue() == SwitchRole; } + bool isToggleButton() const { return roleValue() == ToggleButtonRole; } bool isTextControl() const; bool isARIATextControl() const; + bool isNonNativeTextControl() const; bool isTabList() const { return roleValue() == TabListRole; } bool isTabItem() const { return roleValue() == TabRole; } bool isRadioGroup() const { return roleValue() == RadioGroupRole; } @@ -483,7 +553,15 @@ public: bool isColorWell() const { return roleValue() == ColorWellRole; } bool isRangeControl() const; bool isMeter() const; - + bool isSplitter() const { return roleValue() == SplitterRole; } + bool isToolbar() const { return roleValue() == ToolbarRole; } + bool isStyleFormatGroup() const; + bool isSubscriptStyleGroup() const; + bool isSuperscriptStyleGroup() const; + bool isFigure() const; + bool isSummary() const { return roleValue() == SummaryRole; } + bool isOutput() const; + virtual bool isChecked() const { return false; } virtual bool isEnabled() const { return false; } virtual bool isSelected() const { return false; } @@ -494,7 +572,6 @@ public: virtual bool isMultiSelectable() const { return false; } virtual bool isOffScreen() const { return false; } virtual bool isPressed() const { return false; } - virtual bool isReadOnly() const { return false; } virtual bool isUnvisited() const { return false; } virtual bool isVisited() const { return false; } virtual bool isRequired() const { return false; } @@ -519,6 +596,8 @@ public: virtual bool hasUnderline() const { return false; } bool hasHighlighting() const; + bool supportsDatetimeAttribute() const; + virtual bool canSetFocusAttribute() const { return false; } virtual bool canSetTextRangeAttributes() const { return false; } virtual bool canSetValueAttribute() const { return false; } @@ -527,14 +606,14 @@ public: virtual bool canSetSelectedChildrenAttribute() const { return false; } virtual bool canSetExpandedAttribute() const { return false; } - Element* element() const; - virtual Node* node() const { return 0; } - virtual RenderObject* renderer() const { return 0; } + virtual Element* element() const; + virtual Node* node() const { return nullptr; } + virtual RenderObject* renderer() const { return nullptr; } virtual bool accessibilityIsIgnored() const; virtual AccessibilityObjectInclusion defaultObjectInclusion() const; bool accessibilityIsIgnoredByDefault() const; - int blockquoteLevel() const; + unsigned blockquoteLevel() const; virtual int headingLevel() const { return 0; } virtual int tableLevel() const { return 0; } virtual AccessibilityButtonState checkboxOrRadioValue() const; @@ -543,28 +622,38 @@ public: virtual float maxValueForRange() const { return 0.0f; } virtual float minValueForRange() const { return 0.0f; } virtual float stepValueForRange() const { return 0.0f; } - virtual AccessibilityObject* selectedRadioButton() { return 0; } - virtual AccessibilityObject* selectedTabItem() { return 0; } + virtual AccessibilityObject* selectedRadioButton() { return nullptr; } + virtual AccessibilityObject* selectedTabItem() { return nullptr; } virtual int layoutCount() const { return 0; } virtual double estimatedLoadingProgress() const { return 0; } static bool isARIAControl(AccessibilityRole); static bool isARIAInput(AccessibilityRole); + virtual bool supportsARIAOwns() const { return false; } - virtual void ariaOwnsElements(AccessibilityChildrenVector&) const { } - virtual bool supportsARIAFlowTo() const { return false; } - virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { } - virtual bool supportsARIADescribedBy() const { return false; } - virtual void ariaDescribedByElements(AccessibilityChildrenVector&) const { } + void ariaControlsElements(AccessibilityChildrenVector&) const; + void ariaDescribedByElements(AccessibilityChildrenVector&) const; + void ariaFlowToElements(AccessibilityChildrenVector&) const; + void ariaLabelledByElements(AccessibilityChildrenVector&) const; + void ariaOwnsElements(AccessibilityChildrenVector&) const; + virtual bool ariaHasPopup() const { return false; } - virtual bool ariaPressedIsPresent() const; + bool ariaPressedIsPresent() const; bool ariaIsMultiline() const; - virtual const AtomicString& invalidStatus() const; - bool supportsARIAExpanded() const; + String invalidStatus() const; + bool supportsARIAPressed() const; + bool supportsExpanded() const; + bool supportsChecked() const; AccessibilitySortDirection sortDirection() const; virtual bool canvasHasFallbackContent() const { return false; } bool supportsRangeValue() const; String identifierAttribute() const; void classList(Vector<String>&) const; + virtual String roleDescription() const; + AccessibilityARIACurrentState ariaCurrentState() const; + + // This function checks if the object should be ignored when there's a modal dialog displayed. + bool ignoredFromARIAModalPresence() const; + bool isAriaModalDescendant(Node*) const; bool supportsARIASetSize() const; bool supportsARIAPosInSet() const; @@ -579,38 +668,50 @@ public: virtual void determineARIADropEffects(Vector<String>&) { } // Called on the root AX object to return the deepest available element. - virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; } + virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return nullptr; } // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject. virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const; virtual AccessibilityObject* focusedUIElement() const; - virtual AccessibilityObject* firstChild() const { return 0; } - virtual AccessibilityObject* lastChild() const { return 0; } - virtual AccessibilityObject* previousSibling() const { return 0; } - virtual AccessibilityObject* nextSibling() const { return 0; } + virtual AccessibilityObject* firstChild() const { return nullptr; } + virtual AccessibilityObject* lastChild() const { return nullptr; } + virtual AccessibilityObject* previousSibling() const { return nullptr; } + virtual AccessibilityObject* nextSibling() const { return nullptr; } + virtual AccessibilityObject* nextSiblingUnignored(int limit) const; + virtual AccessibilityObject* previousSiblingUnignored(int limit) const; virtual AccessibilityObject* parentObject() const = 0; virtual AccessibilityObject* parentObjectUnignored() const; - virtual AccessibilityObject* parentObjectIfExists() const { return 0; } + virtual AccessibilityObject* parentObjectIfExists() const { return nullptr; } static AccessibilityObject* firstAccessibleObjectFromNode(const Node*); void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&); virtual bool isDescendantOfBarrenParent() const { return false; } + + bool isDescendantOfRole(AccessibilityRole) const; + + // Text selection + RefPtr<Range> rangeOfStringClosestToRangeInDirection(Range*, AccessibilitySearchDirection, Vector<String>&) const; + RefPtr<Range> selectionRange() const; + String selectText(AccessibilitySelectTextCriteria*); - virtual AccessibilityObject* observableObject() const { return 0; } + virtual AccessibilityObject* observableObject() const { return nullptr; } virtual void linkedUIElements(AccessibilityChildrenVector&) const { } - virtual AccessibilityObject* titleUIElement() const { return 0; } + virtual AccessibilityObject* titleUIElement() const { return nullptr; } virtual bool exposesTitleUIElement() const { return true; } - virtual AccessibilityObject* correspondingLabelForControlElement() const { return 0; } - virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; } - virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return 0; } + virtual AccessibilityObject* correspondingLabelForControlElement() const { return nullptr; } + virtual AccessibilityObject* correspondingControlForLabelElement() const { return nullptr; } + virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return nullptr; } virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; } virtual bool isPresentationalChildOfAriaRole() const { return false; } virtual bool ariaRoleHasPresentationalChildren() const { return false; } + virtual bool inheritsPresentationalRole() const { return false; } // Accessibility Text virtual void accessibilityText(Vector<AccessibilityText>&) { }; - + // A single method for getting a computed label for an AXObject. It condenses the nuances of accessibilityText. Used by Inspector. + String computedLabel(); + // A programmatic way to set a name on an AccessibleObject. virtual void setAccessibleName(const AtomicString&) { } virtual bool hasAttributesRequiredForInclusion() const; @@ -628,13 +729,17 @@ public: virtual String ariaLabeledByAttribute() const { return String(); } virtual String ariaDescribedByAttribute() const { return String(); } const AtomicString& placeholderValue() const; - + bool accessibleNameDerivesFromContent() const; + + // Abbreviations + virtual String expandedTextValue() const { return String(); } + virtual bool supportsExpandedTextValue() const { return false; } + void elementsFromAttribute(Vector<Element*>&, const QualifiedName&) const; // Only if isColorWell() virtual void colorValue(int& r, int& g, int& b) const { r = 0; g = 0; b = 0; } - void setRoleValue(AccessibilityRole role) { m_role = role; } virtual AccessibilityRole roleValue() const { return m_role; } virtual AXObjectCache* axObjectCache() const; @@ -642,14 +747,13 @@ public: static AccessibilityObject* anchorElementForNode(Node*); static AccessibilityObject* headingElementForNode(Node*); - virtual Element* anchorElement() const { return 0; } - virtual Element* actionElement() const { return 0; } + virtual Element* anchorElement() const { return nullptr; } + bool supportsPressAction() const; + virtual Element* actionElement() const { return nullptr; } virtual LayoutRect boundingBoxRect() const { return LayoutRect(); } - IntRect pixelSnappedBoundingBoxRect() const { return pixelSnappedIntRect(boundingBoxRect()); } + IntRect pixelSnappedBoundingBoxRect() const { return snappedIntRect(boundingBoxRect()); } virtual LayoutRect elementRect() const = 0; - IntRect pixelSnappedElementRect() const { return pixelSnappedIntRect(elementRect()); } LayoutSize size() const { return elementRect().size(); } - IntSize pixelSnappedSize() const { return elementRect().pixelSnappedSize(); } virtual IntPoint clickPoint(); static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&); virtual Path elementPath() const { return Path(); } @@ -665,13 +769,15 @@ public: virtual String selectedText() const { return String(); } virtual const AtomicString& accessKey() const { return nullAtom; } const String& actionVerb() const; - virtual Widget* widget() const { return 0; } - virtual Widget* widgetForAttachmentView() const { return 0; } + virtual Widget* widget() const { return nullptr; } + virtual Widget* widgetForAttachmentView() const { return nullptr; } Page* page() const; virtual Document* document() const; virtual FrameView* documentFrameView() const; + Frame* frame() const; MainFrame* mainFrame() const; Document* topDocument() const; + ScrollView* scrollViewAncestor() const; String language() const; // 1-based, to match the aria-level spec. virtual unsigned hierarchicalLevel() const { return 0; } @@ -685,8 +791,8 @@ public: virtual void setSelectedRows(AccessibilityChildrenVector&) { } virtual void makeRangeVisible(const PlainTextRange&) { } - virtual bool press() const; - bool performDefaultAction() const { return press(); } + virtual bool press(); + bool performDefaultAction() { return press(); } virtual AccessibilityOrientation orientation() const; virtual void increment() { } @@ -699,23 +805,27 @@ public: virtual void addChildren() { } virtual void addChild(AccessibilityObject*) { } virtual void insertChild(AccessibilityObject*, unsigned) { } + + virtual bool shouldIgnoreAttributeRole() const { return false; } virtual bool canHaveChildren() const { return true; } virtual bool hasChildren() const { return m_haveChildren; } virtual void updateChildrenIfNecessary(); virtual void setNeedsToUpdateChildren() { } virtual void clearChildren(); -#if PLATFORM(MAC) +#if PLATFORM(COCOA) virtual void detachFromParent(); #else virtual void detachFromParent() { } #endif + virtual bool isDetachedFromParent() { return false; } + virtual bool canHaveSelectedChildren() const { return false; } virtual void selectedChildren(AccessibilityChildrenVector&) { } virtual void visibleChildren(AccessibilityChildrenVector&) { } virtual void tabChildren(AccessibilityChildrenVector&) { } virtual bool shouldFocusActiveDescendant() const { return false; } - virtual AccessibilityObject* activeDescendant() const { return 0; } + virtual AccessibilityObject* activeDescendant() const { return nullptr; } virtual void handleActiveDescendantChanged() { } virtual void handleAriaExpandedChanged() { } bool isDescendantOfObject(const AccessibilityObject*) const; @@ -725,10 +835,14 @@ public: static AccessibilityRole ariaRoleToWebCoreRole(const String&); bool hasAttribute(const QualifiedName&) const; const AtomicString& getAttribute(const QualifiedName&) const; + bool hasTagName(const QualifiedName&) const; virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); } virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); } + RefPtr<Range> elementRange() const; + static bool replacedNodeNeedsCharacter(Node* replacedNode); + VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const; VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const; VisiblePositionRange positionOfRightWord(const VisiblePosition&) const; @@ -738,9 +852,14 @@ public: VisiblePositionRange paragraphForPosition(const VisiblePosition&) const; VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const; VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const; + VisiblePositionRange lineRangeForPosition(const VisiblePosition&) const; + + RefPtr<Range> rangeForPlainTextRange(const PlainTextRange&) const; - String stringForVisiblePositionRange(const VisiblePositionRange&) const; + static String stringForVisiblePositionRange(const VisiblePositionRange&); + String stringForRange(RefPtr<Range>) const; virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const { return IntRect(); } + virtual IntRect boundsForRange(const RefPtr<Range>) const { return IntRect(); } int lengthForVisiblePositionRange(const VisiblePositionRange&) const; virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const { } @@ -774,10 +893,13 @@ public: virtual String doAXStringForRange(const PlainTextRange&) const { return String(); } virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); } - String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&) const; + virtual IntRect doAXBoundsForRangeUsingCharacterOffset(const PlainTextRange&) const { return IntRect(); } + static String listMarkerTextForNodeAndPosition(Node*, const VisiblePosition&); unsigned doAXLineForIndex(unsigned); + String computedRoleString() const; + virtual String stringValueForMSAA() const { return String(); } virtual String stringRoleForMSAA() const { return String(); } virtual String nameForMSAA() const { return String(); } @@ -785,7 +907,10 @@ public: virtual AccessibilityRole roleValueForMSAA() const { return roleValue(); } virtual String passwordFieldValue() const { return String(); } - + bool isValueAutofilled() const; + bool isValueAutofillAvailable() const; + AutoFillButtonType valueAutofillButtonType() const; + // Used by an ARIA tree to get all its rows. void ariaTreeRows(AccessibilityChildrenVector&); // Used by an ARIA tree item to get all of its direct rows that it can disclose. @@ -796,10 +921,17 @@ public: // ARIA live-region features. bool supportsARIALiveRegion() const; bool isInsideARIALiveRegion() const; - virtual const AtomicString& ariaLiveRegionStatus() const { return nullAtom; } + virtual const String ariaLiveRegionStatus() const { return String(); } virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom; } virtual bool ariaLiveRegionAtomic() const { return false; } - virtual bool ariaLiveRegionBusy() const { return false; } + virtual bool isBusy() const { return false; } + static const String defaultLiveRegionStatusForRole(AccessibilityRole); + static bool liveRegionStatusIsEnabled(const AtomicString&); + static bool contentEditableAttributeIsEnabled(Element*); + bool hasContentEditableAttributeSet() const; + + bool supportsARIAReadOnly() const; + String ariaReadOnlyValue() const; bool supportsARIAAttributes() const; @@ -812,7 +944,13 @@ public: virtual void scrollToMakeVisibleWithSubFocus(const IntRect&) const; // Scroll this object to a given point in global coordinates of the top-level window. virtual void scrollToGlobalPoint(const IntPoint&) const; - + + enum ScrollByPageDirection { Up, Down, Left, Right }; + bool scrollByPage(ScrollByPageDirection) const; + IntPoint scrollPosition() const; + IntSize scrollContentsSize() const; + IntRect scrollVisibleContentRect() const; + bool lastKnownIsIgnoredValue(); void setLastKnownIsIgnoredValue(bool); @@ -838,28 +976,32 @@ public: virtual bool isMathTableRow() const { return false; } virtual bool isMathTableCell() const { return false; } virtual bool isMathMultiscript() const { return false; } + virtual bool isMathToken() const { return false; } + virtual bool isMathScriptObject(AccessibilityMathScriptObjectType) const { return false; } + virtual bool isMathMultiscriptObject(AccessibilityMathMultiscriptObjectType) const { return false; } // Root components. - virtual AccessibilityObject* mathRadicandObject() { return 0; } - virtual AccessibilityObject* mathRootIndexObject() { return 0; } + virtual AccessibilityObject* mathRadicandObject() { return nullptr; } + virtual AccessibilityObject* mathRootIndexObject() { return nullptr; } // Under over components. - virtual AccessibilityObject* mathUnderObject() { return 0; } - virtual AccessibilityObject* mathOverObject() { return 0; } + virtual AccessibilityObject* mathUnderObject() { return nullptr; } + virtual AccessibilityObject* mathOverObject() { return nullptr; } // Fraction components. - virtual AccessibilityObject* mathNumeratorObject() { return 0; } - virtual AccessibilityObject* mathDenominatorObject() { return 0; } + virtual AccessibilityObject* mathNumeratorObject() { return nullptr; } + virtual AccessibilityObject* mathDenominatorObject() { return nullptr; } // Subscript/superscript components. - virtual AccessibilityObject* mathBaseObject() { return 0; } - virtual AccessibilityObject* mathSubscriptObject() { return 0; } - virtual AccessibilityObject* mathSuperscriptObject() { return 0; } + virtual AccessibilityObject* mathBaseObject() { return nullptr; } + virtual AccessibilityObject* mathSubscriptObject() { return nullptr; } + virtual AccessibilityObject* mathSuperscriptObject() { return nullptr; } // Fenced components. virtual String mathFencedOpenString() const { return String(); } virtual String mathFencedCloseString() const { return String(); } virtual int mathLineThickness() const { return 0; } + virtual bool isAnonymousMathOperator() const { return false; } // Multiscripts components. typedef Vector<std::pair<AccessibilityObject*, AccessibilityObject*>> AccessibilityMathMultiscriptPairs; @@ -872,7 +1014,7 @@ public: bool isHidden() const { return isARIAHidden() || isDOMHidden(); } #if HAVE(ACCESSIBILITY) -#if PLATFORM(GTK) || PLATFORM(EFL) +#if PLATFORM(GTK) AccessibilityObjectWrapper* wrapper() const; void setWrapper(AccessibilityObjectWrapper*); #else @@ -884,7 +1026,7 @@ public: #endif #endif -#if PLATFORM(MAC) +#if PLATFORM(COCOA) void overrideAttachmentParent(AccessibilityObject* parent); #else void overrideAttachmentParent(AccessibilityObject*) { } @@ -902,12 +1044,30 @@ public: #if PLATFORM(IOS) int accessibilityPasswordFieldLength(); + bool hasTouchEventListener() const; + bool isInputTypePopupButton() const; #endif // allows for an AccessibilityObject to update its render tree or perform // other operations update type operations void updateBackingStore(); +#if PLATFORM(COCOA) + bool preventKeyboardDOMEventDispatch() const; + void setPreventKeyboardDOMEventDispatch(bool); +#endif + +#if PLATFORM(COCOA) && !PLATFORM(IOS) + bool caretBrowsingEnabled() const; + void setCaretBrowsingEnabled(bool); +#endif + + AccessibilityObject* focusableAncestor(); + AccessibilityObject* editableAncestor(); + AccessibilityObject* highestEditableAncestor(); + + static const AccessibilityObject* matchedParent(const AccessibilityObject&, bool includeSelf, const std::function<bool(const AccessibilityObject&)>&); + protected: AXID m_id; AccessibilityChildrenVector m_children; @@ -918,17 +1078,22 @@ protected: virtual bool computeAccessibilityIsIgnored() const { return true; } // If this object itself scrolls, return its ScrollableArea. - virtual ScrollableArea* getScrollableAreaIfScrollable() const { return 0; } + virtual ScrollableArea* getScrollableAreaIfScrollable() const { return nullptr; } virtual void scrollTo(const IntPoint&) const { } - + ScrollableArea* scrollableAreaAncestor() const; + void scrollAreaAndAncestor(std::pair<ScrollableArea*, AccessibilityObject*>&) const; + static bool isAccessibilityObjectSearchMatchAtIndex(AccessibilityObject*, AccessibilitySearchCriteria*, size_t); static bool isAccessibilityObjectSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*); static bool isAccessibilityTextSearchMatch(AccessibilityObject*, AccessibilitySearchCriteria*); static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&); virtual AccessibilityRole buttonRoleType() const; bool isOnscreen() const; - -#if (PLATFORM(GTK) || PLATFORM(EFL)) && HAVE(ACCESSIBILITY) + bool dispatchTouchEvent(); + + void ariaElementsFromAttribute(AccessibilityChildrenVector&, const QualifiedName&) const; + +#if PLATFORM(GTK) && HAVE(ACCESSIBILITY) bool allowsTextRanges() const; unsigned getLengthForTextRange() const; #else @@ -936,11 +1101,11 @@ protected: unsigned getLengthForTextRange() const { return text().length(); } #endif -#if PLATFORM(MAC) +#if PLATFORM(COCOA) RetainPtr<WebAccessibilityObjectWrapper> m_wrapper; #elif PLATFORM(WIN) COMPtr<AccessibilityObjectWrapper> m_wrapper; -#elif PLATFORM(GTK) || (PLATFORM(EFL) && HAVE(ACCESSIBILITY)) +#elif PLATFORM(GTK) AtkObject* m_wrapper; #endif }; @@ -952,9 +1117,9 @@ inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const { inline void AccessibilityObject::updateBackingStore() { } #endif -#define ACCESSIBILITY_OBJECT_TYPE_CASTS(ToValueTypeName, predicate) \ - TYPE_CASTS_BASE(ToValueTypeName, AccessibilityObject, object, object->predicate, object.predicate) - } // namespace WebCore -#endif // AccessibilityObject_h +#define SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(ToValueTypeName, predicate) \ +SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \ + static bool isType(const WebCore::AccessibilityObject& object) { return object.predicate; } \ +SPECIALIZE_TYPE_TRAITS_END() |