Title: [150711] trunk/Source/WebCore
Revision
150711
Author
[email protected]
Date
2013-05-26 02:43:22 -0700 (Sun, 26 May 2013)

Log Message

Move some form control things from Element to HTMLFormControlElement.
<http://webkit.org/b/116779>

Reviewed by Antti Koivisto.

The following methods sit better on HTMLFormControlElement than on Element:

    - formControlType()
    - wasChangedSinceLastFormControlChangeEvent()
    - setChangedSinceLastFormControlChangeEvent()
    - dispatchFormControlChangeEvent()

Moved them, and devirtualized as much as possible.

* dom/Document.cpp:
(WebCore::Document::setFocusedNode):

    Check if the old focus target is an Element before (possibly) dispatching a change event.

* dom/Element.cpp:
* dom/Element.h:

    Removed some stub methods that were only used by HTMLFormControlElement subclasses.

* html/HTMLFormControlElement.cpp:
* html/HTMLFormControlElement.h:
(WebCore::isHTMLFormControlElement):
(WebCore::toHTMLFormControlElement):

    Add toHTMLFormControlElement() helper with ASSERT_WITH_SECURITY_IMPLICATION.

* html/HTMLTextFormControlElement.h:

    Sprinkle OVERRIDE.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (150710 => 150711)


--- trunk/Source/WebCore/ChangeLog	2013-05-26 09:39:24 UTC (rev 150710)
+++ trunk/Source/WebCore/ChangeLog	2013-05-26 09:43:22 UTC (rev 150711)
@@ -1,3 +1,40 @@
+2013-05-26  Andreas Kling  <[email protected]>
+
+        Move some form control things from Element to HTMLFormControlElement.
+        <http://webkit.org/b/116779>
+
+        Reviewed by Antti Koivisto.
+
+        The following methods sit better on HTMLFormControlElement than on Element:
+
+            - formControlType()
+            - wasChangedSinceLastFormControlChangeEvent()
+            - setChangedSinceLastFormControlChangeEvent()
+            - dispatchFormControlChangeEvent()
+
+        Moved them, and devirtualized as much as possible.
+
+        * dom/Document.cpp:
+        (WebCore::Document::setFocusedNode):
+
+            Check if the old focus target is an Element before (possibly) dispatching a change event.
+
+        * dom/Element.cpp:
+        * dom/Element.h:
+
+            Removed some stub methods that were only used by HTMLFormControlElement subclasses.
+
+        * html/HTMLFormControlElement.cpp:
+        * html/HTMLFormControlElement.h:
+        (WebCore::isHTMLFormControlElement):
+        (WebCore::toHTMLFormControlElement):
+
+            Add toHTMLFormControlElement() helper with ASSERT_WITH_SECURITY_IMPLICATION.
+
+        * html/HTMLTextFormControlElement.h:
+
+            Sprinkle OVERRIDE.
+
 2013-05-25  Andreas Kling  <[email protected]>
 
         Move Node::supportsFocus() to Element.

Modified: trunk/Source/WebCore/dom/Document.cpp (150710 => 150711)


--- trunk/Source/WebCore/dom/Document.cpp	2013-05-26 09:39:24 UTC (rev 150710)
+++ trunk/Source/WebCore/dom/Document.cpp	2013-05-26 09:43:22 UTC (rev 150711)
@@ -92,6 +92,7 @@
 #include "HTMLCollection.h"
 #include "HTMLDocument.h"
 #include "HTMLElementFactory.h"
+#include "HTMLFormControlElement.h"
 #include "HTMLFrameOwnerElement.h"
 #include "HTMLHeadElement.h"
 #include "HTMLIFrameElement.h"
@@ -3345,11 +3346,11 @@
         if (oldFocusedNode->isElementNode())
             toElement(oldFocusedNode.get())->setFocus(false);
 
-        // Dispatch a change event for text fields or textareas that have been edited
-        if (oldFocusedNode->isElementNode()) {
-            Element* element = toElement(oldFocusedNode.get());
-            if (element->wasChangedSinceLastFormControlChangeEvent())
-                element->dispatchFormControlChangeEvent();
+        // Dispatch a change event for form control elements that have been edited.
+        if (oldFocusedNode->isElementNode() && toElement(oldFocusedNode.get())->isFormControlElement()) {
+            HTMLFormControlElement* formControlElement = toHTMLFormControlElement(oldFocusedNode.get());
+            if (formControlElement->wasChangedSinceLastFormControlChangeEvent())
+                formControlElement->dispatchFormControlChangeEvent();
         }
 
         // Dispatch the blur event and let the node do any other blur related activities (important for text fields)

Modified: trunk/Source/WebCore/dom/Element.cpp (150710 => 150711)


--- trunk/Source/WebCore/dom/Element.cpp	2013-05-26 09:39:24 UTC (rev 150710)
+++ trunk/Source/WebCore/dom/Element.cpp	2013-05-26 09:43:22 UTC (rev 150711)
@@ -1208,15 +1208,6 @@
 }
 #endif
 
