formaction must return document's address when formaction is missing
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Jan 2016 00:04:56 +0000 (00:04 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Jan 2016 00:04:56 +0000 (00:04 +0000)
https://bugs.webkit.org/show_bug.cgi?id=148874

Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

Rebaselined the tests now that more test cases are passing.

* web-platform-tests/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address-expected.txt:
* web-platform-tests/html/semantics/forms/attributes-common-to-form-controls/formaction-expected.txt:

Source/WebCore:

Fixed the bug by falling back to document.url() when the attribute is not set or is empty in formAction getter.

Test: fast/forms/formaction-attribute-with-empty-value.html

* html/HTMLButtonElement.idl:
* html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::formAction): Added.
(WebCore::HTMLFormControlElement::setFormAction): Added.
* html/HTMLFormControlElement.h:
* html/HTMLInputElement.idl:

LayoutTests:

Added a regression test and rebaselined imported W3C tests.

* fast/forms/formaction-attribute-with-empty-value-expected.txt: Added.
* fast/forms/formaction-attribute-with-empty-value.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@194999 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/forms/formaction-attribute-with-empty-value-expected.txt [new file with mode: 0644]
LayoutTests/fast/forms/formaction-attribute-with-empty-value.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/semantics/forms/attributes-common-to-form-controls/formAction_document_address-expected.txt
LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/attributes-common-to-form-controls/formaction-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLButtonElement.idl
Source/WebCore/html/HTMLFormControlElement.cpp
Source/WebCore/html/HTMLFormControlElement.h
Source/WebCore/html/HTMLInputElement.idl

index b2e20a5..80a0cf7 100644 (file)
@@ -1,3 +1,17 @@
+2016-01-12  Ryosuke Niwa  <rniwa@webkit.org>
+
+        formaction must return document's address when formaction is missing
+        https://bugs.webkit.org/show_bug.cgi?id=148874
+
+        Reviewed by Chris Dumez.
+
+        Added a regression test and rebaselined imported W3C tests.
+
+        * fast/forms/formaction-attribute-with-empty-value-expected.txt: Added.
+        * fast/forms/formaction-attribute-with-empty-value.html: Added.
+        * fast/forms/submit-form-attributes-expected.txt:
+        * fast/forms/submit-form-attributes.html:
+
 2016-01-13  Mark Lam  <mark.lam@apple.com>
 
         The StringFromCharCode DFG intrinsic should support untyped operands.
diff --git a/LayoutTests/fast/forms/formaction-attribute-with-empty-value-expected.txt b/LayoutTests/fast/forms/formaction-attribute-with-empty-value-expected.txt
new file mode 100644 (file)
index 0000000..a167ff2
--- /dev/null
@@ -0,0 +1,23 @@
+Test to ensure formAction attribute returns the URL of the document when the attribute is not specified or empty.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+element = document.createElement("input");
+PASS element.formAction is location.href
+PASS element.setAttribute("formaction", "http://webkit.org/foo.html"); element.formAction is "http://webkit.org/foo.html"
+PASS element.setAttribute("formaction", ""); element.formAction is location.href
+base = document.createElement("base"); document.head.appendChild(base); base.href = "https://bugs.webkit.org/";
+PASS element.formAction is location.href
+PASS element.setAttribute("formaction", "foo.html"); element.formAction is "https://bugs.webkit.org/foo.html"
+PASS element.setAttribute("formaction", ""); element.formAction is location.href
+
+element = document.createElement("button");
+PASS element.formAction is location.href
+PASS element.setAttribute("formaction", "http://webkit.org/foo.html"); element.formAction is "http://webkit.org/foo.html"
+PASS element.setAttribute("formaction", ""); element.formAction is location.href
+base = document.createElement("base"); document.head.appendChild(base); base.href = "https://bugs.webkit.org/";
+PASS element.formAction is location.href
+PASS element.setAttribute("formaction", "foo.html"); element.formAction is "https://bugs.webkit.org/foo.html"
+PASS element.setAttribute("formaction", ""); element.formAction is location.href
+
diff --git a/LayoutTests/fast/forms/formaction-attribute-with-empty-value.html b/LayoutTests/fast/forms/formaction-attribute-with-empty-value.html
new file mode 100644 (file)
index 0000000..fd4bf3e
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src="../../resources/js-test-pre.js"></script>
+<script>
+
+description('Test to ensure formAction attribute returns the URL of the document when the attribute is not specified or empty.');
+
+function runTests() {
+    shouldBe('element.formAction', 'location.href');
+    shouldBe('element.setAttribute("formaction", "http://webkit.org/foo.html"); element.formAction', '"http://webkit.org/foo.html"');
+    shouldBe('element.setAttribute("formaction", ""); element.formAction', 'location.href');
+
+    evalAndLog('base = document.createElement("base"); document.head.appendChild(base); base.href = "https://bugs.webkit.org/";');
+    shouldBe('element.formAction', 'location.href');
+    shouldBe('element.setAttribute("formaction", "foo.html"); element.formAction', '"https://bugs.webkit.org/foo.html"');
+    shouldBe('element.setAttribute("formaction", ""); element.formAction', 'location.href');
+}
+
+evalAndLog('element = document.createElement("input");');
+runTests();
+
+debug('');
+evalAndLog('element = document.createElement("button");');
+runTests();
+
+</script>
+</body>
+</html>
index 502f2a0..efb946c 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 Ordinary values for input:
-PASS input.formAction is ""
+PASS input.formAction is location.href
 PASS input.formEnctype is ""
 PASS input.formMethod is ""
 PASS input.formTarget is ""
