Chromium Code Reviews| 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. |
|
esprehn
2014/11/13 19:24:06
We probably need to clear the resolver and recompu
kochi
2014/11/14 05:38:39
Looks like this only happens on special case (e.g.
|
| + 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; |