Title: [137421] trunk
Revision
137421
Author
[email protected]
Date
2012-12-11 23:22:34 -0800 (Tue, 11 Dec 2012)

Log Message

[Shadow DOM] registering InsertionPoints to ShadowRoot should work out of a document.
https://bugs.webkit.org/show_bug.cgi?id=104346

Reviewed by Hajime Morita.

Source/WebCore:

We need to register InsertionPoints even if ShadowRoot is out of Document, since distribution should work
out of Document, too.

Instead of checking isInDocument(), we have to make sure InsertionPoint and an element which InsertionPoint
inserted into have the same treescope.

Tests: fast/dom/shadow/has-content-elements.html
       fast/dom/shadow/has-shadow-insertion-point.html

* html/shadow/InsertionPoint.cpp:
(WebCore::InsertionPoint::insertedInto):
(WebCore::InsertionPoint::removedFrom):

LayoutTests:

Added tests for out-of-Document version and calling insertedInto/removedFrom several times.

* fast/dom/shadow/has-content-elements-expected.txt:
* fast/dom/shadow/has-content-elements.html:
* fast/dom/shadow/has-shadow-insertion-point-expected.txt:
* fast/dom/shadow/has-shadow-insertion-point.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (137420 => 137421)


--- trunk/LayoutTests/ChangeLog	2012-12-12 07:01:03 UTC (rev 137420)
+++ trunk/LayoutTests/ChangeLog	2012-12-12 07:22:34 UTC (rev 137421)
@@ -1,3 +1,17 @@
+2012-12-11  Shinya Kawanaka  <[email protected]>
+
+        [Shadow DOM] registering InsertionPoints to ShadowRoot should work out of a document.
+        https://bugs.webkit.org/show_bug.cgi?id=104346
+
+        Reviewed by Hajime Morita.
+
+        Added tests for out-of-Document version and calling insertedInto/removedFrom several times.
+
+        * fast/dom/shadow/has-content-elements-expected.txt:
+        * fast/dom/shadow/has-content-elements.html:
+        * fast/dom/shadow/has-shadow-insertion-point-expected.txt:
+        * fast/dom/shadow/has-shadow-insertion-point.html:
+
 2012-12-11  Takashi Sakamoto  <[email protected]>
 
         Text nodes in shadow roots don't inherit style properly

Modified: trunk/LayoutTests/fast/dom/shadow/has-content-elements-expected.txt (137420 => 137421)


--- trunk/LayoutTests/fast/dom/shadow/has-content-elements-expected.txt	2012-12-12 07:01:03 UTC (rev 137420)
+++ trunk/LayoutTests/fast/dom/shadow/has-content-elements-expected.txt	2012-12-12 07:22:34 UTC (rev 137421)
@@ -1,5 +1,6 @@
-Test for Bug 100921: https://bugs.webkit.org/show_bug.cgi?id=100921 - [Shadow] ShadowRoot should be able to know the existence of <content>
+Test for Bug 100921 and 104346: HTMLContentElement should be registered correctly.
 
+In the case host is in document
 PASS internals.hasContentElement(shadowRoot) is false
 PASS internals.hasContentElement(shadowRoot) is true
 PASS internals.hasContentElement(shadowRoot) is false
@@ -17,6 +18,30 @@
 PASS internals.hasContentElement(youngerShadowRoot) is false
 PASS internals.hasContentElement(shadowRoot) is false
 PASS internals.hasContentElement(youngerShadowRoot) is true
+In the case host is not in document
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(shadowRoot) is true
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(shadowRoot) is true
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(shadowRoot) is true
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(innerShadowRoot1) is true
+PASS internals.hasContentElement(innerShadowRoot2) is true
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(shadowRoot) is true
+PASS internals.hasContentElement(youngerShadowRoot) is false
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(youngerShadowRoot) is false
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(youngerShadowRoot) is true
+insertedInto/removedFrom can be called several times.
+PASS internals.hasContentElement(shadowRoot) is false
+PASS internals.hasContentElement(shadowRoot) is true
+PASS internals.hasContentElement(shadowRoot) is true
+PASS internals.hasContentElement(shadowRoot) is true
+PASS internals.hasContentElement(shadowRoot) is false
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/dom/shadow/has-content-elements.html (137420 => 137421)