@@ -59,7 +59,7 @@ PASS input.getAttribute("formTarget") is "256"
 PASS input.formTarget is "256"
 
 Ordinary values for button:
-PASS button.formAction is ""
+PASS button.formAction is location.href
 PASS button.formEnctype is ""
 PASS button.formMethod is ""
 PASS button.formTarget is ""
index d08fc2e..8e6914c 100644 (file)
@@ -13,7 +13,7 @@ var input = document.createElement('input');
 
 debug('Ordinary values for input:');
 input.type = "submit";
-shouldBeEqualToString('input.formAction', '');
+shouldBe('input.formAction', 'location.href');
 shouldBeEqualToString('input.formEnctype', '');
 shouldBeEqualToString('input.formMethod', '');
 shouldBeEqualToString('input.formTarget', '');
@@ -110,7 +110,7 @@ var button = document.createElement('button');
 debug('');
 debug('Ordinary values for button:');
 button.type = "submit";
-shouldBeEqualToString('button.formAction', '');
+shouldBe('button.formAction', 'location.href');
 shouldBeEqualToString('button.formEnctype', '');
 shouldBeEqualToString('button.formMethod', '');
 shouldBeEqualToString('button.formTarget', '');
index dfd96d6..2c16fd6 100644 (file)
@@ -1,3 +1,15 @@
+2016-01-12  Ryosuke Niwa  <rniwa@webkit.org>
+
+        formaction must return document's address when formaction is missing
+        https://bugs.webkit.org/show_bug.cgi?id=148874
+
+        Reviewed by Chris Dumez.
+
+        Rebaselined the tests now that more test cases are passing.
+
+        * web-platform-tests/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address-expected.txt:
+        * web-platform-tests/html/semantics/forms/attributes-common-to-form-controls/formaction-expected.txt:
+
 2016-01-11  Brady Eidson  <beidson@apple.com>
 
         Modern IDB: IDBBindingUtilities chokes on unicode strings for get/set.
index e1c8bb3..d9b2b04 100644 (file)
@@ -1,6 +1,6 @@
 
-FAIL Check if button.formAction is the document's address when formaction content attribute is missing assert_equals: expected "http://localhost:8800/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address.html" but got ""
-FAIL Check if input.formAction is the document's address when formaction content attribute is missing assert_equals: expected "http://localhost:8800/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address.html" but got ""
+PASS Check if button.formAction is the document's address when formaction content attribute is missing 
+PASS Check if input.formAction is the document's address when formaction content attribute is missing 
 PASS Check if button.formAction is the document's address when formaction content attribute value is empty string 
 PASS Check if input.formAction is the document's address when formaction content attribute value is empty string 
 PASS Check if button.formAction is the document's address when formaction content attribute value is not assigned 
