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

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

Issue 14987004: Switching CSS Variables over to RuntimeEnabledFeatures (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 7 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/css/CSSParser.h ('k') | Source/core/css/CSSParserMode.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) 2003 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>
6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. 8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
9 * Copyright (C) 2012 Intel Corporation. All rights reserved. 9 * Copyright (C) 2012 Intel Corporation. All rights reserved.
10 * 10 *
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 return strictContext; 237 return strictContext;
238 } 238 }
239 239
240 CSSParserContext::CSSParserContext(CSSParserMode mode, const KURL& baseURL) 240 CSSParserContext::CSSParserContext(CSSParserMode mode, const KURL& baseURL)
241 : baseURL(baseURL) 241 : baseURL(baseURL)
242 , mode(mode) 242 , mode(mode)
243 , isHTMLDocument(false) 243 , isHTMLDocument(false)
244 , isCSSCustomFilterEnabled(false) 244 , isCSSCustomFilterEnabled(false)
245 , isCSSStickyPositionEnabled(false) 245 , isCSSStickyPositionEnabled(false)
246 , isCSSGridLayoutEnabled(false) 246 , isCSSGridLayoutEnabled(false)
247 , isCSSVariablesEnabled(false)
248 , needsSiteSpecificQuirks(false) 247 , needsSiteSpecificQuirks(false)
249 { 248 {
250 } 249 }
251 250
252 CSSParserContext::CSSParserContext(Document* document, const KURL& baseURL, cons t String& charset) 251 CSSParserContext::CSSParserContext(Document* document, const KURL& baseURL, cons t String& charset)
253 : baseURL(baseURL.isNull() ? document->baseURL() : baseURL) 252 : baseURL(baseURL.isNull() ? document->baseURL() : baseURL)
254 , charset(charset) 253 , charset(charset)
255 , mode(document->inQuirksMode() ? CSSQuirksMode : CSSStrictMode) 254 , mode(document->inQuirksMode() ? CSSQuirksMode : CSSStrictMode)
256 , isHTMLDocument(document->isHTMLDocument()) 255 , isHTMLDocument(document->isHTMLDocument())
257 , isCSSCustomFilterEnabled(document->settings() ? document->settings()->isCS SCustomFilterEnabled() : false) 256 , isCSSCustomFilterEnabled(document->settings() ? document->settings()->isCS SCustomFilterEnabled() : false)
258 , isCSSStickyPositionEnabled(document->cssStickyPositionEnabled()) 257 , isCSSStickyPositionEnabled(document->cssStickyPositionEnabled())
259 , isCSSGridLayoutEnabled(document->cssGridLayoutEnabled()) 258 , isCSSGridLayoutEnabled(document->cssGridLayoutEnabled())
260 , isCSSVariablesEnabled(document->settings() ? document->settings()->cssVari ablesEnabled() : false)
261 , needsSiteSpecificQuirks(document->settings() ? document->settings()->needs SiteSpecificQuirks() : false) 259 , needsSiteSpecificQuirks(document->settings() ? document->settings()->needs SiteSpecificQuirks() : false)
262 { 260 {
263 } 261 }
264 262
265 bool operator==(const CSSParserContext& a, const CSSParserContext& b) 263 bool operator==(const CSSParserContext& a, const CSSParserContext& b)
266 { 264 {
267 return a.baseURL == b.baseURL 265 return a.baseURL == b.baseURL
268 && a.charset == b.charset 266 && a.charset == b.charset
269 && a.mode == b.mode 267 && a.mode == b.mode
270 && a.isHTMLDocument == b.isHTMLDocument 268 && a.isHTMLDocument == b.isHTMLDocument
271 && a.isCSSCustomFilterEnabled == b.isCSSCustomFilterEnabled 269 && a.isCSSCustomFilterEnabled == b.isCSSCustomFilterEnabled
272 && a.isCSSStickyPositionEnabled == b.isCSSStickyPositionEnabled 270 && a.isCSSStickyPositionEnabled == b.isCSSStickyPositionEnabled
273 && a.isCSSGridLayoutEnabled == b.isCSSGridLayoutEnabled 271 && a.isCSSGridLayoutEnabled == b.isCSSGridLayoutEnabled
274 && a.isCSSVariablesEnabled == b.isCSSVariablesEnabled
275 && a.needsSiteSpecificQuirks == b.needsSiteSpecificQuirks; 272 && a.needsSiteSpecificQuirks == b.needsSiteSpecificQuirks;
276 } 273 }
277 274
278 CSSParser::CSSParser(const CSSParserContext& context) 275 CSSParser::CSSParser(const CSSParserContext& context)
279 : m_context(context) 276 : m_context(context)
280 , m_important(false) 277 , m_important(false)
281 , m_id(CSSPropertyInvalid) 278 , m_id(CSSPropertyInvalid)
282 , m_styleSheet(0) 279 , m_styleSheet(0)
283 , m_supportsCondition(false) 280 , m_supportsCondition(false)
284 , m_selectorListForParseSelector(0) 281 , m_selectorListForParseSelector(0)
(...skipping 2820 matching lines...) Expand 10 before | Expand all | Expand 10 after
3105 // Add in clip values when we hit the corresponding origin property. 3102 // Add in clip values when we hit the corresponding origin property.
3106 if (properties[i] == CSSPropertyBackgroundOrigin && !foundClip) 3103 if (properties[i] == CSSPropertyBackgroundOrigin && !foundClip)
3107 addProperty(CSSPropertyBackgroundClip, clipValue.release(), importan t); 3104 addProperty(CSSPropertyBackgroundClip, clipValue.release(), importan t);
3108 else if (properties[i] == CSSPropertyWebkitMaskOrigin && !foundClip) 3105 else if (properties[i] == CSSPropertyWebkitMaskOrigin && !foundClip)
3109 addProperty(CSSPropertyWebkitMaskClip, clipValue.release(), importan t); 3106 addProperty(CSSPropertyWebkitMaskClip, clipValue.release(), importan t);
3110 } 3107 }
3111 3108
3112 return true; 3109 return true;
3113 } 3110 }
3114 3111
3115 bool CSSParser::cssVariablesEnabled() const
3116 {
3117 return m_context.isCSSVariablesEnabled;
3118 }
3119
3120 void CSSParser::storeVariableDeclaration(const CSSParserString& name, PassOwnPtr <CSSParserValueList> value, bool important) 3112 void CSSParser::storeVariableDeclaration(const CSSParserString& name, PassOwnPtr <CSSParserValueList> value, bool important)
3121 { 3113 {
3122 // When CSSGrammar.y encounters an invalid declaration it passes null for th e CSSParserValueList, just bail. 3114 // When CSSGrammar.y encounters an invalid declaration it passes null for th e CSSParserValueList, just bail.
3123 if (!value) 3115 if (!value)
3124 return; 3116 return;
3125 3117
3126 static const unsigned prefixLength = sizeof("-webkit-var-") - 1; 3118 static const unsigned prefixLength = sizeof("-webkit-var-") - 1;
3127 3119
3128 ASSERT(name.length() > prefixLength); 3120 ASSERT(name.length() > prefixLength);
3129 AtomicString variableName = name.lowerSubstring(prefixLength, name.length() - prefixLength); 3121 AtomicString variableName = name.lowerSubstring(prefixLength, name.length() - prefixLength);
(...skipping 6890 matching lines...) Expand 10 before | Expand all | Expand 10 after
10020 { 10012 {
10021 CharacterType* name = tokenStart<CharacterType>(); 10013 CharacterType* name = tokenStart<CharacterType>();
10022 10014
10023 if (length == 11) { 10015 if (length == 11) {
10024 if (isASCIIAlphaCaselessEqual(name[10], 'y') && isEqualToCSSIdentifier(n ame + 1, "webkit-an")) 10016 if (isASCIIAlphaCaselessEqual(name[10], 'y') && isEqualToCSSIdentifier(n ame + 1, "webkit-an"))
10025 m_token = ANYFUNCTION; 10017 m_token = ANYFUNCTION;
10026 else if (isASCIIAlphaCaselessEqual(name[10], 'n') && isEqualToCSSIdentif ier(name + 1, "webkit-mi")) 10018 else if (isASCIIAlphaCaselessEqual(name[10], 'n') && isEqualToCSSIdentif ier(name + 1, "webkit-mi"))
10027 m_token = MINFUNCTION; 10019 m_token = MINFUNCTION;
10028 else if (isASCIIAlphaCaselessEqual(name[10], 'x') && isEqualToCSSIdentif ier(name + 1, "webkit-ma")) 10020 else if (isASCIIAlphaCaselessEqual(name[10], 'x') && isEqualToCSSIdentif ier(name + 1, "webkit-ma"))
10029 m_token = MAXFUNCTION; 10021 m_token = MAXFUNCTION;
10030 else if (cssVariablesEnabled() && isASCIIAlphaCaselessEqual(name[10], 'r ') && isEqualToCSSIdentifier(name + 1, "webkit-va")) 10022 else if (RuntimeEnabledFeatures::cssVariablesEnabled() && isASCIIAlphaCa selessEqual(name[10], 'r') && isEqualToCSSIdentifier(name + 1, "webkit-va"))
10031 m_token = VARFUNCTION; 10023 m_token = VARFUNCTION;
10032 } else if (length == 12 && isEqualToCSSIdentifier(name + 1, "webkit-calc")) 10024 } else if (length == 12 && isEqualToCSSIdentifier(name + 1, "webkit-calc"))
10033 m_token = CALCFUNCTION; 10025 m_token = CALCFUNCTION;
10034 else if (length == 19 && isEqualToCSSIdentifier(name + 1, "webkit-distribute d")) 10026 else if (length == 19 && isEqualToCSSIdentifier(name + 1, "webkit-distribute d"))
10035 m_token = DISTRIBUTEDFUNCTION; 10027 m_token = DISTRIBUTEDFUNCTION;
10036 } 10028 }
10037 10029
10038 template <typename CharacterType> 10030 template <typename CharacterType>
10039 inline void CSSParser::detectAtToken(int length, bool hasEscape) 10031 inline void CSSParser::detectAtToken(int length, bool hasEscape)
10040 { 10032 {
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
10455 m_token = dotSeen ? FLOATTOKEN : INTEGER; 10447 m_token = dotSeen ? FLOATTOKEN : INTEGER;
10456 break; 10448 break;
10457 } 10449 }
10458 10450
10459 case CharacterDash: 10451 case CharacterDash:
10460 if (isIdentifierStartAfterDash(currentCharacter<SrcCharacterType>())) { 10452 if (isIdentifierStartAfterDash(currentCharacter<SrcCharacterType>())) {
10461 --currentCharacter<SrcCharacterType>(); 10453 --currentCharacter<SrcCharacterType>();
10462 parseIdentifier(result, resultString, hasEscape); 10454 parseIdentifier(result, resultString, hasEscape);
10463 m_token = IDENT; 10455 m_token = IDENT;
10464 10456
10465 if (cssVariablesEnabled() && isEqualToCSSIdentifier(tokenStart<SrcCh aracterType>() + 1, "webkit-var") && tokenStart<SrcCharacterType>()[11] == '-' & & isIdentifierStartAfterDash(tokenStart<SrcCharacterType>() + 12)) 10457 if (RuntimeEnabledFeatures::cssVariablesEnabled() && isEqualToCSSIde ntifier(tokenStart<SrcCharacterType>() + 1, "webkit-var") && tokenStart<SrcChara cterType>()[11] == '-' && isIdentifierStartAfterDash(tokenStart<SrcCharacterType >() + 12))
10466 m_token = VAR_DEFINITION; 10458 m_token = VAR_DEFINITION;
10467 else if (*currentCharacter<SrcCharacterType>() == '(') { 10459 else if (*currentCharacter<SrcCharacterType>() == '(') {
10468 m_token = FUNCTION; 10460 m_token = FUNCTION;
10469 if (!hasEscape) 10461 if (!hasEscape)
10470 detectDashToken<SrcCharacterType>(result - tokenStart<SrcCha racterType>()); 10462 detectDashToken<SrcCharacterType>(result - tokenStart<SrcCha racterType>());
10471 ++currentCharacter<SrcCharacterType>(); 10463 ++currentCharacter<SrcCharacterType>();
10472 ++result; 10464 ++result;
10473 } else if (UNLIKELY(m_parsingMode == NthChildMode) && !hasEscape && isASCIIAlphaCaselessEqual(tokenStart<SrcCharacterType>()[1], 'n')) { 10465 } else if (UNLIKELY(m_parsingMode == NthChildMode) && !hasEscape && isASCIIAlphaCaselessEqual(tokenStart<SrcCharacterType>()[1], 'n')) {
10474 if (result - tokenStart<SrcCharacterType>() == 2) { 10466 if (result - tokenStart<SrcCharacterType>() == 2) {
10475 // String "-n" is IDENT but "-n+1" is NTH. 10467 // String "-n" is IDENT but "-n+1" is NTH.
(...skipping 1201 matching lines...) Expand 10 before | Expand all | Expand 10 after
11677 { 11669 {
11678 // The tokenizer checks for the construct of an+b. 11670 // The tokenizer checks for the construct of an+b.
11679 // However, since the {ident} rule precedes the {nth} rule, some of those 11671 // However, since the {ident} rule precedes the {nth} rule, some of those
11680 // tokens are identified as string literal. Furthermore we need to accept 11672 // tokens are identified as string literal. Furthermore we need to accept
11681 // "odd" and "even" which does not match to an+b. 11673 // "odd" and "even" which does not match to an+b.
11682 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") 11674 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even")
11683 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); 11675 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n");
11684 } 11676 }
11685 11677
11686 } 11678 }
OLDNEW
« no previous file with comments | « Source/core/css/CSSParser.h ('k') | Source/core/css/CSSParserMode.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698