--- trunk/LayoutTests/fast/dom/shadow/has-content-elements.html	2012-12-12 07:01:03 UTC (rev 137420)
+++ trunk/LayoutTests/fast/dom/shadow/has-content-elements.html	2012-12-12 07:22:34 UTC (rev 137421)
@@ -12,66 +12,98 @@
 </head>
 <body>
 
-<p>Test for Bug 100921: <a href="" - [Shadow] ShadowRoot should be able to know the existence of &lt;content&gt;</p>
+<p>Test for Bug <a href="" and <a href="" HTMLContentElement should be registered correctly.</p>
 
-<div id="host"></div>
+<div id="wrapper"></div>
 <pre id="console"></pre>
 
 <script>
-var host = document.getElementById("host");
-var shadowRoot = host.webkitCreateShadowRoot();
+function doCommonTest() {
+    shouldBeFalse("internals.hasContentElement(shadowRoot)");
 
-shouldBeFalse("internals.hasContentElement(shadowRoot)");
+    var div = document.createElement("div");
+    div.appendChild(document.createElement("content"));
+    shadowRoot.appendChild(div);
+    shouldBeTrue("internals.hasContentElement(shadowRoot)");
+    
+    shadowRoot.removeChild(div);
+    shouldBeFalse("internals.hasContentElement(shadowRoot)");
+    
+    shadowRoot.innerHTML = "<div>No Insertion Points</div>";
+    shouldBeFalse("internals.hasContentElement(shadowRoot)");
+    
+    shadowRoot.innerHTML = "<content></content>";
+    shouldBeTrue("internals.hasContentElement(shadowRoot)");
+    
+    shadowRoot.innerHTML = "<shadow></shadow>";
+    shouldBeFalse("internals.hasContentElement(shadowRoot)");
+    
+    shadowRoot.innerHTML = "<div><div><div><content></content></div></div></div>";
+    shouldBeTrue("internals.hasContentElement(shadowRoot)");
+    
+    // Case for nested shadow subtree
+    shadowRoot.innerHTML = '<div>in shadow root</div>';
+    var innerDiv1 = shadowRoot.querySelector('div');
+    innerShadowRoot1 = innerDiv1.webkitCreateShadowRoot();
+    innerShadowRoot1.innerHTML = "<div><content></content></div>";
+    var innerDiv2 = innerShadowRoot1.querySelector('div');
+    innerShadowRoot2 = innerDiv2.webkitCreateShadowRoot();
+    innerShadowRoot2.innerHTML = "<div><content title='debugstop'></content></div>";
+    
+    shouldBeFalse("internals.hasContentElement(shadowRoot)");
+    shouldBeTrue("internals.hasContentElement(innerShadowRoot1)");
+    shouldBeTrue("internals.hasContentElement(innerShadowRoot2)");
+    shadowRoot.innerHTML = "<div></div>";
+    shouldBeFalse("internals.hasContentElement(shadowRoot)");
 
-var div = document.createElement("div");
-div.appendChild(document.createElement("content"));
-shadowRoot.appendChild(div);
-shouldBeTrue("internals.hasContentElement(shadowRoot)");
+    // Case for multiple shadow subtrees
+    shadowRoot.innerHTML = "<div><div><div><content></content></div></div></div>";
+    youngerShadowRoot = host.webkitCreateShadowRoot();
+    // Modifying older shadow root or younger shadow root doesn't affect the other.
+    shouldBeTrue("internals.hasContentElement(shadowRoot)");
+    shouldBeFalse("internals.hasContentElement(youngerShadowRoot)");
+    
+    shadowRoot.innerHTML = "<shadow></shadow>";
+    shouldBeFalse("internals.hasContentElement(shadowRoot)");
+    shouldBeFalse("internals.hasContentElement(youngerShadowRoot)");
+    
+    youngerShadowRoot.innerHTML = "<content></content>";
+    shouldBeFalse("internals.hasContentElement(shadowRoot)");
+    shouldBeTrue("internals.hasContentElement(youngerShadowRoot)");
+}
 
