| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2012 Google Inc. All rights reserved. | 2  * Copyright (C) 2012 Google Inc. All rights reserved. | 
| 3  * | 3  * | 
| 4  * Redistribution and use in source and binary forms, with or without | 4  * Redistribution and use in source and binary forms, with or without | 
| 5  * modification, are permitted provided that the following conditions are | 5  * modification, are permitted provided that the following conditions are | 
| 6  * met: | 6  * met: | 
| 7  * | 7  * | 
| 8  *     * Redistributions of source code must retain the above copyright | 8  *     * Redistributions of source code must retain the above copyright | 
| 9  * notice, this list of conditions and the following disclaimer. | 9  * notice, this list of conditions and the following disclaimer. | 
| 10  *     * Neither the name of Google Inc. nor the names of its | 10  *     * Neither the name of Google Inc. nor the names of its | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 57 | 57 | 
| 58 ShadowRoot* ElementShadow::addShadowRoot(Element* shadowHost, ShadowRoot::Shadow
     RootType type) | 58 ShadowRoot* ElementShadow::addShadowRoot(Element* shadowHost, ShadowRoot::Shadow
     RootType type) | 
| 59 { | 59 { | 
| 60     RefPtr<ShadowRoot> shadowRoot = ShadowRoot::create(&shadowHost->document(), 
     type); | 60     RefPtr<ShadowRoot> shadowRoot = ShadowRoot::create(&shadowHost->document(), 
     type); | 
| 61 | 61 | 
| 62     shadowRoot->setParentOrShadowHostNode(shadowHost); | 62     shadowRoot->setParentOrShadowHostNode(shadowHost); | 
| 63     shadowRoot->setParentTreeScope(&shadowHost->treeScope()); | 63     shadowRoot->setParentTreeScope(&shadowHost->treeScope()); | 
| 64     m_shadowRoots.push(shadowRoot.get()); | 64     m_shadowRoots.push(shadowRoot.get()); | 
| 65     ChildNodeInsertionNotifier(shadowHost).notify(shadowRoot.get()); | 65     ChildNodeInsertionNotifier(shadowHost).notify(shadowRoot.get()); | 
| 66     setNeedsDistributionRecalc(); | 66     setNeedsDistributionRecalc(); | 
| 67     shadowHost->lazyReattachIfAttached(); | 67     shadowHost->scheduleRenderTreeRecreationIfAttached(); | 
| 68 | 68 | 
| 69     // addShadowRoot() affects apply-author-styles. However, we know that the yo
     ungest shadow root has not had any children yet. | 69     // addShadowRoot() affects apply-author-styles. However, we know that the yo
     ungest shadow root has not had any children yet. | 
| 70     // The youngest shadow root's apply-author-styles is default (false). So we 
     can just set m_applyAuthorStyles false. | 70     // The youngest shadow root's apply-author-styles is default (false). So we 
     can just set m_applyAuthorStyles false. | 
| 71     m_applyAuthorStyles = false; | 71     m_applyAuthorStyles = false; | 
| 72 | 72 | 
| 73     shadowHost->didAddShadowRoot(*shadowRoot); | 73     shadowHost->didAddShadowRoot(*shadowRoot); | 
| 74     InspectorInstrumentation::didPushShadowRoot(shadowHost, shadowRoot.get()); | 74     InspectorInstrumentation::didPushShadowRoot(shadowHost, shadowRoot.get()); | 
| 75 | 75 | 
| 76     return shadowRoot.get(); | 76     return shadowRoot.get(); | 
| 77 } | 77 } | 
| 78 | 78 | 
| 79 void ElementShadow::removeAllShadowRoots() | 79 void ElementShadow::removeAllShadowRoots() | 
| 80 { | 80 { | 
| 81     // Dont protect this ref count. | 81     // Dont protect this ref count. | 
| 82     Element* shadowHost = host(); | 82     Element* shadowHost = host(); | 
| 83 | 83 | 
| 84     while (RefPtr<ShadowRoot> oldRoot = m_shadowRoots.head()) { | 84     while (RefPtr<ShadowRoot> oldRoot = m_shadowRoots.head()) { | 
| 85         InspectorInstrumentation::willPopShadowRoot(shadowHost, oldRoot.get()); | 85         InspectorInstrumentation::willPopShadowRoot(shadowHost, oldRoot.get()); | 
| 86         shadowHost->document().removeFocusedElementOfSubtree(oldRoot.get()); | 86         shadowHost->document().removeFocusedElementOfSubtree(oldRoot.get()); | 
| 87 | 87 | 
| 88         if (oldRoot->attached()) | 88         if (oldRoot->attached()) | 
| 89             oldRoot->detach(); | 89             oldRoot->destroyRenderTree(); | 
| 90 | 90 | 
| 91         m_shadowRoots.removeHead(); | 91         m_shadowRoots.removeHead(); | 
| 92         oldRoot->setParentOrShadowHostNode(0); | 92         oldRoot->setParentOrShadowHostNode(0); | 
| 93         oldRoot->setParentTreeScope(&shadowHost->document()); | 93         oldRoot->setParentTreeScope(&shadowHost->document()); | 
| 94         oldRoot->setPrev(0); | 94         oldRoot->setPrev(0); | 
| 95         oldRoot->setNext(0); | 95         oldRoot->setNext(0); | 
| 96         ChildNodeRemovalNotifier(shadowHost).notify(oldRoot.get()); | 96         ChildNodeRemovalNotifier(shadowHost).notify(oldRoot.get()); | 
| 97     } | 97     } | 
| 98 } | 98 } | 
| 99 | 99 | 
| 100 void ElementShadow::attach(const Node::AttachContext& context) | 100 void ElementShadow::createRenderTree(const Node::AttachContext& context) | 
| 101 { | 101 { | 
| 102     Node::AttachContext childrenContext(context); | 102     Node::AttachContext childrenContext(context); | 
| 103     childrenContext.resolvedStyle = 0; | 103     childrenContext.resolvedStyle = 0; | 
| 104 | 104 | 
| 105     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
     Root()) { | 105     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
     Root()) { | 
| 106         if (!root->attached()) | 106         if (!root->attached()) | 
| 107             root->attach(childrenContext); | 107             root->createRenderTree(childrenContext); | 
| 108     } | 108     } | 
| 109 } | 109 } | 
| 110 | 110 | 
| 111 void ElementShadow::detach(const Node::AttachContext& context) | 111 void ElementShadow::destroyRenderTree(const Node::AttachContext& context) | 
| 112 { | 112 { | 
| 113     Node::AttachContext childrenContext(context); | 113     Node::AttachContext childrenContext(context); | 
| 114     childrenContext.resolvedStyle = 0; | 114     childrenContext.resolvedStyle = 0; | 
| 115 | 115 | 
| 116     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
     Root()) { | 116     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
     Root()) { | 
| 117         if (root->attached()) | 117         if (root->attached()) | 
| 118             root->detach(childrenContext); | 118             root->destroyRenderTree(childrenContext); | 
| 119     } | 119     } | 
| 120 } | 120 } | 
| 121 | 121 | 
| 122 void ElementShadow::removeAllEventListeners() | 122 void ElementShadow::removeAllEventListeners() | 
| 123 { | 123 { | 
| 124     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
     Root()) { | 124     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
     Root()) { | 
| 125         for (Node* node = root; node; node = NodeTraversal::next(node)) | 125         for (Node* node = root; node; node = NodeTraversal::next(node)) | 
| 126             node->removeAllEventListeners(); | 126             node->removeAllEventListeners(); | 
| 127     } | 127     } | 
| 128 } | 128 } | 
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 244         } | 244         } | 
| 245         if (ElementShadow* shadow = shadowOfParentForDistribution(shadowElement)
     ) | 245         if (ElementShadow* shadow = shadowOfParentForDistribution(shadowElement)
     ) | 
