Remove unnecessary functions: setName() and formControlName()
authortkent@chromium.org <tkent@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Jun 2012 09:10:04 +0000 (09:10 +0000)
committertkent@chromium.org <tkent@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Jun 2012 09:10:04 +0000 (09:10 +0000)
https://bugs.webkit.org/show_bug.cgi?id=88392

Reviewed by Kentaro Hara.

Source/WebCore:

'name' IDL attributes of form-related elements should be [Reflected],
and we don't need to have setName(). We used formControlName() for
name() implementation, and formControlName() is not needed because it
just converts a null attribute to an empty string. Our binding code does it.

We don't remove FormAssociatedElement::name() because many C++ code use it.

FormAssociatedElement::name() is virtual, and HTMLInputElement overrides
it so that it returns a cache of the name attribtue value because
CheckedRadioButtons class needs to know an old name attribute value when
the name attribtue is changed.

References:
http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#dom-object-name
http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#dom-form-name
http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#dom-fe-name

Test: fast/forms/name-attribute.html

* dom/Element.h: Remove formControlName().
* html/FormAssociatedElement.cpp:
(WebCore::FormAssociatedElement::name):
Copied from formControlName() implementation of HTMLFormControlElement.
* html/FormAssociatedElement.h:
(FormAssociatedElement): Make name() virtual, remove formControlName().
* html/FormController.cpp:
(WebCore::FormController::formElementsState):
Use name() instead of formControlName().
* html/HTMLFormControlElement.cpp:
Remove formControlName() and setName().
* html/HTMLFormControlElement.h: ditto.
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::name): Renamed from formControlName().
* html/HTMLInputElement.h:
(HTMLInputElement): Renamed formControlName() to name(), and make it public.
* html/HTMLKeygenElement.idl: Make 'name' [Reflected].
* html/HTMLObjectElement.cpp: Remove formControlName().
* html/HTMLObjectElement.h: ditto.
* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::appendFormData):
Use name() instead of formControlName().
* html/HTMLSelectElement.idl: Make 'name' [Reflected].
* html/HTMLTextAreaElement.idl: Make 'name' [Reflected].

LayoutTests:

* fast/forms/name-attribute-expected.txt: Added.
* fast/forms/name-attribute.html: Added.

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

18 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/forms/name-attribute-expected.txt [new file with mode: 0644]
LayoutTests/fast/forms/name-attribute.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/dom/Element.h
Source/WebCore/html/FormAssociatedElement.cpp
Source/WebCore/html/FormAssociatedElement.h
Source/WebCore/html/FormController.cpp
Source/WebCore/html/HTMLFormControlElement.cpp
Source/WebCore/html/HTMLFormControlElement.h
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HTMLInputElement.h
Source/WebCore/html/HTMLKeygenElement.idl
Source/WebCore/html/HTMLObjectElement.cpp
Source/WebCore/html/HTMLObjectElement.h
Source/WebCore/html/HTMLSelectElement.cpp
Source/WebCore/html/HTMLSelectElement.idl
Source/WebCore/html/HTMLTextAreaElement.idl

index 9f2208f..f5ccb46 100644 (file)
@@ -1,3 +1,13 @@
+2012-06-12  Kent Tamura  <tkent@chromium.org>
+
+        Remove unnecessary functions: setName() and formControlName()
+        https://bugs.webkit.org/show_bug.cgi?id=88392
+
+        Reviewed by Kentaro Hara.
+
+        * fast/forms/name-attribute-expected.txt: Added.
+        * fast/forms/name-attribute.html: Added.
+
 2012-06-12  Mario Sanchez Prada  <msanchez@igalia.com>
 
         Unreviewed gardening. Skip test crashing on GTK debug bots.