-shadowRoot.removeChild(div);
-shouldBeFalse("internals.hasContentElement(shadowRoot)");
+debug('In the case host is in document');
+host = document.createElement('div');
+wrapper.appendChild(host);
+shadowRoot = host.webkitCreateShadowRoot();
+doCommonTest();
+wrapper.innerHTML = "";
 
-shadowRoot.innerHTML = "<div>No Insertion Points</div>";
-shouldBeFalse("internals.hasContentElement(shadowRoot)");
+debug('In the case host is not in document');
+host = document.createElement('div');
+shadowRoot = host.webkitCreateShadowRoot();
+doCommonTest();
+wrapper.innerHTML = "";
 
-shadowRoot.innerHTML = "<content></content>";
-shouldBeTrue("internals.hasContentElement(shadowRoot)");
+debug('insertedInto/removedFrom can be called several times.');
+var host = document.createElement('div');
+var content = document.createElement('content');
+var div1 = document.createElement('div');
+var div2 = document.createElement('div');
+var shadowRoot = host.webkitCreateShadowRoot();
+div1.appendChild(content);
+shouldBeFalse('internals.hasContentElement(shadowRoot)');
+shadowRoot.appendChild(div1);
+shouldBeTrue('internals.hasContentElement(shadowRoot)');
+div2.appendChild(host);
+shouldBeTrue('internals.hasContentElement(shadowRoot)');
+div2.removeChild(host);
+shouldBeTrue('internals.hasContentElement(shadowRoot)');
+shadowRoot.removeChild(div1);
+shouldBeFalse('internals.hasContentElement(shadowRoot)');
+div1.removeChild(content);
 
-shadowRoot.innerHTML = "<shadow></shadow>";
-shouldBeFalse("internals.hasContentElement(shadowRoot)");
-
-shadowRoot.innerHTML = "<div><div><div><content></content></div></div></div>";
-shouldBeTrue("internals.hasContentElement(shadowRoot)");
-
-// Case for nested shadow subtree
-shadowRoot.innerHTML = '<div>in shadow root</div>';
-var innerDiv1 = shadowRoot.querySelector('div');
-var innerShadowRoot1 = innerDiv1.webkitCreateShadowRoot();
-innerShadowRoot1.innerHTML = "<div><content></content></div>";
-var innerDiv2 = innerShadowRoot1.querySelector('div');
-var innerShadowRoot2 = innerDiv2.webkitCreateShadowRoot();
-innerShadowRoot2.innerHTML = "<div><content title='debugstop'></content></div>";
-
-shouldBeFalse("internals.hasContentElement(shadowRoot)");
-shouldBeTrue("internals.hasContentElement(innerShadowRoot1)");
-shouldBeTrue("internals.hasContentElement(innerShadowRoot2)");
-shadowRoot.innerHTML = "<div></div>";
-shouldBeFalse("internals.hasContentElement(shadowRoot)");
-
-// Case for multiple shadow subtrees
-shadowRoot.innerHTML = "<div><div><div><content></content></div></div></div>";
-var youngerShadowRoot = host.webkitCreateShadowRoot();
-// Modifying older shadow root or younger shadow root doesn't affect the other.
-shouldBeTrue("internals.hasContentElement(shadowRoot)");
-shouldBeFalse("internals.hasContentElement(youngerShadowRoot)");
-
-shadowRoot.innerHTML = "<shadow></shadow>";
-shouldBeFalse("internals.hasContentElement(shadowRoot)");
-shouldBeFalse("internals.hasContentElement(youngerShadowRoot)");
-
-youngerShadowRoot.innerHTML = "<content></content>";
-shouldBeFalse("internals.hasContentElement(shadowRoot)");
-shouldBeTrue("internals.hasContentElement(youngerShadowRoot)");
+wrapper.innerHTML = '';
 </script>
 <script src=""
 </body>

Modified: trunk/LayoutTests/fast/dom/shadow/has-shadow-insertion-point-expected.txt (137420 => 137421)


