Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(873)

Side by Side Diff: Source/core/dom/TreeScopeStyleSheetCollection.cpp

Issue 192473003: Move CSSRuleList to the garbage collected heap (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: ager feedback Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/TreeScopeStyleSheetCollection.h ('k') | Source/core/frame/DOMWindow.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 } 68 }
69 69
70 void TreeScopeStyleSheetCollection::removeStyleSheetCandidateNode(Node* node, Co ntainerNode* scopingNode) 70 void TreeScopeStyleSheetCollection::removeStyleSheetCandidateNode(Node* node, Co ntainerNode* scopingNode)
71 { 71 {
72 m_styleSheetCandidateNodes.remove(node); 72 m_styleSheetCandidateNodes.remove(node);
73 73
74 if (!isTreeScopeRoot(scopingNode)) 74 if (!isTreeScopeRoot(scopingNode))
75 m_scopingNodesForStyleScoped.remove(scopingNode); 75 m_scopingNodesForStyleScoped.remove(scopingNode);
76 } 76 }
77 77
78 TreeScopeStyleSheetCollection::StyleResolverUpdateType TreeScopeStyleSheetCollec tion::compareStyleSheets(const Vector<RefPtr<CSSStyleSheet> >& oldStyleSheets, c onst Vector<RefPtr<CSSStyleSheet> >& newStylesheets, WillBeHeapVector<RawPtrWill BeMember<StyleSheetContents> >& addedSheets) 78 TreeScopeStyleSheetCollection::StyleResolverUpdateType TreeScopeStyleSheetCollec tion::compareStyleSheets(const WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet > >& oldStyleSheets, const WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet> >& newStylesheets, WillBeHeapVector<RawPtrWillBeMember<StyleSheetContents> >& adde dSheets)
79 { 79 {
80 unsigned newStyleSheetCount = newStylesheets.size(); 80 unsigned newStyleSheetCount = newStylesheets.size();
81 unsigned oldStyleSheetCount = oldStyleSheets.size(); 81 unsigned oldStyleSheetCount = oldStyleSheets.size();
82 ASSERT(newStyleSheetCount >= oldStyleSheetCount); 82 ASSERT(newStyleSheetCount >= oldStyleSheetCount);
83 83
84 if (!newStyleSheetCount) 84 if (!newStyleSheetCount)
85 return Reconstruct; 85 return Reconstruct;
86 86
87 unsigned newIndex = 0; 87 unsigned newIndex = 0;
88 for (unsigned oldIndex = 0; oldIndex < oldStyleSheetCount; ++oldIndex) { 88 for (unsigned oldIndex = 0; oldIndex < oldStyleSheetCount; ++oldIndex) {
89 while (oldStyleSheets[oldIndex] != newStylesheets[newIndex]) { 89 while (oldStyleSheets[oldIndex] != newStylesheets[newIndex]) {
90 addedSheets.append(newStylesheets[newIndex]->contents()); 90 addedSheets.append(newStylesheets[newIndex]->contents());
91 if (++newIndex == newStyleSheetCount) 91 if (++newIndex == newStyleSheetCount)
92 return Reconstruct; 92 return Reconstruct;
93 } 93 }
94 if (++newIndex == newStyleSheetCount) 94 if (++newIndex == newStyleSheetCount)
95 return Reconstruct; 95 return Reconstruct;
96 } 96 }
97 bool hasInsertions = !addedSheets.isEmpty(); 97 bool hasInsertions = !addedSheets.isEmpty();
98 while (newIndex < newStyleSheetCount) { 98 while (newIndex < newStyleSheetCount) {
99 addedSheets.append(newStylesheets[newIndex]->contents()); 99 addedSheets.append(newStylesheets[newIndex]->contents());
100 ++newIndex; 100 ++newIndex;
101 } 101 }
102 // If all new sheets were added at the end of the list we can just add them to existing StyleResolver. 102 // If all new sheets were added at the end of the list we can just add them to existing StyleResolver.
103 // If there were insertions we need to re-add all the stylesheets so rules a re ordered correctly. 103 // If there were insertions we need to re-add all the stylesheets so rules a re ordered correctly.
104 return hasInsertions ? Reset : Additive; 104 return hasInsertions ? Reset : Additive;
105 } 105 }
106 106
107 bool TreeScopeStyleSheetCollection::activeLoadingStyleSheetLoaded(const Vector<R efPtr<CSSStyleSheet> >& newStyleSheets) 107 bool TreeScopeStyleSheetCollection::activeLoadingStyleSheetLoaded(const WillBeHe apVector<RefPtrWillBeMember<CSSStyleSheet> >& newStyleSheets)
108 { 108 {
109 // StyleSheets of <style> elements that @import stylesheets are active but l oading. We need to trigger a full recalc when such loads are done. 109 // StyleSheets of <style> elements that @import stylesheets are active but l oading. We need to trigger a full recalc when such loads are done.
110 bool hasActiveLoadingStylesheet = false; 110 bool hasActiveLoadingStylesheet = false;
111 unsigned newStylesheetCount = newStyleSheets.size(); 111 unsigned newStylesheetCount = newStyleSheets.size();
112 for (unsigned i = 0; i < newStylesheetCount; ++i) { 112 for (unsigned i = 0; i < newStylesheetCount; ++i) {
113 if (newStyleSheets[i]->isLoading()) 113 if (newStyleSheets[i]->isLoading())
114 hasActiveLoadingStylesheet = true; 114 hasActiveLoadingStylesheet = true;
115 } 115 }
116 if (m_hadActiveLoadingStylesheet && !hasActiveLoadingStylesheet) { 116 if (m_hadActiveLoadingStylesheet && !hasActiveLoadingStylesheet) {
117 m_hadActiveLoadingStylesheet = false; 117 m_hadActiveLoadingStylesheet = false;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 for (DocumentOrderedList::iterator it = styleScopedScopingNodes->begin() ; it != styleScopedScopingNodes->end(); ++it) 197 for (DocumentOrderedList::iterator it = styleScopedScopingNodes->begin() ; it != styleScopedScopingNodes->end(); ++it)
198 styleResolver->resetAuthorStyle(toContainerNode(*it)); 198 styleResolver->resetAuthorStyle(toContainerNode(*it));
199 } 199 }
200 if (ListHashSet<Node*, 4>* removedNodes = scopingNodesRemoved()) { 200 if (ListHashSet<Node*, 4>* removedNodes = scopingNodesRemoved()) {
201 for (ListHashSet<Node*, 4>::iterator it = removedNodes->begin(); it != r emovedNodes->end(); ++it) 201 for (ListHashSet<Node*, 4>::iterator it = removedNodes->begin(); it != r emovedNodes->end(); ++it)
202 styleResolver->resetAuthorStyle(toContainerNode(*it)); 202 styleResolver->resetAuthorStyle(toContainerNode(*it));
203 } 203 }
204 styleResolver->resetAuthorStyle(toContainerNode(&m_treeScope.rootNode())); 204 styleResolver->resetAuthorStyle(toContainerNode(&m_treeScope.rootNode()));
205 } 205 }
206 206
207 static bool styleSheetsUseRemUnits(const Vector<RefPtr<CSSStyleSheet> >& sheets) 207 static bool styleSheetsUseRemUnits(const WillBeHeapVector<RefPtrWillBeMember<CSS StyleSheet> >& sheets)
208 { 208 {
209 for (unsigned i = 0; i < sheets.size(); ++i) { 209 for (unsigned i = 0; i < sheets.size(); ++i) {
210 if (sheets[i]->contents()->usesRemUnits()) 210 if (sheets[i]->contents()->usesRemUnits())
211 return true; 211 return true;
212 } 212 }
213 return false; 213 return false;
214 } 214 }
215 215
216 void TreeScopeStyleSheetCollection::updateUsesRemUnits() 216 void TreeScopeStyleSheetCollection::updateUsesRemUnits()
217 { 217 {
218 m_usesRemUnits = styleSheetsUseRemUnits(m_activeAuthorStyleSheets); 218 m_usesRemUnits = styleSheetsUseRemUnits(m_activeAuthorStyleSheets);
219 } 219 }
220 220
221 } 221 }
OLDNEW
« no previous file with comments | « Source/core/dom/TreeScopeStyleSheetCollection.h ('k') | Source/core/frame/DOMWindow.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698