Don't update selection when calling setSelectionRange on a disconnected input element
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Feb 2020 21:23:12 +0000 (21:23 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Feb 2020 21:23:12 +0000 (21:23 +0000)
https://bugs.webkit.org/show_bug.cgi?id=207357

Reviewed by Antti Koivisto.

LayoutTests/imported/w3c:

Rebaselined the test that progressed a little. The test now passes offset checks but still fails direction check.

* web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application-textarea-expected.txt:

Source/WebCore:

Don't update FrameSelection when the text form control element is disconnected from document.

* html/HTMLTextFormControlElement.cpp:
(WebCore::HTMLTextFormControlElement::setSelectionRange):

LayoutTests:

Rebaselined the test that has progressed with this change.

* platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt:
* platform/mac-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@256207 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application-textarea-expected.txt
LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt
LayoutTests/platform/mac-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLTextFormControlElement.cpp

index 5e9ff82..87abc02 100644 (file)
@@ -1,3 +1,16 @@
+2020-02-07  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Don't update selection when calling setSelectionRange on a disconnected input element
+        https://bugs.webkit.org/show_bug.cgi?id=207357
+
+        Reviewed by Antti Koivisto.
+
+        Rebaselined the test that has progressed with this change.
+
+        * platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt:
+        * platform/mac-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/type-change-state-expected.txt:
+
 2020-02-10  Truitt Savell  <tsavell@apple.com>
 
         [ Win ] (r255383) webanimations/width-and-opacity-separate-animation-yields-compositing.html is failing
index dfd2cce..a0667bc 100644 (file)
@@ -1,3 +1,14 @@
+2020-02-07  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Don't update selection when calling setSelectionRange on a disconnected input element
+        https://bugs.webkit.org/show_bug.cgi?id=207357
+
+        Reviewed by Antti Koivisto.
+
+        Rebaselined the test that progressed a little. The test now passes offset checks but still fails direction check.
+
+        * web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application-textarea-expected.txt:
+
 2020-02-07  youenn fablet  <youenn@apple.com>
 
         Filter out TURN/STUN .local URLs from a RTCPeerConnection iceServers list
index 8fd050b..d528ad9 100644 (file)
@@ -252,12 +252,12 @@ FAIL change state from time to image Type error
 FAIL change state from time to reset Type error
 FAIL change state from time to button Type error
 FAIL change state from number to hidden Type error
-FAIL change state from number to text assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to search assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to tel assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to url assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to email assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to password assert_equals: selectionStart should be unchanged expected 2 but got 0
+PASS change state from number to text 
+PASS change state from number to search 
+PASS change state from number to tel 
+PASS change state from number to url 
+PASS change state from number to email 
+PASS change state from number to password 
 FAIL change state from number to datetime-local Type error
 FAIL change state from number to date Type error
 FAIL change state from number to month Type error
index c863d5a..787fa16 100644 (file)
@@ -252,17 +252,17 @@ FAIL change state from time to image Type error
 FAIL change state from time to reset Type error
 FAIL change state from time to button Type error
 FAIL change state from number to hidden Type error
-FAIL change state from number to text assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to search assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to tel assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to url assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to email assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to password assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to datetime-local assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to date assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to month assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to week assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to time assert_equals: selectionStart should be unchanged expected 2 but got 0
+PASS change state from number to text 
+PASS change state from number to search 
+PASS change state from number to tel 
+PASS change state from number to url 
+PASS change state from number to email 
+PASS change state from number to password 
+PASS change state from number to datetime-local 
+PASS change state from number to date 
+PASS change state from number to month 
+PASS change state from number to week 
+PASS change state from number to time 
 FAIL change state from number to range Type error
 FAIL change state from number to color Type error
 FAIL change state from number to checkbox assert_equals: input.value should be 'on' after change of state expected "on" but got ""
index 9f1d460..07baed4 100644 (file)
@@ -252,17 +252,17 @@ FAIL change state from time to image Type error
 FAIL change state from time to reset Type error
 FAIL change state from time to button Type error
 FAIL change state from number to hidden Type error
-FAIL change state from number to text assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to search assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to tel assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to url assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to email assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to password assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to datetime-local assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to date assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to month assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to week assert_equals: selectionStart should be unchanged expected 2 but got 0
-FAIL change state from number to time assert_equals: selectionStart should be unchanged expected 2 but got 0
+PASS change state from number to text 
+PASS change state from number to search 
+PASS change state from number to tel 
+PASS change state from number to url 
+PASS change state from number to email 
+PASS change state from number to password 
+PASS change state from number to datetime-local 
+PASS change state from number to date 
+PASS change state from number to month 
+PASS change state from number to week 
+PASS change state from number to time 
 FAIL change state from number to range Type error
 FAIL change state from number to color assert_equals: input.value should be '#000000' after change of state expected "#000000" but got ""
 FAIL change state from number to checkbox assert_equals: input.value should be 'on' after change of state expected "on" but got ""
index 472918a..c1ab268 100644 (file)
@@ -1,3 +1,15 @@
+2020-02-07  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Don't update selection when calling setSelectionRange on a disconnected input element
+        https://bugs.webkit.org/show_bug.cgi?id=207357
+
+        Reviewed by Antti Koivisto.
+
+        Don't update FrameSelection when the text form control element is disconnected from document.
+
+        * html/HTMLTextFormControlElement.cpp:
+        (WebCore::HTMLTextFormControlElement::setSelectionRange):
+
 2020-02-10  Jiewen Tan  <jiewen_tan@apple.com>
 
         [WebAuthn] Merge some of the CTAP response decoder's code
index 723228b..ff4e9d9 100644 (file)
@@ -296,6 +296,11 @@ void HTMLTextFormControlElement::setSelectionRange(int start, int end, TextField
     auto innerText = innerTextElement();
     bool hasFocus = document().focusedElement() == this;
     if (!hasFocus && innerText) {
+        if (!isConnected()) {
+            cacheSelection(start, end, direction);
+            return;
+        }
+
         // FIXME: Removing this synchronous layout requires fixing setSelectionWithoutUpdatingAppearance not needing up-to-date style.
         document().updateLayoutIgnorePendingStylesheets();