--- trunk/LayoutTests/fast/dom/shadow/has-shadow-insertion-point-expected.txt	2012-12-12 07:01:03 UTC (rev 137420)
+++ trunk/LayoutTests/fast/dom/shadow/has-shadow-insertion-point-expected.txt	2012-12-12 07:22:34 UTC (rev 137421)
@@ -1,3 +1,6 @@
+Test for Bug 97184 and 104346 : HTMLShadowElement should be registered correctly.
+
+In the case host is in document
 PASS internals.hasShadowInsertionPoint(shadowRoot) is false
 PASS internals.hasShadowInsertionPoint(shadowRoot) is true
 PASS internals.hasShadowInsertionPoint(shadowRoot) is false
@@ -11,8 +14,27 @@
 PASS internals.hasShadowInsertionPoint(youngerShadowRoot) is false
 PASS internals.hasShadowInsertionPoint(shadowRoot) is false
 PASS internals.hasShadowInsertionPoint(youngerShadowRoot) is true
+In the case host is not in document
+PASS internals.hasShadowInsertionPoint(shadowRoot) is false
+PASS internals.hasShadowInsertionPoint(shadowRoot) is true
+PASS internals.hasShadowInsertionPoint(shadowRoot) is false
+PASS internals.hasShadowInsertionPoint(shadowRoot) is false
+PASS internals.hasShadowInsertionPoint(shadowRoot) is false
+PASS internals.hasShadowInsertionPoint(shadowRoot) is true
+PASS internals.hasShadowInsertionPoint(shadowRoot) is true
+PASS internals.hasShadowInsertionPoint(shadowRoot) is true
+PASS internals.hasShadowInsertionPoint(youngerShadowRoot) is false
+PASS internals.hasShadowInsertionPoint(shadowRoot) is false
+PASS internals.hasShadowInsertionPoint(youngerShadowRoot) is false
+PASS internals.hasShadowInsertionPoint(shadowRoot) is false
+PASS internals.hasShadowInsertionPoint(youngerShadowRoot) is true
+insertedInto/removedFrom can be called several times.
+PASS internals.hasShadowInsertionPoint(shadowRoot) is false
+PASS internals.hasShadowInsertionPoint(shadowRoot) is true
+PASS internals.hasShadowInsertionPoint(shadowRoot) is true
+PASS internals.hasShadowInsertionPoint(shadowRoot) is true
+PASS internals.hasShadowInsertionPoint(shadowRoot) is false
 PASS successfullyParsed is true
 
 TEST COMPLETE
-Test for Bug 97184: https://bugs.webkit.org/show_bug.cgi?id=97184 - [Shadow] ShadowRoot should know whether <shadow> in its treescope
 

Modified: trunk/LayoutTests/fast/dom/shadow/has-shadow-insertion-point.html (137420 => 137421)


--- trunk/LayoutTests/fast/dom/shadow/has-shadow-insertion-point.html	2012-12-12 07:01:03 UTC (rev 137420)
+++ trunk/LayoutTests/fast/dom/shadow/has-shadow-insertion-point.html	2012-12-12 07:22:34 UTC (rev 137421)
@@ -11,49 +11,81 @@
 </script>
 </head>
 <body>
-  <span>Test for Bug 97184: <a href="" -
-    [Shadow] ShadowRoot should know whether &lt;shadow&gt; in its treescope
-  </span>
-  <div id="host"></div>
 
+<p>Test for Bug <a href="" and <a href="" : HTMLShadowElement should be registered correctly.</p>
+
+<div id="wrapper"></div>
+<pre id="console"></pre>
+
 <script>