| 246             shadow->setNeedsDistributionRecalc(); | 246             shadow->setNeedsDistributionRecalc(); | 
| 247     } | 247     } | 
| 248 | 248 | 
| 249     // Detach all nodes that were not distributed and have a renderer. | 249     // Detach all nodes that were not distributed and have a renderer. | 
| 250     for (size_t i = 0; i < pool.size(); ++i) { | 250     for (size_t i = 0; i < pool.size(); ++i) { | 
| 251         if (distributed[i]) | 251         if (distributed[i]) | 
| 252             continue; | 252             continue; | 
| 253         if (pool[i]->renderer()) | 253         if (pool[i]->renderer()) | 
| 254             pool[i]->lazyReattachIfAttached(); | 254             pool[i]->scheduleRenderTreeRecreationIfAttached(); | 
| 255     } | 255     } | 
| 256 } | 256 } | 
| 257 | 257 | 
| 258 void ElementShadow::distributeSelectionsTo(InsertionPoint* insertionPoint, const
      Vector<Node*>& pool, Vector<bool>& distributed) | 258 void ElementShadow::distributeSelectionsTo(InsertionPoint* insertionPoint, const
      Vector<Node*>& pool, Vector<bool>& distributed) | 
| 259 { | 259 { | 
| 260     ContentDistribution distribution; | 260     ContentDistribution distribution; | 
| 261 | 261 | 
| 262     for (size_t i = 0; i < pool.size(); ++i) { | 262     for (size_t i = 0; i < pool.size(); ++i) { | 
| 263         if (distributed[i]) | 263         if (distributed[i]) | 
| 264             continue; | 264             continue; | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 350 | 350 | 
| 351 void ElementShadow::clearDistribution() | 351 void ElementShadow::clearDistribution() | 
| 352 { | 352 { | 
| 353     m_nodeToInsertionPoint.clear(); | 353     m_nodeToInsertionPoint.clear(); | 
| 354 | 354 | 
| 355     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
     Root()) | 355     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
     Root()) | 
| 356         root->setInsertionPoint(0); | 356         root->setInsertionPoint(0); | 
| 357 } | 357 } | 
| 358 | 358 | 
| 359 } // namespace | 359 } // namespace | 
| OLD | NEW | 
|---|