| /* |
| * Copyright (C) 2009 Google Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * 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. |
| * * Neither the name of Google Inc. 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT |
| * OWNER OR 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 THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_AX_OBJECT_H_ |
| #define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_AX_OBJECT_H_ |
| |
| #include <memory> |
| #include "third_party/blink/public/platform/web_common.h" |
| #include "third_party/blink/public/platform/web_private_ptr.h" |
| #include "third_party/blink/public/platform/web_size.h" |
| #include "third_party/blink/public/platform/web_vector.h" |
| #include "third_party/blink/public/web/web_ax_enums.h" |
| #include "ui/accessibility/ax_enums.mojom-shared.h" |
| |
| class SkMatrix44; |
| |
| namespace gfx { |
| class Point; |
| } |
| |
| namespace blink { |
| |
| class AXObject; |
| class WebAXObject; |
| class WebNode; |
| class WebDocument; |
| class WebString; |
| class WebURL; |
| struct WebFloatRect; |
| struct WebRect; |
| struct WebSize; |
| |
| class BLINK_EXPORT WebAXSparseAttributeClient { |
| public: |
| WebAXSparseAttributeClient() = default; |
| virtual ~WebAXSparseAttributeClient() = default; |
| |
| virtual void AddBoolAttribute(WebAXBoolAttribute, bool) = 0; |
| virtual void AddIntAttribute(WebAXIntAttribute, int32_t) = 0; |
| virtual void AddUIntAttribute(WebAXUIntAttribute, uint32_t) = 0; |
| virtual void AddStringAttribute(WebAXStringAttribute, const WebString&) = 0; |
| virtual void AddObjectAttribute(WebAXObjectAttribute, const WebAXObject&) = 0; |
| virtual void AddObjectVectorAttribute(WebAXObjectVectorAttribute, |
| const WebVector<WebAXObject>&) = 0; |
| }; |
| |
| // A container for passing around a reference to AXObject. |
| class WebAXObject { |
| public: |
| ~WebAXObject() { Reset(); } |
| |
| WebAXObject() = default; |
| WebAXObject(const WebAXObject& o) { Assign(o); } |
| WebAXObject& operator=(const WebAXObject& o) { |
| Assign(o); |
| return *this; |
| } |
| |
| BLINK_EXPORT bool operator==(const WebAXObject& other) const; |
| BLINK_EXPORT bool operator!=(const WebAXObject& other) const; |
| BLINK_EXPORT bool operator<(const WebAXObject& other) const; |
| BLINK_EXPORT bool operator<=(const WebAXObject& other) const; |
| BLINK_EXPORT bool operator>(const WebAXObject& other) const; |
| BLINK_EXPORT bool operator>=(const WebAXObject& other) const; |
| BLINK_EXPORT static WebAXObject FromWebNode(const WebNode&); |
| BLINK_EXPORT static WebAXObject FromWebDocument(const WebDocument&); |
| BLINK_EXPORT static WebAXObject FromWebDocumentByID(const WebDocument&, int); |
| BLINK_EXPORT static WebAXObject FromWebDocumentFocused(const WebDocument&); |
| |
| BLINK_EXPORT void Reset(); |
| BLINK_EXPORT void Assign(const WebAXObject&); |
| BLINK_EXPORT bool Equals(const WebAXObject&) const; |
| |
| bool IsNull() const { return private_.IsNull(); } |
| // isDetached also checks for null, so it's safe to just call isDetached. |
| BLINK_EXPORT bool IsDetached() const; |
| |
| BLINK_EXPORT int AxID() const; |
| |
| // Get a new AXID that's not used by any accessibility node in this process, |
| // for when the client needs to insert additional nodes into the accessibility |
| // tree. |
| BLINK_EXPORT int GenerateAXID() const; |
| |
| // Update layout if necessary on the underlying tree, and return true if this |
| // object is still valid (not detached). Note that calling this method can |
| // cause other WebAXObjects to become invalid, too, so always call isDetached |
| // if any other blink/renderer/core code has run. |
| BLINK_EXPORT bool UpdateLayoutAndCheckValidity(); |
| |
| BLINK_EXPORT unsigned ChildCount() const; |
| |
| BLINK_EXPORT WebAXObject ChildAt(unsigned) const; |
| BLINK_EXPORT WebAXObject ParentObject() const; |
| |
| // Retrieve accessibility attributes that apply to only a small |
| // fraction of WebAXObjects by passing an implementation of |
| // WebAXSparseAttributeClient, which will be called with only the attributes |
| // that apply to this object. |
| BLINK_EXPORT void GetSparseAXAttributes(WebAXSparseAttributeClient&) const; |
| |
| BLINK_EXPORT bool IsAnchor() const; |
| BLINK_EXPORT bool IsAutofillAvailable() const; |
| BLINK_EXPORT ax::mojom::CheckedState CheckedState() const; |
| BLINK_EXPORT bool IsCheckable() const; |
| BLINK_EXPORT bool IsClickable() const; |
| BLINK_EXPORT bool IsControl() const; |
| BLINK_EXPORT bool IsDefault() const; |
| BLINK_EXPORT WebAXExpanded IsExpanded() const; |
| BLINK_EXPORT bool IsFocused() const; |
| BLINK_EXPORT WebAXGrabbedState IsGrabbed() const; |
| BLINK_EXPORT bool IsHovered() const; |
| BLINK_EXPORT bool IsLineBreakingObject() const; |
| BLINK_EXPORT bool IsLinked() const; |
| BLINK_EXPORT bool IsLoaded() const; |
| BLINK_EXPORT bool IsModal() const; |
| BLINK_EXPORT bool IsMultiSelectable() const; |
| BLINK_EXPORT bool IsOffScreen() const; |
| BLINK_EXPORT bool IsPasswordField() const; |
| BLINK_EXPORT bool IsRequired() const; |
| BLINK_EXPORT WebAXSelectedState IsSelected() const; |
| BLINK_EXPORT bool IsSelectedOptionActive() const; |
| BLINK_EXPORT bool IsVisible() const; |
| BLINK_EXPORT bool IsVisited() const; |
| |
| BLINK_EXPORT bool HasAriaAttribute() const; |
| BLINK_EXPORT WebString AccessKey() const; |
| BLINK_EXPORT unsigned BackgroundColor() const; |
| BLINK_EXPORT bool CanPress() const; |
| BLINK_EXPORT bool CanSetValueAttribute() const; |
| BLINK_EXPORT bool CanSetFocusAttribute() const; |
| BLINK_EXPORT unsigned GetColor() const; |
| // Deprecated. |
| BLINK_EXPORT void ColorValue(int& r, int& g, int& b) const; |
| BLINK_EXPORT unsigned ColorValue() const; |
| BLINK_EXPORT WebAXObject AriaActiveDescendant() const; |
| BLINK_EXPORT WebString AutoComplete() const; |
| BLINK_EXPORT ax::mojom::AriaCurrentState AriaCurrentState() const; |
| BLINK_EXPORT ax::mojom::HasPopup HasPopup() const; |
| BLINK_EXPORT bool IsEditableRoot() const; |
| BLINK_EXPORT bool IsEditable() const; |
| BLINK_EXPORT bool IsMultiline() const; |
| BLINK_EXPORT bool IsRichlyEditable() const; |
| BLINK_EXPORT bool AriaOwns(WebVector<WebAXObject>& owns_elements) const; |
| BLINK_EXPORT WebString FontFamily() const; |
| BLINK_EXPORT float FontSize() const; |
| BLINK_EXPORT float FontWeight() const; |
| BLINK_EXPORT bool CanvasHasFallbackContent() const; |
| BLINK_EXPORT WebAXObject ErrorMessage() const; |
| // If this is an image, returns the image (scaled to maxSize) as a data url. |
| BLINK_EXPORT WebString ImageDataUrl(const WebSize& max_size) const; |
| BLINK_EXPORT WebAXRestriction Restriction() const; |
| BLINK_EXPORT ax::mojom::InvalidState InvalidState() const; |
| // Only used when invalidState() returns WebAXInvalidStateOther. |
| BLINK_EXPORT WebString AriaInvalidValue() const; |
| BLINK_EXPORT double EstimatedLoadingProgress() const; |
| BLINK_EXPORT int HeadingLevel() const; |
| BLINK_EXPORT int HierarchicalLevel() const; |
| BLINK_EXPORT WebAXObject HitTest(const gfx::Point&) const; |
| // Get the WebAXObject's bounds in frame-relative coordinates as a WebRect. |
| BLINK_EXPORT WebRect GetBoundsInFrameCoordinates() const; |
| BLINK_EXPORT WebString KeyboardShortcut() const; |
| BLINK_EXPORT WebString Language() const; |
| BLINK_EXPORT WebAXObject InPageLinkTarget() const; |
| BLINK_EXPORT WebAXOrientation Orientation() const; |
| BLINK_EXPORT WebVector<WebAXObject> RadioButtonsInGroup() const; |
| BLINK_EXPORT ax::mojom::Role Role() const; |
| BLINK_EXPORT WebString StringValue() const; |
| BLINK_EXPORT ax::mojom::ListStyle GetListStyle() const; |
| BLINK_EXPORT ax::mojom::TextDirection GetTextDirection() const; |
| BLINK_EXPORT ax::mojom::TextPosition GetTextPosition() const; |
| BLINK_EXPORT void GetTextStyleAndTextDecorationStyle( |
| int32_t* text_style, |
| ax::mojom::TextDecorationStyle* text_overline_style, |
| ax::mojom::TextDecorationStyle* text_strikethrough_style, |
| ax::mojom::TextDecorationStyle* text_underline_style) const; |
| BLINK_EXPORT WebURL Url() const; |
| BLINK_EXPORT WebAXObject ChooserPopup() const; |
| |
| // Retrieves the accessible name of the object, an enum indicating where the |
| // name was derived from, and a list of related objects that were used to |
| // derive the name, if any. |
| BLINK_EXPORT WebString GetName(ax::mojom::NameFrom&, |
| WebVector<WebAXObject>& name_objects) const; |
| // Simplified version of |name| when nameFrom and nameObjects aren't needed. |
| BLINK_EXPORT WebString GetName() const; |
| // 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. |
| BLINK_EXPORT WebString |
| Description(ax::mojom::NameFrom, |
| ax::mojom::DescriptionFrom&, |
| WebVector<WebAXObject>& description_objects) const; |
| // 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. |
| BLINK_EXPORT WebString Placeholder(ax::mojom::NameFrom) const; |
| |
| // Takes the result of nameFrom and retrieves the HTML Title of the object, |
| // if present and if it wasn't already exposed by |GetName| above. |
| // HTML Title is typically used as a tooltip. |
| BLINK_EXPORT WebString Title(ax::mojom::NameFrom) const; |
| |
| // The following selection functions get or set the global document |
| // selection and can be called on any object in the tree. |
| |
| BLINK_EXPORT void Selection(bool& is_selection_backward, |
| WebAXObject& anchor_object, |
| int& anchor_offset, |
| ax::mojom::TextAffinity& anchor_affinity, |
| WebAXObject& focus_object, |
| int& focus_offset, |
| ax::mojom::TextAffinity& focus_affinity) const; |
| |
| // The following selection functions return text offsets calculated starting |
| // from the current object. They only report on a selection that is placed on |
| // the current object or on any of its descendants. |
| |
| BLINK_EXPORT unsigned SelectionEnd() const; |
| BLINK_EXPORT unsigned SelectionStart() const; |
| |
| // 1-based position in set & Size of set. |
| BLINK_EXPORT int PosInSet() const; |
| BLINK_EXPORT int SetSize() const; |
| |
| // Live regions. |
| BLINK_EXPORT bool IsInLiveRegion() const; |
| BLINK_EXPORT bool LiveRegionAtomic() const; |
| BLINK_EXPORT WebString LiveRegionRelevant() const; |
| BLINK_EXPORT WebString LiveRegionStatus() const; |
| BLINK_EXPORT WebAXObject LiveRegionRoot() const; |
| BLINK_EXPORT bool ContainerLiveRegionAtomic() const; |
| BLINK_EXPORT bool ContainerLiveRegionBusy() const; |
| BLINK_EXPORT WebString ContainerLiveRegionRelevant() const; |
| BLINK_EXPORT WebString ContainerLiveRegionStatus() const; |
| |
| BLINK_EXPORT bool SupportsRangeValue() const; |
| BLINK_EXPORT WebString ValueDescription() const; |
| BLINK_EXPORT bool ValueForRange(float* out_value) const; |
| BLINK_EXPORT bool MaxValueForRange(float* out_value) const; |
| BLINK_EXPORT bool MinValueForRange(float* out_value) const; |
| BLINK_EXPORT bool StepValueForRange(float* out_value) const; |
| |
| BLINK_EXPORT WebNode GetNode() const; |
| BLINK_EXPORT WebDocument GetDocument() const; |
| BLINK_EXPORT bool HasComputedStyle() const; |
| BLINK_EXPORT WebString ComputedStyleDisplay() const; |
| BLINK_EXPORT bool AccessibilityIsIgnored() const; |
| BLINK_EXPORT bool AccessibilityIsIncludedInTree() const; |
| BLINK_EXPORT void Markers(WebVector<ax::mojom::MarkerType>& types, |
| WebVector<int>& starts, |
| WebVector<int>& ends) const; |
| |
| // Actions. Return true if handled. |
| BLINK_EXPORT ax::mojom::DefaultActionVerb Action() const; |
| BLINK_EXPORT bool ClearAccessibilityFocus() const; |
| BLINK_EXPORT bool Click() const; |
| BLINK_EXPORT bool Decrement() const; |
| BLINK_EXPORT bool Increment() const; |
| BLINK_EXPORT bool Focus() const; |
| BLINK_EXPORT bool SetAccessibilityFocus() const; |
| BLINK_EXPORT bool SetSelected(bool) const; |
| BLINK_EXPORT bool SetSelection(const WebAXObject& anchor_object, |
| int anchor_offset, |
| const WebAXObject& focus_object, |
| int focus_offset) const; |
| BLINK_EXPORT bool SetSequentialFocusNavigationStartingPoint() const; |
| BLINK_EXPORT bool SetValue(WebString) const; |
| BLINK_EXPORT bool ShowContextMenu() const; |
| // Make this object visible by scrolling as many nested scrollable views as |
| // needed. |
| BLINK_EXPORT bool ScrollToMakeVisible() const; |
| // Same, but if the whole object can't be made visible, try for this subrect, |
| // in local coordinates. We also allow passing horizontal and vertical scroll |
| // alignments. These specify where in the content area to scroll the object. |
| BLINK_EXPORT bool ScrollToMakeVisibleWithSubFocus( |
| const WebRect&, |
| ax::mojom::ScrollAlignment horizontal_scroll_alignment = |
| ax::mojom::ScrollAlignment::kScrollAlignmentCenter, |
| ax::mojom::ScrollAlignment vertical_scroll_alignment = |
| ax::mojom::ScrollAlignment::kScrollAlignmentCenter, |
| ax::mojom::ScrollBehavior scroll_behavior = |
| ax::mojom::ScrollBehavior::kDoNotScrollIfVisible) const; |
| // Scroll this object to a given point in global coordinates of the top-level |
| // window. |
| BLINK_EXPORT bool ScrollToGlobalPoint(const gfx::Point&) const; |
| |
| // For a table |
| BLINK_EXPORT int AriaColumnCount() const; |
| BLINK_EXPORT unsigned AriaColumnIndex() const; |
| BLINK_EXPORT int AriaRowCount() const; |
| BLINK_EXPORT unsigned AriaRowIndex() const; |
| BLINK_EXPORT unsigned ColumnCount() const; |
| BLINK_EXPORT unsigned RowCount() const; |
| BLINK_EXPORT WebAXObject CellForColumnAndRow(unsigned column, |
| unsigned row) const; |
| BLINK_EXPORT void RowHeaders(WebVector<WebAXObject>&) const; |
| BLINK_EXPORT void ColumnHeaders(WebVector<WebAXObject>&) const; |
| |
| // For a table row |
| BLINK_EXPORT unsigned RowIndex() const; |
| BLINK_EXPORT WebAXObject RowHeader() const; |
| |
| // For a table column |
| BLINK_EXPORT unsigned ColumnIndex() const; |
| BLINK_EXPORT WebAXObject ColumnHeader() const; |
| |
| // For a table cell |
| BLINK_EXPORT unsigned CellColumnIndex() const; |
| BLINK_EXPORT unsigned CellColumnSpan() const; |
| BLINK_EXPORT unsigned CellRowIndex() const; |
| BLINK_EXPORT unsigned CellRowSpan() const; |
| BLINK_EXPORT ax::mojom::SortDirection SortDirection() const; |
| |
| // Load inline text boxes for just this subtree, even if |
| // settings->inlineTextBoxAccessibilityEnabled() is false. |
| BLINK_EXPORT void LoadInlineTextBoxes() const; |
| |
| // Walk the WebAXObjects on the same line. This is supported on any |
| // object type but primarily intended to be used for inline text boxes. |
| BLINK_EXPORT WebAXObject NextOnLine() const; |
| BLINK_EXPORT WebAXObject PreviousOnLine() const; |
| |
| // For an inline text box. |
| BLINK_EXPORT void CharacterOffsets(WebVector<int>&) const; |
| BLINK_EXPORT void GetWordBoundaries(WebVector<int>& starts, |
| WebVector<int>& ends) const; |
| |
| // Scrollable containers. |
| BLINK_EXPORT bool IsScrollableContainer() const; |
| BLINK_EXPORT gfx::Point GetScrollOffset() const; |
| BLINK_EXPORT gfx::Point MinimumScrollOffset() const; |
| BLINK_EXPORT gfx::Point MaximumScrollOffset() const; |
| BLINK_EXPORT void SetScrollOffset(const gfx::Point&) const; |
| |
| // aria-dropeffect is deprecated in WAI-ARIA 1.1 |
| BLINK_EXPORT void Dropeffects( |
| WebVector<ax::mojom::Dropeffect>& dropeffects) 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. |
| // If the container clips its children, for example with overflow:hidden |
| // or similar, set |clips_children| to true. |
| BLINK_EXPORT void GetRelativeBounds(WebAXObject& offset_container, |
| WebFloatRect& bounds_in_container, |
| SkMatrix44& container_transform, |
| bool* clips_children = nullptr) const; |
| |
| // Blink-internal DOM Node ID. Currently used for PDF exporting. |
| BLINK_EXPORT int GetDOMNodeId() const; |
| |
| // Exchanges a WebAXObject with another. |
| BLINK_EXPORT void Swap(WebAXObject& other); |
| |
| // Returns a brief description of the object, suitable for debugging. E.g. its |
| // role and name. |
| BLINK_EXPORT WebString ToString() const; |
| |
| BLINK_EXPORT void HandleAutofillStateChanged( |
| const WebAXAutofillState state) const; |
| |
| #if INSIDE_BLINK |
| BLINK_EXPORT WebAXObject(AXObject*); |
| WebAXObject& operator=(AXObject*); |
| operator AXObject*() const; |
| #endif |
| |
| private: |
| WebPrivatePtr<AXObject> private_; |
| }; |
| |
| } // namespace blink |
| |
| #endif |