-var host = document.getElementById("host");
-var shadowRoot = host.webkitCreateShadowRoot();
+function doTest() {
+    shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
 
-shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
+    var div = document.createElement("div");
+    div.appendChild(document.createElement("shadow"));
+    shadowRoot.appendChild(div);
+    shouldBeTrue("internals.hasShadowInsertionPoint(shadowRoot)");
 
-var div = document.createElement("div");
-div.appendChild(document.createElement("shadow"));
-shadowRoot.appendChild(div);
-shouldBeTrue("internals.hasShadowInsertionPoint(shadowRoot)");
+    shadowRoot.removeChild(div);
+    shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
 
-shadowRoot.removeChild(div);
-shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
+    shadowRoot.innerHTML = "<div>No Insertion Points</div>";
+    shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
 
-shadowRoot.innerHTML = "<div>No Insertion Points</div>";
-shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
+    shadowRoot.innerHTML = "<content></content>";
+    shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
 
-shadowRoot.innerHTML = "<content></content>";
-shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
+    shadowRoot.innerHTML = "<shadow></shadow>";
+    shouldBeTrue("internals.hasShadowInsertionPoint(shadowRoot)");
 
-shadowRoot.innerHTML = "<shadow></shadow>";
-shouldBeTrue("internals.hasShadowInsertionPoint(shadowRoot)");
+    shadowRoot.innerHTML = "<div><div><div><shadow></shadow></div></div></div>";
+    shouldBeTrue("internals.hasShadowInsertionPoint(shadowRoot)");
 
-shadowRoot.innerHTML = "<div><div><div><shadow></shadow></div></div></div>";
-shouldBeTrue("internals.hasShadowInsertionPoint(shadowRoot)");
+    youngerShadowRoot = host.webkitCreateShadowRoot(host);
+    // Modifying older shadow root or younger shadow root doesn't affect the other.
+    shouldBeTrue("internals.hasShadowInsertionPoint(shadowRoot)");
+    shouldBeFalse("internals.hasShadowInsertionPoint(youngerShadowRoot)");
 
-var youngerShadowRoot = host.webkitCreateShadowRoot();
-// Modifying older shadow root or younger shadow root doesn't affect the other.
-shouldBeTrue("internals.hasShadowInsertionPoint(shadowRoot)");
-shouldBeFalse("internals.hasShadowInsertionPoint(youngerShadowRoot)");
+    shadowRoot.innerHTML = "<content></content>";
+    shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
+    shouldBeFalse("internals.hasShadowInsertionPoint(youngerShadowRoot)");
 
-shadowRoot.innerHTML = "<content></content>";
-shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
-shouldBeFalse("internals.hasShadowInsertionPoint(youngerShadowRoot)");
+    youngerShadowRoot.innerHTML = "<shadow></shadow>";
+    shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
+    shouldBeTrue("internals.hasShadowInsertionPoint(youngerShadowRoot)");
+}
 
-youngerShadowRoot.innerHTML = "<shadow></shadow>";
-shouldBeFalse("internals.hasShadowInsertionPoint(shadowRoot)");
-shouldBeTrue("internals.hasShadowInsertionPoint(youngerShadowRoot)");
+debug('In the case host is in document');
+host = document.createElement('div');
+wrapper.appendChild(host);
+shadowRoot = host.webkitCreateShadowRoot();
+doTest();
+wrapper.innerHTML = "";
+
+debug('In the case host is not in document');
+host = document.createElement('div');
+shadowRoot = host.webkitCreateShadowRoot();
+doTest();
+wrapper.innerHTML = "";
+
+debug('insertedInto/removedFrom can be called several times.');
+var host = document.createElement('div');
+var shadow = document.createElement('shadow');
+var div1 = document.createElement('div');
+var div2 = document.createElement('div');
+var shadowRoot = host.webkitCreateShadowRoot();
+div1.appendChild(shadow);
+shouldBeFalse('internals.hasShadowInsertionPoint(shadowRoot)');
+shadowRoot.appendChild(div1);
+shouldBeTrue('internals.hasShadowInsertionPoint(shadowRoot)');
+div2.appendChild(host);
+shouldBeTrue('internals.hasShadowInsertionPoint(shadowRoot)');
+div2.removeChild(host);
+shouldBeTrue('internals.hasShadowInsertionPoint(shadowRoot)');
+shadowRoot.removeChild(div1);
+shouldBeFalse('internals.hasShadowInsertionPoint(shadowRoot)');
+div1.removeChild(shadow);
+
 </script>
 <script src=""
 </body>

Modified: trunk/Source/WebCore/ChangeLog (137420 => 137421)


