Title: [270393] trunk/Source/WebCore
- Revision
- 270393
- Author
- [email protected]
- Date
- 2020-12-03 06:08:10 -0800 (Thu, 03 Dec 2020)
Log Message
Fix for crash handling NSAccessibilityInsertionPointLineNumberAttribute for text fields in isolated tree mode.
https://bugs.webkit.org/show_bug.cgi?id=219477
Reviewed by Chris Fleizach.
Tests:
accessibility/content-editable-as-textarea.html
accessibility/mac/content-editable-range-properties.html
- Implemented AXIsolatedObject::selectionStart/End, selectedText, visiblePositionForIndex.
- Handler of the NSAccessibilityInsertionPointLineNumberAttribute
request now dispatches to the main thread the calls that involve
VisiblePositions.
- This change fixes the above mentioned layout tests in isolated tree mode.
* accessibility/AccessibilityObjectInterface.h:
* accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::selectionStart const):
(WebCore::AXIsolatedObject::selectionEnd const):
(WebCore::AXIsolatedObject::selectedText const):
(WebCore::AXIsolatedObject::visiblePositionForIndex const):
* accessibility/isolatedtree/AXIsolatedObject.h:
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (270392 => 270393)
--- trunk/Source/WebCore/ChangeLog 2020-12-03 11:09:49 UTC (rev 270392)
+++ trunk/Source/WebCore/ChangeLog 2020-12-03 14:08:10 UTC (rev 270393)
@@ -1,3 +1,30 @@
+2020-12-03 Andres Gonzalez <[email protected]>
+
+ Fix for crash handling NSAccessibilityInsertionPointLineNumberAttribute for text fields in isolated tree mode.
+ https://bugs.webkit.org/show_bug.cgi?id=219477
+
+ Reviewed by Chris Fleizach.
+
+ Tests:
+ accessibility/content-editable-as-textarea.html
+ accessibility/mac/content-editable-range-properties.html
+
+ - Implemented AXIsolatedObject::selectionStart/End, selectedText, visiblePositionForIndex.
+ - Handler of the NSAccessibilityInsertionPointLineNumberAttribute
+ request now dispatches to the main thread the calls that involve
+ VisiblePositions.
+ - This change fixes the above mentioned layout tests in isolated tree mode.
+
+ * accessibility/AccessibilityObjectInterface.h:
+ * accessibility/isolatedtree/AXIsolatedObject.cpp:
+ (WebCore::AXIsolatedObject::selectionStart const):
+ (WebCore::AXIsolatedObject::selectionEnd const):
+ (WebCore::AXIsolatedObject::selectedText const):
+ (WebCore::AXIsolatedObject::visiblePositionForIndex const):
+ * accessibility/isolatedtree/AXIsolatedObject.h:
+ * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+ (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
2020-12-03 Tim Horton <[email protected]>
GPU Process: Sandbox violations under IOSurface::maximumSize in the Web Content process
Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (270392 => 270393)
--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2020-12-03 11:09:49 UTC (rev 270392)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2020-12-03 14:08:10 UTC (rev 270393)
@@ -1169,6 +1169,7 @@
virtual TextIteratorBehavior textIteratorBehaviorForTextRange() const = 0;
virtual PlainTextRange selectedTextRange() const = 0;
+ // FIXME: why do we need the following two methods if we already have selectedTextRange?
virtual unsigned selectionStart() const = 0;
virtual unsigned selectionEnd() const = 0;
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (270392 => 270393)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp 2020-12-03 11:09:49 UTC (rev 270392)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp 2020-12-03 14:08:10 UTC (rev 270393)
@@ -1282,6 +1282,33 @@
return axObject ? axObject->elementRange() : WTF::nullopt;
}
+unsigned AXIsolatedObject::selectionStart() const
+{
+ return Accessibility::retrieveValueFromMainThread<unsigned>([this] () -> unsigned {
+ if (auto* object = associatedAXObject())
+ return object->selectionStart();
+ return 0;
+ });
+}
+
+unsigned AXIsolatedObject::selectionEnd() const
+{
+ return Accessibility::retrieveValueFromMainThread<unsigned>([this] () -> unsigned {
+ if (auto* object = associatedAXObject())
+ return object->selectionEnd();
+ return 0;
+ });
+}
+
+String AXIsolatedObject::selectedText() const
+{
+ return Accessibility::retrieveValueFromMainThread<String>([this] () -> String {
+ if (auto* object = associatedAXObject())
+ return object->selectedText().isolatedCopy();
+ return { };
+ });
+}
+
VisiblePositionRange AXIsolatedObject::visiblePositionRange() const
{
ASSERT(isMainThread());
@@ -1366,6 +1393,13 @@
return axObject ? axObject->lineRangeForPosition(position) : VisiblePositionRange();
}
+VisiblePosition AXIsolatedObject::visiblePositionForIndex(unsigned index, bool lastIndexOK) const
+{
+ ASSERT(isMainThread());
+ auto* axObject = associatedAXObject();
+ return axObject ? axObject->visiblePositionForIndex(index, lastIndexOK) : VisiblePosition();
+}
+
int AXIsolatedObject::lineForPosition(const VisiblePosition& position) const
{
ASSERT(isMainThread());
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (270392 => 270393)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2020-12-03 11:09:49 UTC (rev 270392)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2020-12-03 14:08:10 UTC (rev 270393)
@@ -382,9 +382,9 @@
void setSelectedVisiblePositionRange(const VisiblePositionRange&) const override;
// TODO: Text ranges and selection.
- unsigned selectionStart() const override { return 0; }
- unsigned selectionEnd() const override { return 0; }
- String selectedText() const override { return String(); }
+ unsigned selectionStart() const override;
+ unsigned selectionEnd() const override;
+ String selectedText() const override;
VisiblePositionRange visiblePositionRange() const override;
VisiblePositionRange visiblePositionRangeForLine(unsigned) const override;
Optional<SimpleRange> elementRange() const override;
@@ -415,7 +415,7 @@
VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const override { return VisiblePosition(); }
VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const override { return VisiblePosition(); }
- VisiblePosition visiblePositionForIndex(unsigned, bool /*lastIndexOK */) const override { return VisiblePosition(); }
+ VisiblePosition visiblePositionForIndex(unsigned, bool lastIndexOK) const override;
VisiblePosition visiblePositionForIndex(int) const override { return VisiblePosition(); }
int indexForVisiblePosition(const VisiblePosition&) const override { return 0; }
AXCoreObject* accessibilityObjectForPosition(const VisiblePosition&) const override { return nullptr; }
Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (270392 => 270393)
--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2020-12-03 11:09:49 UTC (rev 270392)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2020-12-03 14:08:10 UTC (rev 270393)
@@ -2407,16 +2407,20 @@
if (backingObject->isPasswordField() || backingObject->selectionEnd() > 0)
return nil;
- auto *focusedObject = backingObject->focusedUIElement();
+ auto* focusedObject = backingObject->focusedUIElement();
if (focusedObject != backingObject)
return nil;
- VisiblePosition focusedPosition = focusedObject->visiblePositionForIndex(focusedObject->selectionStart(), true);
- int lineNumber = backingObject->lineForPosition(focusedPosition);
- if (lineNumber < 0)
- return nil;
+ int lineNumber = Accessibility::retrieveValueFromMainThread<int>([protectedSelf = retainPtr(self)] () -> int {
+ auto* backingObject = protectedSelf.get().axBackingObject;
+ if (!backingObject)
+ return -1;
- return @(lineNumber);
+ auto focusedPosition = backingObject->visiblePositionForIndex(backingObject->selectionStart(), true);
+ return backingObject->lineForPosition(focusedPosition);
+ });
+
+ return lineNumber >= 0 ? @(lineNumber) : nil;
}
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes