Title: [219426] trunk
Revision
219426
Author
n_w...@apple.com
Date
2017-07-12 15:20:43 -0700 (Wed, 12 Jul 2017)

Log Message

AX: [iOS] Implement a way to retrieve a text marker range with desired text that is closest to a position
https://bugs.webkit.org/show_bug.cgi?id=174393
<rdar://problem/33248006>

Reviewed by Chris Fleizach.

Source/WebCore:

Used the existing findClosestPlainText function to search the range on iOS.
Also exposed a function on the iOS wrapper to return the selection rects of
the result range from the searching.

Test: accessibility/ios-simulator/text-marker-range-matches-text.html

* accessibility/AXObjectCache.cpp:
(WebCore::visiblePositionForPositionWithOffset):
(WebCore::AXObjectCache::rangeMatchesTextNearRange):
* accessibility/AXObjectCache.h:
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper rangeFromMarkers:withText:]):
(-[WebAccessibilityObjectWrapper textMarkerRangeFromMarkers:withText:]):
(-[WebAccessibilityObjectWrapper textRectsFromMarkers:withText:]):
(-[WebAccessibilityObjectWrapper rectsForSelectionRects:]):

Tools:

* DumpRenderTree/AccessibilityUIElement.cpp:
(textMarkerRangeMatchesTextNearMarkersCallback):
(AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
(AccessibilityUIElement::getJSClass):
* DumpRenderTree/AccessibilityUIElement.h:
* DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
(AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
(WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
* WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
* WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
(WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):

LayoutTests:

* accessibility/ios-simulator/text-marker-range-matches-text-expected.txt: Added.
* accessibility/ios-simulator/text-marker-range-matches-text.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (219425 => 219426)


--- trunk/LayoutTests/ChangeLog	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/LayoutTests/ChangeLog	2017-07-12 22:20:43 UTC (rev 219426)
@@ -1,3 +1,14 @@
+2017-07-12  Nan Wang  <n_w...@apple.com>
+
+        AX: [iOS] Implement a way to retrieve a text marker range with desired text that is closest to a position
+        https://bugs.webkit.org/show_bug.cgi?id=174393
+        <rdar://problem/33248006>
+
+        Reviewed by Chris Fleizach.
+
+        * accessibility/ios-simulator/text-marker-range-matches-text-expected.txt: Added.
+        * accessibility/ios-simulator/text-marker-range-matches-text.html: Added.
+
 2017-07-12  Matt Lewis  <jlew...@apple.com>
 
         Unreviewed, rolling out r219409.

Added: trunk/LayoutTests/accessibility/ios-simulator/text-marker-range-matches-text-expected.txt (0 => 219426)


--- trunk/LayoutTests/accessibility/ios-simulator/text-marker-range-matches-text-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/text-marker-range-matches-text-expected.txt	2017-07-12 22:20:43 UTC (rev 219426)
@@ -0,0 +1,13 @@
+This is some testing content.
+This tests that we are able to get a range with desired text that is close to a given range.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS text.stringForTextMarkerRange(markerRange) is 'ome t'
+PASS text.stringForTextMarkerRange(matchedMarkerRange) is 'testing'
+PASS text.stringForTextMarkerRange(matchedMarkerRange) is 'some'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/accessibility/ios-simulator/text-marker-range-matches-text.html (0 => 219426)


--- trunk/LayoutTests/accessibility/ios-simulator/text-marker-range-matches-text.html	                        (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/text-marker-range-matches-text.html	2017-07-12 22:20:43 UTC (rev 219426)
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+    <script src=""
+    <body id="body" tabindex="0">
+        <div tabindex="0" id="text">
+        This is some testing content. 
+        </div>
+
+        <p id="description"></p>
+        <div id="console"></div>
+
+        <script>
+
+            description("This tests that we are able to get a range with desired text that is close to a given range.");
+
+            if (window.accessibilityController) {
+                accessibilityController.enableEnhancedAccessibility(true);
+                var webArea = accessibilityController.rootElement.childAtIndex(0);
+                var text = accessibilityController.accessibleElementById("text").childAtIndex(0);
+
+                // Get the marker range (9, 5), should be "ome t".
+                var startMarker = text.startTextMarkerForTextMarkerRange(text.textMarkerRangeForElement(text));
+                for (var i = 0; i < 9 ; i++)
+                    startMarker = text.nextTextMarker(startMarker);
+                var endMarker = startMarker;
+                for (var i = 0; i < 5 ; i++)
+                    endMarker = text.nextTextMarker(endMarker);
+                    
+                var markerRange = text.textMarkerRangeForMarkers(startMarker, endMarker);
+                shouldBe("text.stringForTextMarkerRange(markerRange)", "'ome t'");
+                
+                // Search forward and backwards.
+                var matchedMarkerRange = text.textMarkerRangeMatchesTextNearMarkers("testing", startMarker, endMarker);
+                shouldBe("text.stringForTextMarkerRange(matchedMarkerRange)", "'testing'");
+                
+                matchedMarkerRange = text.textMarkerRangeMatchesTextNearMarkers("some", startMarker, endMarker);
+                shouldBe("text.stringForTextMarkerRange(matchedMarkerRange)", "'some'");
+            }
+
+            </script>
+
+        <script src=""
+
+    </body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (219425 => 219426)


--- trunk/Source/WebCore/ChangeLog	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Source/WebCore/ChangeLog	2017-07-12 22:20:43 UTC (rev 219426)
@@ -1,3 +1,27 @@
+2017-07-12  Nan Wang  <n_w...@apple.com>
+
+        AX: [iOS] Implement a way to retrieve a text marker range with desired text that is closest to a position
+        https://bugs.webkit.org/show_bug.cgi?id=174393
+        <rdar://problem/33248006>
+
+        Reviewed by Chris Fleizach.
+
+        Used the existing findClosestPlainText function to search the range on iOS.
+        Also exposed a function on the iOS wrapper to return the selection rects of
+        the result range from the searching. 
+
+        Test: accessibility/ios-simulator/text-marker-range-matches-text.html
+
+        * accessibility/AXObjectCache.cpp:
+        (WebCore::visiblePositionForPositionWithOffset):
+        (WebCore::AXObjectCache::rangeMatchesTextNearRange):
+        * accessibility/AXObjectCache.h:
+        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
+        (-[WebAccessibilityObjectWrapper rangeFromMarkers:withText:]):
+        (-[WebAccessibilityObjectWrapper textMarkerRangeFromMarkers:withText:]):
+        (-[WebAccessibilityObjectWrapper textRectsFromMarkers:withText:]):
+        (-[WebAccessibilityObjectWrapper rectsForSelectionRects:]):
+
 2017-07-12  Matt Lewis  <jlew...@apple.com>
 
         Unreviewed, rolling out r219409.

Modified: trunk/Source/WebCore/accessibility/AXObjectCache.cpp (219425 => 219426)


--- trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2017-07-12 22:20:43 UTC (rev 219426)
@@ -1726,6 +1726,37 @@
     }
     return WTFMove(range);
 }
+    
+static VisiblePosition visiblePositionForPositionWithOffset(const VisiblePosition& position, int32_t offset)
+{
+    RefPtr<ContainerNode> root;
+    unsigned startIndex = indexForVisiblePosition(position, root);
+    return visiblePositionForIndex(startIndex + offset, root.get());
+}
+    
+RefPtr<Range> AXObjectCache::rangeMatchesTextNearRange(RefPtr<Range> originalRange, const String& matchText)
+{
+    if (!originalRange)
+        return nullptr;
+    
+    // Create a large enough range for searching the text within.
+    unsigned textLength = matchText.length();
+    auto startPosition = visiblePositionForPositionWithOffset(originalRange->startPosition(), -textLength);
+    auto endPosition = visiblePositionForPositionWithOffset(originalRange->startPosition(), 2 * textLength);
+    
+    if (startPosition.isNull())
+        startPosition = firstPositionInOrBeforeNode(&originalRange->startContainer());
+    if (endPosition.isNull())
+        endPosition = lastPositionInOrAfterNode(&originalRange->endContainer());
+    
+    RefPtr<Range> searchRange = Range::create(m_document, startPosition, endPosition);
+    if (!searchRange || searchRange->collapsed())
+        return nullptr;
+    
+    RefPtr<Range> range = Range::create(m_document, startPosition, originalRange->startPosition());
+    unsigned targetOffset = TextIterator::rangeLength(range.get(), true);
+    return findClosestPlainText(*searchRange.get(), matchText, 0, targetOffset);
+}
 
 static bool isReplacedNodeOrBR(Node* node)
 {

Modified: trunk/Source/WebCore/accessibility/AXObjectCache.h (219425 => 219426)


--- trunk/Source/WebCore/accessibility/AXObjectCache.h	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.h	2017-07-12 22:20:43 UTC (rev 219426)
@@ -332,6 +332,9 @@
     void deferRecomputeIsIgnored(Element*);
     void deferTextChangedIfNeeded(Node*);
     void performDeferredCacheUpdate();
+    
+    RefPtr<Range> rangeMatchesTextNearRange(RefPtr<Range>, const String&);
+    
 
 protected:
     void postPlatformNotification(AccessibilityObject*, AXNotification);

Modified: trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (219425 => 219426)


--- trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm	2017-07-12 22:20:43 UTC (rev 219426)
@@ -52,6 +52,7 @@
 #import "RuntimeApplicationChecks.h"
 #import "SVGNames.h"
 #import "SVGElement.h"
+#import "SelectionRect.h"
 #import "TextIterator.h"
 #import "WAKScrollView.h"
 #import "WAKView.h"
@@ -2588,6 +2589,56 @@
     return [self convertRectToScreenSpace:rect];
 }
 
+- (RefPtr<Range>)rangeFromMarkers:(NSArray *)markers withText:(NSString *)text
+{
+    RefPtr<Range> originalRange = [self rangeForTextMarkers:markers];
+    if (!originalRange)
+        return nil;
+    
+    AXObjectCache* cache = m_object->axObjectCache();
+    if (!cache)
+        return nil;
+    
+    return cache->rangeMatchesTextNearRange(originalRange, text);
+}
+
+// This is only used in the layout test.
+- (NSArray *)textMarkerRangeFromMarkers:(NSArray *)markers withText:(NSString *)text
+{
+    return [self textMarkersForRange:[self rangeFromMarkers:markers withText:text]];
+}
+
+- (NSArray *)textRectsFromMarkers:(NSArray *)markers withText:(NSString *)text
+{
+    if (![self _prepareAccessibilityCall])
+        return nil;
+    
+    RefPtr<Range> range = [self rangeFromMarkers:markers withText:text];
+    if (!range || range->collapsed())
+        return nil;
+    
+    Vector<WebCore::SelectionRect> selectionRects;
+    range->collectSelectionRectsWithoutUnionInteriorLines(selectionRects);
+    return [self rectsForSelectionRects:selectionRects];
+}
+
+- (NSArray *)rectsForSelectionRects:(const Vector<WebCore::SelectionRect>&)selectionRects
+{
+    unsigned size = selectionRects.size();
+    if (!size)
+        return nil;
+    
+    NSMutableArray *rects = [NSMutableArray arrayWithCapacity:size];
+    for (unsigned i = 0; i < size; i++) {
+        const WebCore::SelectionRect& coreRect = selectionRects[i];
+        IntRect selectionRect = coreRect.rect();
+        CGRect rect = [self convertRectToScreenSpace:selectionRect];
+        [rects addObject:[NSValue valueWithRect:rect]];
+    }
+    
+    return rects;
+}
+
 - (WebAccessibilityTextMarker *)textMarkerForPoint:(CGPoint)point
 {
     if (![self _prepareAccessibilityCall])

Modified: trunk/Tools/ChangeLog (219425 => 219426)


--- trunk/Tools/ChangeLog	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Tools/ChangeLog	2017-07-12 22:20:43 UTC (rev 219426)
@@ -1,3 +1,25 @@
+2017-07-12  Nan Wang  <n_w...@apple.com>
+
+        AX: [iOS] Implement a way to retrieve a text marker range with desired text that is closest to a position
+        https://bugs.webkit.org/show_bug.cgi?id=174393
+        <rdar://problem/33248006>
+
+        Reviewed by Chris Fleizach.
+
+        * DumpRenderTree/AccessibilityUIElement.cpp:
+        (textMarkerRangeMatchesTextNearMarkersCallback):
+        (AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
+        (AccessibilityUIElement::getJSClass):
+        * DumpRenderTree/AccessibilityUIElement.h:
+        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
+        (AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
+        (WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
+        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
+        (WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
+
 2017-07-12  Matt Lewis  <jlew...@apple.com>
 
         Unreviewed, rolling out r219409.

Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp (219425 => 219426)


--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp	2017-07-12 22:20:43 UTC (rev 219426)
@@ -927,8 +927,8 @@
 
 static JSValueRef textMarkerRangeForMarkersCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
-    AccessibilityTextMarker* startMarker = 0;
-    AccessibilityTextMarker* endMarker = 0;
+    AccessibilityTextMarker* startMarker = nullptr;
+    AccessibilityTextMarker* endMarker = nullptr;
     if (argumentCount == 2) {
         startMarker = toTextMarker(JSValueToObject(context, arguments[0], exception));
         endMarker = toTextMarker(JSValueToObject(context, arguments[1], exception));
@@ -1483,6 +1483,23 @@
     return JSValueMakeBoolean(context, toAXElement(thisObject)->hasContainedByFieldsetTrait());
 }
 
+static JSValueRef textMarkerRangeMatchesTextNearMarkersCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    JSStringRef searchText = nullptr;
+    AccessibilityTextMarker* startMarker = nullptr;
+    AccessibilityTextMarker* endMarker = nullptr;
+    if (argumentCount == 3) {
+        searchText = JSValueToStringCopy(context, arguments[0], exception);
+        startMarker = toTextMarker(JSValueToObject(context, arguments[1], exception));
+        endMarker = toTextMarker(JSValueToObject(context, arguments[2], exception));
+    }
+    
+    JSValueRef result = AccessibilityTextMarkerRange::makeJSAccessibilityTextMarkerRange(context, toAXElement(thisObject)->textMarkerRangeMatchesTextNearMarkers(searchText, startMarker, endMarker));
+    if (searchText)
+        JSStringRelease(searchText);
+    return result;
+}
+
 #endif // PLATFORM(IOS)
 
 #if PLATFORM(MAC) && !PLATFORM(IOS)
@@ -1704,8 +1721,15 @@
     return nullptr;
 }
 
+#if PLATFORM(IOS)
+AccessibilityTextMarkerRange AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers(JSStringRef, AccessibilityTextMarker*, AccessibilityTextMarker*)
+{
+    return nullptr;
+}
 #endif
 
+#endif
+
 // Destruction
 
 static void finalize(JSObjectRef thisObject)
@@ -1920,6 +1944,7 @@
         { "scrollPageRight", scrollPageRightCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "assistiveTechnologySimulatedFocus", assistiveTechnologySimulatedFocusCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "fieldsetAncestorElement", fieldsetAncestorElementCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "textMarkerRangeMatchesTextNearMarkers", textMarkerRangeMatchesTextNearMarkersCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
 #endif
         { 0, 0, 0 }
     };

Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.h (219425 => 219426)


--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.h	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.h	2017-07-12 22:20:43 UTC (rev 219426)
@@ -306,6 +306,8 @@
     bool isTextArea() const;
     bool isSearchField() const;
     
+    AccessibilityTextMarkerRange textMarkerRangeMatchesTextNearMarkers(JSStringRef, AccessibilityTextMarker*, AccessibilityTextMarker*);
+    
 #endif // PLATFORM(IOS)
 
 #if PLATFORM(MAC) && !PLATFORM(IOS)

Modified: trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm (219425 => 219426)


--- trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm	2017-07-12 22:20:43 UTC (rev 219426)
@@ -113,6 +113,7 @@
 - (id)accessibilityObjectForTextMarker:(id)marker;
 - (id)lineStartMarkerForMarker:(id)marker;
 - (id)lineEndMarkerForMarker:(id)marker;
+- (NSArray *)textMarkerRangeFromMarkers:(NSArray *)markers withText:(NSString *)text;
 @end
 
 @interface NSObject (WebAccessibilityObjectWrapperPrivate)
@@ -620,6 +621,16 @@
     return nullptr;
 }
 
+AccessibilityTextMarkerRange AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers(JSStringRef text, AccessibilityTextMarker* startMarker, AccessibilityTextMarker* endMarker)
+{
+    NSArray *textMarkers = nil;
+    if (startMarker->platformTextMarker() && endMarker->platformTextMarker())
+        textMarkers = [NSArray arrayWithObjects:(id)startMarker->platformTextMarker(), (id)endMarker->platformTextMarker(), nil];
+    id textMarkerRange = [m_element textMarkerRangeFromMarkers:textMarkers withText:[NSString stringWithJSStringRef:text]];
+    return AccessibilityTextMarkerRange(textMarkerRange);
+}
+
+
 #endif // SUPPORTS_AX_TEXTMARKERS && PLATFORM(IOS)
 
 #pragma mark Unused

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp (219425 => 219426)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp	2017-07-12 22:20:43 UTC (rev 219426)
@@ -74,7 +74,7 @@
 RefPtr<AccessibilityUIElement> AccessibilityUIElement::fieldsetAncestorElement() { return nullptr; }
 bool AccessibilityUIElement::isSearchField() const { return false; }
 bool AccessibilityUIElement::isTextArea() const { return false; }
-
+RefPtr<AccessibilityTextMarkerRange> AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers(JSStringRef, AccessibilityTextMarker*, AccessibilityTextMarker*) { return nullptr; }
 #endif
     
 // Unsupported methods on various platforms. As they're implemented on other platforms this list should be modified.

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (219425 => 219426)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2017-07-12 22:20:43 UTC (rev 219426)
@@ -289,6 +289,7 @@
     RefPtr<AccessibilityTextMarkerRange> sentenceTextMarkerRangeForTextMarker(AccessibilityTextMarker*);
     RefPtr<AccessibilityTextMarker> nextSentenceEndTextMarkerForTextMarker(AccessibilityTextMarker*);
     RefPtr<AccessibilityTextMarker> previousSentenceStartTextMarkerForTextMarker(AccessibilityTextMarker*);
+    RefPtr<AccessibilityTextMarkerRange> textMarkerRangeMatchesTextNearMarkers(JSStringRef, AccessibilityTextMarker*, AccessibilityTextMarker*);
 
     // Returns an ordered list of supported actions for an element.
     JSRetainPtr<JSStringRef> supportedActions() const;

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (219425 => 219426)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl	2017-07-12 22:20:43 UTC (rev 219426)
@@ -226,6 +226,7 @@
     AccessibilityTextMarkerRange sentenceTextMarkerRangeForTextMarker(AccessibilityTextMarker textMarker);
     AccessibilityTextMarker previousSentenceStartTextMarkerForTextMarker(AccessibilityTextMarker textMarker);
     AccessibilityTextMarker nextSentenceEndTextMarkerForTextMarker(AccessibilityTextMarker textMarker);
+    AccessibilityTextMarkerRange textMarkerRangeMatchesTextNearMarkers(DOMString text, AccessibilityTextMarker startMarker, AccessibilityTextMarker endMarker);
 
     // Returns an ordered list of supported actions for an element.
     readonly attribute DOMString supportedActions;

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (219425 => 219426)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm	2017-07-12 22:14:20 UTC (rev 219425)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm	2017-07-12 22:20:43 UTC (rev 219426)
@@ -91,6 +91,7 @@
 - (id)accessibilityObjectForTextMarker:(id)marker;
 - (id)lineStartMarkerForMarker:(id)marker;
 - (id)lineEndMarkerForMarker:(id)marker;
+- (NSArray *)textMarkerRangeFromMarkers:(NSArray *)markers withText:(NSString *)text;
 @end
 
 @interface NSObject (WebAccessibilityObjectWrapperPrivate)
@@ -1200,6 +1201,15 @@
 {
     return nullptr;
 }
+    
+RefPtr<AccessibilityTextMarkerRange> AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers(JSStringRef text, AccessibilityTextMarker* startMarker, AccessibilityTextMarker* endMarker)
+{
+    NSArray *textMarkers = nil;
+    if (startMarker->platformTextMarker() && endMarker->platformTextMarker())
+        textMarkers = [NSArray arrayWithObjects:(id)startMarker->platformTextMarker(), (id)endMarker->platformTextMarker(), nil];
+    id textMarkerRange = [m_element textMarkerRangeFromMarkers:textMarkers withText:[NSString stringWithJSStringRef:text]];
+    return AccessibilityTextMarkerRange::create(textMarkerRange);
+}
 
 JSRetainPtr<JSStringRef> AccessibilityUIElement::mathPostscriptsDescription() const
 {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to