--- trunk/Source/WebCore/ChangeLog	2012-12-12 07:01:03 UTC (rev 137420)
+++ trunk/Source/WebCore/ChangeLog	2012-12-12 07:22:34 UTC (rev 137421)
@@ -1,3 +1,23 @@
+2012-12-11  Shinya Kawanaka  <[email protected]>
+
+        [Shadow DOM] registering InsertionPoints to ShadowRoot should work out of a document.
+        https://bugs.webkit.org/show_bug.cgi?id=104346
+
+        Reviewed by Hajime Morita.
+
+        We need to register InsertionPoints even if ShadowRoot is out of Document, since distribution should work
+        out of Document, too.
+
+        Instead of checking isInDocument(), we have to make sure InsertionPoint and an element which InsertionPoint
+        inserted into have the same treescope.
+
+        Tests: fast/dom/shadow/has-content-elements.html
+               fast/dom/shadow/has-shadow-insertion-point.html
+
+        * html/shadow/InsertionPoint.cpp:
+        (WebCore::InsertionPoint::insertedInto):
+        (WebCore::InsertionPoint::removedFrom):
+
 2012-12-11  Takashi Sakamoto  <[email protected]>
 
         Text nodes in shadow roots don't inherit style properly

Modified: trunk/Source/WebCore/html/shadow/InsertionPoint.cpp (137420 => 137421)


--- trunk/Source/WebCore/html/shadow/InsertionPoint.cpp	2012-12-12 07:01:03 UTC (rev 137420)
+++ trunk/Source/WebCore/html/shadow/InsertionPoint.cpp	2012-12-12 07:22:34 UTC (rev 137421)
@@ -123,40 +123,38 @@
 Node::InsertionNotificationRequest InsertionPoint::insertedInto(ContainerNode* insertionPoint)
 {
     HTMLElement::insertedInto(insertionPoint);
-    if (insertionPoint->inDocument()) {
-        if (ShadowRoot* root = containingShadowRoot()) {
-            root->owner()->setValidityUndetermined();
-            root->owner()->invalidateDistribution();
-            if (isActive() && !m_registeredWithShadowRoot) {
-                m_registeredWithShadowRoot = true;
-                root->registerInsertionPoint(this);
-            }
+
+    if (ShadowRoot* root = containingShadowRoot()) {
+        root->owner()->setValidityUndetermined();
+        root->owner()->invalidateDistribution();
+        if (isActive() && !m_registeredWithShadowRoot && insertionPoint->treeScope()->rootNode() == root) {
+            m_registeredWithShadowRoot = true;
+            root->registerInsertionPoint(this);
         }
     }
 
+
     return InsertionDone;
 }
 
 void InsertionPoint::removedFrom(ContainerNode* insertionPoint)
 {
-    if (insertionPoint->inDocument()) {
-        ShadowRoot* root = containingShadowRoot();
-        if (!root)
-            root = insertionPoint->containingShadowRoot();
+    ShadowRoot* root = containingShadowRoot();
+    if (!root)
+        root = insertionPoint->containingShadowRoot();
 
-        // host can be null when removedFrom() is called from ElementShadow destructor.
-        ElementShadow* rootOwner = root ? root->owner() : 0;
-        if (rootOwner)
-            rootOwner->invalidateDistribution();
+    // host can be null when removedFrom() is called from ElementShadow destructor.
+    ElementShadow* rootOwner = root ? root->owner() : 0;
+    if (rootOwner)
+        rootOwner->invalidateDistribution();
 
-        // Since this insertion point is no longer visible from the shadow subtree, it need to clean itself up.
-        clearDistribution();
+    // Since this insertion point is no longer visible from the shadow subtree, it need to clean itself up.
+    clearDistribution();
 
-        if (m_registeredWithShadowRoot) {
-            m_registeredWithShadowRoot = false;
-            if (root)
-                root->unregisterInsertionPoint(this);
-        }
+    if (m_registeredWithShadowRoot && insertionPoint->treeScope()->rootNode() == root) {
+        ASSERT(root);
+        m_registeredWithShadowRoot = false;
+        root->unregisterInsertionPoint(this);
     }
 
     HTMLElement::removedFrom(insertionPoint);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to