Index: third_party/WebKit/Source/modules/accessibility/AXObject.h |
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.h b/third_party/WebKit/Source/modules/accessibility/AXObject.h |
deleted file mode 100644 |
index aa8754a39b04fff57ae15043c09d8a43d9e88eee..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.h |
+++ /dev/null |
@@ -1,1138 +0,0 @@ |
-/* |
- * 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 Computer, 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. |
- */ |
- |
-#ifndef AXObject_h |
-#define AXObject_h |
- |
-#include "core/editing/VisiblePosition.h" |
-#include "core/editing/markers/DocumentMarker.h" |
-#include "core/inspector/protocol/Accessibility.h" |
-#include "modules/ModulesExport.h" |
-#include "platform/geometry/FloatQuad.h" |
-#include "platform/geometry/LayoutRect.h" |
-#include "platform/graphics/Color.h" |
-#include "platform/wtf/Forward.h" |
-#include "platform/wtf/Vector.h" |
- |
-class SkMatrix44; |
- |
-namespace blink { |
- |
-class AXObject; |
-class AXObjectCacheImpl; |
-class Element; |
-class FrameView; |
-class IntPoint; |
-class Node; |
-class LayoutObject; |
-class ScrollableArea; |
- |
-enum class AOMStringProperty; |
- |
-typedef unsigned AXID; |
- |
-enum AccessibilityRole { |
- kUnknownRole = 0, |
- kAbbrRole, // No mapping to ARIA role. |
- kAlertDialogRole, |
- kAlertRole, |
- kAnchorRole, // No mapping to ARIA role. |
- kAnnotationRole, // No mapping to ARIA role. |
- kApplicationRole, |
- kArticleRole, |
- kAudioRole, // No mapping to ARIA role. |
- kBannerRole, |
- kBlockquoteRole, // No mapping to ARIA role. |
- kBusyIndicatorRole, // No mapping to ARIA role. |
- kButtonRole, |
- kCanvasRole, // No mapping to ARIA role. |
- kCaptionRole, // No mapping to ARIA role. |
- kCellRole, |
- kCheckBoxRole, |
- kColorWellRole, // No mapping to ARIA role. |
- kColumnHeaderRole, |
- kColumnRole, // No mapping to ARIA role. |
- kComboBoxRole, |
- kComplementaryRole, |
- kContentInfoRole, |
- kDateRole, // No mapping to ARIA role. |
- kDateTimeRole, // No mapping to ARIA role. |
- kDefinitionRole, |
- kDescriptionListDetailRole, // No mapping to ARIA role. |
- kDescriptionListRole, // No mapping to ARIA role. |
- kDescriptionListTermRole, // No mapping to ARIA role. |
- kDetailsRole, // No mapping to ARIA role. |
- kDialogRole, |
- kDirectoryRole, |
- kDisclosureTriangleRole, // No mapping to ARIA role. |
- kDivRole, // No mapping to ARIA role. |
- kDocumentRole, |
- kEmbeddedObjectRole, // No mapping to ARIA role. |
- kFeedRole, |
- kFigcaptionRole, // No mapping to ARIA role. |
- kFigureRole, |
- kFooterRole, |
- kFormRole, |
- kGridRole, |
- kGroupRole, |
- kHeadingRole, |
- kIframePresentationalRole, // No mapping to ARIA role. |
- kIframeRole, // No mapping to ARIA role. |
- kIgnoredRole, // No mapping to ARIA role. |
- kImageMapLinkRole, // No mapping to ARIA role. |
- kImageMapRole, // No mapping to ARIA role. |
- kImageRole, |
- kInlineTextBoxRole, // No mapping to ARIA role. |
- kInputTimeRole, // No mapping to ARIA role. |
- kLabelRole, |
- kLegendRole, // No mapping to ARIA role. |
- kLineBreakRole, // No mapping to ARIA role. |
- kLinkRole, |
- kListBoxOptionRole, |
- kListBoxRole, |
- kListItemRole, |
- kListMarkerRole, // No mapping to ARIA role. |
- kListRole, |
- kLogRole, |
- kMainRole, |
- kMarkRole, // No mapping to ARIA role. |
- kMarqueeRole, |
- kMathRole, |
- kMenuBarRole, |
- kMenuButtonRole, |
- kMenuItemRole, |
- kMenuItemCheckBoxRole, |
- kMenuItemRadioRole, |
- kMenuListOptionRole, |
- kMenuListPopupRole, |
- kMenuRole, |
- kMeterRole, |
- kNavigationRole, |
- kNoneRole, // No mapping to ARIA role. |
- kNoteRole, |
- kOutlineRole, // No mapping to ARIA role. |
- kParagraphRole, // No mapping to ARIA role. |
- kPopUpButtonRole, |
- kPreRole, // No mapping to ARIA role. |
- kPresentationalRole, |
- kProgressIndicatorRole, |
- kRadioButtonRole, |
- kRadioGroupRole, |
- kRegionRole, |
- kRootWebAreaRole, // No mapping to ARIA role. |
- kRowHeaderRole, |
- kRowRole, |
- kRubyRole, // No mapping to ARIA role. |
- kRulerRole, // No mapping to ARIA role. |
- kSVGRootRole, // No mapping to ARIA role. |
- kScrollAreaRole, // No mapping to ARIA role. |
- kScrollBarRole, |
- kSeamlessWebAreaRole, // No mapping to ARIA role. |
- kSearchRole, |
- kSearchBoxRole, |
- kSliderRole, |
- kSliderThumbRole, // No mapping to ARIA role. |
- kSpinButtonPartRole, // No mapping to ARIA role. |
- kSpinButtonRole, |
- kSplitterRole, |
- kStaticTextRole, // No mapping to ARIA role. |
- kStatusRole, |
- kSwitchRole, |
- kTabGroupRole, // No mapping to ARIA role. |
- kTabListRole, |
- kTabPanelRole, |
- kTabRole, |
- kTableHeaderContainerRole, // No mapping to ARIA role. |
- kTableRole, |
- kTermRole, |
- kTextFieldRole, |
- kTimeRole, // No mapping to ARIA role. |
- kTimerRole, |
- kToggleButtonRole, |
- kToolbarRole, |
- kTreeGridRole, |
- kTreeItemRole, |
- kTreeRole, |
- kUserInterfaceTooltipRole, |
- kVideoRole, // No mapping to ARIA role. |
- kWebAreaRole, // No mapping to ARIA role. |
- kWindowRole, // No mapping to ARIA role. |
- kNumRoles |
-}; |
- |
-enum AccessibilityTextSource { |
- kAlternativeText, |
- kChildrenText, |
- kSummaryText, |
- kHelpText, |
- kVisibleText, |
- kTitleTagText, |
- kPlaceholderText, |
- kLabelByElementText, |
-}; |
- |
-enum AccessibilityState { |
- kAXBusyState, |
- kAXCheckedState, |
- kAXEnabledState, |
- kAXExpandedState, |
- kAXFocusableState, |
- kAXFocusedState, |
- kAXHaspopupState, |
- kAXHoveredState, |
- kAXInvisibleState, |
- kAXLinkedState, |
- kAXMultilineState, |
- kAXMultiselectableState, |
- kAXOffscreenState, |
- kAXPressedState, |
- kAXProtectedState, |
- kAXReadonlyState, |
- kAXRequiredState, |
- kAXSelectableState, |
- kAXSelectedState, |
- kAXVerticalState, |
- kAXVisitedState |
-}; |
- |
-class AccessibilityText final |
- : public GarbageCollectedFinalized<AccessibilityText> { |
- WTF_MAKE_NONCOPYABLE(AccessibilityText); |
- |
- public: |
- DEFINE_INLINE_TRACE() { visitor->Trace(text_element_); } |
- |
- private: |
- AccessibilityText(const String& text, |
- const AccessibilityTextSource& source, |
- AXObject* element) |
- : text_(text), text_element_(element) {} |
- |
- String text_; |
- Member<AXObject> text_element_; |
-}; |
- |
-enum AccessibilityOrientation { |
- kAccessibilityOrientationUndefined = 0, |
- kAccessibilityOrientationVertical, |
- kAccessibilityOrientationHorizontal, |
-}; |
- |
-enum AXObjectInclusion { |
- kIncludeObject, |
- kIgnoreObject, |
- kDefaultBehavior, |
-}; |
- |
-enum class AXSupportedAction { |
- kNone = 0, |
- kActivate, |
- kCheck, |
- kClick, |
- kJump, |
- kOpen, |
- kPress, |
- kSelect, |
- kUncheck |
-}; |
- |
-enum AccessibilityButtonState { |
- kButtonStateOff = 0, |
- kButtonStateOn, |
- kButtonStateMixed, |
-}; |
- |
-enum AccessibilityTextDirection { |
- kAccessibilityTextDirectionLTR, |
- kAccessibilityTextDirectionRTL, |
- kAccessibilityTextDirectionTTB, |
- kAccessibilityTextDirectionBTT |
-}; |
- |
-enum SortDirection { |
- kSortDirectionUndefined = 0, |
- kSortDirectionNone, |
- kSortDirectionAscending, |
- kSortDirectionDescending, |
- kSortDirectionOther |
-}; |
- |
-enum AccessibilityExpanded { |
- kExpandedUndefined = 0, |
- kExpandedCollapsed, |
- kExpandedExpanded, |
-}; |
- |
-enum AccessibilityOptionalBool { |
- kOptionalBoolUndefined = 0, |
- kOptionalBoolTrue, |
- kOptionalBoolFalse |
-}; |
- |
-enum AriaCurrentState { |
- kAriaCurrentStateUndefined = 0, |
- kAriaCurrentStateFalse, |
- kAriaCurrentStateTrue, |
- kAriaCurrentStatePage, |
- kAriaCurrentStateStep, |
- kAriaCurrentStateLocation, |
- kAriaCurrentStateDate, |
- kAriaCurrentStateTime |
-}; |
- |
-enum InvalidState { |
- kInvalidStateUndefined = 0, |
- kInvalidStateFalse, |
- kInvalidStateTrue, |
- kInvalidStateSpelling, |
- kInvalidStateGrammar, |
- kInvalidStateOther |
-}; |
- |
-enum TextStyle { |
- kTextStyleNone = 0, |
- kTextStyleBold = 1 << 0, |
- kTextStyleItalic = 1 << 1, |
- kTextStyleUnderline = 1 << 2, |
- kTextStyleLineThrough = 1 << 3 |
-}; |
- |
-enum TextUnderElementMode { |
- kTextUnderElementAll, |
- kTextUnderElementAny // If the text is unimportant, just whether or not it's |
- // present |
-}; |
- |
-enum class AXBoolAttribute {}; |
- |
-enum class AXStringAttribute { |
- kAriaKeyShortcuts, |
- kAriaRoleDescription, |
-}; |
- |
-enum class AXObjectAttribute { |
- kAriaActiveDescendant, |
- kAriaErrorMessage, |
-}; |
- |
-enum class AXObjectVectorAttribute { |
- kAriaControls, |
- kAriaDetails, |
- kAriaFlowTo, |
-}; |
- |
-class AXSparseAttributeClient { |
- public: |
- virtual void AddBoolAttribute(AXBoolAttribute, bool) = 0; |
- virtual void AddStringAttribute(AXStringAttribute, const String&) = 0; |
- virtual void AddObjectAttribute(AXObjectAttribute, AXObject&) = 0; |
- virtual void AddObjectVectorAttribute(AXObjectVectorAttribute, |
- HeapVector<Member<AXObject>>&) = 0; |
-}; |
- |
-// The source of the accessible name of an element. This is needed |
-// because on some platforms this determines how the accessible name |
-// is exposed. |
-enum AXNameFrom { |
- kAXNameFromUninitialized = -1, |
- kAXNameFromAttribute = 0, |
- kAXNameFromAttributeExplicitlyEmpty, |
- kAXNameFromCaption, |
- kAXNameFromContents, |
- kAXNameFromPlaceholder, |
- kAXNameFromRelatedElement, |
- kAXNameFromValue, |
- kAXNameFromTitle, |
-}; |
- |
-// The potential native HTML-based text (name, description or placeholder) |
-// sources for an element. See |
-// http://rawgit.com/w3c/aria/master/html-aam/html-aam.html#accessible-name-and-description-calculation |
-enum AXTextFromNativeHTML { |
- kAXTextFromNativeHTMLUninitialized = -1, |
- kAXTextFromNativeHTMLFigcaption, |
- kAXTextFromNativeHTMLLabel, |
- kAXTextFromNativeHTMLLabelFor, |
- kAXTextFromNativeHTMLLabelWrapped, |
- kAXTextFromNativeHTMLLegend, |
- kAXTextFromNativeHTMLTableCaption, |
- kAXTextFromNativeHTMLTitleElement, |
-}; |
- |
-// The source of the accessible description of an element. This is needed |
-// because on some platforms this determines how the accessible description |
-// is exposed. |
-enum AXDescriptionFrom { |
- kAXDescriptionFromUninitialized = -1, |
- kAXDescriptionFromAttribute = 0, |
- kAXDescriptionFromContents, |
- kAXDescriptionFromRelatedElement, |
-}; |
- |
-enum AXIgnoredReason { |
- kAXActiveModalDialog, |
- kAXAncestorDisallowsChild, |
- kAXAncestorIsLeafNode, |
- kAXAriaHidden, |
- kAXAriaHiddenRoot, |
- kAXEmptyAlt, |
- kAXEmptyText, |
- kAXInert, |
- kAXInheritsPresentation, |
- kAXLabelContainer, |
- kAXLabelFor, |
- kAXNotRendered, |
- kAXNotVisible, |
- kAXPresentationalRole, |
- kAXProbablyPresentational, |
- kAXStaticTextUsedAsNameFor, |
- kAXUninteresting |
-}; |
- |
-class IgnoredReason { |
- DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
- |
- public: |
- AXIgnoredReason reason; |
- Member<const AXObject> related_object; |
- |
- explicit IgnoredReason(AXIgnoredReason reason) |
- : reason(reason), related_object(nullptr) {} |
- |
- IgnoredReason(AXIgnoredReason r, const AXObject* obj) |
- : reason(r), related_object(obj) {} |
- |
- DEFINE_INLINE_TRACE() { visitor->Trace(related_object); } |
-}; |
- |
-class NameSourceRelatedObject |
- : public GarbageCollectedFinalized<NameSourceRelatedObject> { |
- WTF_MAKE_NONCOPYABLE(NameSourceRelatedObject); |
- |
- public: |
- WeakMember<AXObject> object; |
- String text; |
- |
- NameSourceRelatedObject(AXObject* object, String text) |
- : object(object), text(text) {} |
- |
- DEFINE_INLINE_TRACE() { visitor->Trace(object); } |
-}; |
- |
-typedef HeapVector<Member<NameSourceRelatedObject>> AXRelatedObjectVector; |
-class NameSource { |
- DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
- |
- public: |
- String text; |
- bool superseded = false; |
- bool invalid = false; |
- AXNameFrom type = kAXNameFromUninitialized; |
- const QualifiedName& attribute; |
- AtomicString attribute_value; |
- AXTextFromNativeHTML native_source = kAXTextFromNativeHTMLUninitialized; |
- AXRelatedObjectVector related_objects; |
- |
- NameSource(bool superseded, const QualifiedName& attr) |
- : superseded(superseded), attribute(attr) {} |
- |
- explicit NameSource(bool superseded) |
- : superseded(superseded), attribute(QualifiedName::Null()) {} |
- |
- DEFINE_INLINE_TRACE() { visitor->Trace(related_objects); } |
-}; |
- |
-class DescriptionSource { |
- DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
- |
- public: |
- String text; |
- bool superseded = false; |
- bool invalid = false; |
- AXDescriptionFrom type = kAXDescriptionFromUninitialized; |
- const QualifiedName& attribute; |
- AtomicString attribute_value; |
- AXTextFromNativeHTML native_source = kAXTextFromNativeHTMLUninitialized; |
- AXRelatedObjectVector related_objects; |
- |
- DescriptionSource(bool superseded, const QualifiedName& attr) |
- : superseded(superseded), attribute(attr) {} |
- |
- explicit DescriptionSource(bool superseded) |
- : superseded(superseded), attribute(QualifiedName::Null()) {} |
- |
- DEFINE_INLINE_TRACE() { visitor->Trace(related_objects); } |
-}; |
- |
-} // namespace blink |
- |
-WTF_ALLOW_INIT_WITH_MEM_FUNCTIONS(blink::IgnoredReason); |
-WTF_ALLOW_INIT_WITH_MEM_FUNCTIONS(blink::NameSource); |
-WTF_ALLOW_INIT_WITH_MEM_FUNCTIONS(blink::DescriptionSource); |
- |
-namespace blink { |
- |
-class MODULES_EXPORT AXObject : public GarbageCollectedFinalized<AXObject> { |
- WTF_MAKE_NONCOPYABLE(AXObject); |
- |
- public: |
- typedef HeapVector<Member<AXObject>> AXObjectVector; |
- |
- struct AXRange { |
- DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
- // The deepest descendant in which the range starts. |
- // (nullptr means the current object.) |
- Persistent<AXObject> anchor_object; |
- // The number of characters and child objects in the anchor object |
- // before the range starts. |
- int anchor_offset; |
- // When the same character offset could correspond to two possible |
- // cursor positions, upstream means it's on the previous line rather |
- // than the next line. |
- TextAffinity anchor_affinity; |
- |
- // The deepest descendant in which the range ends. |
- // (nullptr means the current object.) |
- Persistent<AXObject> focus_object; |
- // The number of characters and child objects in the focus object |
- // before the range ends. |
- int focus_offset; |
- // When the same character offset could correspond to two possible |
- // cursor positions, upstream means it's on the previous line rather |
- // than the next line. |
- TextAffinity focus_affinity; |
- |
- AXRange() |
- : anchor_object(nullptr), |
- anchor_offset(-1), |
- anchor_affinity(TextAffinity::kUpstream), |
- focus_object(nullptr), |
- focus_offset(-1), |
- focus_affinity(TextAffinity::kDownstream) {} |
- |
- AXRange(int start_offset, int end_offset) |
- : anchor_object(nullptr), |
- anchor_offset(start_offset), |
- anchor_affinity(TextAffinity::kUpstream), |
- focus_object(nullptr), |
- focus_offset(end_offset), |
- focus_affinity(TextAffinity::kDownstream) {} |
- |
- AXRange(AXObject* anchor_object, |
- int anchor_offset, |
- TextAffinity anchor_affinity, |
- AXObject* focus_object, |
- int focus_offset, |
- TextAffinity focus_affinity) |
- : anchor_object(anchor_object), |
- anchor_offset(anchor_offset), |
- anchor_affinity(anchor_affinity), |
- focus_object(focus_object), |
- focus_offset(focus_offset), |
- focus_affinity(focus_affinity) {} |
- |
- bool IsValid() const { |
- return ((anchor_object && focus_object) || |
- (!anchor_object && !focus_object)) && |
- anchor_offset >= 0 && focus_offset >= 0; |
- } |
- |
- // Determines if the range only refers to text offsets under the current |
- // object. |
- bool IsSimple() const { |
- return anchor_object == focus_object || !anchor_object || !focus_object; |
- } |
- }; |
- |
- protected: |
- AXObject(AXObjectCacheImpl&); |
- |
- public: |
- virtual ~AXObject(); |
- DECLARE_VIRTUAL_TRACE(); |
- |
- static unsigned NumberOfLiveAXObjects() { return number_of_live_ax_objects_; } |
- |
- // After constructing an AXObject, it must be given a |
- // unique ID, then added to AXObjectCacheImpl, and finally init() must |
- // be called last. |
- void SetAXObjectID(AXID ax_object_id) { id_ = ax_object_id; } |
- virtual void Init() {} |
- |
- // When the corresponding WebCore object that this AXObject |
- // wraps is deleted, it must be detached. |
- virtual void Detach(); |
- virtual bool IsDetached() const; |
- |
- // If the parent of this object is known, this can be faster than using |
- // computeParent(). |
- virtual void SetParent(AXObject* parent) { parent_ = parent; } |
- |
- // The AXObjectCacheImpl that owns this object, and its unique ID within this |
- // cache. |
- AXObjectCacheImpl& AxObjectCache() const { |
- DCHECK(ax_object_cache_); |
- return *ax_object_cache_; |
- } |
- |
- AXID AxObjectID() const { return id_; } |
- |
- // Wrappers that retrieve either an Accessibility Object Model property, |
- // or the equivalent ARIA attribute, in that order. |
- // TODO(dmazzoni): Add equivalents for other types of properties besides |
- // just strings. |
- const AtomicString& GetAOMPropertyOrARIAAttribute(AOMStringProperty) const; |
- |
- virtual void GetSparseAXAttributes(AXSparseAttributeClient&) const {} |
- |
- // Determine subclass type. |
- virtual bool IsAXNodeObject() const { return false; } |
- virtual bool IsAXLayoutObject() const { return false; } |
- virtual bool IsAXInlineTextBox() const { return false; } |
- virtual bool IsAXListBox() const { return false; } |
- virtual bool IsAXListBoxOption() const { return false; } |
- virtual bool IsAXRadioInput() const { return false; } |
- virtual bool IsAXSVGRoot() const { return false; } |
- |
- // Check object role or purpose. |
- virtual AccessibilityRole RoleValue() const { return role_; } |
- bool IsARIATextControl() const; |
- virtual bool IsARIATreeGridRow() const { return false; } |
- virtual bool IsAXTable() const { return false; } |
- virtual bool IsAnchor() const { return false; } |
- bool IsButton() const; |
- bool IsCheckable() const; |
- bool IsCanvas() const { return RoleValue() == kCanvasRole; } |
- bool IsCheckbox() const { return RoleValue() == kCheckBoxRole; } |
- bool IsCheckboxOrRadio() const { return IsCheckbox() || IsRadioButton(); } |
- bool IsColorWell() const { return RoleValue() == kColorWellRole; } |
- bool IsComboBox() const { return RoleValue() == kComboBoxRole; } |
- virtual bool IsControl() const { return false; } |
- virtual bool IsDataTable() const { return false; } |
- virtual bool IsEmbeddedObject() const { return false; } |
- virtual bool IsFieldset() const { return false; } |
- virtual bool IsHeading() const { return false; } |
- virtual bool IsImage() const { return false; } |
- virtual bool IsImageMapLink() const { return false; } |
- virtual bool IsInputImage() const { return false; } |
- bool IsLandmarkRelated() const; |
- virtual bool IsLink() const { return false; } |
- virtual bool IsInPageLinkTarget() const { return false; } |
- virtual bool IsList() const { return false; } |
- virtual bool IsMenu() const { return false; } |
- virtual bool IsMenuButton() const { return false; } |
- virtual bool IsMenuList() const { return false; } |
- virtual bool IsMenuListOption() const { return false; } |
- virtual bool IsMenuListPopup() const { return false; } |
- bool IsMenuRelated() const; |
- virtual bool IsMeter() const { return false; } |
- virtual bool IsMockObject() const { return false; } |
- virtual bool IsNativeSpinButton() const { return false; } |
- virtual bool IsNativeTextControl() const { |
- return false; |
- } // input or textarea |
- virtual bool IsNonNativeTextControl() const { |
- return false; |
- } // contenteditable or role=textbox |
- virtual bool IsPasswordField() const { return false; } |
- virtual bool IsPasswordFieldAndShouldHideValue() const; |
- bool IsPresentational() const { |
- return RoleValue() == kNoneRole || RoleValue() == kPresentationalRole; |
- } |
- virtual bool IsProgressIndicator() const { return false; } |
- bool IsRadioButton() const { return RoleValue() == kRadioButtonRole; } |
- bool IsRange() const { |
- return RoleValue() == kProgressIndicatorRole || |
- RoleValue() == kScrollBarRole || RoleValue() == kSliderRole || |
- RoleValue() == kSpinButtonRole; |
- } |
- bool IsScrollbar() const { return RoleValue() == kScrollBarRole; } |
- virtual bool IsSlider() const { return false; } |
- virtual bool IsNativeSlider() const { return false; } |
- virtual bool IsSpinButton() const { return RoleValue() == kSpinButtonRole; } |
- virtual bool IsSpinButtonPart() const { return false; } |
- bool IsTabItem() const { return RoleValue() == kTabRole; } |
- virtual bool IsTableCell() const { return false; } |
- virtual bool IsTableRow() const { return false; } |
- virtual bool IsTextControl() const { return false; } |
- virtual bool IsTableCol() const { return false; } |
- bool IsTree() const { return RoleValue() == kTreeRole; } |
- bool IsWebArea() const { return RoleValue() == kWebAreaRole; } |
- |
- // Check object state. |
- virtual bool IsClickable() const; |
- virtual bool IsCollapsed() const { return false; } |
- virtual bool IsEnabled() const { return false; } |
- virtual AccessibilityExpanded IsExpanded() const { |
- return kExpandedUndefined; |
- } |
- virtual bool IsFocused() const { return false; } |
- virtual bool IsHovered() const { return false; } |
- virtual bool IsLinked() const { return false; } |
- virtual bool IsLoaded() const { return false; } |
- virtual bool IsModal() const { return false; } |
- 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 IsRequired() const { return false; } |
- virtual bool IsSelected() const { return false; } |
- virtual bool IsSelectedOptionActive() const { return false; } |
- virtual bool IsVisible() const { return true; } |
- virtual bool IsVisited() const { return false; } |
- |
- // Check whether certain properties can be modified. |
- virtual bool CanSetFocusAttribute() const { return false; } |
- virtual bool CanSetValueAttribute() const { return false; } |
- virtual bool CanSetSelectedAttribute() const { return false; } |
- |
- // Whether objects are ignored, i.e. not included in the tree. |
- bool AccessibilityIsIgnored() const; |
- typedef HeapVector<IgnoredReason> IgnoredReasons; |
- virtual bool ComputeAccessibilityIsIgnored(IgnoredReasons* = nullptr) const { |
- return true; |
- } |
- bool AccessibilityIsIgnoredByDefault(IgnoredReasons* = nullptr) const; |
- AXObjectInclusion AccessibilityPlatformIncludesObject() const; |
- virtual AXObjectInclusion DefaultObjectInclusion( |
- IgnoredReasons* = nullptr) const; |
- bool IsInertOrAriaHidden() const; |
- const AXObject* AriaHiddenRoot() const; |
- bool ComputeIsInertOrAriaHidden(IgnoredReasons* = nullptr) const; |
- bool IsDescendantOfLeafNode() const; |
- AXObject* LeafNodeAncestor() const; |
- bool IsDescendantOfDisabledNode() const; |
- const AXObject* DisabledAncestor() const; |
- bool LastKnownIsIgnoredValue(); |
- void SetLastKnownIsIgnoredValue(bool); |
- bool HasInheritedPresentationalRole() const; |
- bool IsPresentationalChild() const; |
- bool AncestorExposesActiveDescendant() const; |
- bool ComputeAncestorExposesActiveDescendant() const; |
- |
- // |
- // Accessible name calculation |
- // |
- |
- // Retrieves the accessible name of the object, an enum indicating where the |
- // name was derived from, and a list of objects that were used to derive the |
- // name, if any. |
- virtual String GetName(AXNameFrom&, AXObjectVector* name_objects) const; |
- |
- typedef HeapVector<NameSource> NameSources; |
- // Retrieves the accessible name of the object and a list of all potential |
- // sources for the name, indicating which were used. |
- virtual String GetName(NameSources*) const; |
- |
- typedef HeapVector<DescriptionSource> DescriptionSources; |
- // Takes the result of nameFrom from calling |name|, above, and retrieves the |
- // accessible description of the object, which is secondary to |name|, an enum |
- // indicating where the description was derived from, and a list of objects |
- // that were used to derive the description, if any. |
- virtual String Description(AXNameFrom, |
- AXDescriptionFrom&, |
- AXObjectVector* description_objects) const { |
- return String(); |
- } |
- |
- // Same as above, but returns a list of all potential sources for the |
- // description, indicating which were used. |
- virtual String Description(AXNameFrom, |
- AXDescriptionFrom&, |
- DescriptionSources*, |
- AXRelatedObjectVector*) const { |
- return String(); |
- } |
- |
- // Takes the result of nameFrom and descriptionFrom from calling |name| and |
- // |description|, above, and retrieves the placeholder of the object, if |
- // present and if it wasn't already exposed by one of the two functions above. |
- virtual String Placeholder(AXNameFrom) const { return String(); } |
- |
- // Internal functions used by name and description, above. |
- typedef HeapHashSet<Member<const AXObject>> AXObjectSet; |
- virtual String TextAlternative(bool recursive, |
- bool in_aria_labelled_by_traversal, |
- AXObjectSet& visited, |
- AXNameFrom& name_from, |
- AXRelatedObjectVector* related_objects, |
- NameSources* name_sources) const { |
- return String(); |
- } |
- virtual String TextFromDescendants(AXObjectSet& visited, |
- bool recursive) const { |
- return String(); |
- } |
- |
- // Returns result of Accessible Name Calculation algorithm. |
- // This is a simpler high-level interface to |name| used by Inspector. |
- String ComputedName() const; |
- |
- // Internal function used to determine whether the result of calling |name| on |
- // this object would return text that came from the an HTML label element or |
- // not. This is intended to be faster than calling |name| or |
- // |textAlternative|, and without side effects (it won't call |
- // axObjectCache->getOrCreate). |
- virtual bool NameFromLabelElement() const { return false; } |
- |
- // |
- // Properties of static elements. |
- // |
- |
- virtual const AtomicString& AccessKey() const { return g_null_atom; } |
- RGBA32 BackgroundColor() const; |
- virtual RGBA32 ComputeBackgroundColor() const { return Color::kTransparent; } |
- virtual RGBA32 GetColor() const { return Color::kBlack; } |
- // Used by objects of role ColorWellRole. |
- virtual RGBA32 ColorValue() const { return Color::kTransparent; } |
- virtual bool CanvasHasFallbackContent() const { return false; } |
- virtual String FontFamily() const { return g_null_atom; } |
- // Font size is in pixels. |
- virtual float FontSize() const { return 0.0f; } |
- // Value should be 1-based. 0 means not supported. |
- virtual int HeadingLevel() const { return 0; } |
- // Value should be 1-based. 0 means not supported. |
- virtual unsigned HierarchicalLevel() const { return 0; } |
- // Return the content of an image or canvas as an image data url in |
- // PNG format. If |maxSize| is not empty and if the image is larger than |
- // those dimensions, the image will be resized proportionally first to fit. |
- virtual String ImageDataUrl(const IntSize& max_size) const { |
- return g_null_atom; |
- } |
- virtual AXObject* InPageLinkTarget() const { return nullptr; } |
- virtual AccessibilityOrientation Orientation() const; |
- virtual String GetText() const { return String(); } |
- virtual AccessibilityTextDirection GetTextDirection() const { |
- return kAccessibilityTextDirectionLTR; |
- } |
- virtual int TextLength() const { return 0; } |
- virtual TextStyle GetTextStyle() const { return kTextStyleNone; } |
- virtual AXObjectVector RadioButtonsInGroup() const { |
- return AXObjectVector(); |
- } |
- virtual KURL Url() const { return KURL(); } |
- |
- // Load inline text boxes for just this node, even if |
- // settings->inlineTextBoxAccessibilityEnabled() is false. |
- virtual void LoadInlineTextBoxes() {} |
- |
- // Walk the AXObjects on the same line. This is supported on any |
- // object type but primarily intended to be used for inline text boxes. |
- virtual AXObject* NextOnLine() const { return nullptr; } |
- virtual AXObject* PreviousOnLine() const { return nullptr; } |
- |
- // For all node objects. The start and end character offset of each |
- // marker, such as spelling or grammar error. |
- virtual void Markers(Vector<DocumentMarker::MarkerType>&, |
- Vector<AXRange>&) const {} |
- // For an inline text box. |
- // The integer horizontal pixel offset of each character in the string; |
- // negative values for RTL. |
- virtual void TextCharacterOffsets(Vector<int>&) const {} |
- // The start and end character offset of each word in the object's text. |
- virtual void GetWordBoundaries(Vector<AXRange>&) const {} |
- |
- // Properties of interactive elements. |
- AXSupportedAction Action() const; |
- AccessibilityButtonState CheckedState() const; |
- virtual AriaCurrentState GetAriaCurrentState() const { |
- return kAriaCurrentStateUndefined; |
- } |
- virtual InvalidState GetInvalidState() const { |
- return kInvalidStateUndefined; |
- } |
- // Only used when invalidState() returns InvalidStateOther. |
- virtual String AriaInvalidValue() const { return String(); } |
- 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 String StringValue() const { return String(); } |
- |
- // ARIA attributes. |
- virtual AXObject* ActiveDescendant() { return nullptr; } |
- virtual String AriaAutoComplete() const { return String(); } |
- virtual void AriaOwnsElements(AXObjectVector& owns) const {} |
- virtual void AriaDescribedbyElements(AXObjectVector&) const {} |
- virtual void AriaLabelledbyElements(AXObjectVector&) const {} |
- virtual bool AriaHasPopup() const { return false; } |
- virtual bool IsEditable() const { return false; } |
- bool IsMultiline() const; |
- virtual bool IsRichlyEditable() const { return false; } |
- bool AriaPressedIsPresent() const; |
- virtual AccessibilityRole AriaRoleAttribute() const { return kUnknownRole; } |
- virtual bool AriaRoleHasPresentationalChildren() const { return false; } |
- virtual AXObject* AncestorForWhichThisIsAPresentationalChild() const { |
- return 0; |
- } |
- bool SupportsActiveDescendant() const; |
- bool SupportsARIAAttributes() const; |
- virtual bool SupportsARIADragging() const { return false; } |
- virtual bool SupportsARIADropping() const { return false; } |
- virtual bool SupportsARIAFlowTo() const { return false; } |
- virtual bool SupportsARIAOwns() const { return false; } |
- bool SupportsRangeValue() const; |
- virtual SortDirection GetSortDirection() const { |
- return kSortDirectionUndefined; |
- } |
- |
- // Returns 0-based index. |
- int IndexInParent() const; |
- |
- // Value should be 1-based. 0 means not supported. |
- virtual int PosInSet() const { return 0; } |
- virtual int SetSize() const { return 0; } |
- bool SupportsSetSizeAndPosInSet() const; |
- |
- // ARIA live-region features. |
- bool IsLiveRegion() const; |
- AXObject* LiveRegionRoot() const; |
- virtual const AtomicString& LiveRegionStatus() const { return g_null_atom; } |
- virtual const AtomicString& LiveRegionRelevant() const { return g_null_atom; } |
- virtual bool LiveRegionAtomic() const { return false; } |
- virtual bool LiveRegionBusy() const { return false; } |
- |
- const AtomicString& ContainerLiveRegionStatus() const; |
- const AtomicString& ContainerLiveRegionRelevant() const; |
- bool ContainerLiveRegionAtomic() const; |
- bool ContainerLiveRegionBusy() const; |
- |
- // Every object's bounding box is returned relative to a |
- // container object (which is guaranteed to be an ancestor) and |
- // optionally a transformation matrix that needs to be applied too. |
- // To compute the absolute bounding box of an element, start with its |
- // boundsInContainer and apply the transform. Then as long as its container is |
- // not null, walk up to its container and offset by the container's offset |
- // from origin, the container's scroll position if any, and apply the |
- // container's transform. Do this until you reach the root of the tree. |
- virtual void GetRelativeBounds(AXObject** out_container, |
- FloatRect& out_bounds_in_container, |
- SkMatrix44& out_container_transform) const; |
- |
- // Get the bounds in frame-relative coordinates as a LayoutRect. |
- LayoutRect GetBoundsInFrameCoordinates() const; |
- |
- // Explicitly set an object's bounding rect and offset container. |
- void SetElementRect(LayoutRect r, AXObject* container) { |
- explicit_element_rect_ = r; |
- explicit_container_id_ = container->AxObjectID(); |
- } |
- |
- // Hit testing. |
- // Called on the root AX object to return the deepest available element. |
- virtual AXObject* AccessibilityHitTest(const IntPoint&) const { return 0; } |
- // Called on the AX object after the layout tree determines which is the right |
- // AXLayoutObject. |
- virtual AXObject* ElementAccessibilityHitTest(const IntPoint&) const; |
- |
- // High-level accessibility tree access. Other modules should only use these |
- // functions. |
- const AXObjectVector& Children(); |
- AXObject* ParentObject() const; |
- AXObject* ParentObjectIfExists() const; |
- virtual AXObject* ComputeParent() const = 0; |
- virtual AXObject* ComputeParentIfExists() const { return 0; } |
- AXObject* CachedParentObject() const { return parent_; } |
- AXObject* ParentObjectUnignored() const; |
- |
- // Low-level accessibility tree exploration, only for use within the |
- // accessibility module. |
- virtual AXObject* RawFirstChild() const { return 0; } |
- virtual AXObject* RawNextSibling() const { return 0; } |
- virtual void AddChildren() {} |
- virtual bool CanHaveChildren() const { return true; } |
- bool HasChildren() const { return have_children_; } |
- virtual void UpdateChildrenIfNecessary(); |
- virtual bool NeedsToUpdateChildren() const { return false; } |
- virtual void SetNeedsToUpdateChildren() {} |
- virtual void ClearChildren(); |
- virtual void DetachFromParent() { parent_ = 0; } |
- virtual AXObject* ScrollBar(AccessibilityOrientation) { return 0; } |
- |
- // Properties of the object's owning document or page. |
- virtual double EstimatedLoadingProgress() const { return 0; } |
- |
- // DOM and layout tree access. |
- virtual Node* GetNode() const { return 0; } |
- virtual LayoutObject* GetLayoutObject() const { return 0; } |
- virtual Document* GetDocument() const; |
- virtual FrameView* DocumentFrameView() const; |
- virtual Element* AnchorElement() const { return 0; } |
- virtual Element* ActionElement() const { return 0; } |
- String Language() const; |
- bool HasAttribute(const QualifiedName&) const; |
- const AtomicString& GetAttribute(const QualifiedName&) const; |
- |
- // Methods that retrieve or manipulate the current selection. |
- |
- // Get the current selection from anywhere in the accessibility tree. |
- virtual AXRange Selection() const { return AXRange(); } |
- // Gets only the start and end offsets of the selection computed using the |
- // current object as the starting point. Returns a null selection if there is |
- // no selection in the subtree rooted at this object. |
- virtual AXRange SelectionUnderObject() const { return AXRange(); } |
- virtual void SetSelection(const AXRange&) {} |
- |
- // Scrollable containers. |
- bool IsScrollableContainer() const; |
- IntPoint GetScrollOffset() const; |
- IntPoint MinimumScrollOffset() const; |
- IntPoint MaximumScrollOffset() const; |
- void SetScrollOffset(const IntPoint&) const; |
- |
- // If this object itself scrolls, return its ScrollableArea. |
- virtual ScrollableArea* GetScrollableAreaIfScrollable() const { return 0; } |
- |
- // Modify or take an action on an object. |
- virtual void Increment() {} |
- virtual void Decrement() {} |
- bool PerformDefaultAction() { return Press(); } |
- virtual bool Press(); |
- // Make this object visible by scrolling as many nested scrollable views as |
- // needed. |
- void ScrollToMakeVisible() const; |
- // Same, but if the whole object can't be made visible, try for this subrect, |
- // in local coordinates. |
- void ScrollToMakeVisibleWithSubFocus(const IntRect&) const; |
- // Scroll this object to a given point in global coordinates of the top-level |
- // window. |
- void ScrollToGlobalPoint(const IntPoint&) const; |
- virtual void SetFocused(bool) {} |
- virtual void SetSelected(bool) {} |
- virtual void SetSequentialFocusNavigationStartingPoint(); |
- virtual void SetValue(const String&) {} |
- virtual void SetValue(float) {} |
- |
- // Notifications that this object may have changed. |
- virtual void ChildrenChanged() {} |
- virtual void HandleActiveDescendantChanged() {} |
- virtual void HandleAriaExpandedChanged() {} |
- void NotifyIfIgnoredValueChanged(); |
- virtual void SelectionChanged(); |
- virtual void TextChanged() {} |
- virtual void UpdateAccessibilityRole() {} |
- |
- // Text metrics. Most of these should be deprecated, needs major cleanup. |
- virtual VisiblePosition VisiblePositionForIndex(int) const { |
- return VisiblePosition(); |
- } |
- int LineForPosition(const VisiblePosition&) const; |
- virtual int Index(const VisiblePosition&) const { return -1; } |
- virtual void LineBreaks(Vector<int>&) const {} |
- |
- // Static helper functions. |
- static bool IsARIAControl(AccessibilityRole); |
- static bool IsARIAInput(AccessibilityRole); |
- static AccessibilityRole AriaRoleToWebCoreRole(const String&); |
- static const AtomicString& RoleName(AccessibilityRole); |
- static const AtomicString& InternalRoleName(AccessibilityRole); |
- static bool IsInsideFocusableElementOrARIAWidget(const Node&); |
- |
- protected: |
- AXID id_; |
- AXObjectVector children_; |
- mutable bool have_children_; |
- AccessibilityRole role_; |
- AXObjectInclusion last_known_is_ignored_value_; |
- LayoutRect explicit_element_rect_; |
- AXID explicit_container_id_; |
- |
- // Used only inside textAlternative(): |
- static String CollapseWhitespace(const String&); |
- static String RecursiveTextAlternative(const AXObject&, |
- bool in_aria_labelled_by_traversal, |
- AXObjectSet& visited); |
- bool IsHiddenForTextAlternativeCalculation() const; |
- String AriaTextAlternative(bool recursive, |
- bool in_aria_labelled_by_traversal, |
- AXObjectSet& visited, |
- AXNameFrom&, |
- AXRelatedObjectVector*, |
- NameSources*, |
- bool* found_text_alternative) const; |
- String TextFromElements(bool in_aria_labelled_by_traversal, |
- AXObjectSet& visited, |
- HeapVector<Member<Element>>& elements, |
- AXRelatedObjectVector* related_objects) const; |
- void TokenVectorFromAttribute(Vector<String>&, const QualifiedName&) const; |
- void ElementsFromAttribute(HeapVector<Member<Element>>& elements, |
- const QualifiedName&) const; |
- void AriaLabelledbyElementVector(HeapVector<Member<Element>>& elements) const; |
- String TextFromAriaLabelledby(AXObjectSet& visited, |
- AXRelatedObjectVector* related_objects) const; |
- String TextFromAriaDescribedby(AXRelatedObjectVector* related_objects) const; |
- |
- virtual const AXObject* InheritsPresentationalRoleFrom() const { return 0; } |
- |
- virtual bool NameFromContents() const; |
- |
- AccessibilityRole ButtonRoleType() const; |
- |
- virtual LayoutObject* LayoutObjectForRelativeBounds() const { |
- return nullptr; |
- } |
- |
- mutable Member<AXObject> parent_; |
- |
- // The following cached attribute values (the ones starting with m_cached*) |
- // are only valid if m_lastModificationCount matches |
- // AXObjectCacheImpl::modificationCount(). |
- mutable int last_modification_count_; |
- mutable RGBA32 cached_background_color_; |
- mutable bool cached_is_ignored_ : 1; |
- mutable bool cached_is_inert_or_aria_hidden_ : 1; |
- mutable bool cached_is_descendant_of_leaf_node_ : 1; |
- mutable bool cached_is_descendant_of_disabled_node_ : 1; |
- mutable bool cached_has_inherited_presentational_role_ : 1; |
- mutable bool cached_is_presentational_child_ : 1; |
- mutable bool cached_ancestor_exposes_active_descendant_ : 1; |
- mutable Member<AXObject> cached_live_region_root_; |
- |
- Member<AXObjectCacheImpl> ax_object_cache_; |
- |
- // Updates the cached attribute values. This may be recursive, so to prevent |
- // deadlocks, |
- // functions called here may only search up the tree (ancestors), not down. |
- void UpdateCachedAttributeValuesIfNeeded() const; |
- |
- private: |
- static bool IsNativeInputInMixedState(const Node*); |
- static bool IncludesARIAWidgetRole(const String&); |
- static bool HasInteractiveARIAAttribute(const Element&); |
- |
- static unsigned number_of_live_ax_objects_; |
-}; |
- |
-#define DEFINE_AX_OBJECT_TYPE_CASTS(thisType, predicate) \ |
- DEFINE_TYPE_CASTS(thisType, AXObject, object, object->predicate, \ |
- object.predicate) |
- |
-} // namespace blink |
- |
-#endif // AXObject_h |