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

Side by Side Diff: Source/core/css/StyleSheetContents.cpp

Issue 756313002: Remove CSSCharsetRule (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: tests Created 6 years 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/css/StyleSheetContents.h ('k') | Source/core/css/parser/CSSGrammar.y » ('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 * (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2006, 2007, 2012 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2006, 2007, 2012 Apple Inc. All rights reserved.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 , m_hasFontFaceRule(false) 68 , m_hasFontFaceRule(false)
69 , m_hasMediaQueries(false) 69 , m_hasMediaQueries(false)
70 , m_hasSingleOwnerDocument(true) 70 , m_hasSingleOwnerDocument(true)
71 , m_parserContext(context) 71 , m_parserContext(context)
72 { 72 {
73 } 73 }
74 74
75 StyleSheetContents::StyleSheetContents(const StyleSheetContents& o) 75 StyleSheetContents::StyleSheetContents(const StyleSheetContents& o)
76 : m_ownerRule(nullptr) 76 : m_ownerRule(nullptr)
77 , m_originalURL(o.m_originalURL) 77 , m_originalURL(o.m_originalURL)
78 , m_encodingFromCharsetRule(o.m_encodingFromCharsetRule)
79 , m_importRules(o.m_importRules.size()) 78 , m_importRules(o.m_importRules.size())
80 , m_childRules(o.m_childRules.size()) 79 , m_childRules(o.m_childRules.size())
81 , m_namespaces(o.m_namespaces) 80 , m_namespaces(o.m_namespaces)
82 , m_hasSyntacticallyValidCSSHeader(o.m_hasSyntacticallyValidCSSHeader) 81 , m_hasSyntacticallyValidCSSHeader(o.m_hasSyntacticallyValidCSSHeader)
83 , m_didLoadErrorOccur(false) 82 , m_didLoadErrorOccur(false)
84 , m_usesRemUnits(o.m_usesRemUnits) 83 , m_usesRemUnits(o.m_usesRemUnits)
85 , m_isMutable(false) 84 , m_isMutable(false)
86 , m_isInMemoryCache(false) 85 , m_isInMemoryCache(false)
87 , m_hasFontFaceRule(o.m_hasFontFaceRule) 86 , m_hasFontFaceRule(o.m_hasFontFaceRule)
88 , m_hasMediaQueries(o.m_hasMediaQueries) 87 , m_hasMediaQueries(o.m_hasMediaQueries)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 return false; 138 return false;
140 // If the header is valid we are not going to need to check the SecurityOrig in. 139 // If the header is valid we are not going to need to check the SecurityOrig in.
141 // FIXME: Valid mime type avoids the check too. 140 // FIXME: Valid mime type avoids the check too.
142 if (!m_hasSyntacticallyValidCSSHeader) 141 if (!m_hasSyntacticallyValidCSSHeader)
143 return false; 142 return false;
144 return true; 143 return true;
145 } 144 }
146 145
147 void StyleSheetContents::parserAppendRule(PassRefPtrWillBeRawPtr<StyleRuleBase> rule) 146 void StyleSheetContents::parserAppendRule(PassRefPtrWillBeRawPtr<StyleRuleBase> rule)
148 { 147 {
149 ASSERT(!rule->isCharsetRule());
150 if (rule->isImportRule()) { 148 if (rule->isImportRule()) {
151 // Parser enforces that @import rules come before anything else except @ charset. 149 // Parser enforces that @import rules come before anything else
152 ASSERT(m_childRules.isEmpty()); 150 ASSERT(m_childRules.isEmpty());
153 StyleRuleImport* importRule = toStyleRuleImport(rule.get()); 151 StyleRuleImport* importRule = toStyleRuleImport(rule.get());
154 if (importRule->mediaQueries()) 152 if (importRule->mediaQueries())
155 setHasMediaQueries(); 153 setHasMediaQueries();
156 m_importRules.append(importRule); 154 m_importRules.append(importRule);
157 m_importRules.last()->setParentStyleSheet(this); 155 m_importRules.last()->setParentStyleSheet(this);
158 m_importRules.last()->requestStyleSheet(); 156 m_importRules.last()->requestStyleSheet();
159 return; 157 return;
160 } 158 }
161 159
(...skipping 10 matching lines...) Expand all
172 { 170 {
173 m_hasMediaQueries = true; 171 m_hasMediaQueries = true;
174 if (parentStyleSheet()) 172 if (parentStyleSheet())
175 parentStyleSheet()->setHasMediaQueries(); 173 parentStyleSheet()->setHasMediaQueries();
176 } 174 }
177 175
178 StyleRuleBase* StyleSheetContents::ruleAt(unsigned index) const 176 StyleRuleBase* StyleSheetContents::ruleAt(unsigned index) const
179 { 177 {
180 ASSERT_WITH_SECURITY_IMPLICATION(index < ruleCount()); 178 ASSERT_WITH_SECURITY_IMPLICATION(index < ruleCount());
181 179
182 unsigned childVectorIndex = index; 180 if (index < m_importRules.size())
183 if (hasCharsetRule()) { 181 return m_importRules[index].get();
184 if (index == 0)
185 return 0;
186 --childVectorIndex;
187 }
188 if (childVectorIndex < m_importRules.size())
189 return m_importRules[childVectorIndex].get();
190 182
191 childVectorIndex -= m_importRules.size(); 183 index -= m_importRules.size();
192 return m_childRules[childVectorIndex].get(); 184 return m_childRules[index].get();
193 } 185 }
194 186
195 unsigned StyleSheetContents::ruleCount() const 187 unsigned StyleSheetContents::ruleCount() const
196 { 188 {
197 unsigned result = 0; 189 return m_importRules.size() + m_childRules.size();
198 result += hasCharsetRule() ? 1 : 0;
199 result += m_importRules.size();
200 result += m_childRules.size();
201 return result;
202 }
203
204 void StyleSheetContents::clearCharsetRule()
205 {
206 m_encodingFromCharsetRule = String();
207 } 190 }
208 191
209 void StyleSheetContents::clearRules() 192 void StyleSheetContents::clearRules()
210 { 193 {
211 for (unsigned i = 0; i < m_importRules.size(); ++i) { 194 for (unsigned i = 0; i < m_importRules.size(); ++i) {
212 ASSERT(m_importRules.at(i)->parentStyleSheet() == this); 195 ASSERT(m_importRules.at(i)->parentStyleSheet() == this);
213 m_importRules[i]->clearParentStyleSheet(); 196 m_importRules[i]->clearParentStyleSheet();
214 } 197 }
215 m_importRules.clear(); 198 m_importRules.clear();
216 m_childRules.clear(); 199 m_childRules.clear();
217 clearCharsetRule();
218 }
219
220 void StyleSheetContents::parserSetEncodingFromCharsetRule(const String& encoding )
221 {
222 // Parser enforces that there is ever only one @charset.
223 ASSERT(m_encodingFromCharsetRule.isNull());
224 m_encodingFromCharsetRule = encoding;
225 } 200 }
226 201
227 bool StyleSheetContents::wrapperInsertRule(PassRefPtrWillBeRawPtr<StyleRuleBase> rule, unsigned index) 202 bool StyleSheetContents::wrapperInsertRule(PassRefPtrWillBeRawPtr<StyleRuleBase> rule, unsigned index)
228 { 203 {
229 ASSERT(m_isMutable); 204 ASSERT(m_isMutable);
230 ASSERT_WITH_SECURITY_IMPLICATION(index <= ruleCount()); 205 ASSERT_WITH_SECURITY_IMPLICATION(index <= ruleCount());
231 // Parser::parseRule doesn't currently allow @charset so we don't need to de al with it.
232 ASSERT(!rule->isCharsetRule());
233 206
234 unsigned childVectorIndex = index; 207 if (index < m_importRules.size() || (index == m_importRules.size() && rule-> isImportRule())) {
235 // m_childRules does not contain @charset which is always in index 0 if it e xists.
236 if (hasCharsetRule()) {
237 if (childVectorIndex == 0) {
238 // Nothing can be inserted before @charset.
239 return false;
240 }
241 --childVectorIndex;
242 }
243
244 if (childVectorIndex < m_importRules.size() || (childVectorIndex == m_import Rules.size() && rule->isImportRule())) {
245 // Inserting non-import rule before @import is not allowed. 208 // Inserting non-import rule before @import is not allowed.
246 if (!rule->isImportRule()) 209 if (!rule->isImportRule())
247 return false; 210 return false;
248 211
249 StyleRuleImport* importRule = toStyleRuleImport(rule.get()); 212 StyleRuleImport* importRule = toStyleRuleImport(rule.get());
250 if (importRule->mediaQueries()) 213 if (importRule->mediaQueries())
251 setHasMediaQueries(); 214 setHasMediaQueries();
252 215
253 m_importRules.insert(childVectorIndex, importRule); 216 m_importRules.insert(index, importRule);
254 m_importRules[childVectorIndex]->setParentStyleSheet(this); 217 m_importRules[index]->setParentStyleSheet(this);
255 m_importRules[childVectorIndex]->requestStyleSheet(); 218 m_importRules[index]->requestStyleSheet();
256 // FIXME: Stylesheet doesn't actually change meaningfully before the imp orted sheets are loaded. 219 // FIXME: Stylesheet doesn't actually change meaningfully before the imp orted sheets are loaded.
257 return true; 220 return true;
258 } 221 }
259 // Inserting @import rule after a non-import rule is not allowed. 222 // Inserting @import rule after a non-import rule is not allowed.
260 if (rule->isImportRule()) 223 if (rule->isImportRule())
261 return false; 224 return false;
262 225
263 if (rule->isMediaRule()) 226 if (rule->isMediaRule())
264 setHasMediaQueries(); 227 setHasMediaQueries();
265 228
266 childVectorIndex -= m_importRules.size(); 229 index -= m_importRules.size();
267 230
268 if (rule->isFontFaceRule()) 231 if (rule->isFontFaceRule())
269 setHasFontFaceRule(true); 232 setHasFontFaceRule(true);
270 m_childRules.insert(childVectorIndex, rule); 233 m_childRules.insert(index, rule);
271 return true; 234 return true;
272 } 235 }
273 236
274 void StyleSheetContents::wrapperDeleteRule(unsigned index) 237 void StyleSheetContents::wrapperDeleteRule(unsigned index)
275 { 238 {
276 ASSERT(m_isMutable); 239 ASSERT(m_isMutable);
277 ASSERT_WITH_SECURITY_IMPLICATION(index < ruleCount()); 240 ASSERT_WITH_SECURITY_IMPLICATION(index < ruleCount());
278 241
279 unsigned childVectorIndex = index; 242 if (index < m_importRules.size()) {
280 if (hasCharsetRule()) { 243 m_importRules[index]->clearParentStyleSheet();
281 if (childVectorIndex == 0) { 244 if (m_importRules[index]->isFontFaceRule())
282 clearCharsetRule(); 245 notifyRemoveFontFaceRule(toStyleRuleFontFace(m_importRules[index].ge t()));
283 return; 246 m_importRules.remove(index);
284 }
285 --childVectorIndex;
286 }
287 if (childVectorIndex < m_importRules.size()) {
288 m_importRules[childVectorIndex]->clearParentStyleSheet();
289 if (m_importRules[childVectorIndex]->isFontFaceRule())
290 notifyRemoveFontFaceRule(toStyleRuleFontFace(m_importRules[childVect orIndex].get()));
291 m_importRules.remove(childVectorIndex);
292 return; 247 return;
293 } 248 }
294 childVectorIndex -= m_importRules.size(); 249 index -= m_importRules.size();
295 250
296 if (m_childRules[childVectorIndex]->isFontFaceRule()) 251 if (m_childRules[index]->isFontFaceRule())
297 notifyRemoveFontFaceRule(toStyleRuleFontFace(m_childRules[childVectorInd ex].get())); 252 notifyRemoveFontFaceRule(toStyleRuleFontFace(m_childRules[index].get())) ;
298 m_childRules.remove(childVectorIndex); 253 m_childRules.remove(index);
299 } 254 }
300 255
301 void StyleSheetContents::parserAddNamespace(const AtomicString& prefix, const At omicString& uri) 256 void StyleSheetContents::parserAddNamespace(const AtomicString& prefix, const At omicString& uri)
302 { 257 {
303 if (uri.isNull() || prefix.isNull()) 258 if (uri.isNull() || prefix.isNull())
304 return; 259 return;
305 PrefixNamespaceURIMap::AddResult result = m_namespaces.add(prefix, uri); 260 PrefixNamespaceURIMap::AddResult result = m_namespaces.add(prefix, uri);
306 if (result.isNewEntry) 261 if (result.isNewEntry)
307 return; 262 return;
308 result.storedValue->value = uri; 263 result.storedValue->value = uri;
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 visitor->trace(m_ownerRule); 644 visitor->trace(m_ownerRule);
690 visitor->trace(m_importRules); 645 visitor->trace(m_importRules);
691 visitor->trace(m_childRules); 646 visitor->trace(m_childRules);
692 visitor->trace(m_loadingClients); 647 visitor->trace(m_loadingClients);
693 visitor->trace(m_completedClients); 648 visitor->trace(m_completedClients);
694 visitor->trace(m_ruleSet); 649 visitor->trace(m_ruleSet);
695 #endif 650 #endif
696 } 651 }
697 652
698 } 653 }
OLDNEW
« no previous file with comments | « Source/core/css/StyleSheetContents.h ('k') | Source/core/css/parser/CSSGrammar.y » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698