| /* |
| * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved. |
| * Copyright (C) 2008 Nuanti Ltd. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 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 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. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
| * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
| * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #pragma once |
| |
| #include "AccessibilityObjectInterface.h" |
| #include "FloatQuad.h" |
| #include "HTMLTextFormControlElement.h" |
| #include "LayoutRect.h" |
| #include "Path.h" |
| #include "Range.h" |
| #include "TextIteratorBehavior.h" |
| #include "VisiblePosition.h" |
| #include "VisibleSelection.h" |
| #include <wtf/Forward.h> |
| #include <wtf/Function.h> |
| #include <wtf/RefPtr.h> |
| #include <wtf/Vector.h> |
| |
| #if PLATFORM(COCOA) |
| #include <wtf/RetainPtr.h> |
| #endif |
| |
| #if USE(ATK) |
| #include <wtf/glib/GRefPtr.h> |
| #endif |
| |
| #if PLATFORM(COCOA) |
| |
| typedef struct _NSRange NSRange; |
| |
| OBJC_CLASS NSArray; |
| OBJC_CLASS NSAttributedString; |
| OBJC_CLASS NSData; |
| OBJC_CLASS NSMutableAttributedString; |
| OBJC_CLASS NSString; |
| OBJC_CLASS NSValue; |
| OBJC_CLASS NSView; |
| |
| #endif |
| |
| namespace WebCore { |
| |
| class AccessibilityObject; |
| class AccessibilityScrollView; |
| class AXObjectCache; |
| class Element; |
| class Frame; |
| class FrameView; |
| class IntPoint; |
| class IntSize; |
| class Node; |
| class Page; |
| class RenderObject; |
| class ScrollableArea; |
| class ScrollView; |
| class Widget; |
| struct ScrollRectToVisibleOptions; |
| |
| enum class AccessibilityTextSource { |
| Alternative, |
| Children, |
| Summary, |
| Help, |
| Visible, |
| TitleTag, |
| Placeholder, |
| LabelByElement, |
| Title, |
| Subtitle, |
| Action, |
| }; |
| |
| struct AccessibilityText { |
| String text; |
| AccessibilityTextSource textSource; |
| Vector<RefPtr<AccessibilityObject>> textElements; |
| |
| AccessibilityText(const String& t, const AccessibilityTextSource& s) |
| : text(t) |
| , textSource(s) |
| { } |
| |
| AccessibilityText(const String& t, const AccessibilityTextSource& s, Vector<RefPtr<AccessibilityObject>> elements) |
| : text(t) |
| , textSource(s) |
| , textElements(WTFMove(elements)) |
| { } |
| |
| AccessibilityText(const String& t, const AccessibilityTextSource& s, RefPtr<AccessibilityObject>&& element) |
| : text(t) |
| , textSource(s) |
| { |
| textElements.append(WTFMove(element)); |
| } |
| }; |
| |
| 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, Node* ignored = nullptr) |
| : childrenInclusion(c) |
| , includeFocusableContent(i) |
| , ignoredChildNode(ignored) |
| { } |
| }; |
| |
| // Use this struct to store the isIgnored data that depends on the parents, so that in addChildren() |
| // we avoid going up the parent chain for each element while traversing the tree with useful information already. |
| struct AccessibilityIsIgnoredFromParentData { |
| AccessibilityObject* parent { nullptr }; |
| bool isAXHidden { false }; |
| bool isPresentationalChildOfAriaRole { false }; |
| bool isDescendantOfBarrenParent { false }; |
| |
| AccessibilityIsIgnoredFromParentData(AccessibilityObject* parent = nullptr) |
| : parent(parent) |
| { } |
| |
| bool isNull() const { return !parent; } |
| }; |
| |
| enum class AccessibilityOrientation { |
| Vertical, |
| Horizontal, |
| Undefined, |
| }; |
| |
| enum class AccessibilityObjectInclusion { |
| IncludeObject, |
| IgnoreObject, |
| DefaultBehavior, |
| }; |
| |
| enum class AccessibilityButtonState { |
| Off = 0, |
| On, |
| Mixed, |
| }; |
| |
| enum class AccessibilitySortDirection { |
| None, |
| Ascending, |
| Descending, |
| Other, |
| Invalid, |
| }; |
| |
| enum class AccessibilitySearchDirection { |
| Next = 1, |
| Previous, |
| }; |
| |
| enum class AccessibilitySearchKey { |
| AnyType = 1, |
| Article, |
| BlockquoteSameLevel, |
| Blockquote, |
| BoldFont, |
| Button, |
| CheckBox, |
| Control, |
| DifferentType, |
| FontChange, |
| FontColorChange, |
| Frame, |
| Graphic, |
| HeadingLevel1, |
| HeadingLevel2, |
| HeadingLevel3, |
| HeadingLevel4, |
| HeadingLevel5, |
| HeadingLevel6, |
| HeadingSameLevel, |
| Heading, |
| Highlighted, |
| ItalicFont, |
| KeyboardFocusable, |
| Landmark, |
| Link, |
| List, |
| LiveRegion, |
| MisspelledWord, |
| Outline, |
| PlainText, |
| RadioGroup, |
| SameType, |
| StaticText, |
| StyleChange, |
| TableSameLevel, |
| Table, |
| TextField, |
| Underline, |
| UnvisitedLink, |
| VisitedLink, |
| }; |
| |
| enum class AccessibilityVisiblePositionForBounds { |
| First, |
| Last, |
| }; |
| |
| struct AccessibilitySearchCriteria { |
| AccessibilityObject* startObject; |
| AccessibilitySearchDirection searchDirection; |
| Vector<AccessibilitySearchKey> searchKeys; |
| String searchText; |
| unsigned resultsLimit; |
| bool visibleOnly; |
| bool immediateDescendantsOnly; |
| |
| 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) |
| { } |
| }; |
| |
| enum class AccessibilityDetachmentType { CacheDestroyed, ElementDestroyed }; |
| |
| struct VisiblePositionRange { |
| |
| VisiblePosition start; |
| VisiblePosition end; |
| |
| VisiblePositionRange() {} |
| |
| VisiblePositionRange(const VisiblePosition& s, const VisiblePosition& e) |
| : start(s) |
| , end(e) |
| { } |
| |
| VisiblePositionRange(const VisibleSelection& selection) |
| : start(selection.start()) |
| , end(selection.end()) |
| { } |
| |
| bool isNull() const { return start.isNull() || end.isNull(); } |
| }; |
| |
| struct PlainTextRange { |
| |
| unsigned start { 0 }; |
| unsigned length { 0 }; |
| |
| PlainTextRange() = default; |
| |
| PlainTextRange(unsigned s, unsigned l) |
| : start(s) |
| , length(l) |
| { } |
| |
| #if PLATFORM(COCOA) |
| PlainTextRange(NSRange); |
| #endif |
| |
| bool isNull() const { return !start && !length; } |
| }; |
| |
| enum class AccessibilitySearchTextStartFrom { |
| Begin, // Search from the beginning of the element. |
| Selection, // Search from the position of the current selection. |
| End // Search from the end of the element. |
| }; |
| |
| enum class AccessibilitySearchTextDirection { |
| Forward, // Occurrence after the starting range. |
| Backward, // Occurrence before the starting range. |
| Closest, // Closest occurrence to the starting range, whether after or before. |
| All // All occurrences |
| }; |
| |
| struct AccessibilitySearchTextCriteria { |
| Vector<String> searchStrings; // Text strings to search for. |
| AccessibilitySearchTextStartFrom start; |
| AccessibilitySearchTextDirection direction; |
| |
| AccessibilitySearchTextCriteria() |
| : start(AccessibilitySearchTextStartFrom::Selection) |
| , direction(AccessibilitySearchTextDirection::Forward) |
| { } |
| }; |
| |
| enum class AccessibilityTextOperationType { |
| Select, |
| Replace, |
| Capitalize, |
| Lowercase, |
| Uppercase |
| }; |
| |
| struct AccessibilityTextOperation { |
| Vector<RefPtr<Range>> textRanges; // text on which perform the operation. |
| AccessibilityTextOperationType type; |
| String replacementText; // For type = replace. |
| |
| AccessibilityTextOperation() |
| : type(AccessibilityTextOperationType::Select) |
| { } |
| }; |
| |
| enum class AccessibilityMathScriptObjectType { Subscript, Superscript }; |
| enum class AccessibilityMathMultiscriptObjectType { PreSubscript, PreSuperscript, PostSubscript, PostSuperscript }; |
| |
| enum class AccessibilityCurrentState { False, True, Page, Step, Location, Date, Time }; |
| enum class AccessibilityConversionSpace { Screen, Page }; |
| |
| bool nodeHasPresentationRole(Node*); |
| |
| class AccessibilityObject : public RefCounted<AccessibilityObject>, public AccessibilityObjectInterface { |
| protected: |
| AccessibilityObject() = default; |
| |
| public: |
| virtual ~AccessibilityObject(); |
| |
| // After constructing an AccessibilityObject, it must be given a |
| // unique ID, then added to AXObjectCache, and finally init() must |
| // be called last. |
| void setAXObjectID(AXID axObjectID) { m_id = axObjectID; } |
| virtual void init() { } |
| |
| // When the corresponding WebCore object that this AccessibilityObject |
| // wraps is deleted, it must be detached. |
| virtual void detach(AccessibilityDetachmentType, AXObjectCache* cache = nullptr); |
| virtual bool isDetached() const; |
| |
| typedef Vector<RefPtr<AccessibilityObject>> AccessibilityChildrenVector; |
| |
| virtual bool isAccessibilityNodeObject() const { return false; } |
| virtual bool isAccessibilityRenderObject() const { return false; } |
| 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 isAttachmentElement() const { return false; } |
| virtual bool isHeading() const { return false; } |
| bool isLink() const override { return false; } |
| bool isImage() const override { return false; } |
| virtual bool isImageMap() const { return roleValue() == AccessibilityRole::ImageMap; } |
| 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() == AccessibilityRole::WebArea; } |
| virtual bool isCheckbox() const { return roleValue() == AccessibilityRole::CheckBox; } |
| virtual bool isRadioButton() const { return roleValue() == AccessibilityRole::RadioButton; } |
| virtual bool isNativeListBox() const { return false; } |
| bool isListBox() const { return roleValue() == AccessibilityRole::ListBox; } |
| virtual bool isListBoxOption() const { return false; } |
| bool isAttachment() const override { return false; } |
| virtual bool isMediaTimeline() const { return false; } |
| virtual bool isMenuRelated() const { return false; } |
| virtual bool isMenu() const { return false; } |
| virtual bool isMenuBar() const { return false; } |
| virtual bool isMenuButton() const { return false; } |
| virtual bool isMenuItem() const { return false; } |
| bool isFileUploadButton() const override { return false; } |
| virtual bool isInputImage() const { return false; } |
| virtual bool isProgressIndicator() const { return false; } |
| virtual bool isSlider() const { return false; } |
| 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 isDataTable() const { return false; } |
| virtual bool isTableRow() const { return false; } |
| virtual bool isTableColumn() const { return false; } |
| virtual bool isTableCell() const { return false; } |
| virtual bool isFieldset() const { return false; } |
| virtual bool isGroup() const { return false; } |
| virtual bool isARIATreeGridRow() const { return false; } |
| bool isImageMapLink() const override { return false; } |
| virtual bool isMenuList() const { return false; } |
| virtual bool isMenuListPopup() const { return false; } |
| virtual bool isMenuListOption() const { return false; } |
| virtual bool isSpinButton() const { return roleValue() == AccessibilityRole::SpinButton; } |
| virtual bool isNativeSpinButton() const { return false; } |
| virtual bool isSpinButtonPart() const { return false; } |
| virtual bool isMockObject() const { return false; } |
| bool isMediaControlLabel() const override { return false; } |
| virtual bool isMediaObject() const { return false; } |
| bool isSwitch() const { return roleValue() == AccessibilityRole::Switch; } |
| bool isToggleButton() const { return roleValue() == AccessibilityRole::ToggleButton; } |
| bool isTextControl() const; |
| bool isARIATextControl() const; |
| bool isNonNativeTextControl() const; |
| bool isTabList() const { return roleValue() == AccessibilityRole::TabList; } |
| bool isTabItem() const { return roleValue() == AccessibilityRole::Tab; } |
| bool isRadioGroup() const { return roleValue() == AccessibilityRole::RadioGroup; } |
| bool isComboBox() const { return roleValue() == AccessibilityRole::ComboBox; } |
| bool isTree() const override { return roleValue() == AccessibilityRole::Tree; } |
| bool isTreeGrid() const { return roleValue() == AccessibilityRole::TreeGrid; } |
| bool isTreeItem() const override { return roleValue() == AccessibilityRole::TreeItem; } |
| bool isScrollbar() const override { return roleValue() == AccessibilityRole::ScrollBar; } |
| bool isButton() const; |
| bool isListItem() const { return roleValue() == AccessibilityRole::ListItem; } |
| bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); } |
| bool isScrollView() const { return roleValue() == AccessibilityRole::ScrollArea; } |
| bool isCanvas() const { return roleValue() == AccessibilityRole::Canvas; } |
| bool isPopUpButton() const { return roleValue() == AccessibilityRole::PopUpButton; } |
| bool isBlockquote() const; |
| bool isLandmark() const; |
| bool isColorWell() const { return roleValue() == AccessibilityRole::ColorWell; } |
| bool isRangeControl() const; |
| bool isMeter() const; |
| bool isSplitter() const { return roleValue() == AccessibilityRole::Splitter; } |
| bool isToolbar() const { return roleValue() == AccessibilityRole::Toolbar; } |
| bool isStyleFormatGroup() const; |
| bool isSubscriptStyleGroup() const; |
| bool isSuperscriptStyleGroup() const; |
| bool isFigureElement() const; |
| bool isKeyboardFocusable() const; |
| bool isSummary() const { return roleValue() == AccessibilityRole::Summary; } |
| bool isOutput() const; |
| |
| virtual bool isChecked() const { return false; } |
| virtual bool isEnabled() const { return false; } |
| virtual bool isSelected() const { return false; } |
| virtual bool isFocused() const { return false; } |
| virtual bool isHovered() const { return false; } |
| virtual bool isIndeterminate() const { return false; } |
| virtual bool isLoaded() const { return false; } |
| virtual bool isMultiSelectable() const { return false; } |
| virtual bool isOffScreen() const { return false; } |
| virtual bool isPressed() const { return false; } |
| virtual bool isUnvisited() const { return false; } |
| virtual bool isVisited() const { return false; } |
| virtual bool isRequired() const { return false; } |
| virtual bool supportsRequiredAttribute() const { return false; } |
| virtual bool isLinked() const { return false; } |
| virtual bool isExpanded() const; |
| virtual bool isVisible() const { return true; } |
| virtual bool isCollapsed() const { return false; } |
| virtual void setIsExpanded(bool) { } |
| FloatRect relativeFrame() const override; |
| FloatRect convertFrameToSpace(const FloatRect&, AccessibilityConversionSpace) const; |
| |
| // In a multi-select list, many items can be selected but only one is active at a time. |
| virtual bool isSelectedOptionActive() const { return false; } |
| |
| virtual bool hasBoldFont() const { return false; } |
| virtual bool hasItalicFont() const { return false; } |
| bool hasMisspelling() const; |
| virtual bool hasPlainText() const { return false; } |
| virtual bool hasSameFont(RenderObject*) const { return false; } |
| virtual bool hasSameFontColor(RenderObject*) const { return false; } |
| virtual bool hasSameStyle(RenderObject*) const { return false; } |
| bool isStaticText() const { return roleValue() == AccessibilityRole::StaticText; } |
| virtual bool hasUnderline() const { return false; } |
| bool hasHighlighting() const; |
| |
| bool supportsDatetimeAttribute() const; |
| const AtomString& datetimeAttributeValue() const; |
| |
| virtual bool canSetFocusAttribute() const { return false; } |
| virtual bool canSetTextRangeAttributes() const { return false; } |
| virtual bool canSetValueAttribute() const { return false; } |
| virtual bool canSetNumericValue() const { return false; } |
| virtual bool canSetSelectedAttribute() const { return false; } |
| virtual bool canSetSelectedChildrenAttribute() const { return false; } |
| virtual bool canSetExpandedAttribute() const { return false; } |
| |
| virtual Element* element() const; |
| virtual Node* node() const { return nullptr; } |
| virtual RenderObject* renderer() const { return nullptr; } |
| bool accessibilityIsIgnored() const override; |
| virtual AccessibilityObjectInclusion defaultObjectInclusion() const; |
| bool accessibilityIsIgnoredByDefault() const; |
| |
| bool isShowingValidationMessage() const; |
| String validationMessage() const; |
| |
| unsigned blockquoteLevel() const; |
| virtual int headingLevel() const { return 0; } |
| virtual int tableLevel() const { return 0; } |
| virtual AccessibilityButtonState checkboxOrRadioValue() const; |
| virtual String valueDescription() const { return String(); } |
| virtual float valueForRange() const { return 0.0f; } |
| 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 nullptr; } |
| virtual AccessibilityObject* selectedTabItem() { return nullptr; } |
| AccessibilityObject* selectedListItem(); |
| virtual int layoutCount() const { return 0; } |
| virtual double estimatedLoadingProgress() const { return 0; } |
| WEBCORE_EXPORT static bool isARIAControl(AccessibilityRole); |
| WEBCORE_EXPORT static bool isARIAInput(AccessibilityRole); |
| |
| virtual bool supportsARIAOwns() const { return false; } |
| bool isActiveDescendantOfFocusedContainer() const; |
| void ariaActiveDescendantReferencingElements(AccessibilityChildrenVector&) const; |
| void ariaControlsElements(AccessibilityChildrenVector&) const; |
| void ariaControlsReferencingElements(AccessibilityChildrenVector&) const; |
| void ariaDescribedByElements(AccessibilityChildrenVector&) const; |
| void ariaDescribedByReferencingElements(AccessibilityChildrenVector&) const; |
| void ariaDetailsElements(AccessibilityChildrenVector&) const; |
| void ariaDetailsReferencingElements(AccessibilityChildrenVector&) const; |
| void ariaErrorMessageElements(AccessibilityChildrenVector&) const; |
| void ariaErrorMessageReferencingElements(AccessibilityChildrenVector&) const; |
| void ariaFlowToElements(AccessibilityChildrenVector&) const; |
| void ariaFlowToReferencingElements(AccessibilityChildrenVector&) const; |
| void ariaLabelledByElements(AccessibilityChildrenVector&) const; |
| void ariaLabelledByReferencingElements(AccessibilityChildrenVector&) const; |
| void ariaOwnsElements(AccessibilityChildrenVector&) const; |
| void ariaOwnsReferencingElements(AccessibilityChildrenVector&) const; |
| |
| virtual bool hasPopup() const { return false; } |
| String hasPopupValue() const; |
| bool supportsHasPopup() const; |
| bool pressedIsPresent() const; |
| bool ariaIsMultiline() const; |
| String invalidStatus() const; |
| bool supportsPressed() const; |
| bool supportsExpanded() const; |
| bool supportsChecked() const; |
| AccessibilitySortDirection sortDirection() const; |
| virtual bool canvasHasFallbackContent() const { return false; } |
| bool supportsRangeValue() const; |
| const AtomString& identifierAttribute() const; |
| const AtomString& linkRelValue() const; |
| void classList(Vector<String>&) const; |
| virtual String roleDescription() const; |
| AccessibilityCurrentState currentState() const; |
| String currentValue() const; |
| bool supportsCurrent() const; |
| const String keyShortcutsValue() const; |
| |
| // This function checks if the object should be ignored when there's a modal dialog displayed. |
| bool ignoredFromModalPresence() const; |
| bool isModalDescendant(Node*) const; |
| bool isModalNode() const; |
| |
| bool supportsSetSize() const; |
| bool supportsPosInSet() const; |
| int setSize() const; |
| int posInSet() const; |
| |
| // ARIA drag and drop |
| virtual bool supportsARIADropping() const { return false; } |
| virtual bool supportsARIADragging() const { return false; } |
| virtual bool isARIAGrabbed() { return false; } |
| virtual void setARIAGrabbed(bool) { } |
| virtual Vector<String> determineARIADropEffects() { return { }; } |
| |
| // Called on the root AX object to return the deepest available element. |
| AccessibilityObjectInterface* accessibilityHitTest(const IntPoint&) const override { return nullptr; } |
| // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject. |
| virtual AccessibilityObjectInterface* elementAccessibilityHitTest(const IntPoint&) const; |
| |
| AccessibilityObjectInterface* focusedUIElement() const override; |
| |
| 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 { return nullptr; } |
| virtual AccessibilityObject* parentObjectUnignored() const; |
| AccessibilityObjectInterface* parentObjectInterfaceUnignored() const override { return parentObjectUnignored(); } |
| 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 |
| private: |
| RefPtr<Range> rangeOfStringClosestToRangeInDirection(Range*, AccessibilitySearchDirection, Vector<String> const&) const; |
| RefPtr<Range> selectionRange() const; |
| RefPtr<Range> findTextRange(Vector<String> const& searchStrings, RefPtr<Range> const& start, AccessibilitySearchTextDirection) const; |
| public: |
| Vector<RefPtr<Range>> findTextRanges(AccessibilitySearchTextCriteria const&) const; |
| Vector<String> performTextOperation(AccessibilityTextOperation const&); |
| |
| virtual AccessibilityObject* observableObject() const { return nullptr; } |
| virtual void linkedUIElements(AccessibilityChildrenVector&) const { } |
| virtual AccessibilityObject* titleUIElement() const { return nullptr; } |
| virtual bool exposesTitleUIElement() const { return true; } |
| virtual AccessibilityObject* correspondingLabelForControlElement() const { return nullptr; } |
| virtual AccessibilityObject* correspondingControlForLabelElement() const { return nullptr; } |
| virtual AccessibilityObject* scrollBar(AccessibilityOrientation) { return nullptr; } |
| |
| virtual AccessibilityRole ariaRoleAttribute() const { return AccessibilityRole::Unknown; } |
| 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>&) const { }; |
| // 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 AtomString&) { } |
| virtual bool hasAttributesRequiredForInclusion() const; |
| |
| // Accessibility Text - (To be deprecated). |
| virtual String accessibilityDescription() const { return String(); } |
| virtual String title() const { return String(); } |
| virtual String helpText() const { return String(); } |
| |
| // Methods for determining accessibility text. |
| bool isARIAStaticText() const { return ariaRoleAttribute() == AccessibilityRole::StaticText; } |
| virtual String stringValue() const { return String(); } |
| virtual String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const { return String(); } |
| virtual String text() const { return String(); } |
| virtual int textLength() const { return 0; } |
| virtual String ariaLabeledByAttribute() const { return String(); } |
| virtual String ariaDescribedByAttribute() const { return String(); } |
| const String 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; } |
| |
| AccessibilityRole roleValue() const override { return m_role; } |
| |
| virtual AXObjectCache* axObjectCache() const; |
| AXID axObjectID() const { return m_id; } |
| |
| static AccessibilityObject* anchorElementForNode(Node*); |
| static AccessibilityObject* headingElementForNode(Node*); |
| 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 snappedIntRect(boundingBoxRect()); } |
| virtual LayoutRect elementRect() const = 0; |
| LayoutSize size() const { return elementRect().size(); } |
| virtual IntPoint clickPoint(); |
| static IntRect boundingBoxForQuads(RenderObject*, const Vector<FloatQuad>&); |
| virtual Path elementPath() const { return Path(); } |
| virtual bool supportsPath() const { return false; } |
| |
| TextIteratorBehavior textIteratorBehaviorForTextRange() const; |
| virtual PlainTextRange selectedTextRange() const { return PlainTextRange(); } |
| unsigned selectionStart() const { return selectedTextRange().start; } |
| unsigned selectionEnd() const { return selectedTextRange().length; } |
| |
| virtual URL url() const { return URL(); } |
| virtual VisibleSelection selection() const { return VisibleSelection(); } |
| virtual String selectedText() const { return String(); } |
| virtual const AtomString& accessKey() const { return nullAtom(); } |
| const String& actionVerb() const; |
| 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; |
| Frame* 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; } |
| |
| virtual void setFocused(bool) { } |
| virtual void setSelectedText(const String&) { } |
| virtual void setSelectedTextRange(const PlainTextRange&) { } |
| virtual void setValue(const String&) { } |
| bool replaceTextInRange(const String&, const PlainTextRange&); |
| |
| virtual void setValue(float) { } |
| virtual void setSelected(bool) { } |
| virtual void setSelectedRows(AccessibilityChildrenVector&) { } |
| |
| virtual void makeRangeVisible(const PlainTextRange&) { } |
| virtual bool press(); |
| bool performDefaultAction() { return press(); } |
| |
| virtual AccessibilityOrientation orientation() const; |
| virtual void increment() { } |
| virtual void decrement() { } |
| |
| virtual void childrenChanged() { } |
| virtual void textChanged() { } |
| virtual void updateAccessibilityRole() { } |
| const AccessibilityChildrenVector& children(bool updateChildrenIfNeeded = true); |
| 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; } |
| void updateChildrenIfNecessary() override; |
| virtual void setNeedsToUpdateChildren() { } |
| virtual void setNeedsToUpdateSubtree() { } |
| virtual void clearChildren(); |
| virtual bool needsToUpdateChildren() const { return false; } |
| #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 nullptr; } |
| virtual void handleActiveDescendantChanged() { } |
| virtual void handleAriaExpandedChanged() { } |
| bool isDescendantOfObject(const AccessibilityObject*) const; |
| bool isAncestorOfObject(const AccessibilityObject*) const; |
| AccessibilityObject* firstAnonymousBlockChild() const; |
| |
| WEBCORE_EXPORT static AccessibilityRole ariaRoleToWebCoreRole(const String&); |
| bool hasAttribute(const QualifiedName&) const; |
| const AtomString& 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; |
| VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const; |
| VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const; |
| VisiblePositionRange sentenceForPosition(const VisiblePosition&) const; |
| 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; |
| |
| 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 { } |
| |
| VisiblePosition visiblePositionForBounds(const IntRect&, AccessibilityVisiblePositionForBounds) const; |
| virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const { return VisiblePosition(); } |
| VisiblePosition nextVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.next(); } |
| VisiblePosition previousVisiblePosition(const VisiblePosition& visiblePos) const { return visiblePos.previous(); } |
| VisiblePosition nextWordEnd(const VisiblePosition&) const; |
| VisiblePosition previousWordStart(const VisiblePosition&) const; |
| VisiblePosition nextLineEndPosition(const VisiblePosition&) const; |
| VisiblePosition previousLineStartPosition(const VisiblePosition&) const; |
| VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const; |
| VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const; |
| VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const; |
| VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const; |
| virtual VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const { return VisiblePosition(); } |
| |
| virtual VisiblePosition visiblePositionForIndex(int) const { return VisiblePosition(); } |
| virtual int indexForVisiblePosition(const VisiblePosition&) const { return 0; } |
| |
| AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const; |
| int lineForPosition(const VisiblePosition&) const; |
| PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const; |
| virtual int index(const VisiblePosition&) const { return -1; } |
| |
| virtual void lineBreaks(Vector<int>&) const { } |
| virtual PlainTextRange doAXRangeForLine(unsigned) const { return PlainTextRange(); } |
| PlainTextRange doAXRangeForPosition(const IntPoint&) const; |
| virtual PlainTextRange doAXRangeForIndex(unsigned) const { return PlainTextRange(); } |
| PlainTextRange doAXStyleRangeForIndex(unsigned) const; |
| |
| virtual String doAXStringForRange(const PlainTextRange&) const { return String(); } |
| virtual IntRect doAXBoundsForRange(const PlainTextRange&) const { return IntRect(); } |
| 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(); } |
| virtual String descriptionForMSAA() const { return String(); } |
| 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. |
| void ariaTreeItemDisclosedRows(AccessibilityChildrenVector&); |
| // Used by an ARIA tree item to get only its content, and not its child tree items and groups. |
| void ariaTreeItemContent(AccessibilityChildrenVector&); |
| |
| // ARIA live-region features. |
| bool supportsLiveRegion(bool excludeIfOff = true) const; |
| bool isInsideLiveRegion(bool excludeIfOff = true) const; |
| AccessibilityObject* liveRegionAncestor(bool excludeIfOff = true) const; |
| virtual const String liveRegionStatus() const { return String(); } |
| virtual const String liveRegionRelevant() const { return nullAtom(); } |
| virtual bool liveRegionAtomic() const { return false; } |
| virtual bool isBusy() const { return false; } |
| static const String defaultLiveRegionStatusForRole(AccessibilityRole); |
| static bool liveRegionStatusIsEnabled(const AtomString&); |
| static bool contentEditableAttributeIsEnabled(Element*); |
| bool hasContentEditableAttributeSet() const; |
| |
| bool supportsReadOnly() const; |
| virtual String readOnlyValue() const; |
| |
| bool supportsAutoComplete() const; |
| String autoCompleteValue() const; |
| |
| bool supportsARIAAttributes() const; |
| |
| // CSS3 Speech properties. |
| virtual OptionSet<SpeakAs> speakAsProperty() const { return OptionSet<SpeakAs> { }; } |
| |
| // Make this object visible by scrolling as many nested scrollable views as needed. |
| virtual void scrollToMakeVisible() const; |
| // Same, but if the whole object can't be made visible, try for this subrect, in local coordinates. |
| 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 class ScrollByPageDirection { Up, Down, Left, Right }; |
| bool scrollByPage(ScrollByPageDirection) const; |
| IntPoint scrollPosition() const; |
| IntSize scrollContentsSize() const; |
| IntRect scrollVisibleContentRect() const; |
| void scrollToMakeVisible(const ScrollRectToVisibleOptions&) const; |
| |
| bool lastKnownIsIgnoredValue(); |
| void setLastKnownIsIgnoredValue(bool); |
| |
| // Fires a children changed notification on the parent if the isIgnored value changed. |
| void notifyIfIgnoredValueChanged(); |
| |
| // All math elements return true for isMathElement(). |
| virtual bool isMathElement() const { return false; } |
| virtual bool isMathFraction() const { return false; } |
| virtual bool isMathFenced() const { return false; } |
| virtual bool isMathSubscriptSuperscript() const { return false; } |
| virtual bool isMathRow() const { return false; } |
| virtual bool isMathUnderOver() const { return false; } |
| virtual bool isMathRoot() const { return false; } |
| virtual bool isMathSquareRoot() const { return false; } |
| virtual bool isMathText() const { return false; } |
| virtual bool isMathNumber() const { return false; } |
| virtual bool isMathOperator() const { return false; } |
| virtual bool isMathFenceOperator() const { return false; } |
| virtual bool isMathSeparatorOperator() const { return false; } |
| virtual bool isMathIdentifier() const { return false; } |
| virtual bool isMathTable() const { return false; } |
| 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 nullptr; } |
| virtual AccessibilityObject* mathRootIndexObject() { return nullptr; } |
| |
| // Under over components. |
| virtual AccessibilityObject* mathUnderObject() { return nullptr; } |
| virtual AccessibilityObject* mathOverObject() { return nullptr; } |
| |
| // Fraction components. |
| virtual AccessibilityObject* mathNumeratorObject() { return nullptr; } |
| virtual AccessibilityObject* mathDenominatorObject() { return nullptr; } |
| |
| // Subscript/superscript components. |
| 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; |
| virtual void mathPrescripts(AccessibilityMathMultiscriptPairs&) { } |
| virtual void mathPostscripts(AccessibilityMathMultiscriptPairs&) { } |
| |
| // Visibility. |
| bool isAXHidden() const; |
| bool isDOMHidden() const; |
| bool isHidden() const { return isAXHidden() || isDOMHidden(); } |
| |
| #if HAVE(ACCESSIBILITY) |
| AccessibilityObjectWrapper* wrapper() const override { return m_wrapper.get(); } |
| void setWrapper(AccessibilityObjectWrapper* wrapper) { m_wrapper = wrapper; } |
| #else |
| AccessibilityObjectWrapper* wrapper() const override { return nullptr; } |
| #endif |
| |
| #if PLATFORM(COCOA) |
| void overrideAttachmentParent(AccessibilityObject* parent); |
| #else |
| void overrideAttachmentParent(AccessibilityObject*) { } |
| #endif |
| |
| #if HAVE(ACCESSIBILITY) |
| // a platform-specific method for determining if an attachment is ignored |
| bool accessibilityIgnoreAttachment() const; |
| // gives platforms the opportunity to indicate if and how an object should be included |
| AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const; |
| #else |
| bool accessibilityIgnoreAttachment() const { return true; } |
| AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const { return AccessibilityObjectInclusion::DefaultBehavior; } |
| #endif |
| |
| #if PLATFORM(IOS_FAMILY) |
| 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); |
| bool fileUploadButtonReturnsValueInTitle() const; |
| String speechHintAttributeValue() const override; |
| String descriptionAttributeValue() const override; |
| String helpTextAttributeValue() const override; |
| String titleAttributeValue() const override; |
| #endif |
| |
| #if PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY) |
| bool caretBrowsingEnabled() const; |
| void setCaretBrowsingEnabled(bool); |
| #endif |
| |
| AccessibilityObject* focusableAncestor(); |
| AccessibilityObject* editableAncestor(); |
| AccessibilityObject* highestEditableAncestor(); |
| |
| const AccessibilityScrollView* ancestorAccessibilityScrollView(bool includeSelf) const; |
| static const AccessibilityObject* matchedParent(const AccessibilityObject&, bool includeSelf, const WTF::Function<bool(const AccessibilityObject&)>&); |
| |
| void clearIsIgnoredFromParentData() { m_isIgnoredFromParentData = AccessibilityIsIgnoredFromParentData(); } |
| void setIsIgnoredFromParentDataForChild(AccessibilityObject*); |
| |
| protected: |
| AXID m_id { 0 }; |
| AccessibilityChildrenVector m_children; |
| mutable bool m_haveChildren { false }; |
| AccessibilityRole m_role { AccessibilityRole::Unknown }; |
| AccessibilityObjectInclusion m_lastKnownIsIgnoredValue { AccessibilityObjectInclusion::DefaultBehavior }; |
| AccessibilityIsIgnoredFromParentData m_isIgnoredFromParentData { }; |
| bool m_childrenDirty { false }; |
| bool m_subtreeDirty { false }; |
| #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) |
| bool m_isolatedTreeNodeInitialized { false }; |
| #endif |
| |
| void setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData& data) { m_isIgnoredFromParentData = data; } |
| |
| virtual bool computeAccessibilityIsIgnored() const { return true; } |
| bool isAccessibilityObject() const override { return true; } |
| |
| // If this object itself scrolls, return its ScrollableArea. |
| 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; |
| bool dispatchTouchEvent(); |
| |
| void ariaElementsFromAttribute(AccessibilityChildrenVector&, const QualifiedName&) const; |
| void ariaElementsReferencedByAttribute(AccessibilityChildrenVector&, const QualifiedName&) const; |
| |
| AccessibilityObject* radioGroupAncestor() const; |
| |
| #if HAVE(ACCESSIBILITY) && USE(ATK) |
| bool allowsTextRanges() const; |
| unsigned getLengthForTextRange() const; |
| #else |
| bool allowsTextRanges() const { return isTextControl(); } |
| unsigned getLengthForTextRange() const { return text().length(); } |
| #endif |
| |
| #if PLATFORM(COCOA) |
| RetainPtr<WebAccessibilityObjectWrapper> m_wrapper; |
| #elif PLATFORM(WIN) |
| COMPtr<AccessibilityObjectWrapper> m_wrapper; |
| #elif USE(ATK) |
| GRefPtr<WebKitAccessible> m_wrapper; |
| #endif |
| }; |
| |
| #if !HAVE(ACCESSIBILITY) |
| inline const AccessibilityObject::AccessibilityChildrenVector& AccessibilityObject::children(bool) { return m_children; } |
| inline const String& AccessibilityObject::actionVerb() const { return emptyString(); } |
| inline int AccessibilityObject::lineForPosition(const VisiblePosition&) const { return -1; } |
| inline void AccessibilityObject::updateBackingStore() { } |
| #endif |
| |
| } // namespace WebCore |
| |
| #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() |
| |
| SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::AccessibilityObject) |
| static bool isType(const WebCore::AccessibilityObjectInterface& context) { return context.isAccessibilityObject(); } |
| SPECIALIZE_TYPE_TRAITS_END() |