input.formEnctype / formMethod and button.formEnctype / formMethod / type should...
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Jul 2016 04:45:53 +0000 (04:45 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Jul 2016 04:45:53 +0000 (04:45 +0000)
https://bugs.webkit.org/show_bug.cgi?id=159908

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

Rebaseline now that more checks are passing.

* web-platform-tests/html/dom/reflection-forms-expected.txt:

Source/WebCore:

input.formEnctype / formMethod and button.formEnctype / formMethod / type
should treat null as "null" String:
- https://html.spec.whatwg.org/multipage/forms.html#htmlinputelement
- https://html.spec.whatwg.org/multipage/forms.html#htmlbuttonelement

In WebKit, we would treat null as a null String which would end up
removing the corresponding attribute. This does not match the
specification. Firefox and Chrome match the specification here.

Tests:
- fast/dom/HTMLButtonElement/null-handling.html
- fast/dom/HTMLInputElement/null-handling.html

* html/HTMLButtonElement.idl:
* html/HTMLInputElement.idl:

LayoutTests:

Add layout test coverage.

* fast/dom/HTMLButtonElement/change-type-expected.txt:
* fast/dom/HTMLButtonElement/change-type.html:
* fast/dom/HTMLButtonElement/null-handling-expected.txt: Added.
* fast/dom/HTMLButtonElement/null-handling.html: Added.
* fast/dom/HTMLInputElement/null-handling-expected.txt: Added.
* fast/dom/HTMLInputElement/null-handling.html: Added.
* fast/forms/submit-form-attributes-expected.txt:
* fast/forms/submit-form-attributes.html:

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

15 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/dom/HTMLButtonElement/change-type-expected.txt
LayoutTests/fast/dom/HTMLButtonElement/change-type.html
LayoutTests/fast/dom/HTMLButtonElement/null-handling-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/HTMLButtonElement/null-handling.html [new file with mode: 0644]
LayoutTests/fast/dom/HTMLInputElement/null-handling-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/HTMLInputElement/null-handling.html [new file with mode: 0644]
LayoutTests/fast/forms/submit-form-attributes-expected.txt
LayoutTests/fast/forms/submit-form-attributes.html
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/html/dom/reflection-forms-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/html/dom/reflection-forms-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLButtonElement.idl
Source/WebCore/html/HTMLInputElement.idl

index d9d554c..e0d5517 100644 (file)
@@ -1,3 +1,21 @@
+2016-07-18  Chris Dumez  <cdumez@apple.com>
+
+        input.formEnctype / formMethod and button.formEnctype / formMethod / type should treat null as "null"
+        https://bugs.webkit.org/show_bug.cgi?id=159908
+
+        Reviewed by Alex Christensen.
+
+        Add layout test coverage.
+
+        * fast/dom/HTMLButtonElement/change-type-expected.txt:
+        * fast/dom/HTMLButtonElement/change-type.html:
+        * fast/dom/HTMLButtonElement/null-handling-expected.txt: Added.
+        * fast/dom/HTMLButtonElement/null-handling.html: Added.
+        * fast/dom/HTMLInputElement/null-handling-expected.txt: Added.
+        * fast/dom/HTMLInputElement/null-handling.html: Added.
+        * fast/forms/submit-form-attributes-expected.txt:
+        * fast/forms/submit-form-attributes.html:
+
 2016-07-18  Joseph Pecoraro  <pecoraro@apple.com>
 
         Make builtin TypeErrors consistent
index b70b9e1..a9487d1 100644 (file)
@@ -30,7 +30,7 @@ PASS btn.getAttribute('type') is 'button '
 PASS btn.type = ' b u t t o n '; btn.type is 'submit'
 PASS btn.getAttribute('type') is ' b u t t o n '
 PASS btn.type = null; btn.type is 'submit'
-PASS btn.getAttribute('type') is null
+PASS btn.getAttribute('type') is "null"
 PASS btn.type = undefined; btn.type is 'submit'
 PASS btn.getAttribute('type') is 'undefined'
 PASS btn.type = 'reset'; txt.value = 'hello'; btn.click(); txt.value is ''
index 77dce87..1d3ac8a 100644 (file)
@@ -58,7 +58,7 @@ function testTypeValue()
     shouldBe("btn.getAttribute('type')", "' b u t t o n '");
     
     shouldBe("btn.type = null; btn.type", "'submit'");
-    shouldBe("btn.getAttribute('type')", "null");
+    shouldBeEqualToString("btn.getAttribute('type')", "null");
     
     shouldBe("btn.type = undefined; btn.type", "'submit'");
     shouldBe("btn.getAttribute('type')", "'undefined'");
diff --git a/LayoutTests/fast/dom/HTMLButtonElement/null-handling-expected.txt b/LayoutTests/fast/dom/HTMLButtonElement/null-handling-expected.txt
new file mode 100644 (file)
index 0000000..01eb579
--- /dev/null
@@ -0,0 +1,18 @@
+Tests null handling of several HTMLButtonElement attributes
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS button.getAttribute('formMethod') is null
+PASS button.getAttribute('formEnctype') is null
+PASS button.getAttribute('type') is null
+button.formMethod = null
+PASS button.getAttribute('formMethod') is "null"
+button.formEnctype = null
+PASS button.getAttribute('formEnctype') is "null"
+button.type = null
+PASS button.getAttribute('type') is "null"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/HTMLButtonElement/null-handling.html b/LayoutTests/fast/dom/HTMLButtonElement/null-handling.html
new file mode 100644 (file)
index 0000000..99dc579
--- /dev/null
@@ -0,0 +1,21 @@
+<DOCTYPE html>
+<html>
+<body>
+<script src="../../../resources/js-test-pre.js"></script>
+<script>
+description("Tests null handling of several HTMLButtonElement attributes");
+
+var button = document.createElement("button");
+shouldBeNull("button.getAttribute('formMethod')", "");
+shouldBeNull("button.getAttribute('formEnctype')", "");
+shouldBeNull("button.getAttribute('type')", "");
+evalAndLog("button.formMethod = null");
+shouldBeEqualToString("button.getAttribute('formMethod')", "null");
+evalAndLog("button.formEnctype = null");
+shouldBeEqualToString("button.getAttribute('formEnctype')", "null");
+evalAndLog("button.type = null");
+shouldBeEqualToString("button.getAttribute('type')", "null");
+</script>
+<script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/HTMLInputElement/null-handling-expected.txt b/LayoutTests/fast/dom/HTMLInputElement/null-handling-expected.txt
new file mode 100644 (file)
index 0000000..2b8cbfe
--- /dev/null
@@ -0,0 +1,15 @@
+Tests null handling of several HTMLInputElement attributes
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS input.getAttribute('formMethod') is null
+PASS input.getAttribute('formEnctype') is null
+input.formMethod = null
+PASS input.getAttribute('formMethod') is "null"
+input.formEnctype = null
+PASS input.getAttribute('formEnctype') is "null"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/HTMLInputElement/null-handling.html b/LayoutTests/fast/dom/HTMLInputElement/null-handling.html
new file mode 100644 (file)
index 0000000..c9c1a27
--- /dev/null
@@ -0,0 +1,18 @@
+<DOCTYPE html>
+<html>
+<body>
+<script src="../../../resources/js-test-pre.js"></script>
+<script>
+description("Tests null handling of several HTMLInputElement attributes");
+
+var input = document.createElement("input");
+shouldBeNull("input.getAttribute('formMethod')", "");
+shouldBeNull("input.getAttribute('formEnctype')", "");
+evalAndLog("input.formMethod = null");
+shouldBeEqualToString("input.getAttribute('formMethod')", "null");
+evalAndLog("input.formEnctype = null");
+shouldBeEqualToString("input.getAttribute('formEnctype')", "null");
+</script>
+<script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
index a37584e..544e9d6 100644 (file)
@@ -26,11 +26,11 @@ PASS input.formTarget is "http://example.com"
 PASS input.formTarget is "nta"
 
 Setting null for input:
-PASS input.formEnctype is ""
-PASS input.getAttribute("formEnctype") is null
 PASS input.formEnctype is "application/x-www-form-urlencoded"
-PASS input.formMethod is ""
-PASS input.getAttribute("formMethod") is null
+PASS input.getAttribute("formEnctype") is "null"
+PASS input.formEnctype is "application/x-www-form-urlencoded"
+PASS input.formMethod is "get"
+PASS input.getAttribute("formMethod") is "null"
 PASS input.formMethod is "get"
 PASS input.formTarget is "null"
 PASS input.getAttribute("formTarget") is "null"
@@ -81,11 +81,11 @@ PASS button.formTarget is "http://example.com"
 PASS button.formTarget is "nota"
 
 Setting null for button:
-PASS button.formEnctype is ""
-PASS button.getAttribute("formEnctype") is null
 PASS button.formEnctype is "application/x-www-form-urlencoded"
-PASS button.formMethod is ""
-PASS button.getAttribute("formMethod") is null
+PASS button.getAttribute("formEnctype") is "null"
+PASS button.formEnctype is "application/x-www-form-urlencoded"
+PASS button.formMethod is "get"
+PASS button.getAttribute("formMethod") is "null"
 PASS button.formMethod is "get"
 PASS button.formTarget is "null"
 PASS button.getAttribute("formTarget") is "null"
index 919f5ce..908c840 100644 (file)
@@ -55,13 +55,13 @@ shouldBeEqualToString('input.formTarget', 'nta');
 debug('');
 debug('Setting null for input:');
 input.formEnctype = null;
-shouldBeEqualToString('input.formEnctype', '');
-shouldBe('input.getAttribute("formEnctype")', 'null');
+shouldBeEqualToString('input.formEnctype', 'application/x-www-form-urlencoded');
+shouldBeEqualToString('input.getAttribute("formEnctype")', 'null');
 input.setAttribute('formEnctype', null);
 shouldBeEqualToString('input.formEnctype', 'application/x-www-form-urlencoded');
 input.formMethod = null;
-shouldBeEqualToString('input.formMethod', '');
-shouldBe('input.getAttribute("formMethod")', 'null');
+shouldBeEqualToString('input.formMethod', 'get');
+shouldBeEqualToString('input.getAttribute("formMethod")', 'null');
 input.setAttribute('formMethod', null);
 shouldBeEqualToString('input.formMethod', 'get');
 input.formTarget = null;
@@ -152,13 +152,13 @@ shouldBeEqualToString('button.formTarget', 'nota');
 debug('');
 debug('Setting null for button:');
 button.formEnctype = null;
-shouldBeEqualToString('button.formEnctype', '');
-shouldBe('button.getAttribute("formEnctype")', 'null');
+shouldBeEqualToString('button.formEnctype', 'application/x-www-form-urlencoded');
+shouldBeEqualToString('button.getAttribute("formEnctype")', 'null');
 button.setAttribute('formEnctype', null);
 shouldBeEqualToString('button.formEnctype', 'application/x-www-form-urlencoded');
 button.formMethod = null;
-shouldBeEqualToString('button.formMethod', '');
-shouldBe('button.getAttribute("formMethod")', 'null');
+shouldBeEqualToString('button.formMethod', 'get');
+shouldBeEqualToString('button.getAttribute("formMethod")', 'null');
 button.setAttribute('formMethod', null);
 shouldBeEqualToString('button.formMethod', 'get');
 button.formTarget = null;
index 165b38a..b55062a 100644 (file)
@@ -1,5 +1,16 @@
 2016-07-18  Chris Dumez  <cdumez@apple.com>
 
+        input.formEnctype / formMethod and button.formEnctype / formMethod / type should treat null as "null"
+        https://bugs.webkit.org/show_bug.cgi?id=159908
+
+        Reviewed by Alex Christensen.
+
+        Rebaseline now that more checks are passing.
+
+        * web-platform-tests/html/dom/reflection-forms-expected.txt:
+
+2016-07-18  Chris Dumez  <cdumez@apple.com>
+
         DocType's publicId / systemId should not be nullable
         https://bugs.webkit.org/show_bug.cgi?id=159901
 
index db535b4..c1b266b 100644 (file)
@@ -4724,7 +4724,7 @@ PASS input.formEnctype: IDL set to "\0" should not throw
 PASS input.formEnctype: IDL set to "\0" followed by getAttribute() 
 PASS input.formEnctype: IDL set to "\0" followed by IDL get 
 PASS input.formEnctype: IDL set to null should not throw 
-FAIL input.formEnctype: IDL set to null followed by IDL get assert_equals: expected "application/x-www-form-urlencoded" but got ""
+PASS input.formEnctype: IDL set to null followed by IDL get 
 PASS input.formEnctype: IDL set to object "test-toString" should not throw 
 PASS input.formEnctype: IDL set to object "test-toString" followed by getAttribute() 
 PASS input.formEnctype: IDL set to object "test-toString" followed by IDL get 
@@ -4865,7 +4865,7 @@ PASS input.formMethod: IDL set to "\0" should not throw
 PASS input.formMethod: IDL set to "\0" followed by getAttribute() 
 PASS input.formMethod: IDL set to "\0" followed by IDL get 
 PASS input.formMethod: IDL set to null should not throw 
-FAIL input.formMethod: IDL set to null followed by IDL get assert_equals: expected "get" but got ""
+PASS input.formMethod: IDL set to null followed by IDL get 
 PASS input.formMethod: IDL set to object "test-toString" should not throw 
 PASS input.formMethod: IDL set to object "test-toString" followed by getAttribute() 
 PASS input.formMethod: IDL set to object "test-toString" followed by IDL get 
@@ -8169,7 +8169,7 @@ PASS button.formEnctype: IDL set to "\0" should not throw
 PASS button.formEnctype: IDL set to "\0" followed by getAttribute() 
 PASS button.formEnctype: IDL set to "\0" followed by IDL get 
 PASS button.formEnctype: IDL set to null should not throw 
-FAIL button.formEnctype: IDL set to null followed by IDL get assert_equals: expected "application/x-www-form-urlencoded" but got ""
+PASS button.formEnctype: IDL set to null followed by IDL get 
 PASS button.formEnctype: IDL set to object "test-toString" should not throw 
 PASS button.formEnctype: IDL set to object "test-toString" followed by getAttribute() 
 PASS button.formEnctype: IDL set to object "test-toString" followed by IDL get 
@@ -8320,7 +8320,7 @@ PASS button.formMethod: IDL set to "\0" should not throw
 PASS button.formMethod: IDL set to "\0" followed by getAttribute() 
 PASS button.formMethod: IDL set to "\0" followed by IDL get 
 PASS button.formMethod: IDL set to null should not throw 
-FAIL button.formMethod: IDL set to null followed by IDL get assert_equals: expected "get" but got ""
+PASS button.formMethod: IDL set to null followed by IDL get 
 PASS button.formMethod: IDL set to object "test-toString" should not throw 
 PASS button.formMethod: IDL set to object "test-toString" followed by getAttribute() 
 PASS button.formMethod: IDL set to object "test-toString" followed by IDL get 
index caa1019..14ff724 100644 (file)
@@ -4724,7 +4724,7 @@ PASS input.formEnctype: IDL set to "\0" should not throw
 PASS input.formEnctype: IDL set to "\0" followed by getAttribute() 
 PASS input.formEnctype: IDL set to "\0" followed by IDL get 
 PASS input.formEnctype: IDL set to null should not throw 
-FAIL input.formEnctype: IDL set to null followed by IDL get assert_equals: expected "application/x-www-form-urlencoded" but got ""
+PASS input.formEnctype: IDL set to null followed by IDL get 
 PASS input.formEnctype: IDL set to object "test-toString" should not throw 
 PASS input.formEnctype: IDL set to object "test-toString" followed by getAttribute() 
 PASS input.formEnctype: IDL set to object "test-toString" followed by IDL get 
@@ -4865,7 +4865,7 @@ PASS input.formMethod: IDL set to "\0" should not throw
 PASS input.formMethod: IDL set to "\0" followed by getAttribute() 
 PASS input.formMethod: IDL set to "\0" followed by IDL get 
 PASS input.formMethod: IDL set to null should not throw 
-FAIL input.formMethod: IDL set to null followed by IDL get assert_equals: expected "get" but got ""
+PASS input.formMethod: IDL set to null followed by IDL get 
 PASS input.formMethod: IDL set to object "test-toString" should not throw 
 PASS input.formMethod: IDL set to object "test-toString" followed by getAttribute() 
 PASS input.formMethod: IDL set to object "test-toString" followed by IDL get 
@@ -8169,7 +8169,7 @@ PASS button.formEnctype: IDL set to "\0" should not throw
 PASS button.formEnctype: IDL set to "\0" followed by getAttribute() 
 PASS button.formEnctype: IDL set to "\0" followed by IDL get 
 PASS button.formEnctype: IDL set to null should not throw 
-FAIL button.formEnctype: IDL set to null followed by IDL get assert_equals: expected "application/x-www-form-urlencoded" but got ""
+PASS button.formEnctype: IDL set to null followed by IDL get 
 PASS button.formEnctype: IDL set to object "test-toString" should not throw 
 PASS button.formEnctype: IDL set to object "test-toString" followed by getAttribute() 
 PASS button.formEnctype: IDL set to object "test-toString" followed by IDL get 
@@ -8320,7 +8320,7 @@ PASS button.formMethod: IDL set to "\0" should not throw
 PASS button.formMethod: IDL set to "\0" followed by getAttribute() 
 PASS button.formMethod: IDL set to "\0" followed by IDL get 
 PASS button.formMethod: IDL set to null should not throw 
-FAIL button.formMethod: IDL set to null followed by IDL get assert_equals: expected "get" but got ""
+PASS button.formMethod: IDL set to null followed by IDL get 
 PASS button.formMethod: IDL set to object "test-toString" should not throw 
 PASS button.formMethod: IDL set to object "test-toString" followed by getAttribute() 
 PASS button.formMethod: IDL set to object "test-toString" followed by IDL get 
index 2742a6c..2f68e57 100644 (file)
@@ -1,3 +1,26 @@
+2016-07-18  Chris Dumez  <cdumez@apple.com>
+
+        input.formEnctype / formMethod and button.formEnctype / formMethod / type should treat null as "null"
+        https://bugs.webkit.org/show_bug.cgi?id=159908
+
+        Reviewed by Alex Christensen.
+
+        input.formEnctype / formMethod and button.formEnctype / formMethod / type
+        should treat null as "null" String:
+        - https://html.spec.whatwg.org/multipage/forms.html#htmlinputelement
+        - https://html.spec.whatwg.org/multipage/forms.html#htmlbuttonelement
+
+        In WebKit, we would treat null as a null String which would end up
+        removing the corresponding attribute. This does not match the
+        specification. Firefox and Chrome match the specification here.
+
+        Tests:
+        - fast/dom/HTMLButtonElement/null-handling.html
+        - fast/dom/HTMLInputElement/null-handling.html
+
+        * html/HTMLButtonElement.idl:
+        * html/HTMLInputElement.idl:
+
 2016-07-18  Alex Christensen  <achristensen@webkit.org>
 
         webbookmarksd needs to use the same AppCache directory as MobileSafari
index 5d35c73..7962de6 100644 (file)
@@ -24,10 +24,9 @@ interface HTMLButtonElement : HTMLElement {
     readonly attribute HTMLFormElement form;
     attribute DOMString formAction;
 
-    // FIXME: These should not have [TreatNullAs=LegacyNullString].
-    [TreatNullAs=LegacyNullString] attribute DOMString formEnctype;
-    [TreatNullAs=LegacyNullString] attribute DOMString formMethod;
-    [TreatNullAs=LegacyNullString] attribute DOMString type;
+    attribute DOMString formEnctype;
+    attribute DOMString formMethod;
+    attribute DOMString type;
 
     [Reflect] attribute boolean formNoValidate;
     [Reflect] attribute DOMString formTarget;
index 62274ea..d5969e6 100644 (file)
@@ -35,9 +35,8 @@
     attribute FileList? files;
     attribute DOMString formAction;
 
-    // FIXME: These should not use [TreatNullAs=LegacyNullString].
-    [TreatNullAs=LegacyNullString] attribute DOMString formEnctype;
-    [TreatNullAs=LegacyNullString] attribute DOMString formMethod;
+    attribute DOMString formEnctype;
+    attribute DOMString formMethod;
 
     [Reflect] attribute boolean formNoValidate;
     [Reflect] attribute DOMString formTarget;