diff --git a/LayoutTests/fast/forms/name-attribute-expected.txt b/LayoutTests/fast/forms/name-attribute-expected.txt
new file mode 100644 (file)
index 0000000..b8d8040
--- /dev/null
@@ -0,0 +1,279 @@
+Check behavior of name attribute for various form elements
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Test cases for button
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+Test cases for fieldset
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+Test cases for form
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+Test cases for input
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+Test cases for keygen
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+Test cases for object
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+Test cases for output
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+Test cases for select
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+Test cases for textarea
+Initial value:
+PASS element.name is ""
+PASS element.getAttribute("name") is null
+Setting a value via the IDL attribute:
+PASS element.name = "foo"; element.name is "foo"
+PASS element.getAttribute("name") is "foo"
+Setting a value via the content attribute:
+PASS element.setAttribute("name", " bar\n"); element.name is " bar\n"
+PASS element.getAttribute("name") is " bar\n"
+Setting null via the IDL attribute:
+PASS element.name = null; element.name is ""
+PASS element.getAttribute("name") is null
+Setting null via the content attribute:
+PASS element.setAttribute("name", null); element.name is "null"
+PASS element.getAttribute("name") is "null"
+Setting undefined via the IDL attribute:
+PASS element.name = undefined; element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting undefined via the content attribute:
+PASS element.setAttribute("name", undefined); element.name is "undefined"
+PASS element.getAttribute("name") is "undefined"
+Setting non-string via the IDL attribute:
+PASS element.name = 123; element.name is "123"
+PASS element.getAttribute("name") is "123"
+Setting non-string via the content attribute:
+PASS element.setAttribute("name", 456); element.name is "456"
+PASS element.getAttribute("name") is "456"
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/forms/name-attribute.html b/LayoutTests/fast/forms/name-attribute.html
new file mode 100644 (file)
index 0000000..fc0b226
--- /dev/null
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<script src="../js/resources/js-test-pre.js"></script>
+<script>
+description("Check behavior of name attribute for various form elements");
+var elementNames = ["button", "fieldset", "form", "input", "keygen", "object", "output", "select", "textarea"];
+for (var i = 0; i < elementNames.length; ++i) {
+    var element = document.createElement(elementNames[i]);
+    debug('Test cases for ' + elementNames[i]);
+    debug('Initial value:');
+    shouldBeEqualToString('element.name', '');
+    shouldBeNull('element.getAttribute("name")');
+
+    debug('Setting a value via the IDL attribute:');
+    shouldBeEqualToString('element.name = "foo"; element.name', 'foo');
+    shouldBeEqualToString('element.getAttribute("name")', 'foo');
+
+    debug('Setting a value via the content attribute:');
+    shouldBeEqualToString('element.setAttribute("name", " bar\\n"); element.name', ' bar\n');
+    shouldBeEqualToString('element.getAttribute("name")', ' bar\n');
+
+    debug('Setting null via the IDL attribute:');
+    shouldBeEqualToString('element.name = null; element.name', '');
+    shouldBeNull('element.getAttribute("name")');
+
+    debug('Setting null via the content attribute:');
+    shouldBeEqualToString('element.setAttribute("name", null); element.name', 'null');
+    shouldBeEqualToString('element.getAttribute("name")', 'null');
+
+    debug('Setting undefined via the IDL attribute:');
+    shouldBeEqualToString('element.name = undefined; element.name', 'undefined');
+    shouldBeEqualToString('element.getAttribute("name")', 'undefined');
+
+    debug('Setting undefined via the content attribute:');
+    shouldBeEqualToString('element.setAttribute("name", undefined); element.name', 'undefined');
+    shouldBeEqualToString('element.getAttribute("name")', 'undefined');
+
+    debug('Setting non-string via the IDL attribute:');
+    shouldBeEqualToString('element.name = 123; element.name', '123');
+    shouldBeEqualToString('element.getAttribute("name")', '123');
+
+    debug('Setting non-string via the content attribute:');
+    shouldBeEqualToString('element.setAttribute("name", 456); element.name', '456');
+    shouldBeEqualToString('element.getAttribute("name")', '456');
+
+    debug('\n');
+}
+</script>
+<script src="../js/resources/js-test-post.js"></script>
index bef26c6..4ebd76a 100644 (file)
@@ -1,3 +1,54 @@
+2012-06-12  Kent Tamura  <tkent@chromium.org>
+
+        Remove unnecessary functions: setName() and formControlName()
+        https://bugs.webkit.org/show_bug.cgi?id=88392
+
+        Reviewed by Kentaro Hara.
+
+        'name' IDL attributes of form-related elements should be [Reflected],
+        and we don't need to have setName(). We used formControlName() for
+        name() implementation, and formControlName() is not needed because it
+        just converts a null attribute to an empty string. Our binding code does it.
+
+        We don't remove FormAssociatedElement::name() because many C++ code use it.
+
+        FormAssociatedElement::name() is virtual, and HTMLInputElement overrides
+        it so that it returns a cache of the name attribtue value because
+        CheckedRadioButtons class needs to know an old name attribute value when
+        the name attribtue is changed.
+
+        References:
+        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#dom-object-name
+        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#dom-form-name
+        http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#dom-fe-name
+
+        Test: fast/forms/name-attribute.html
+
+        * dom/Element.h: Remove formControlName().
+        * html/FormAssociatedElement.cpp:
+        (WebCore::FormAssociatedElement::name):
+        Copied from formControlName() implementation of HTMLFormControlElement.
+        * html/FormAssociatedElement.h:
+        (FormAssociatedElement): Make name() virtual, remove formControlName().
+        * html/FormController.cpp:
+        (WebCore::FormController::formElementsState):
+        Use name() instead of formControlName().
+        * html/HTMLFormControlElement.cpp:
+        Remove formControlName() and setName().
+        * html/HTMLFormControlElement.h: ditto.
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::name): Renamed from formControlName().
+        * html/HTMLInputElement.h:
+        (HTMLInputElement): Renamed formControlName() to name(), and make it public.
+        * html/HTMLKeygenElement.idl: Make 'name' [Reflected].
+        * html/HTMLObjectElement.cpp: Remove formControlName().
+        * html/HTMLObjectElement.h: ditto.
+        * html/HTMLSelectElement.cpp:
+        (WebCore::HTMLSelectElement::appendFormData):
+        Use name() instead of formControlName().
+        * html/HTMLSelectElement.idl: Make 'name' [Reflected].
+        * html/HTMLTextAreaElement.idl: Make 'name' [Reflected].
+
 2012-06-11  Nico Weber  <thakis@chromium.org>
 
         Remove unused member variables found by clang's -Wunused-private-field
