Title: [270352] trunk/Source/WebCore
Revision
270352
Author
[email protected]
Date
2020-12-02 10:47:18 -0800 (Wed, 02 Dec 2020)

Log Message

Fix for accessibility layout tests involving ranges in isolated tree mode.
https://bugs.webkit.org/show_bug.cgi?id=219436

Reviewed by Chris Fleizach.

Tests:
accessibility/mac/bounds-for-range.html
accessibility/misspelling-range.html

- Implementation of AXIsolatedObject::boundsForRange and misspellingRange.
- Fix for bug in stringForRange that wasn't isolatedCopying the returned
string. Also this method should not dispatch the call to the main thread
since the caller needs to do so because it is passing a SimpleRange as a
parameter.
- Implementation of AXIsolatedObject::lineForPosition. Other methods
that take or return VisiblePositions and VisiblePositionRanges need also
to be implemented.

* accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::stringForRange const):
(WebCore::AXIsolatedObject::boundsForRange const):
(WebCore::AXIsolatedObject::misspellingRange const):
(WebCore::AXIsolatedObject::lineForPosition const):
* accessibility/isolatedtree/AXIsolatedObject.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (270351 => 270352)


--- trunk/Source/WebCore/ChangeLog	2020-12-02 18:36:01 UTC (rev 270351)
+++ trunk/Source/WebCore/ChangeLog	2020-12-02 18:47:18 UTC (rev 270352)
@@ -1,3 +1,30 @@
+2020-12-02  Andres Gonzalez  <[email protected]>
+
+        Fix for accessibility layout tests involving ranges in isolated tree mode.
+        https://bugs.webkit.org/show_bug.cgi?id=219436
+
+        Reviewed by Chris Fleizach.
+
+        Tests:
+        accessibility/mac/bounds-for-range.html
+        accessibility/misspelling-range.html
+
+        - Implementation of AXIsolatedObject::boundsForRange and misspellingRange.
+        - Fix for bug in stringForRange that wasn't isolatedCopying the returned
+        string. Also this method should not dispatch the call to the main thread
+        since the caller needs to do so because it is passing a SimpleRange as a
+        parameter.
+        - Implementation of AXIsolatedObject::lineForPosition. Other methods
+        that take or return VisiblePositions and VisiblePositionRanges need also
+        to be implemented.
+
+        * accessibility/isolatedtree/AXIsolatedObject.cpp:
+        (WebCore::AXIsolatedObject::stringForRange const):
+        (WebCore::AXIsolatedObject::boundsForRange const):
+        (WebCore::AXIsolatedObject::misspellingRange const):
+        (WebCore::AXIsolatedObject::lineForPosition const):
+        * accessibility/isolatedtree/AXIsolatedObject.h:
+
 2020-12-02  Simon Fraser  <[email protected]>
 
         Optimize padding in EventHandler and platform event classes

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (270351 => 270352)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2020-12-02 18:36:01 UTC (rev 270351)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2020-12-02 18:47:18 UTC (rev 270352)
@@ -948,13 +948,18 @@
 
 String AXIsolatedObject::stringForRange(const SimpleRange& range) const
 {
-    return Accessibility::retrieveValueFromMainThread<String>([&range, this] () -> String {
-        if (auto* object = associatedAXObject())
-            return object->stringForRange(range);
-        return String();
-    });
+    ASSERT(isMainThread());
+    auto* axObject = associatedAXObject();
+    return axObject ? axObject->stringForRange(range).isolatedCopy() : String();
 }
 
+IntRect AXIsolatedObject::boundsForRange(const SimpleRange& range) const
+{
+    ASSERT(isMainThread());
+    auto* axObject = associatedAXObject();
+    return axObject ? axObject->boundsForRange(range) : IntRect();
+}
+
 Vector<SimpleRange> AXIsolatedObject::findTextRanges(const AccessibilitySearchTextCriteria& criteria) const
 {
     return Accessibility::retrieveValueFromMainThread<Vector<SimpleRange>>([&criteria, this] () -> Vector<SimpleRange> {
@@ -983,6 +988,13 @@
     Accessibility::findMatchingObjects(*criteria, results);
 }
 
+Optional<SimpleRange> AXIsolatedObject::misspellingRange(const SimpleRange& range, AccessibilitySearchDirection direction) const
+{
+    ASSERT(isMainThread());
+    auto* axObject = associatedAXObject();
+    return axObject ? axObject->misspellingRange(range, direction) : WTF::nullopt;
+}
+
 FloatRect AXIsolatedObject::relativeFrame() const
 {
     // Retrieve this on the main thread because we require the scroll ancestor to convert to the right scroll offset.
@@ -1227,6 +1239,7 @@
         return { };
     });
 }
+
 IntRect AXIsolatedObject::doAXBoundsForRangeUsingCharacterOffset(const PlainTextRange& axRange) const
 {
     return Accessibility::retrieveValueFromMainThread<IntRect>([&axRange, this] () -> IntRect {
@@ -1353,6 +1366,13 @@
     return axObject ? axObject->lineRangeForPosition(position) : VisiblePositionRange();
 }
 
+int AXIsolatedObject::lineForPosition(const VisiblePosition& position) const
+{
+    ASSERT(isMainThread());
+    auto* axObject = associatedAXObject();
+    return axObject ? axObject->lineForPosition(position) : -1;
+}
+
 bool AXIsolatedObject::isListBoxOption() const
 {
     ASSERT_NOT_REACHED();

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (270351 => 270352)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2020-12-02 18:36:01 UTC (rev 270351)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2020-12-02 18:47:18 UTC (rev 270352)
@@ -401,7 +401,7 @@
     Optional<SimpleRange> rangeForPlainTextRange(const PlainTextRange&) const override;
     String stringForRange(const SimpleRange&) const override;
     IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const override { return IntRect(); }
-    IntRect boundsForRange(const SimpleRange&) const override { return IntRect(); }
+    IntRect boundsForRange(const SimpleRange&) const override;
     int lengthForVisiblePositionRange(const VisiblePositionRange&) const override { return 0; }
     VisiblePosition visiblePositionForBounds(const IntRect&, AccessibilityVisiblePositionForBounds) const override { return VisiblePosition(); }
     VisiblePosition visiblePositionForPoint(const IntPoint&) const override { return VisiblePosition(); }
@@ -419,7 +419,7 @@
     VisiblePosition visiblePositionForIndex(int) const override { return VisiblePosition(); }
     int indexForVisiblePosition(const VisiblePosition&) const override { return 0; }
     AXCoreObject* accessibilityObjectForPosition(const VisiblePosition&) const override { return nullptr; }
-    int lineForPosition(const VisiblePosition&) const override { return 0; }
+    int lineForPosition(const VisiblePosition&) const override;
     PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const override { return PlainTextRange(); }
     int index(const VisiblePosition&) const override { return 0; }
     void lineBreaks(Vector<int>&) const override { }
@@ -441,7 +441,7 @@
 
     // TODO: Functions
     String textUnderElement(AccessibilityTextUnderElementMode = AccessibilityTextUnderElementMode()) const override { return String(); }
-    Optional<SimpleRange> misspellingRange(const SimpleRange&, AccessibilitySearchDirection) const override { return WTF::nullopt; }
+    Optional<SimpleRange> misspellingRange(const SimpleRange&, AccessibilitySearchDirection) const override;
     FloatRect convertFrameToSpace(const FloatRect&, AccessibilityConversionSpace) const override;
     void increment() override;
     void decrement() override;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to