Diff
Modified: trunk/LayoutTests/ChangeLog (198767 => 198768)
--- trunk/LayoutTests/ChangeLog 2016-03-29 00:36:59 UTC (rev 198767)
+++ trunk/LayoutTests/ChangeLog 2016-03-29 00:42:32 UTC (rev 198768)
@@ -1,3 +1,15 @@
+2016-03-28 Chris Fleizach <cfleiz...@apple.com>
+
+ AX: iOS: Can't navigate inside ContentEditable fields with voiceover enabled
+ https://bugs.webkit.org/show_bug.cgi?id=155942
+
+ Reviewed by Joanmarie Diggs.
+
+ * accessibility/set-selected-text-range-contenteditable-expected.txt: Added.
+ * accessibility/set-selected-text-range-contenteditable.html: Added.
+ * platform/efl/TestExpectations:
+ * platform/gtk/TestExpectations:
+
2016-03-28 Gyuyoung Kim <gyuyoung....@webkit.org>
Unreviewed EFL gardening on 29th Mar.
Added: trunk/LayoutTests/accessibility/set-selected-text-range-contenteditable-expected.txt (0 => 198768)
--- trunk/LayoutTests/accessibility/set-selected-text-range-contenteditable-expected.txt (rev 0)
+++ trunk/LayoutTests/accessibility/set-selected-text-range-contenteditable-expected.txt 2016-03-29 00:42:32 UTC (rev 198768)
@@ -0,0 +1,29 @@
+hello world test
+This tests that selected text ranges can be set on a contenteditable element.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Initial selected range: {1, 0}
+
+Set range: {3, 0}
+PASS content.selectedTextRange became '{3, 0}'
+
+Set range: {100, 0}
+PASS content.selectedTextRange became '{16, 0}'
+
+Set range: {0, 0}
+PASS content.selectedTextRange became '{0, 0}'
+
+Set range: {1, 12}
+PASS content.selectedTextRange became '{1, 12}'
+
+Set range: {-1, 0}
+PASS content.selectedTextRange became '{0, 0}'
+
+Set range: {7, 3}
+PASS content.selectedTextRange became '{7, 3}'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/accessibility/set-selected-text-range-contenteditable.html (0 => 198768)
--- trunk/LayoutTests/accessibility/set-selected-text-range-contenteditable.html (rev 0)
+++ trunk/LayoutTests/accessibility/set-selected-text-range-contenteditable.html 2016-03-29 00:42:32 UTC (rev 198768)
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<meta charset="utf-8">
+<script src=""
+</head>
+<body id="body">
+
+<div contenteditable id="content" tabindex="0">hello <b>world</b> test</div>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+ description("This tests that selected text ranges can be set on a contenteditable element.");
+
+
+ if (window.accessibilityController) {
+ window.jsTestIsAsync = true;
+
+ document.getElementById("content").focus();
+ var sel = window.getSelection();
+ var range = document.createRange();
+ range.setStart(sel.anchorNode, 1);
+ range.setEnd(sel.anchorNode, 1);
+ sel.removeAllRanges();
+ sel.addRange(range);
+
+ var content = accessibilityController.accessibleElementById("content");
+ debug("Initial selected range: " + content.selectedTextRange);
+
+ debug("\nSet range: {3, 0}");
+ content.setSelectedTextRange(3, 0);
+ shouldBecomeEqual("content.selectedTextRange", "'{3, 0}'", function() {
+ debug("\nSet range: {100, 0}");
+ content.setSelectedTextRange(100, 0);
+ shouldBecomeEqual("content.selectedTextRange", "'{16, 0}'", function() {
+ debug("\nSet range: {0, 0}");
+ content.setSelectedTextRange(0, 0);
+ shouldBecomeEqual("content.selectedTextRange", "'{0, 0}'", function() {
+ debug("\nSet range: {1, 12}");
+ content.setSelectedTextRange(1, 12);
+ shouldBecomeEqual("content.selectedTextRange", "'{1, 12}'", function() {
+ debug("\nSet range: {-1, 0}");
+ content.setSelectedTextRange(-1, 0);
+ shouldBecomeEqual("content.selectedTextRange", "'{0, 0}'", function() {
+ debug("\nSet range: {7, 3}");
+ content.setSelectedTextRange(7, 3);
+ shouldBecomeEqual("content.selectedTextRange", "'{7, 3}'", finishJSTest);
+ });
+ });
+ });
+ });
+ });
+ }
+
+</script>
+
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/platform/efl/TestExpectations (198767 => 198768)
--- trunk/LayoutTests/platform/efl/TestExpectations 2016-03-29 00:36:59 UTC (rev 198767)
+++ trunk/LayoutTests/platform/efl/TestExpectations 2016-03-29 00:42:32 UTC (rev 198768)
@@ -2103,6 +2103,7 @@
webkit.org/b/112014 accessibility/textarea-insertion-point-line-number.html [ Failure ]
webkit.org/b/112018 accessibility/th-as-title-ui.html [ Failure ]
webkit.org/b/112021 accessibility/visible-elements.html [ Failure Crash ]
+webkit.org/b/133148 accessibility/set-selected-text-range-contenteditable.html [ Skip ]
# New accessibility test added in r151079 that is failing for EFL.
webkit.org/b/117182 accessibility/text-role-with-aria-hidden-inside.html [ Failure ]
Modified: trunk/LayoutTests/platform/gtk/TestExpectations (198767 => 198768)
--- trunk/LayoutTests/platform/gtk/TestExpectations 2016-03-29 00:36:59 UTC (rev 198767)
+++ trunk/LayoutTests/platform/gtk/TestExpectations 2016-03-29 00:42:32 UTC (rev 198768)
@@ -88,6 +88,7 @@
webkit.org/b/98348 accessibility/radio-button-group-members.html [ Skip ]
webkit.org/b/141074 accessibility/auto-filled-value.html [ Skip ]
webkit.org/b/133148 accessibility/content-editable-as-textarea.html [ Skip ]
+webkit.org/b/133148 accessibility/set-selected-text-range-contenteditable.html [ Skip ]
# Feature disabled, see: https://bugs.webkit.org/show_bug.cgi?id=85425
webkit.org/b/98925 fast/viewport/viewport-legacy-handheldfriendly.html [ Skip ]
Modified: trunk/Source/WebCore/ChangeLog (198767 => 198768)
--- trunk/Source/WebCore/ChangeLog 2016-03-29 00:36:59 UTC (rev 198767)
+++ trunk/Source/WebCore/ChangeLog 2016-03-29 00:42:32 UTC (rev 198768)
@@ -1,3 +1,21 @@
+2016-03-28 Chris Fleizach <cfleiz...@apple.com>
+
+ AX: iOS: Can't navigate inside ContentEditable fields with voiceover enabled
+ https://bugs.webkit.org/show_bug.cgi?id=155942
+
+ Reviewed by Joanmarie Diggs.
+
+ The code to set the selected text range on a non-native text control (like a contenteditable) was either
+ wrong or broke at some point. It assumed that creating a Position with the contenteditable node with the right
+ offset would make a valid Position, but it almost never did.
+
+ Instead we can use this helper method to create a valid Position.
+
+ Test: accessibility/set-selected-text-range-contenteditable.html
+
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::setSelectedTextRange):
+
2016-03-28 Alex Christensen <achristen...@webkit.org>
Fix Ninja build on Mac
Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (198767 => 198768)
--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2016-03-29 00:36:59 UTC (rev 198767)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2016-03-29 00:42:32 UTC (rev 198768)
@@ -1499,18 +1499,17 @@
void AccessibilityRenderObject::setSelectedTextRange(const PlainTextRange& range)
{
+ setTextSelectionIntent(axObjectCache(), range.length ? AXTextStateChangeTypeSelectionExtend : AXTextStateChangeTypeSelectionMove);
+
if (isNativeTextControl()) {
- setTextSelectionIntent(axObjectCache(), range.length ? AXTextStateChangeTypeSelectionExtend : AXTextStateChangeTypeSelectionMove);
HTMLTextFormControlElement& textControl = downcast<RenderTextControl>(*m_renderer).textFormControlElement();
textControl.setSelectionRange(range.start, range.start + range.length);
- clearTextSelectionIntent(axObjectCache());
- return;
+ } else {
+ VisiblePosition start = visiblePositionForIndexUsingCharacterIterator(node(), range.start);
+ VisiblePosition end = visiblePositionForIndexUsingCharacterIterator(node(), range.start + range.length);
+ m_renderer->frame().selection().setSelection(VisibleSelection(start, end), FrameSelection::defaultSetSelectionOptions(UserTriggered));
}
-
- Node* node = m_renderer->node();
- VisibleSelection newSelection(Position(node, range.start, Position::PositionIsOffsetInAnchor), Position(node, range.start + range.length, Position::PositionIsOffsetInAnchor), DOWNSTREAM);
- setTextSelectionIntent(axObjectCache(), range.length ? AXTextStateChangeTypeSelectionExtend : AXTextStateChangeTypeSelectionMove);
- m_renderer->frame().selection().setSelection(newSelection, FrameSelection::defaultSetSelectionOptions());
+
clearTextSelectionIntent(axObjectCache());
}
@@ -2848,7 +2847,6 @@
bool AccessibilityRenderObject::canSetValueAttribute() const
{
-
// In the event of a (Boolean)@readonly and (True/False/Undefined)@aria-readonly
// value mismatch, the host language native attribute value wins.
if (isNativeTextControl())