Index: Source/core/dom/TreeScopeAdopter.cpp |
diff --git a/Source/core/dom/TreeScopeAdopter.cpp b/Source/core/dom/TreeScopeAdopter.cpp |
index 79e17059048c5dbf33198255da7da9b516917ef7..dfef0255cbf1021499d867b452ba3bdaae2c8617 100644 |
--- a/Source/core/dom/TreeScopeAdopter.cpp |
+++ b/Source/core/dom/TreeScopeAdopter.cpp |
@@ -29,6 +29,7 @@ |
#include "core/dom/Attr.h" |
#include "core/dom/NodeRareData.h" |
#include "core/dom/NodeTraversal.h" |
+#include "core/dom/StyleEngine.h" |
#include "core/dom/shadow/ElementShadow.h" |
#include "core/dom/shadow/ShadowRoot.h" |
@@ -137,10 +138,21 @@ inline void TreeScopeAdopter::moveNodeToNewDocument(Node& node, Document& oldDoc |
rareData->nodeLists()->adoptDocument(oldDocument, newDocument); |
} |
+ ScopedStyleResolver* resolver = nullptr; |
+ if (node.isShadowRoot()) { |
+ resolver = node.treeScope().scopedStyleResolver(); |
+ // StyledScopeResolver may be null because it is lazily created. |
+ if (resolver) |
+ oldDocument.styleEngine()->removeScopedStyleResolver(resolver); |
+ } |
+ |
oldDocument.moveNodeIteratorsToNewDocument(node, newDocument); |
- if (node.isShadowRoot()) |
+ if (node.isShadowRoot()) { |
toShadowRoot(node).setDocument(newDocument); |
+ if (resolver) |
+ newDocument.styleEngine()->addScopedStyleResolver(resolver); |
+ } |
#if ENABLE(ASSERT) |
didMoveToNewDocumentWasCalled = false; |