index fa39a18..9074e2b 100644 (file)
@@ -378,7 +378,6 @@ public:
 
     virtual bool canContainRangeEndPoint() const { return true; }
 
-    virtual const AtomicString& formControlName() const { return nullAtom; }
     virtual const AtomicString& formControlType() const { return nullAtom; }
 
     virtual bool wasChangedSinceLastFormControlChangeEvent() const;
index 39fe71d..21791f0 100644 (file)
@@ -221,6 +221,12 @@ void FormAssociatedElement::setCustomValidity(const String& error)
     m_customValidationMessage = error;
 }
 
+const AtomicString& FormAssociatedElement::name() const
+{
+    const AtomicString& name = toHTMLElement(this)->getNameAttribute();
+    return name.isNull() ? emptyAtom : name;
+}
+
 const HTMLElement* toHTMLElement(const FormAssociatedElement* associatedElement)
 {
     if (associatedElement->isFormControlElement())
index 4c9cda0..5a47ea0 100644 (file)
@@ -48,7 +48,10 @@ public:
     virtual bool isFormControlElement() const = 0;
     virtual bool isEnumeratable() const = 0;
 
-    const AtomicString& name() const { return formControlName(); }
+    // Returns the 'name' attribute value. If this element has no name
+    // attribute, it returns an empty string instead of null string.
+    // Note that the 'name' IDL attribute doesn't use this function.
+    virtual const AtomicString& name() const;
 
     // Override in derived classes to get the encoded name=value pair for submitting.
     // Return true for a successful control (see HTML4-17.13.2).
@@ -95,8 +98,6 @@ protected:
     String customValidationMessage() const;
 
 private:
-    virtual const AtomicString& formControlName() const = 0;
-
     virtual void refFormAssociatedElement() = 0;
     virtual void derefFormAssociatedElement() = 0;
 
index 69b931f..a81763a 100644 (file)
@@ -48,7 +48,7 @@ Vector<String> FormController::formElementsState() const
         String value;
         if (!elementWithState->saveFormControlState(value))
             continue;
-        stateVector.append(elementWithState->formControlName().string());
+        stateVector.append(elementWithState->name().string());
         stateVector.append(elementWithState->formControlType().string());
         stateVector.append(value);
     }
index 0a51392..d098148 100644 (file)
@@ -241,17 +241,6 @@ void HTMLFormControlElement::removedFrom(ContainerNode* insertionPoint)
     FormAssociatedElement::removedFrom(insertionPoint);
 }
 
