Title: [94883] branches/chromium/874
Revision
94883
Author
[email protected]
Date
2011-09-09 16:05:18 -0700 (Fri, 09 Sep 2011)

Log Message

Merge 94637 - REGRESSION(r94274): The inner text value of an input element is not updated when input.value is set
https://bugs.webkit.org/show_bug.cgi?id=67681

Reviewed by Kent Tamura.

Source/WebCore: 

The bug was caused by HTMLInputElement::setValue's not clearing m_suggestedValue before updateInnerTextValue is called.
Since updateInnerTextValue uses the suggested value when one is present, we need to clear m_suggestedValue in advance.

Test: fast/forms/suggested-value-after-setvalue.html

* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::setValue):

LayoutTests: 

Added a test that overrides the suggested value by modifying the value IDL attribute of an input element.

* fast/forms/suggested-value-after-setvalue-expected.txt: Added.
* fast/forms/suggested-value-after-setvalue.html: Added.


[email protected]
Review URL: http://codereview.chromium.org/7768005

Modified Paths

Added Paths

Diff

Copied: branches/chromium/874/LayoutTests/fast/forms/suggested-value-after-setvalue-expected.txt (from rev 94637, trunk/LayoutTests/fast/forms/suggested-value-after-setvalue-expected.txt) (0 => 94883)


--- branches/chromium/874/LayoutTests/fast/forms/suggested-value-after-setvalue-expected.txt	                        (rev 0)
+++ branches/chromium/874/LayoutTests/fast/forms/suggested-value-after-setvalue-expected.txt	2011-09-09 23:05:18 UTC (rev 94883)
@@ -0,0 +1,30 @@
+This test setting a value clears suggested value.
+
+After setting suggestedValue:
+| <input>
+|   id="test"
+|   type="text"
+|   value="initial value"
+|   this.value="initial value"
+|   <shadow:root>
+|     <div>
+|       "suggested value"
+| "input.value: initial value"
+| "internals.suggestedValue(input): suggested value"
+| "input.selectionStart: 0"
+| "input.selectionEnd: 0"
+
+After setting value:
+| <input>
+|   id="test"
+|   type="text"
+|   value="initial value"
+|   this.value="new value"
+|   <shadow:root>
+|     <div>
+|       "new value"
+| "input.value: new value"
+| "internals.suggestedValue(input): "
+| "input.selectionStart: 9"
+| "input.selectionEnd: 9"
+| "PASS"

Copied: branches/chromium/874/LayoutTests/fast/forms/suggested-value-after-setvalue.html (from rev 94637, trunk/LayoutTests/fast/forms/suggested-value-after-setvalue.html) (0 => 94883)


--- branches/chromium/874/LayoutTests/fast/forms/suggested-value-after-setvalue.html	                        (rev 0)
+++ branches/chromium/874/LayoutTests/fast/forms/suggested-value-after-setvalue.html	2011-09-09 23:05:18 UTC (rev 94883)
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+<body>
+<p id="description">This test setting a value clears suggested value.</p>
+<pre><input id="test" type="text" value="initial value"></pre>
+<script src=""
+<script>
+
+var input = document.getElementById('test');
+var result = document.getElementById('result');
+if (!window.internals)
+    testFailed('This test requires internals object');
+else {
+    input.focus();
+    input.selectionStart = input.selectionEnd = 0;
+
+    internals.setSuggestedValue(input, 'suggested value');
+
+    Markup.description(document.getElementById('description').textContent)
+
+    function addText(text) {
+        input.parentNode.appendChild(document.createTextNode(text));
+    }
+
+    function log() {
+        while (input.parentNode.firstChild != input.parentNode.lastChild)
+            input.parentNode.removeChild(input.parentNode.lastChild);
+        function addTextResult(value) { addText(value + ': ' + eval(value)); }
+        addTextResult('input.value');
+        addTextResult('internals.suggestedValue(input)');
+        addTextResult('input.selectionStart');
+        addTextResult('input.selectionEnd');
+    }
+
+    log();
+    Markup.dump(input.parentNode, 'After setting suggestedValue');
+
+    input.value = 'new value';
+
+    log();
+    var innerTextValue = internals.shadowRoot(input).firstChild.innerText;
+    addText(innerTextValue == 'new value' ? 'PASS' : 'FAIL');
+    Markup.dump(input.parentNode, 'After setting value');
+}
+
+</script>
+</body>
+</html>

Modified: branches/chromium/874/Source/WebCore/html/HTMLInputElement.cpp (94882 => 94883)


--- branches/chromium/874/Source/WebCore/html/HTMLInputElement.cpp	2011-09-09 23:03:13 UTC (rev 94882)
+++ branches/chromium/874/Source/WebCore/html/HTMLInputElement.cpp	2011-09-09 23:05:18 UTC (rev 94883)
@@ -1102,6 +1102,7 @@
 
     setNeedsValidityCheck();
 
+    m_suggestedValue = String(); // updateInnerTextValue uses the suggested value.
     if (valueChanged)
         updateInnerTextValue();
 
@@ -1111,7 +1112,6 @@
             setSelectionRange(max, max);
         else
             cacheSelection(max, max, SelectionHasNoDirection);
-        m_suggestedValue = String();
     }
 
     if (!valueChanged)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to