| /* |
| * Copyright (C) 2014-2025 Apple 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: |
| * 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. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. 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 INC. OR ITS CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #pragma once |
| |
| #if PLATFORM(IOS_FAMILY) |
| |
| #include "AccessibilityUIElement.h" |
| #include <wtf/RetainPtr.h> |
| #include <wtf/WeakObjCPtr.h> |
| |
| namespace WTR { |
| |
| class AccessibilityUIElementIOS final : public AccessibilityUIElement { |
| public: |
| static Ref<AccessibilityUIElementIOS> create(PlatformUIElement); |
| static Ref<AccessibilityUIElementIOS> create(const AccessibilityUIElementIOS&); |
| |
| ~AccessibilityUIElementIOS(); |
| |
| PlatformUIElement platformUIElement() override { return m_element.getAutoreleased(); } |
| |
| // AccessibilityUIElement overrides |
| bool isValid() const override; |
| bool isEqual(AccessibilityUIElement* otherElement) override; |
| |
| JSRetainPtr<JSStringRef> domIdentifier() const override; |
| RefPtr<AccessibilityUIElement> headerElementAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> linkedElement() override; |
| void getLinkedUIElements(Vector<RefPtr<AccessibilityUIElement>>&); |
| void getDocumentLinks(Vector<RefPtr<AccessibilityUIElement>>&); |
| JSValueRef children(JSContextRef) override; |
| unsigned childrenCount() override; |
| RefPtr<AccessibilityUIElement> childAtIndex(unsigned) override; |
| Vector<RefPtr<AccessibilityUIElement>> getChildren() const; |
| Vector<RefPtr<AccessibilityUIElement>> getChildrenInRange(unsigned location, unsigned length) const; |
| RefPtr<AccessibilityUIElement> elementAtPoint(int x, int y) override; |
| unsigned indexOfChild(AccessibilityUIElement*) override; |
| RefPtr<AccessibilityUIElement> linkedUIElementAtIndex(unsigned) override; |
| JSValueRef detailsElements(JSContextRef) override; |
| JSValueRef errorMessageElements(JSContextRef) override; |
| RefPtr<AccessibilityUIElement> ariaOwnsElementAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> ariaFlowToElementAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> ariaActionsElementAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> ariaControlsElementAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> ariaDetailsElementAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> ariaErrorMessageElementAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> disclosedRowAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> rowAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> selectedChildAtIndex(unsigned) const override; |
| unsigned selectedChildrenCount() const override; |
| |
| JSRetainPtr<JSStringRef> allAttributes() override; |
| JSRetainPtr<JSStringRef> attributesOfLinkedUIElements() override; |
| RefPtr<AccessibilityUIElement> titleUIElement() override; |
| RefPtr<AccessibilityUIElement> parentElement() override; |
| |
| JSRetainPtr<JSStringRef> attributesOfChildren() override; |
| JSRetainPtr<JSStringRef> parameterizedAttributeNames() override; |
| |
| JSRetainPtr<JSStringRef> role() override; |
| JSRetainPtr<JSStringRef> subrole() override; |
| JSRetainPtr<JSStringRef> roleDescription() override; |
| JSRetainPtr<JSStringRef> computedRoleString() override; |
| JSRetainPtr<JSStringRef> title() override; |
| JSRetainPtr<JSStringRef> description() override; |
| JSRetainPtr<JSStringRef> language() override; |
| JSRetainPtr<JSStringRef> stringValue() override; |
| JSRetainPtr<JSStringRef> accessibilityValue() const override; |
| JSRetainPtr<JSStringRef> helpText() const override; |
| JSRetainPtr<JSStringRef> orientation() const override; |
| double x() override; |
| double y() override; |
| double width() override; |
| double height() override; |
| double intValue() const override; |
| double minValue() override; |
| double maxValue() override; |
| JSRetainPtr<JSStringRef> valueDescription() override; |
| int insertionPointLineNumber() override; |
| JSRetainPtr<JSStringRef> selectedTextRange() override; |
| bool isEnabled() override; |
| bool isRequired() const override; |
| |
| bool isFocused() const override; |
| bool isFocusable() const override; |
| bool isSelected() const override; |
| bool isSelectable() const override; |
| bool isMultiSelectable() const override; |
| void setSelectedChild(AccessibilityUIElement*) const override; |
| void setSelectedChildAtIndex(unsigned) const override; |
| void removeSelectionAtIndex(unsigned) const override; |
| void clearSelectedChildren() const override; |
| |
| bool isExpanded() const override; |
| bool isChecked() const override; |
| bool isIndeterminate() const override; |
| bool isVisible() const override; |
| bool isOffScreen() const override; |
| bool isCollapsed() const override; |
| bool isIgnored() const override; |
| bool isRemotePlatformElement() const override; |
| bool isSingleLine() const override; |
| bool isMultiLine() const override; |
| bool hasPopup() const override; |
| JSRetainPtr<JSStringRef> popupValue() const override; |
| int hierarchicalLevel() const override; |
| double clickPointX() override; |
| double clickPointY() override; |
| JSRetainPtr<JSStringRef> documentEncoding(); |
| JSRetainPtr<JSStringRef> documentURI(); |
| JSRetainPtr<JSStringRef> url() override; |
| |
| JSRetainPtr<JSStringRef> classList() const override; |
| |
| // Additional platform-specific methods |
| JSRetainPtr<JSStringRef> identifier() override; |
| JSRetainPtr<JSStringRef> traits() override; |
| int elementTextPosition() override; |
| int elementTextLength() override; |
| JSRetainPtr<JSStringRef> stringForSelection() override; |
| void increaseTextSelection() override; |
| void decreaseTextSelection() override; |
| RefPtr<AccessibilityUIElement> fieldsetAncestorElement() override; |
| |
| bool scrollPageUp() override; |
| bool scrollPageDown() override; |
| bool scrollPageLeft() override; |
| bool scrollPageRight() override; |
| |
| bool hasTextEntryTrait() override; |
| bool hasTabBarTrait() override; |
| bool hasMenuItemTrait() override; |
| |
| bool isSearchField() const override; |
| bool isSwitch() const override; |
| bool isTextArea() const override; |
| |
| void assistiveTechnologySimulatedFocus() override; |
| |
| JSRetainPtr<JSStringRef> customContent() const override; |
| JSRetainPtr<JSStringRef> brailleLabel() const override; |
| JSRetainPtr<JSStringRef> brailleRoleDescription() const override; |
| |
| JSRetainPtr<JSStringRef> embeddedImageDescription() const override; |
| JSRetainPtr<JSStringRef> imageDataSize() const override; |
| JSRetainPtr<JSStringRef> imageDataForParameters(int resizeWidth, int resizeHeight) const override; |
| JSRetainPtr<JSStringRef> imageDataForParametersWithFormat(int resizeWidth, int resizeHeight, JSStringRef format) const override; |
| JSRetainPtr<JSStringRef> imageDataForSubrect(int resizeWidth, int resizeHeight, int left, int top, int width, int height) const override; |
| JSValueRef imageOverlayElements(JSContextRef) override; |
| |
| bool hasDocumentRoleAncestor() const; |
| bool hasWebApplicationAncestor() const; |
| bool isInDescriptionListDetail() const override; |
| bool isInDescriptionListTerm() const override; |
| bool isInCell() const override; |
| bool isInTable() const override; |
| bool isInLandmark() const override; |
| bool isInList() const override; |
| |
| JSValueRef selectedChildren(JSContextRef) override; |
| |
| // Attribute methods |
| JSRetainPtr<JSStringRef> stringDescriptionOfAttributeValue(JSStringRef attribute) override; |
| JSRetainPtr<JSStringRef> stringAttributeValue(JSStringRef attribute) override; |
| double numberAttributeValue(JSStringRef attribute) override; |
| JSValueRef uiElementArrayAttributeValue(JSContextRef, JSStringRef attribute) override; |
| RefPtr<AccessibilityUIElement> uiElementAttributeValue(JSStringRef attribute) const override; |
| bool boolAttributeValue(JSStringRef attribute) override; |
| bool isAttributeSettable(JSStringRef attribute) override; |
| bool isAttributeSupported(JSStringRef attribute) override; |
| |
| // Table methods |
| JSValueRef rowHeaders(JSContextRef) override; |
| JSValueRef columnHeaders(JSContextRef) override; |
| JSValueRef selectedCells(JSContextRef) override; |
| RefPtr<AccessibilityUIElement> selectedRowAtIndex(unsigned) override; |
| RefPtr<AccessibilityUIElement> disclosedByRow() override; |
| |
| // Other methods |
| JSRetainPtr<JSStringRef> attributesOfDocumentLinks() override; |
| JSRetainPtr<JSStringRef> liveRegionRelevant() const override; |
| JSRetainPtr<JSStringRef> liveRegionStatus() const override; |
| double pageX() override; |
| double pageY() override; |
| |
| // Action support |
| bool isPressActionSupported() override; |
| bool isIncrementActionSupported() override; |
| bool isDecrementActionSupported() override; |
| |
| // State methods |
| bool isAtomicLiveRegion() const override; |
| bool isBusy() const override; |
| bool isSelectedOptionActive() const override; |
| bool supportsExpanded() const override; |
| bool isGrabbed() const override; |
| |
| // Focus |
| RefPtr<AccessibilityUIElement> focusedElement() const override; |
| |
| // ARIA |
| JSRetainPtr<JSStringRef> currentStateValue() const override; |
| JSRetainPtr<JSStringRef> sortDirection() const override; |
| JSRetainPtr<JSStringRef> speakAs() override; |
| JSRetainPtr<JSStringRef> ariaDropEffects() const override; |
| |
| // Text/Range methods |
| JSRetainPtr<JSStringRef> lineRectsAndText() const override; |
| int lineForIndex(int) override; |
| JSRetainPtr<JSStringRef> rangeForLine(int) override; |
| JSRetainPtr<JSStringRef> rangeForPosition(int x, int y) override; |
| JSRetainPtr<JSStringRef> boundsForRange(unsigned location, unsigned length) override; |
| JSRetainPtr<JSStringRef> stringForRange(unsigned location, unsigned length) override; |
| JSRetainPtr<JSStringRef> attributedStringForRange(unsigned location, unsigned length) override; |
| JSRetainPtr<JSStringRef> attributedStringForElement() override; |
| bool attributedStringRangeIsMisspelled(unsigned location, unsigned length) override; |
| |
| // Search methods |
| unsigned uiElementCountForSearchPredicate(JSContextRef, AccessibilityUIElement* startElement, bool isDirectionNext, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly, bool immediateDescendantsOnly) override; |
| RefPtr<AccessibilityUIElement> uiElementForSearchPredicate(JSContextRef, AccessibilityUIElement* startElement, bool isDirectionNext, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly, bool immediateDescendantsOnly) override; |
| JSValueRef uiElementsForSearchPredicate(JSContextRef, AccessibilityUIElement* startElement, bool isDirectionNext, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly, bool immediateDescendantsOnly, unsigned resultsLimit) override; |
| JSRetainPtr<JSStringRef> selectTextWithCriteria(JSContextRef, JSStringRef ambiguityResolution, JSValueRef searchStrings, JSStringRef replacementString, JSStringRef activity) override; |
| |
| // Table attribute methods |
| JSRetainPtr<JSStringRef> attributesOfColumnHeaders() override; |
| JSRetainPtr<JSStringRef> attributesOfRowHeaders() override; |
| JSRetainPtr<JSStringRef> attributesOfColumns() override; |
| JSRetainPtr<JSStringRef> attributesOfRows() override; |
| JSRetainPtr<JSStringRef> attributesOfVisibleCells() override; |
| JSRetainPtr<JSStringRef> attributesOfHeader() override; |
| |
| // Table cell methods |
| int rowCount() override; |
| int columnCount() override; |
| int indexInTable() override; |
| JSRetainPtr<JSStringRef> rowIndexRange() override; |
| JSRetainPtr<JSStringRef> columnIndexRange() override; |
| RefPtr<AccessibilityUIElement> cellForColumnAndRow(unsigned col, unsigned row) override; |
| |
| // Scrollbar methods |
| RefPtr<AccessibilityUIElement> horizontalScrollbar() const override; |
| RefPtr<AccessibilityUIElement> verticalScrollbar() const override; |
| |
| // Scrolling methods |
| void scrollToMakeVisible() override; |
| void scrollToGlobalPoint(int x, int y) override; |
| void scrollToMakeVisibleWithSubFocus(int x, int y, int width, int height) override; |
| |
| // Selection methods |
| RefPtr<AccessibilityTextMarkerRange> intersectionWithSelectionRange() override; |
| bool setSelectedTextMarkerRange(AccessibilityTextMarkerRange*) override; |
| bool setSelectedTextRange(unsigned location, unsigned length) override; |
| JSRetainPtr<JSStringRef> textInputMarkedRange() const override; |
| |
| // Action methods |
| void increment() override; |
| void decrement() override; |
| void showMenu() override; |
| void press() override; |
| bool dismiss() override; |
| bool invokeCustomActionAtIndex(unsigned) override; |
| |
| // Focus and selection actions |
| void takeFocus() override; |
| void takeSelection() override; |
| void addSelection() override; |
| void removeSelection() override; |
| |
| // Notification methods |
| bool addNotificationListener(JSContextRef, JSValueRef functionCallback) override; |
| bool removeNotificationListener() override; |
| |
| // Date/time |
| JSRetainPtr<JSStringRef> dateTimeValue() const override; |
| |
| // Math |
| JSRetainPtr<JSStringRef> mathPostscriptsDescription() const override; |
| JSRetainPtr<JSStringRef> mathPrescriptsDescription() const override; |
| |
| // Path |
| JSRetainPtr<JSStringRef> pathDescription() const override; |
| JSRetainPtr<JSStringRef> pathAsBounds() const override; |
| |
| // Supported actions |
| JSRetainPtr<JSStringRef> supportedActions() const override; |
| |
| // Insertion/deletion |
| bool isInsertion() const override; |
| bool isDeletion() const override; |
| bool isFirstItemInSuggestion() const override; |
| bool isLastItemInSuggestion() const override; |
| bool isMarkAnnotation() const override; |
| bool isFrameGeometryInitialized() const override; |
| |
| // Text input |
| bool insertText(JSStringRef) override; |
| bool replaceTextInRange(JSStringRef, int position, int length) override; |
| |
| // Text marker methods |
| RefPtr<AccessibilityTextMarker> textMarkerForPoint(int x, int y) override; |
| RefPtr<AccessibilityTextMarker> textMarkerForIndex(int) override; |
| RefPtr<AccessibilityTextMarker> startTextMarker() override; |
| RefPtr<AccessibilityTextMarker> endTextMarker() override; |
| bool isTextMarkerValid(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarker> previousTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarker> nextTextMarker(AccessibilityTextMarker*) override; |
| JSRetainPtr<JSStringRef> stringForTextMarkerRange(AccessibilityTextMarkerRange*) override; |
| int textMarkerRangeLength(AccessibilityTextMarkerRange*) override; |
| RefPtr<AccessibilityTextMarker> startTextMarkerForTextMarkerRange(AccessibilityTextMarkerRange*) override; |
| RefPtr<AccessibilityTextMarker> endTextMarkerForTextMarkerRange(AccessibilityTextMarkerRange*) override; |
| RefPtr<AccessibilityTextMarker> startTextMarkerForBounds(int x, int y, int width, int height) override; |
| RefPtr<AccessibilityTextMarker> endTextMarkerForBounds(int x, int y, int width, int height) override; |
| RefPtr<AccessibilityUIElement> accessibilityElementForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarkerRange> textMarkerRangeForElement(AccessibilityUIElement*) override; |
| RefPtr<AccessibilityTextMarkerRange> textMarkerRangeForMarkers(AccessibilityTextMarker*, AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarkerRange> intersectTextMarkerRanges(AccessibilityTextMarkerRange*, AccessibilityTextMarkerRange*) override; |
| int indexForTextMarker(AccessibilityTextMarker*) override; |
| JSRetainPtr<JSStringRef> rectsForTextMarkerRange(AccessibilityTextMarkerRange*, JSStringRef) override; |
| JSRetainPtr<JSStringRef> attributedStringForTextMarkerRange(AccessibilityTextMarkerRange*) override; |
| JSRetainPtr<JSStringRef> attributedStringForTextMarkerRangeWithDidSpellCheck(AccessibilityTextMarkerRange*) override; |
| JSRetainPtr<JSStringRef> attributedStringForTextMarkerRangeWithOptions(AccessibilityTextMarkerRange*, bool) override; |
| bool attributedStringForTextMarkerRangeContainsAttribute(JSStringRef, AccessibilityTextMarkerRange*) override; |
| RefPtr<AccessibilityTextMarkerRange> lineTextMarkerRangeForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarkerRange> leftWordTextMarkerRangeForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarkerRange> rightWordTextMarkerRangeForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarker> previousWordStartTextMarkerForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarker> nextWordEndTextMarkerForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarkerRange> paragraphTextMarkerRangeForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarker> previousParagraphStartTextMarkerForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarker> nextParagraphEndTextMarkerForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarkerRange> sentenceTextMarkerRangeForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarker> previousSentenceStartTextMarkerForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarker> nextSentenceEndTextMarkerForTextMarker(AccessibilityTextMarker*) override; |
| RefPtr<AccessibilityTextMarkerRange> textMarkerRangeForSearchPredicate(JSContextRef, AccessibilityTextMarkerRange* startRange, bool forward, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly, bool immediateDescendantsOnly) override; |
| RefPtr<AccessibilityTextMarkerRange> misspellingTextMarkerRange(AccessibilityTextMarkerRange* start, bool forward) override; |
| RefPtr<AccessibilityTextMarkerRange> textMarkerRangeMatchesTextNearMarkers(JSStringRef, AccessibilityTextMarker*, AccessibilityTextMarker*) override; |
| |
| private: |
| AccessibilityUIElementIOS(PlatformUIElement); |
| AccessibilityUIElementIOS(const AccessibilityUIElementIOS&); |
| |
| WeakObjCPtr<id> m_element; |
| RetainPtr<id> m_notificationHandler; |
| }; |
| |
| } // namespace WTR |
| |
| #endif // PLATFORM(IOS_FAMILY) |