-bool Element::wasChangedSinceLastFormControlChangeEvent() const
-{
-    return false;
-}
-
-void Element::setChangedSinceLastFormControlChangeEvent(bool)
-{
-}
-
 bool Element::isDisabledFormControl() const
 {
 #if ENABLE(DIALOG_ELEMENT)

Modified: trunk/Source/WebCore/dom/Element.h (150710 => 150711)


--- trunk/Source/WebCore/dom/Element.h	2013-05-26 09:39:24 UTC (rev 150710)
+++ trunk/Source/WebCore/dom/Element.h	2013-05-26 09:43:22 UTC (rev 150711)
@@ -574,12 +574,6 @@
 
     virtual bool canContainRangeEndPoint() const { return true; }
 
-    virtual const AtomicString& formControlType() const { return nullAtom; }
-
-    virtual bool wasChangedSinceLastFormControlChangeEvent() const;
-    virtual void setChangedSinceLastFormControlChangeEvent(bool);
-    virtual void dispatchFormControlChangeEvent() { }
-
     // Used for disabled form elements; if true, prevents mouse events from being dispatched
     // to event listeners, and prevents DOMActivate events from being sent at all.
     virtual bool isDisabledFormControl() const;

Modified: trunk/Source/WebCore/html/HTMLFormControlElement.cpp (150710 => 150711)


--- trunk/Source/WebCore/html/HTMLFormControlElement.cpp	2013-05-26 09:39:24 UTC (rev 150710)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.cpp	2013-05-26 09:43:22 UTC (rev 150711)
@@ -252,11 +252,6 @@
     FormAssociatedElement::removedFrom(insertionPoint);
 }
 
-bool HTMLFormControlElement::wasChangedSinceLastFormControlChangeEvent() const
-{
-    return m_wasChangedSinceLastFormControlChangeEvent;
-}
-
 void HTMLFormControlElement::setChangedSinceLastFormControlChangeEvent(bool changed)
 {
     m_wasChangedSinceLastFormControlChangeEvent = changed;

Modified: trunk/Source/WebCore/html/HTMLFormControlElement.h (150710 => 150711)


--- trunk/Source/WebCore/html/HTMLFormControlElement.h	2013-05-26 09:39:24 UTC (rev 150710)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.h	2013-05-26 09:43:22 UTC (rev 150711)
@@ -58,11 +58,11 @@
     virtual bool formControlValueMatchesRenderer() const { return m_valueMatchesRenderer; }
     virtual void setFormControlValueMatchesRenderer(bool b) { m_valueMatchesRenderer = b; }
 
-    virtual bool wasChangedSinceLastFormControlChangeEvent() const;
-    virtual void setChangedSinceLastFormControlChangeEvent(bool);
+    bool wasChangedSinceLastFormControlChangeEvent() const { return m_wasChangedSinceLastFormControlChangeEvent; }
+    void setChangedSinceLastFormControlChangeEvent(bool);
 
     virtual void dispatchFormControlChangeEvent();
-    virtual void dispatchFormControlInputEvent();
+    void dispatchFormControlInputEvent();
 
     virtual bool isDisabledFormControl() const OVERRIDE;
 
@@ -73,7 +73,7 @@
 
     const AtomicString& type() const { return formControlType(); }
 
-    virtual const AtomicString& formControlType() const OVERRIDE = 0;
+    virtual const AtomicString& formControlType() const = 0;
 
     virtual bool canTriggerImplicitSubmission() const { return false; }
 
@@ -169,6 +169,20 @@
     bool m_hasAutofocused : 1;
 };
 
+inline bool isHTMLFormControlElement(const Node* node)
+{
+    return node->isElementNode() && toElement(node)->isFormControlElement();
+}
+
+inline HTMLFormControlElement* toHTMLFormControlElement(Node* node)
+{
+    ASSERT_WITH_SECURITY_IMPLICATION(!node || isHTMLFormControlElement(node));
+    return static_cast<HTMLFormControlElement*>(node);
+}
+
+// This will catch anyone doing an unnecessary cast.
+void toHTMLFormControlElement(const HTMLFormControlElement*);
+
 } // namespace
 
 #endif

Modified: trunk/Source/WebCore/html/HTMLTextFormControlElement.h (150710 => 150711)


--- trunk/Source/WebCore/html/HTMLTextFormControlElement.h	2013-05-26 09:39:24 UTC (rev 150710)
+++ trunk/Source/WebCore/html/HTMLTextFormControlElement.h	2013-05-26 09:43:22 UTC (rev 150711)
@@ -71,7 +71,7 @@
     PassRefPtr<Range> selection() const;
     String selectedText() const;
 
-    virtual void dispatchFormControlChangeEvent();
+    virtual void dispatchFormControlChangeEvent() OVERRIDE FINAL;
 
     virtual int maxLength() const = 0;
     virtual String value() const = 0;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to