-const AtomicString& HTMLFormControlElement::formControlName() const
-{
-    const AtomicString& name = getNameAttribute();
-    return name.isNull() ? emptyAtom : name;
-}
-
-void HTMLFormControlElement::setName(const AtomicString& value)
-{
-    setAttribute(nameAttr, value);
-}
-
 bool HTMLFormControlElement::wasChangedSinceLastFormControlChangeEvent() const
 {
     return m_wasChangedSinceLastFormControlChangeEvent;
index a8ee152..b3a9354 100644 (file)
@@ -77,9 +77,6 @@ public:
 
     const AtomicString& type() const { return formControlType(); }
 
-    void setName(const AtomicString& name);
-
-    virtual const AtomicString& formControlName() const OVERRIDE;
     virtual const AtomicString& formControlType() const OVERRIDE = 0;
     virtual bool isEnabledFormControl() const { return !disabled(); }
     virtual bool isReadOnlyFormControl() const { return readOnly(); }
index c6cf1f4..06da782 100644 (file)
@@ -131,7 +131,7 @@ HTMLInputElement::~HTMLInputElement()
         document()->formController()->checkedRadioButtons().removeButton(this);
 }
 
-const AtomicString& HTMLInputElement::formControlName() const
+const AtomicString& HTMLInputElement::name() const
 {
     return m_name.isNull() ? emptyAtom : m_name;
 }
index a5c1998..3502404 100644 (file)
@@ -254,6 +254,8 @@ public:
     void setHeight(unsigned);
     void setWidth(unsigned);
 
+    virtual const AtomicString& name() const OVERRIDE;
+
 protected:
     HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
     void createShadowSubtree();
@@ -276,8 +278,6 @@ private:
     virtual void aboutToUnload();
     virtual bool shouldUseInputMethod();
 
-    virtual const AtomicString& formControlName() const;
-
     virtual bool isTextFormControl() const { return isTextField(); }
 
     virtual bool canTriggerImplicitSubmission() const { return isTextField(); }
index 914fb99..fc6f25c 100644 (file)
@@ -36,7 +36,7 @@ module html {
         attribute [Reflect] boolean disabled;
         readonly attribute HTMLFormElement form;
         attribute [Reflect] DOMString keytype;
-        attribute DOMString name;
+        attribute [Reflect] DOMString name;
 
         readonly attribute DOMString type;
 
index 024e825..8c5b817 100644 (file)
@@ -501,12 +501,6 @@ bool HTMLObjectElement::appendFormData(FormDataList& encoding, bool)
     return true;
 }
 
-const AtomicString& HTMLObjectElement::formControlName() const
-{
-    const AtomicString& name = getNameAttribute();
-    return name.isNull() ? emptyAtom : name;
-}
-
 HTMLFormElement* HTMLObjectElement::virtualForm() const
 {
     return FormAssociatedElement::form();
index cc29e14..932e5bc 100644 (file)
@@ -101,8 +101,6 @@ private:
     virtual void derefFormAssociatedElement() { deref(); }
     virtual HTMLFormElement* virtualForm() const;
 
-    virtual const AtomicString& formControlName() const;
-
 #if ENABLE(MICRODATA)
     virtual String itemValueText() const OVERRIDE;
     virtual void setItemValueText(const String&, ExceptionCode&) OVERRIDE;
index d066c9f..181ec75 100644 (file)
@@ -964,7 +964,7 @@ void HTMLSelectElement::parseMultipleAttribute(const Attribute& attribute)
 
 bool HTMLSelectElement::appendFormData(FormDataList& list, bool)
 {
-    const AtomicString& name = formControlName();
+    const AtomicString& name = this->name();
     if (name.isEmpty())
         return false;
 
index b863636..6a1ae03 100644 (file)
@@ -28,7 +28,7 @@ module html {
         attribute [Reflect] boolean disabled;
         readonly attribute HTMLFormElement form;
         attribute boolean multiple;
-        attribute [TreatNullAs=NullString] DOMString name;
+        attribute [Reflect] DOMString name;
         attribute [Reflect] boolean required;
         attribute long size;
 
index f9d80b5..729e6da 100644 (file)
@@ -28,7 +28,7 @@ module html {
         attribute [Reflect] boolean disabled;
         readonly attribute HTMLFormElement form;
         attribute long maxLength setter raises(DOMException);
-        attribute [TreatNullAs=NullString] DOMString name;
+        attribute [Reflect] DOMString name;
         attribute [Reflect] DOMString placeholder;
         attribute [Reflect] boolean readOnly;
         attribute [Reflect] boolean required;