OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All |
7 * rights reserved. | 7 * rights reserved. |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
10 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 10 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 namespace blink { | 41 namespace blink { |
42 | 42 |
43 using namespace HTMLNames; | 43 using namespace HTMLNames; |
44 | 44 |
45 ShadowTreeStyleSheetCollection::ShadowTreeStyleSheetCollection( | 45 ShadowTreeStyleSheetCollection::ShadowTreeStyleSheetCollection( |
46 ShadowRoot& shadowRoot) | 46 ShadowRoot& shadowRoot) |
47 : TreeScopeStyleSheetCollection(shadowRoot) {} | 47 : TreeScopeStyleSheetCollection(shadowRoot) {} |
48 | 48 |
49 void ShadowTreeStyleSheetCollection::collectStyleSheets( | 49 void ShadowTreeStyleSheetCollection::collectStyleSheets( |
| 50 StyleEngine& engine, |
50 StyleSheetCollection& collection) { | 51 StyleSheetCollection& collection) { |
51 for (Node* n : m_styleSheetCandidateNodes) { | 52 for (Node* n : m_styleSheetCandidateNodes) { |
52 StyleSheetCandidate candidate(*n); | 53 StyleSheetCandidate candidate(*n); |
53 DCHECK(!candidate.isXSL()); | 54 DCHECK(!candidate.isXSL()); |
54 | 55 |
55 StyleSheet* sheet = candidate.sheet(); | 56 StyleSheet* sheet = candidate.sheet(); |
56 if (!sheet) | 57 if (!sheet) |
57 continue; | 58 continue; |
58 | 59 |
59 collection.appendSheetForList(sheet); | 60 collection.appendSheetForList(sheet); |
60 if (candidate.canBeActivated(nullAtom)) { | 61 if (candidate.canBeActivated(nullAtom)) |
61 CSSStyleSheet* cssSheet = toCSSStyleSheet(sheet); | 62 collection.appendActiveStyleSheet(toCSSStyleSheet(sheet)); |
62 collection.appendActiveStyleSheet(std::make_pair( | |
63 cssSheet, document().styleEngine().ruleSetForSheet(*cssSheet))); | |
64 } | |
65 } | 63 } |
66 } | 64 } |
67 | 65 |
68 void ShadowTreeStyleSheetCollection::updateActiveStyleSheets() { | 66 void ShadowTreeStyleSheetCollection::updateActiveStyleSheets( |
| 67 StyleEngine& engine, |
| 68 StyleResolverUpdateMode updateMode) { |
69 // StyleSheetCollection is GarbageCollected<>, allocate it on the heap. | 69 // StyleSheetCollection is GarbageCollected<>, allocate it on the heap. |
70 StyleSheetCollection* collection = StyleSheetCollection::create(); | 70 StyleSheetCollection* collection = StyleSheetCollection::create(); |
71 collectStyleSheets(*collection); | 71 collectStyleSheets(engine, *collection); |
72 applyActiveStyleSheetChanges(*collection); | 72 |
| 73 StyleSheetChange change; |
| 74 analyzeStyleSheetChange(updateMode, collection->activeAuthorStyleSheets(), |
| 75 change); |
| 76 |
| 77 if (StyleResolver* styleResolver = engine.resolver()) { |
| 78 if (change.styleResolverUpdateType != Additive) { |
| 79 // We should not destroy StyleResolver when we find any stylesheet update |
| 80 // in a shadow tree. In this case, we will reset rulesets created from |
| 81 // style elements in the shadow tree. |
| 82 engine.resetAuthorStyle(treeScope()); |
| 83 styleResolver->removePendingAuthorStyleSheets(m_activeAuthorStyleSheets); |
| 84 styleResolver->lazyAppendAuthorStyleSheets( |
| 85 0, collection->activeAuthorStyleSheets()); |
| 86 } else { |
| 87 styleResolver->lazyAppendAuthorStyleSheets( |
| 88 m_activeAuthorStyleSheets.size(), |
| 89 collection->activeAuthorStyleSheets()); |
| 90 } |
| 91 } |
| 92 if (change.requiresFullStyleRecalc) |
| 93 toShadowRoot(treeScope().rootNode()) |
| 94 .host() |
| 95 .setNeedsStyleRecalc(SubtreeStyleChange, |
| 96 StyleChangeReasonForTracing::create( |
| 97 StyleChangeReason::ActiveStylesheetsUpdate)); |
| 98 |
| 99 collection->swap(*this); |
| 100 collection->dispose(); |
73 } | 101 } |
74 | 102 |
75 } // namespace blink | 103 } // namespace blink |
OLD | NEW |