index 6a062f0..e1526ae 100644 (file)
@@ -5,6 +5,6 @@ PASS formaction absolute URL value on input reflects correct value after being u
 PASS formAction absolute URL value is correct using getAttribute 
 PASS formAction relative URL value on input reflects correct value after being updated by the DOM 
 PASS formAction relative URL value is correct using getAttribute 
-FAIL On getting, when formaction is missing, the document's address must be returned assert_equals: expected "http://localhost:8800/html/semantics/forms/attributes-common-to-form-controls/formaction.html" but got ""
+PASS On getting, when formaction is missing, the document's address must be returned 
 PASS On getting, when formaction value is the empty string, the document's address must be returned 
 
index 9801e3a..d5c0fbe 100644 (file)
@@ -1,3 +1,21 @@
+2016-01-12  Ryosuke Niwa  <rniwa@webkit.org>
+
+        formaction must return document's address when formaction is missing
+        https://bugs.webkit.org/show_bug.cgi?id=148874
+
+        Reviewed by Chris Dumez.
+
+        Fixed the bug by falling back to document.url() when the attribute is not set or is empty in formAction getter.
+
+        Test: fast/forms/formaction-attribute-with-empty-value.html
+
+        * html/HTMLButtonElement.idl:
+        * html/HTMLFormControlElement.cpp:
+        (WebCore::HTMLFormControlElement::formAction): Added.
+        (WebCore::HTMLFormControlElement::setFormAction): Added.
+        * html/HTMLFormControlElement.h:
+        * html/HTMLInputElement.idl:
+
 2016-01-13  Chris Dumez  <cdumez@apple.com>
 
         Unreviewed, rolling out r194900.
index a8c6c52..8d88f53 100644 (file)
@@ -22,7 +22,7 @@ interface HTMLButtonElement : HTMLElement {
     [Reflect] attribute boolean autofocus;
     [Reflect] attribute boolean disabled;
     readonly attribute HTMLFormElement form;
-    [Reflect, URL] attribute DOMString formAction;
+    attribute DOMString formAction;
     [TreatNullAs=NullString] attribute DOMString formEnctype;
     [TreatNullAs=NullString] attribute DOMString formMethod;
     [Reflect] attribute boolean formNoValidate;
index 88d8321..1855819 100644 (file)
@@ -104,6 +104,19 @@ bool HTMLFormControlElement::formNoValidate() const
     return fastHasAttribute(formnovalidateAttr);
 }
 
+String HTMLFormControlElement::formAction() const
+{
+    const AtomicString& value = fastGetAttribute(formactionAttr);
+    if (value.isEmpty())
+        return document().url();
+    return getURLAttribute(formactionAttr);
+}
+
+void HTMLFormControlElement::setFormAction(const AtomicString& value)
+{
+    setAttributeWithoutSynchronization(formactionAttr, value);
+}
+
 bool HTMLFormControlElement::computeIsDisabledByFieldsetAncestor() const
 {
     Element* previousAncestor = nullptr;
index 6765284..331e134 100644 (file)
@@ -53,6 +53,8 @@ public:
     String formMethod() const;
     void setFormMethod(const String&);
     bool formNoValidate() const;
+    String formAction() const;
+    void setFormAction(const AtomicString&);
 
     void setAncestorDisabled(bool isDisabled);
 
index de12f8c..5832a6d 100644 (file)
@@ -30,7 +30,7 @@ interface HTMLInputElement : HTMLElement {
     [Reflect] attribute boolean disabled;
     readonly attribute HTMLFormElement form;
     attribute FileList files;
-    [Reflect, URL] attribute DOMString formAction;
+    attribute DOMString formAction;
     [TreatNullAs=NullString] attribute DOMString formEnctype;
     [TreatNullAs=NullString] attribute DOMString formMethod;
     [Reflect] attribute boolean formNoValidate;