Introduce Node::shadowHost()
authortkent@chromium.org <tkent@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 20 Jul 2012 05:54:31 +0000 (05:54 +0000)
committertkent@chromium.org <tkent@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 20 Jul 2012 05:54:31 +0000 (05:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=91814

Reviewed by Hajime Morita.

Introduce Node::shadowHost(), which return the host element, or 0.
Node::shadowAncestorNode() is used to obtain a shadow host. However it
is confusing because it returns 'this' if this is not in a shadow tree.

Replaces one callsite of shadowAncestorNode() with shadowHost().

No behavior change.

* dom/Node.cpp:
(WebCore::Node::shadowHost): Added.
* dom/Node.h:
(Node): Declare shadowHost(), and add a comment to shadowAncestorNode().
* html/shadow/CalendarPickerElement.cpp:
(WebCore::CalendarPickerElement::hostInput):
Replace shadowAncestorNode() with shaodwHost().

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

Source/WebCore/ChangeLog
Source/WebCore/dom/Node.cpp
Source/WebCore/dom/Node.h
Source/WebCore/html/shadow/CalendarPickerElement.cpp

index 72ed97d..7c40481 100644 (file)
@@ -1,5 +1,28 @@
 2012-07-19  Kent Tamura  <tkent@chromium.org>
 
+        Introduce Node::shadowHost()
+        https://bugs.webkit.org/show_bug.cgi?id=91814
+
+        Reviewed by Hajime Morita.
+
+        Introduce Node::shadowHost(), which return the host element, or 0.
+        Node::shadowAncestorNode() is used to obtain a shadow host. However it
+        is confusing because it returns 'this' if this is not in a shadow tree.
+
+        Replaces one callsite of shadowAncestorNode() with shadowHost().
+
+        No behavior change.
+
+        * dom/Node.cpp:
+        (WebCore::Node::shadowHost): Added.
+        * dom/Node.h:
+        (Node): Declare shadowHost(), and add a comment to shadowAncestorNode().
+        * html/shadow/CalendarPickerElement.cpp:
+        (WebCore::CalendarPickerElement::hostInput):
+        Replace shadowAncestorNode() with shaodwHost().
+
+2012-07-19  Kent Tamura  <tkent@chromium.org>
+
         Form state restore: Need to identify a form by its content
         https://bugs.webkit.org/show_bug.cgi?id=91209
 
index 8fd6d5c..e8707ab 100644 (file)
@@ -1394,6 +1394,12 @@ bool Node::canStartSelection() const
     return parentOrHostNode() ? parentOrHostNode()->canStartSelection() : true;
 }
 
+Element* Node::shadowHost() const
+{
+    if (ShadowRoot* root = shadowRoot())
+        return root->host();
+    return 0;
+}
 
 Node* Node::shadowAncestorNode() const
 {
index c9a28f4..7c48512 100644 (file)
@@ -223,6 +223,10 @@ public:
     bool hasAttrList() const { return getFlag(HasAttrListFlag); }
     bool hasCustomCallbacks() const { return getFlag(HasCustomCallbacksFlag); }
 
+    // If this node is in a shadow tree, returns its shadow host. Otherwise, returns 0.
+    Element* shadowHost() const;
+    // If this node is in a shadow tree, returns its shadow host. Otherwise, returns this.
+    // Deprecated. Should use shadowHost() and check the return value.
     Node* shadowAncestorNode() const;
     ShadowRoot* shadowRoot() const;
     ShadowRoot* youngestShadowRoot() const;
index b4176b2..ea9fbb7 100644 (file)
@@ -81,9 +81,11 @@ RenderObject* CalendarPickerElement::createRenderer(RenderArena* arena, RenderSt
 
 inline HTMLInputElement* CalendarPickerElement::hostInput()
 {
-    ASSERT(shadowAncestorNode());
-    ASSERT(shadowAncestorNode()->hasTagName(inputTag));
-    return static_cast<HTMLInputElement*>(shadowAncestorNode());
+    // JavaScript code can't create CalendarPickerElement objects. This is
+    // always in shadow of <input>.
+    ASSERT(shadowHost());
+    ASSERT(shadowHost()->hasTagName(inputTag));
+    return static_cast<HTMLInputElement*>(shadowHost());
 }
 
 void CalendarPickerElement::defaultEventHandler(Event* event)