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 r
ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r
ights reserved. |
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
8 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 8 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
9 * Copyright (C) 2013 Google Inc. All rights reserved. | 9 * Copyright (C) 2013 Google Inc. All rights reserved. |
10 * | 10 * |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 | 81 |
82 void DocumentStyleSheetCollection::collectStyleSheets(StyleEngine& engine, Docum
entStyleSheetCollector& collector) | 82 void DocumentStyleSheetCollection::collectStyleSheets(StyleEngine& engine, Docum
entStyleSheetCollector& collector) |
83 { | 83 { |
84 DCHECK_EQ(&document().styleEngine(), &engine); | 84 DCHECK_EQ(&document().styleEngine(), &engine); |
85 collector.appendActiveStyleSheets(engine.injectedAuthorStyleSheets()); | 85 collector.appendActiveStyleSheets(engine.injectedAuthorStyleSheets()); |
86 collectStyleSheetsFromCandidates(engine, collector); | 86 collectStyleSheetsFromCandidates(engine, collector); |
87 } | 87 } |
88 | 88 |
89 void DocumentStyleSheetCollection::updateActiveStyleSheets(StyleEngine& engine,
StyleResolverUpdateMode updateMode) | 89 void DocumentStyleSheetCollection::updateActiveStyleSheets(StyleEngine& engine,
StyleResolverUpdateMode updateMode) |
90 { | 90 { |
91 StyleSheetCollection collection; | 91 // StyleSheetCollection is GarbageCollected<>, allocate it on the heap. |
92 ActiveDocumentStyleSheetCollector collector(collection); | 92 StyleSheetCollection* collection = StyleSheetCollection::create(); |
| 93 ActiveDocumentStyleSheetCollector collector(*collection); |
93 collectStyleSheets(engine, collector); | 94 collectStyleSheets(engine, collector); |
94 | 95 |
95 StyleSheetChange change; | 96 StyleSheetChange change; |
96 analyzeStyleSheetChange(updateMode, collection, change); | 97 analyzeStyleSheetChange(updateMode, collection->activeAuthorStyleSheets(), c
hange); |
97 | 98 |
98 if (change.styleResolverUpdateType == Reconstruct) { | 99 if (change.styleResolverUpdateType == Reconstruct) { |
99 engine.clearMasterResolver(); | 100 engine.clearMasterResolver(); |
100 // TODO(rune@opera.com): The following depends on whether StyleRuleFontF
ace was modified or not. | 101 // TODO(rune@opera.com): The following depends on whether StyleRuleFontF
ace was modified or not. |
101 // We should only remove modified/removed @font-face rules, or @font-fac
e rules from removed | 102 // We should only remove modified/removed @font-face rules, or @font-fac
e rules from removed |
102 // stylesheets. We currently avoid clearing the font cache when we have
had an analyzed update | 103 // stylesheets. We currently avoid clearing the font cache when we have
had an analyzed update |
103 // and no @font-face rules were removed, in which case requiresFullStyle
Recalc will be false. | 104 // and no @font-face rules were removed, in which case requiresFullStyle
Recalc will be false. |
104 if (change.requiresFullStyleRecalc) | 105 if (change.requiresFullStyleRecalc) |
105 engine.clearFontCache(); | 106 engine.clearFontCache(); |
106 } else if (StyleResolver* styleResolver = engine.resolver()) { | 107 } else if (StyleResolver* styleResolver = engine.resolver()) { |
107 if (change.styleResolverUpdateType != Additive) { | 108 if (change.styleResolverUpdateType != Additive) { |
108 DCHECK_EQ(change.styleResolverUpdateType, Reset); | 109 DCHECK_EQ(change.styleResolverUpdateType, Reset); |
109 styleResolver->resetAuthorStyle(treeScope()); | 110 styleResolver->resetAuthorStyle(treeScope()); |
110 engine.removeFontFaceRules(change.fontFaceRulesToRemove); | 111 engine.removeFontFaceRules(change.fontFaceRulesToRemove); |
111 styleResolver->removePendingAuthorStyleSheets(m_activeAuthorStyleShe
ets); | 112 styleResolver->removePendingAuthorStyleSheets(m_activeAuthorStyleShe
ets); |
112 styleResolver->lazyAppendAuthorStyleSheets(0, collection.activeAutho
rStyleSheets()); | 113 styleResolver->lazyAppendAuthorStyleSheets(0, collection->activeAuth
orStyleSheets()); |
113 } else { | 114 } else { |
114 styleResolver->lazyAppendAuthorStyleSheets(m_activeAuthorStyleSheets
.size(), collection.activeAuthorStyleSheets()); | 115 styleResolver->lazyAppendAuthorStyleSheets(m_activeAuthorStyleSheets
.size(), collection->activeAuthorStyleSheets()); |
115 } | 116 } |
116 } | 117 } |
117 if (change.requiresFullStyleRecalc) | 118 if (change.requiresFullStyleRecalc) |
118 document().setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForT
racing::create(StyleChangeReason::ActiveStylesheetsUpdate)); | 119 document().setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForT
racing::create(StyleChangeReason::ActiveStylesheetsUpdate)); |
119 | 120 |
120 collection.swap(*this); | 121 collection->swap(*this); |
| 122 collection->dispose(); |
121 } | 123 } |
122 | 124 |
123 DEFINE_TRACE_WRAPPERS(DocumentStyleSheetCollection) | 125 DEFINE_TRACE_WRAPPERS(DocumentStyleSheetCollection) |
124 { | 126 { |
125 for (auto sheet : m_styleSheetsForStyleSheetList) { | 127 for (auto sheet : m_styleSheetsForStyleSheetList) { |
126 visitor->traceWrappers(sheet); | 128 visitor->traceWrappers(sheet); |
127 } | 129 } |
128 } | 130 } |
129 } // namespace blink | 131 } // namespace blink |
OLD | NEW |