| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..aa8754a39b04fff57ae15043c09d8a43d9e88eee
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/modules/accessibility/AXObject.h
|
| @@ -0,0 +1,1138 @@
|
| +/*
|
| + * 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
|
|
|