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

Side by Side Diff: Source/core/css/parser/BisonCSSParser-in.cpp

Issue 170603003: Use nullptr_t for RefPtr, PassRefPtr and RawPtr. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Final rebase Created 6 years, 10 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/StyleRuleImport.cpp ('k') | Source/core/css/resolver/AnimatedStyleBuilder.cpp » ('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 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 m_logErrors = logErrors && sheet->singleOwnerDocument() && !sheet->baseURL() .isEmpty() && sheet->singleOwnerDocument()->frameHost(); 234 m_logErrors = logErrors && sheet->singleOwnerDocument() && !sheet->baseURL() .isEmpty() && sheet->singleOwnerDocument()->frameHost();
235 m_ignoreErrors = false; 235 m_ignoreErrors = false;
236 m_tokenizer.m_lineNumber = 0; 236 m_tokenizer.m_lineNumber = 0;
237 m_startPosition = startPosition; 237 m_startPosition = startPosition;
238 m_source = &string; 238 m_source = &string;
239 m_tokenizer.m_internal = false; 239 m_tokenizer.m_internal = false;
240 setupParser("", string, ""); 240 setupParser("", string, "");
241 cssyyparse(this); 241 cssyyparse(this);
242 sheet->shrinkToFit(); 242 sheet->shrinkToFit();
243 m_source = 0; 243 m_source = 0;
244 m_rule = 0; 244 m_rule = nullptr;
245 m_lineEndings.clear(); 245 m_lineEndings.clear();
246 m_ignoreErrors = false; 246 m_ignoreErrors = false;
247 m_logErrors = false; 247 m_logErrors = false;
248 m_tokenizer.m_internal = true; 248 m_tokenizer.m_internal = true;
249 } 249 }
250 250
251 PassRefPtr<StyleRuleBase> BisonCSSParser::parseRule(StyleSheetContents* sheet, c onst String& string) 251 PassRefPtr<StyleRuleBase> BisonCSSParser::parseRule(StyleSheetContents* sheet, c onst String& string)
252 { 252 {
253 setStyleSheet(sheet); 253 setStyleSheet(sheet);
254 m_allowNamespaceDeclarations = false; 254 m_allowNamespaceDeclarations = false;
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 } 974 }
975 return true; 975 return true;
976 } 976 }
977 977
978 template <typename CharType> 978 template <typename CharType>
979 static PassRefPtrWillBeRawPtr<CSSTransformValue> parseTranslateTransformValue(Ch arType*& pos, CharType* end) 979 static PassRefPtrWillBeRawPtr<CSSTransformValue> parseTranslateTransformValue(Ch arType*& pos, CharType* end)
980 { 980 {
981 static const int shortestValidTransformStringLength = 12; 981 static const int shortestValidTransformStringLength = 12;
982 982
983 if (end - pos < shortestValidTransformStringLength) 983 if (end - pos < shortestValidTransformStringLength)
984 return 0; 984 return nullptr;
985 985
986 if ((pos[0] != 't' && pos[0] != 'T') 986 if ((pos[0] != 't' && pos[0] != 'T')
987 || (pos[1] != 'r' && pos[1] != 'R') 987 || (pos[1] != 'r' && pos[1] != 'R')
988 || (pos[2] != 'a' && pos[2] != 'A') 988 || (pos[2] != 'a' && pos[2] != 'A')
989 || (pos[3] != 'n' && pos[3] != 'N') 989 || (pos[3] != 'n' && pos[3] != 'N')
990 || (pos[4] != 's' && pos[4] != 'S') 990 || (pos[4] != 's' && pos[4] != 'S')
991 || (pos[5] != 'l' && pos[5] != 'L') 991 || (pos[5] != 'l' && pos[5] != 'L')
992 || (pos[6] != 'a' && pos[6] != 'A') 992 || (pos[6] != 'a' && pos[6] != 'A')
993 || (pos[7] != 't' && pos[7] != 'T') 993 || (pos[7] != 't' && pos[7] != 'T')
994 || (pos[8] != 'e' && pos[8] != 'E')) 994 || (pos[8] != 'e' && pos[8] != 'E'))
995 return 0; 995 return nullptr;
996 996
997 CSSTransformValue::TransformOperationType transformType; 997 CSSTransformValue::TransformOperationType transformType;
998 unsigned expectedArgumentCount = 1; 998 unsigned expectedArgumentCount = 1;
999 unsigned argumentStart = 11; 999 unsigned argumentStart = 11;
1000 if ((pos[9] == 'x' || pos[9] == 'X') && pos[10] == '(') { 1000 if ((pos[9] == 'x' || pos[9] == 'X') && pos[10] == '(') {
1001 transformType = CSSTransformValue::TranslateXTransformOperation; 1001 transformType = CSSTransformValue::TranslateXTransformOperation;
1002 } else if ((pos[9] == 'y' || pos[9] == 'Y') && pos[10] == '(') { 1002 } else if ((pos[9] == 'y' || pos[9] == 'Y') && pos[10] == '(') {
1003 transformType = CSSTransformValue::TranslateYTransformOperation; 1003 transformType = CSSTransformValue::TranslateYTransformOperation;
1004 } else if ((pos[9] == 'z' || pos[9] == 'Z') && pos[10] == '(') { 1004 } else if ((pos[9] == 'z' || pos[9] == 'Z') && pos[10] == '(') {
1005 transformType = CSSTransformValue::TranslateZTransformOperation; 1005 transformType = CSSTransformValue::TranslateZTransformOperation;
1006 } else if (pos[9] == '(') { 1006 } else if (pos[9] == '(') {
1007 transformType = CSSTransformValue::TranslateTransformOperation; 1007 transformType = CSSTransformValue::TranslateTransformOperation;
1008 expectedArgumentCount = 2; 1008 expectedArgumentCount = 2;
1009 argumentStart = 10; 1009 argumentStart = 10;
1010 } else if (pos[9] == '3' && (pos[10] == 'd' || pos[10] == 'D') && pos[11] == '(') { 1010 } else if (pos[9] == '3' && (pos[10] == 'd' || pos[10] == 'D') && pos[11] == '(') {
1011 transformType = CSSTransformValue::Translate3DTransformOperation; 1011 transformType = CSSTransformValue::Translate3DTransformOperation;
1012 expectedArgumentCount = 3; 1012 expectedArgumentCount = 3;
1013 argumentStart = 12; 1013 argumentStart = 12;
1014 } else { 1014 } else {
1015 return 0; 1015 return nullptr;
1016 } 1016 }
1017 pos += argumentStart; 1017 pos += argumentStart;
1018 1018
1019 RefPtrWillBeRawPtr<CSSTransformValue> transformValue = CSSTransformValue::cr eate(transformType); 1019 RefPtrWillBeRawPtr<CSSTransformValue> transformValue = CSSTransformValue::cr eate(transformType);
1020 if (!parseTransformTranslateArguments(pos, end, expectedArgumentCount, trans formValue.get())) 1020 if (!parseTransformTranslateArguments(pos, end, expectedArgumentCount, trans formValue.get()))
1021 return 0; 1021 return nullptr;
1022 return transformValue.release(); 1022 return transformValue.release();
1023 } 1023 }
1024 1024
1025 template <typename CharType> 1025 template <typename CharType>
1026 static PassRefPtrWillBeRawPtr<CSSValueList> parseTranslateTransformList(CharType *& pos, CharType* end) 1026 static PassRefPtrWillBeRawPtr<CSSValueList> parseTranslateTransformList(CharType *& pos, CharType* end)
1027 { 1027 {
1028 RefPtrWillBeRawPtr<CSSValueList> transformList; 1028 RefPtrWillBeRawPtr<CSSValueList> transformList;
1029 while (pos < end) { 1029 while (pos < end) {
1030 while (pos < end && isCSSSpace(*pos)) 1030 while (pos < end && isCSSSpace(*pos))
1031 ++pos; 1031 ++pos;
1032 RefPtrWillBeRawPtr<CSSTransformValue> transformValue = parseTranslateTra nsformValue(pos, end); 1032 RefPtrWillBeRawPtr<CSSTransformValue> transformValue = parseTranslateTra nsformValue(pos, end);
1033 if (!transformValue) 1033 if (!transformValue)
1034 return 0; 1034 return nullptr;
1035 if (!transformList) 1035 if (!transformList)
1036 transformList = CSSValueList::createSpaceSeparated(); 1036 transformList = CSSValueList::createSpaceSeparated();
1037 transformList->append(transformValue.release()); 1037 transformList->append(transformValue.release());
1038 if (pos < end) { 1038 if (pos < end) {
1039 if (isCSSSpace(*pos)) 1039 if (isCSSSpace(*pos))
1040 return 0; 1040 return nullptr;
1041 } 1041 }
1042 } 1042 }
1043 return transformList.release(); 1043 return transformList.release();
1044 } 1044 }
1045 1045
1046 static bool parseTranslateTransform(MutableStylePropertySet* properties, CSSProp ertyID propertyID, const String& string, bool important) 1046 static bool parseTranslateTransform(MutableStylePropertySet* properties, CSSProp ertyID propertyID, const String& string, bool important)
1047 { 1047 {
1048 if (propertyID != CSSPropertyWebkitTransform) 1048 if (propertyID != CSSPropertyWebkitTransform)
1049 return false; 1049 return false;
1050 if (string.isEmpty()) 1050 if (string.isEmpty())
(...skipping 12 matching lines...) Expand all
1063 if (!transformList) 1063 if (!transformList)
1064 return false; 1064 return false;
1065 } 1065 }
1066 properties->addParsedProperty(CSSProperty(CSSPropertyWebkitTransform, transf ormList.release(), important)); 1066 properties->addParsedProperty(CSSProperty(CSSPropertyWebkitTransform, transf ormList.release(), important));
1067 return true; 1067 return true;
1068 } 1068 }
1069 1069
1070 PassRefPtrWillBeRawPtr<CSSValueList> BisonCSSParser::parseFontFaceValue(const At omicString& string) 1070 PassRefPtrWillBeRawPtr<CSSValueList> BisonCSSParser::parseFontFaceValue(const At omicString& string)
1071 { 1071 {
1072 if (string.isEmpty()) 1072 if (string.isEmpty())
1073 return 0; 1073 return nullptr;
1074 RefPtr<MutableStylePropertySet> dummyStyle = MutableStylePropertySet::create (); 1074 RefPtr<MutableStylePropertySet> dummyStyle = MutableStylePropertySet::create ();
1075 if (!parseValue(dummyStyle.get(), CSSPropertyFontFamily, string, false, HTML QuirksMode, 0)) 1075 if (!parseValue(dummyStyle.get(), CSSPropertyFontFamily, string, false, HTML QuirksMode, 0))
1076 return 0; 1076 return nullptr;
1077 1077
1078 RefPtrWillBeRawPtr<CSSValue> fontFamily = dummyStyle->getPropertyCSSValue(CS SPropertyFontFamily); 1078 RefPtrWillBeRawPtr<CSSValue> fontFamily = dummyStyle->getPropertyCSSValue(CS SPropertyFontFamily);
1079 if (!fontFamily->isValueList()) 1079 if (!fontFamily->isValueList())
1080 return 0; 1080 return nullptr;
1081 1081
1082 return toCSSValueList(dummyStyle->getPropertyCSSValue(CSSPropertyFontFamily) .get()); 1082 return toCSSValueList(dummyStyle->getPropertyCSSValue(CSSPropertyFontFamily) .get());
1083 } 1083 }
1084 1084
1085 PassRefPtrWillBeRawPtr<CSSValue> BisonCSSParser::parseAnimationTimingFunctionVal ue(const String& string) 1085 PassRefPtrWillBeRawPtr<CSSValue> BisonCSSParser::parseAnimationTimingFunctionVal ue(const String& string)
1086 { 1086 {
1087 if (string.isEmpty()) 1087 if (string.isEmpty())
1088 return 0; 1088 return nullptr;
1089 RefPtr<MutableStylePropertySet> style = MutableStylePropertySet::create(); 1089 RefPtr<MutableStylePropertySet> style = MutableStylePropertySet::create();
1090 if (!parseValue(style.get(), CSSPropertyAnimationTimingFunction, string, fal se, HTMLStandardMode, 0)) 1090 if (!parseValue(style.get(), CSSPropertyAnimationTimingFunction, string, fal se, HTMLStandardMode, 0))
1091 return 0; 1091 return nullptr;
1092 1092
1093 return style->getPropertyCSSValue(CSSPropertyAnimationTimingFunction); 1093 return style->getPropertyCSSValue(CSSPropertyAnimationTimingFunction);
1094 } 1094 }
1095 1095
1096 bool BisonCSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropert yID propertyID, const String& string, bool important, const Document& document) 1096 bool BisonCSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropert yID propertyID, const String& string, bool important, const Document& document)
1097 { 1097 {
1098 ASSERT(!string.isEmpty()); 1098 ASSERT(!string.isEmpty());
1099 1099
1100 CSSParserContext context(document, UseCounter::getFrom(&document)); 1100 CSSParserContext context(document, UseCounter::getFrom(&document));
1101 1101
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 setupParser("@-internal-value ", string, ""); 1145 setupParser("@-internal-value ", string, "");
1146 1146
1147 m_id = propertyID; 1147 m_id = propertyID;
1148 m_important = important; 1148 m_important = important;
1149 1149
1150 { 1150 {
1151 StyleDeclarationScope scope(this, declaration); 1151 StyleDeclarationScope scope(this, declaration);
1152 cssyyparse(this); 1152 cssyyparse(this);
1153 } 1153 }
1154 1154
1155 m_rule = 0; 1155 m_rule = nullptr;
1156 m_id = CSSPropertyInvalid; 1156 m_id = CSSPropertyInvalid;
1157 1157
1158 bool ok = false; 1158 bool ok = false;
1159 if (m_hasFontFaceOnlyValues) 1159 if (m_hasFontFaceOnlyValues)
1160 deleteFontFaceOnlyValues(); 1160 deleteFontFaceOnlyValues();
1161 if (!m_parsedProperties.isEmpty()) { 1161 if (!m_parsedProperties.isEmpty()) {
1162 ok = true; 1162 ok = true;
1163 declaration->addParsedProperties(m_parsedProperties); 1163 declaration->addParsedProperties(m_parsedProperties);
1164 clearProperties(); 1164 clearProperties();
1165 } 1165 }
(...skipping 24 matching lines...) Expand all
1190 return false; 1190 return false;
1191 1191
1192 color = primitiveValue->getRGBA32Value(); 1192 color = primitiveValue->getRGBA32Value();
1193 return true; 1193 return true;
1194 } 1194 }
1195 1195
1196 bool BisonCSSParser::parseColor(const String& string) 1196 bool BisonCSSParser::parseColor(const String& string)
1197 { 1197 {
1198 setupParser("@-internal-decls color:", string, ""); 1198 setupParser("@-internal-decls color:", string, "");
1199 cssyyparse(this); 1199 cssyyparse(this);
1200 m_rule = 0; 1200 m_rule = nullptr;
1201 1201
1202 return !m_parsedProperties.isEmpty() && m_parsedProperties.first().id() == C SSPropertyColor; 1202 return !m_parsedProperties.isEmpty() && m_parsedProperties.first().id() == C SSPropertyColor;
1203 } 1203 }
1204 1204
1205 // FIXME: This is copied from SVGCSSParser.cpp 1205 // FIXME: This is copied from SVGCSSParser.cpp
1206 static bool isSystemColor(int id) 1206 static bool isSystemColor(int id)
1207 { 1207 {
1208 return (id >= CSSValueActiveborder && id <= CSSValueWindowtext) || id == CSS ValueMenu; 1208 return (id >= CSSValueActiveborder && id <= CSSValueWindowtext) || id == CSS ValueMenu;
1209 } 1209 }
1210 1210
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 context.setMode((element->isHTMLElement() && !document.inQuirksMode()) ? HTM LStandardMode : HTMLQuirksMode); 1242 context.setMode((element->isHTMLElement() && !document.inQuirksMode()) ? HTM LStandardMode : HTMLQuirksMode);
1243 return BisonCSSParser(context).parseDeclaration(string, document.elementShee t()->contents()); 1243 return BisonCSSParser(context).parseDeclaration(string, document.elementShee t()->contents());
1244 } 1244 }
1245 1245
1246 PassRefPtr<ImmutableStylePropertySet> BisonCSSParser::parseDeclaration(const Str ing& string, StyleSheetContents* contextStyleSheet) 1246 PassRefPtr<ImmutableStylePropertySet> BisonCSSParser::parseDeclaration(const Str ing& string, StyleSheetContents* contextStyleSheet)
1247 { 1247 {
1248 setStyleSheet(contextStyleSheet); 1248 setStyleSheet(contextStyleSheet);
1249 1249
1250 setupParser("@-internal-decls ", string, ""); 1250 setupParser("@-internal-decls ", string, "");
1251 cssyyparse(this); 1251 cssyyparse(this);
1252 m_rule = 0; 1252 m_rule = nullptr;
1253 1253
1254 if (m_hasFontFaceOnlyValues) 1254 if (m_hasFontFaceOnlyValues)
1255 deleteFontFaceOnlyValues(); 1255 deleteFontFaceOnlyValues();
1256 1256
1257 RefPtr<ImmutableStylePropertySet> style = createStylePropertySet(); 1257 RefPtr<ImmutableStylePropertySet> style = createStylePropertySet();
1258 clearProperties(); 1258 clearProperties();
1259 return style.release(); 1259 return style.release();
1260 } 1260 }
1261 1261
1262 1262
1263 bool BisonCSSParser::parseDeclaration(MutableStylePropertySet* declaration, cons t String& string, CSSParserObserver* observer, StyleSheetContents* contextStyleS heet) 1263 bool BisonCSSParser::parseDeclaration(MutableStylePropertySet* declaration, cons t String& string, CSSParserObserver* observer, StyleSheetContents* contextStyleS heet)
1264 { 1264 {
1265 setStyleSheet(contextStyleSheet); 1265 setStyleSheet(contextStyleSheet);
1266 1266
1267 TemporaryChange<CSSParserObserver*> scopedObsever(m_observer, observer); 1267 TemporaryChange<CSSParserObserver*> scopedObsever(m_observer, observer);
1268 1268
1269 setupParser("@-internal-decls ", string, ""); 1269 setupParser("@-internal-decls ", string, "");
1270 if (m_observer) { 1270 if (m_observer) {
1271 m_observer->startRuleHeader(CSSRuleSourceData::STYLE_RULE, 0); 1271 m_observer->startRuleHeader(CSSRuleSourceData::STYLE_RULE, 0);
1272 m_observer->endRuleHeader(1); 1272 m_observer->endRuleHeader(1);
1273 m_observer->startRuleBody(0); 1273 m_observer->startRuleBody(0);
1274 } 1274 }
1275 1275
1276 { 1276 {
1277 StyleDeclarationScope scope(this, declaration); 1277 StyleDeclarationScope scope(this, declaration);
1278 cssyyparse(this); 1278 cssyyparse(this);
1279 } 1279 }
1280 1280
1281 m_rule = 0; 1281 m_rule = nullptr;
1282 1282
1283 bool ok = false; 1283 bool ok = false;
1284 if (m_hasFontFaceOnlyValues) 1284 if (m_hasFontFaceOnlyValues)
1285 deleteFontFaceOnlyValues(); 1285 deleteFontFaceOnlyValues();
1286 if (!m_parsedProperties.isEmpty()) { 1286 if (!m_parsedProperties.isEmpty()) {
1287 ok = true; 1287 ok = true;
1288 declaration->addParsedProperties(m_parsedProperties); 1288 declaration->addParsedProperties(m_parsedProperties);
1289 clearProperties(); 1289 clearProperties();
1290 } 1290 }
1291 1291
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
1580 return createPrimitiveNumericValue(value); 1580 return createPrimitiveNumericValue(value);
1581 if (value->unit >= CSSPrimitiveValue::CSS_VW && value->unit <= CSSPrimitiveV alue::CSS_VMAX) 1581 if (value->unit >= CSSPrimitiveValue::CSS_VW && value->unit <= CSSPrimitiveV alue::CSS_VMAX)
1582 return createPrimitiveNumericValue(value); 1582 return createPrimitiveNumericValue(value);
1583 if (value->unit >= CSSPrimitiveValue::CSS_DPPX && value->unit <= CSSPrimitiv eValue::CSS_DPCM) 1583 if (value->unit >= CSSPrimitiveValue::CSS_DPPX && value->unit <= CSSPrimitiv eValue::CSS_DPCM)
1584 return createPrimitiveNumericValue(value); 1584 return createPrimitiveNumericValue(value);
1585 if (value->unit >= CSSParserValue::Q_EMS) 1585 if (value->unit >= CSSParserValue::Q_EMS)
1586 return CSSPrimitiveValue::createAllowingMarginQuirk(value->fValue, CSSPr imitiveValue::CSS_EMS); 1586 return CSSPrimitiveValue::createAllowingMarginQuirk(value->fValue, CSSPr imitiveValue::CSS_EMS);
1587 if (isCalculation(value)) 1587 if (isCalculation(value))
1588 return CSSPrimitiveValue::create(m_parsedCalculation.release()); 1588 return CSSPrimitiveValue::create(m_parsedCalculation.release());
1589 1589
1590 return 0; 1590 return nullptr;
1591 } 1591 }
1592 1592
1593 void CSSPropertyParser::addExpandedPropertyForValue(CSSPropertyID propId, PassRe fPtrWillBeRawPtr<CSSValue> prpValue, bool important) 1593 void CSSPropertyParser::addExpandedPropertyForValue(CSSPropertyID propId, PassRe fPtrWillBeRawPtr<CSSValue> prpValue, bool important)
1594 { 1594 {
1595 const StylePropertyShorthand& shorthand = shorthandForProperty(propId); 1595 const StylePropertyShorthand& shorthand = shorthandForProperty(propId);
1596 unsigned shorthandLength = shorthand.length(); 1596 unsigned shorthandLength = shorthand.length();
1597 if (!shorthandLength) { 1597 if (!shorthandLength) {
1598 addProperty(propId, prpValue, important); 1598 addProperty(propId, prpValue, important);
1599 return; 1599 return;
1600 } 1600 }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1804 case CSSPropertyCursor: { 1804 case CSSPropertyCursor: {
1805 // Grammar defined by CSS3 UI and modified by CSS4 images: 1805 // Grammar defined by CSS3 UI and modified by CSS4 images:
1806 // [ [<image> [<x> <y>]?,]* 1806 // [ [<image> [<x> <y>]?,]*
1807 // [ auto | crosshair | default | pointer | progress | move | e-resize | ne-resize | 1807 // [ auto | crosshair | default | pointer | progress | move | e-resize | ne-resize |
1808 // nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize | ew-resize | 1808 // nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize | ew-resize |
1809 // ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | tex t | wait | help | 1809 // ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | tex t | wait | help |
1810 // vertical-text | cell | context-menu | alias | copy | no-drop | not-al lowed | -webkit-zoom-in 1810 // vertical-text | cell | context-menu | alias | copy | no-drop | not-al lowed | -webkit-zoom-in
1811 // -webkit-zoom-out | all-scroll | -webkit-grab | -webkit-grabbing ] ] | inherit 1811 // -webkit-zoom-out | all-scroll | -webkit-grab | -webkit-grabbing ] ] | inherit
1812 RefPtrWillBeRawPtr<CSSValueList> list; 1812 RefPtrWillBeRawPtr<CSSValueList> list;
1813 while (value) { 1813 while (value) {
1814 RefPtrWillBeRawPtr<CSSValue> image = 0; 1814 RefPtrWillBeRawPtr<CSSValue> image = nullptr;
1815 if (value->unit == CSSPrimitiveValue::CSS_URI) { 1815 if (value->unit == CSSPrimitiveValue::CSS_URI) {
1816 String uri = value->string; 1816 String uri = value->string;
1817 if (!uri.isNull()) 1817 if (!uri.isNull())
1818 image = CSSImageValue::create(completeURL(uri)); 1818 image = CSSImageValue::create(completeURL(uri));
1819 } else if (value->unit == CSSParserValue::Function && equalIgnoringC ase(value->function->name, "-webkit-image-set(")) { 1819 } else if (value->unit == CSSParserValue::Function && equalIgnoringC ase(value->function->name, "-webkit-image-set(")) {
1820 image = parseImageSet(m_valueList.get()); 1820 image = parseImageSet(m_valueList.get());
1821 if (!image) 1821 if (!image)
1822 break; 1822 break;
1823 } else 1823 } else
1824 break; 1824 break;
(...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after
3133 { 3133 {
3134 CSSParserValue* value = m_valueList->current(); 3134 CSSParserValue* value = m_valueList->current();
3135 // Always parse lengths in strict mode here, since it would be ambiguous oth erwise when used in 3135 // Always parse lengths in strict mode here, since it would be ambiguous oth erwise when used in
3136 // the 'columns' shorthand property. 3136 // the 'columns' shorthand property.
3137 if (value->id == CSSValueAuto 3137 if (value->id == CSSValueAuto
3138 || (validUnit(value, FLength | FNonNeg, HTMLStandardMode) && value->fVal ue)) { 3138 || (validUnit(value, FLength | FNonNeg, HTMLStandardMode) && value->fVal ue)) {
3139 RefPtrWillBeRawPtr<CSSValue> parsedValue = parseValidPrimitive(value->id , value); 3139 RefPtrWillBeRawPtr<CSSValue> parsedValue = parseValidPrimitive(value->id , value);
3140 m_valueList->next(); 3140 m_valueList->next();
3141 return parsedValue; 3141 return parsedValue;
3142 } 3142 }
3143 return 0; 3143 return nullptr;
3144 } 3144 }
3145 3145
3146 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseColumnCount() 3146 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseColumnCount()
3147 { 3147 {
3148 CSSParserValue* value = m_valueList->current(); 3148 CSSParserValue* value = m_valueList->current();
3149 if (value->id == CSSValueAuto 3149 if (value->id == CSSValueAuto
3150 || (!value->id && validUnit(value, FPositiveInteger, HTMLQuirksMode))) { 3150 || (!value->id && validUnit(value, FPositiveInteger, HTMLQuirksMode))) {
3151 RefPtrWillBeRawPtr<CSSValue> parsedValue = parseValidPrimitive(value->id , value); 3151 RefPtrWillBeRawPtr<CSSValue> parsedValue = parseValidPrimitive(value->id , value);
3152 m_valueList->next(); 3152 m_valueList->next();
3153 return parsedValue; 3153 return parsedValue;
3154 } 3154 }
3155 return 0; 3155 return nullptr;
3156 } 3156 }
3157 3157
3158 bool CSSPropertyParser::parseColumnsShorthand(bool important) 3158 bool CSSPropertyParser::parseColumnsShorthand(bool important)
3159 { 3159 {
3160 RefPtrWillBeRawPtr<CSSValue> columnWidth; 3160 RefPtrWillBeRawPtr<CSSValue> columnWidth;
3161 RefPtrWillBeRawPtr<CSSValue> columnCount; 3161 RefPtrWillBeRawPtr<CSSValue> columnCount;
3162 bool hasPendingExplicitAuto = false; 3162 bool hasPendingExplicitAuto = false;
3163 3163
3164 for (unsigned propertiesParsed = 0; CSSParserValue* value = m_valueList->cur rent(); propertiesParsed++) { 3164 for (unsigned propertiesParsed = 0; CSSParserValue* value = m_valueList->cur rent(); propertiesParsed++) {
3165 if (propertiesParsed >= 2) 3165 if (propertiesParsed >= 2)
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
3504 m_valueList->next(); 3504 m_valueList->next();
3505 return true; 3505 return true;
3506 } 3506 }
3507 3507
3508 return false; 3508 return false;
3509 } 3509 }
3510 3510
3511 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAttr(CSSParserValueList * args) 3511 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAttr(CSSParserValueList * args)
3512 { 3512 {
3513 if (args->size() != 1) 3513 if (args->size() != 1)
3514 return 0; 3514 return nullptr;
3515 3515
3516 CSSParserValue* a = args->current(); 3516 CSSParserValue* a = args->current();
3517 3517
3518 if (a->unit != CSSPrimitiveValue::CSS_IDENT) 3518 if (a->unit != CSSPrimitiveValue::CSS_IDENT)
3519 return 0; 3519 return nullptr;
3520 3520
3521 String attrName = a->string; 3521 String attrName = a->string;
3522 // CSS allows identifiers with "-" at the start, like "-webkit-mask-image". 3522 // CSS allows identifiers with "-" at the start, like "-webkit-mask-image".
3523 // But HTML attribute names can't have those characters, and we should not 3523 // But HTML attribute names can't have those characters, and we should not
3524 // even parse them inside attr(). 3524 // even parse them inside attr().
3525 if (attrName[0] == '-') 3525 if (attrName[0] == '-')
3526 return 0; 3526 return nullptr;
3527 3527
3528 if (m_context.isHTMLDocument()) 3528 if (m_context.isHTMLDocument())
3529 attrName = attrName.lower(); 3529 attrName = attrName.lower();
3530 3530
3531 return cssValuePool().createValue(attrName, CSSPrimitiveValue::CSS_ATTR); 3531 return cssValuePool().createValue(attrName, CSSPrimitiveValue::CSS_ATTR);
3532 } 3532 }
3533 3533
3534 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseBackgroundColor() 3534 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseBackgroundColor()
3535 { 3535 {
3536 CSSValueID id = m_valueList->current()->id; 3536 CSSValueID id = m_valueList->current()->id;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3569 if (id == CSSValueLeft || id == CSSValueRight || id == CSSValueCenter) { 3569 if (id == CSSValueLeft || id == CSSValueRight || id == CSSValueCenter) {
3570 int percent = 0; 3570 int percent = 0;
3571 if (id == CSSValueRight) 3571 if (id == CSSValueRight)
3572 percent = 100; 3572 percent = 100;
3573 else if (id == CSSValueCenter) 3573 else if (id == CSSValueCenter)
3574 percent = 50; 3574 percent = 50;
3575 return cssValuePool().createValue(percent, CSSPrimitiveValue::CSS_PERCEN TAGE); 3575 return cssValuePool().createValue(percent, CSSPrimitiveValue::CSS_PERCEN TAGE);
3576 } 3576 }
3577 if (validUnit(valueList->current(), FPercent | FLength)) 3577 if (validUnit(valueList->current(), FPercent | FLength))
3578 return createPrimitiveNumericValue(valueList->current()); 3578 return createPrimitiveNumericValue(valueList->current());
3579 return 0; 3579 return nullptr;
3580 } 3580 }
3581 3581
3582 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseFillPositionY(CSSParser ValueList* valueList) 3582 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseFillPositionY(CSSParser ValueList* valueList)
3583 { 3583 {
3584 int id = valueList->current()->id; 3584 int id = valueList->current()->id;
3585 if (id == CSSValueTop || id == CSSValueBottom || id == CSSValueCenter) { 3585 if (id == CSSValueTop || id == CSSValueBottom || id == CSSValueCenter) {
3586 int percent = 0; 3586 int percent = 0;
3587 if (id == CSSValueBottom) 3587 if (id == CSSValueBottom)
3588 percent = 100; 3588 percent = 100;
3589 else if (id == CSSValueCenter) 3589 else if (id == CSSValueCenter)
3590 percent = 50; 3590 percent = 50;
3591 return cssValuePool().createValue(percent, CSSPrimitiveValue::CSS_PERCEN TAGE); 3591 return cssValuePool().createValue(percent, CSSPrimitiveValue::CSS_PERCEN TAGE);
3592 } 3592 }
3593 if (validUnit(valueList->current(), FPercent | FLength)) 3593 if (validUnit(valueList->current(), FPercent | FLength))
3594 return createPrimitiveNumericValue(valueList->current()); 3594 return createPrimitiveNumericValue(valueList->current());
3595 return 0; 3595 return nullptr;
3596 } 3596 }
3597 3597
3598 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseFillPositionCo mponent(CSSParserValueList* valueList, unsigned& cumulativeFlags, FillPositionFl ag& individualFlag, FillPositionParsingMode parsingMode) 3598 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseFillPositionCo mponent(CSSParserValueList* valueList, unsigned& cumulativeFlags, FillPositionFl ag& individualFlag, FillPositionParsingMode parsingMode)
3599 { 3599 {
3600 CSSValueID id = valueList->current()->id; 3600 CSSValueID id = valueList->current()->id;
3601 if (id == CSSValueLeft || id == CSSValueTop || id == CSSValueRight || id == CSSValueBottom || id == CSSValueCenter) { 3601 if (id == CSSValueLeft || id == CSSValueTop || id == CSSValueRight || id == CSSValueBottom || id == CSSValueCenter) {
3602 int percent = 0; 3602 int percent = 0;
3603 if (id == CSSValueLeft || id == CSSValueRight) { 3603 if (id == CSSValueLeft || id == CSSValueRight) {
3604 if (cumulativeFlags & XFillPosition) 3604 if (cumulativeFlags & XFillPosition)
3605 return 0; 3605 return nullptr;
3606 cumulativeFlags |= XFillPosition; 3606 cumulativeFlags |= XFillPosition;
3607 individualFlag = XFillPosition; 3607 individualFlag = XFillPosition;
3608 if (id == CSSValueRight) 3608 if (id == CSSValueRight)
3609 percent = 100; 3609 percent = 100;
3610 } 3610 }
3611 else if (id == CSSValueTop || id == CSSValueBottom) { 3611 else if (id == CSSValueTop || id == CSSValueBottom) {
3612 if (cumulativeFlags & YFillPosition) 3612 if (cumulativeFlags & YFillPosition)
3613 return 0; 3613 return nullptr;
3614 cumulativeFlags |= YFillPosition; 3614 cumulativeFlags |= YFillPosition;
3615 individualFlag = YFillPosition; 3615 individualFlag = YFillPosition;
3616 if (id == CSSValueBottom) 3616 if (id == CSSValueBottom)
3617 percent = 100; 3617 percent = 100;
3618 } else if (id == CSSValueCenter) { 3618 } else if (id == CSSValueCenter) {
3619 // Center is ambiguous, so we're not sure which position we've found yet, an x or a y. 3619 // Center is ambiguous, so we're not sure which position we've found yet, an x or a y.
3620 percent = 50; 3620 percent = 50;
3621 cumulativeFlags |= AmbiguousFillPosition; 3621 cumulativeFlags |= AmbiguousFillPosition;
3622 individualFlag = AmbiguousFillPosition; 3622 individualFlag = AmbiguousFillPosition;
3623 } 3623 }
3624 3624
3625 if (parsingMode == ResolveValuesAsKeyword) 3625 if (parsingMode == ResolveValuesAsKeyword)
3626 return cssValuePool().createIdentifierValue(id); 3626 return cssValuePool().createIdentifierValue(id);
3627 3627
3628 return cssValuePool().createValue(percent, CSSPrimitiveValue::CSS_PERCEN TAGE); 3628 return cssValuePool().createValue(percent, CSSPrimitiveValue::CSS_PERCEN TAGE);
3629 } 3629 }
3630 if (validUnit(valueList->current(), FPercent | FLength)) { 3630 if (validUnit(valueList->current(), FPercent | FLength)) {
3631 if (!cumulativeFlags) { 3631 if (!cumulativeFlags) {
3632 cumulativeFlags |= XFillPosition; 3632 cumulativeFlags |= XFillPosition;
3633 individualFlag = XFillPosition; 3633 individualFlag = XFillPosition;
3634 } else if (cumulativeFlags & (XFillPosition | AmbiguousFillPosition)) { 3634 } else if (cumulativeFlags & (XFillPosition | AmbiguousFillPosition)) {
3635 cumulativeFlags |= YFillPosition; 3635 cumulativeFlags |= YFillPosition;
3636 individualFlag = YFillPosition; 3636 individualFlag = YFillPosition;
3637 } else { 3637 } else {
3638 if (m_parsedCalculation) 3638 if (m_parsedCalculation)
3639 m_parsedCalculation.release(); 3639 m_parsedCalculation.release();
3640 return 0; 3640 return nullptr;
3641 } 3641 }
3642 return createPrimitiveNumericValue(valueList->current()); 3642 return createPrimitiveNumericValue(valueList->current());
3643 } 3643 }
3644 return 0; 3644 return nullptr;
3645 } 3645 }
3646 3646
3647 static bool isValueConflictingWithCurrentEdge(int value1, int value2) 3647 static bool isValueConflictingWithCurrentEdge(int value1, int value2)
3648 { 3648 {
3649 if ((value1 == CSSValueLeft || value1 == CSSValueRight) && (value2 == CSSVal ueLeft || value2 == CSSValueRight)) 3649 if ((value1 == CSSValueLeft || value1 == CSSValueRight) && (value2 == CSSVal ueLeft || value2 == CSSValueRight))
3650 return true; 3650 return true;
3651 3651
3652 if ((value1 == CSSValueTop || value1 == CSSValueBottom) && (value2 == CSSVal ueTop || value2 == CSSValueBottom)) 3652 if ((value1 == CSSValueTop || value1 == CSSValueBottom) && (value2 == CSSVal ueTop || value2 == CSSValueBottom))
3653 return true; 3653 return true;
3654 3654
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
3924 if (id == CSSValueRepeatY) { 3924 if (id == CSSValueRepeatY) {
3925 m_implicitShorthand = true; 3925 m_implicitShorthand = true;
3926 value1 = cssValuePool().createIdentifierValue(CSSValueNoRepeat); 3926 value1 = cssValuePool().createIdentifierValue(CSSValueNoRepeat);
3927 value2 = cssValuePool().createIdentifierValue(CSSValueRepeat); 3927 value2 = cssValuePool().createIdentifierValue(CSSValueRepeat);
3928 m_valueList->next(); 3928 m_valueList->next();
3929 return; 3929 return;
3930 } 3930 }
3931 if (id == CSSValueRepeat || id == CSSValueNoRepeat || id == CSSValueRound || id == CSSValueSpace) 3931 if (id == CSSValueRepeat || id == CSSValueNoRepeat || id == CSSValueRound || id == CSSValueSpace)
3932 value1 = cssValuePool().createIdentifierValue(id); 3932 value1 = cssValuePool().createIdentifierValue(id);
3933 else { 3933 else {
3934 value1 = 0; 3934 value1 = nullptr;
3935 return; 3935 return;
3936 } 3936 }
3937 3937
3938 CSSParserValue* value = m_valueList->next(); 3938 CSSParserValue* value = m_valueList->next();
3939 3939
3940 // Parse the second value if one is available 3940 // Parse the second value if one is available
3941 if (value && !isComma(value)) { 3941 if (value && !isComma(value)) {
3942 id = value->id; 3942 id = value->id;
3943 if (id == CSSValueRepeat || id == CSSValueNoRepeat || id == CSSValueRoun d || id == CSSValueSpace) { 3943 if (id == CSSValueRepeat || id == CSSValueNoRepeat || id == CSSValueRoun d || id == CSSValueSpace) {
3944 value2 = cssValuePool().createIdentifierValue(id); 3944 value2 = cssValuePool().createIdentifierValue(id);
(...skipping 14 matching lines...) Expand all
3959 3959
3960 if (value->id == CSSValueContain || value->id == CSSValueCover) 3960 if (value->id == CSSValueContain || value->id == CSSValueCover)
3961 return cssValuePool().createIdentifierValue(value->id); 3961 return cssValuePool().createIdentifierValue(value->id);
3962 3962
3963 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue1; 3963 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue1;
3964 3964
3965 if (value->id == CSSValueAuto) 3965 if (value->id == CSSValueAuto)
3966 parsedValue1 = cssValuePool().createIdentifierValue(CSSValueAuto); 3966 parsedValue1 = cssValuePool().createIdentifierValue(CSSValueAuto);
3967 else { 3967 else {
3968 if (!validUnit(value, FLength | FPercent)) 3968 if (!validUnit(value, FLength | FPercent))
3969 return 0; 3969 return nullptr;
3970 parsedValue1 = createPrimitiveNumericValue(value); 3970 parsedValue1 = createPrimitiveNumericValue(value);
3971 } 3971 }
3972 3972
3973 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue2; 3973 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue2;
3974 if ((value = m_valueList->next())) { 3974 if ((value = m_valueList->next())) {
3975 if (value->unit == CSSParserValue::Operator && value->iValue == ',') 3975 if (value->unit == CSSParserValue::Operator && value->iValue == ',')
3976 allowComma = false; 3976 allowComma = false;
3977 else if (value->id != CSSValueAuto) { 3977 else if (value->id != CSSValueAuto) {
3978 if (!validUnit(value, FLength | FPercent)) { 3978 if (!validUnit(value, FLength | FPercent)) {
3979 if (!inShorthand()) 3979 if (!inShorthand())
3980 return 0; 3980 return nullptr;
3981 // We need to rewind the value list, so that when it is advanced we'll end up back at this value. 3981 // We need to rewind the value list, so that when it is advanced we'll end up back at this value.
3982 m_valueList->previous(); 3982 m_valueList->previous();
3983 } else 3983 } else
3984 parsedValue2 = createPrimitiveNumericValue(value); 3984 parsedValue2 = createPrimitiveNumericValue(value);
3985 } 3985 }
3986 } else if (!parsedValue2 && propId == CSSPropertyWebkitBackgroundSize) { 3986 } else if (!parsedValue2 && propId == CSSPropertyWebkitBackgroundSize) {
3987 // For backwards compatibility we set the second value to the first if i t is omitted. 3987 // For backwards compatibility we set the second value to the first if i t is omitted.
3988 // We only need to do this for -webkit-background-size. It should be saf e to let masks match 3988 // We only need to do this for -webkit-background-size. It should be saf e to let masks match
3989 // the real property. 3989 // the real property.
3990 parsedValue2 = parsedValue1; 3990 parsedValue2 = parsedValue1;
3991 } 3991 }
3992 3992
3993 if (!parsedValue2) 3993 if (!parsedValue2)
3994 return parsedValue1; 3994 return parsedValue1;
3995 return createPrimitiveValuePair(parsedValue1.release(), parsedValue2.release ()); 3995 return createPrimitiveValuePair(parsedValue1.release(), parsedValue2.release ());
3996 } 3996 }
3997 3997
3998 bool CSSPropertyParser::parseFillProperty(CSSPropertyID propId, CSSPropertyID& p ropId1, CSSPropertyID& propId2, 3998 bool CSSPropertyParser::parseFillProperty(CSSPropertyID propId, CSSPropertyID& p ropId1, CSSPropertyID& propId2,
3999 RefPtrWillBeRawPtr<CSSValue>& retValue1, RefPtrWillBeRawPtr<CSSValue>& retVa lue2) 3999 RefPtrWillBeRawPtr<CSSValue>& retValue1, RefPtrWillBeRawPtr<CSSValue>& retVa lue2)
4000 { 4000 {
4001 RefPtrWillBeRawPtr<CSSValueList> values; 4001 RefPtrWillBeRawPtr<CSSValueList> values;
4002 RefPtrWillBeRawPtr<CSSValueList> values2; 4002 RefPtrWillBeRawPtr<CSSValueList> values2;
4003 CSSParserValue* val; 4003 CSSParserValue* val;
4004 RefPtrWillBeRawPtr<CSSValue> value; 4004 RefPtrWillBeRawPtr<CSSValue> value;
4005 RefPtrWillBeRawPtr<CSSValue> value2; 4005 RefPtrWillBeRawPtr<CSSValue> value2;
4006 4006
4007 bool allowComma = false; 4007 bool allowComma = false;
4008 4008
4009 retValue1 = retValue2 = 0; 4009 retValue1 = retValue2 = nullptr;
4010 propId1 = propId; 4010 propId1 = propId;
4011 propId2 = propId; 4011 propId2 = propId;
4012 if (propId == CSSPropertyBackgroundPosition) { 4012 if (propId == CSSPropertyBackgroundPosition) {
4013 propId1 = CSSPropertyBackgroundPositionX; 4013 propId1 = CSSPropertyBackgroundPositionX;
4014 propId2 = CSSPropertyBackgroundPositionY; 4014 propId2 = CSSPropertyBackgroundPositionY;
4015 } else if (propId == CSSPropertyWebkitMaskPosition) { 4015 } else if (propId == CSSPropertyWebkitMaskPosition) {
4016 propId1 = CSSPropertyWebkitMaskPositionX; 4016 propId1 = CSSPropertyWebkitMaskPositionX;
4017 propId2 = CSSPropertyWebkitMaskPositionY; 4017 propId2 = CSSPropertyWebkitMaskPositionY;
4018 } else if (propId == CSSPropertyBackgroundRepeat) { 4018 } else if (propId == CSSPropertyBackgroundRepeat) {
4019 propId1 = CSSPropertyBackgroundRepeatX; 4019 propId1 = CSSPropertyBackgroundRepeatX;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
4124 if (currValue) 4124 if (currValue)
4125 m_valueList->next(); 4125 m_valueList->next();
4126 break; 4126 break;
4127 } 4127 }
4128 case CSSPropertyMaskSourceType: { 4128 case CSSPropertyMaskSourceType: {
4129 if (RuntimeEnabledFeatures::cssMaskSourceTypeEnabled()) { 4129 if (RuntimeEnabledFeatures::cssMaskSourceTypeEnabled()) {
4130 if (val->id == CSSValueAuto || val->id == CSSValueAlpha || val->id == CSSValueLuminance) { 4130 if (val->id == CSSValueAuto || val->id == CSSValueAlpha || val->id == CSSValueLuminance) {
4131 currValue = cssValuePool().createIdentifierValue(val ->id); 4131 currValue = cssValuePool().createIdentifierValue(val ->id);
4132 m_valueList->next(); 4132 m_valueList->next();
4133 } else { 4133 } else {
4134 currValue = 0; 4134 currValue = nullptr;
4135 } 4135 }
4136 } 4136 }
4137 break; 4137 break;
4138 } 4138 }
4139 default: 4139 default:
4140 break; 4140 break;
4141 } 4141 }
4142 if (!currValue) 4142 if (!currValue)
4143 return false; 4143 return false;
4144 4144
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
4182 return true; 4182 return true;
4183 } 4183 }
4184 return false; 4184 return false;
4185 } 4185 }
4186 4186
4187 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationDelay() 4187 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationDelay()
4188 { 4188 {
4189 CSSParserValue* value = m_valueList->current(); 4189 CSSParserValue* value = m_valueList->current();
4190 if (validUnit(value, FTime)) 4190 if (validUnit(value, FTime))
4191 return createPrimitiveNumericValue(value); 4191 return createPrimitiveNumericValue(value);
4192 return 0; 4192 return nullptr;
4193 } 4193 }
4194 4194
4195 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationDirection() 4195 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationDirection()
4196 { 4196 {
4197 CSSParserValue* value = m_valueList->current(); 4197 CSSParserValue* value = m_valueList->current();
4198 if (value->id == CSSValueNormal || value->id == CSSValueAlternate || value-> id == CSSValueReverse || value->id == CSSValueAlternateReverse) 4198 if (value->id == CSSValueNormal || value->id == CSSValueAlternate || value-> id == CSSValueReverse || value->id == CSSValueAlternateReverse)
4199 return cssValuePool().createIdentifierValue(value->id); 4199 return cssValuePool().createIdentifierValue(value->id);
4200 return 0; 4200 return nullptr;
4201 } 4201 }
4202 4202
4203 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationDuration() 4203 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationDuration()
4204 { 4204 {
4205 CSSParserValue* value = m_valueList->current(); 4205 CSSParserValue* value = m_valueList->current();
4206 if (validUnit(value, FTime | FNonNeg)) 4206 if (validUnit(value, FTime | FNonNeg))
4207 return createPrimitiveNumericValue(value); 4207 return createPrimitiveNumericValue(value);
4208 return 0; 4208 return nullptr;
4209 } 4209 }
4210 4210
4211 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationFillMode() 4211 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationFillMode()
4212 { 4212 {
4213 CSSParserValue* value = m_valueList->current(); 4213 CSSParserValue* value = m_valueList->current();
4214 if (value->id == CSSValueNone || value->id == CSSValueForwards || value->id == CSSValueBackwards || value->id == CSSValueBoth) 4214 if (value->id == CSSValueNone || value->id == CSSValueForwards || value->id == CSSValueBackwards || value->id == CSSValueBoth)
4215 return cssValuePool().createIdentifierValue(value->id); 4215 return cssValuePool().createIdentifierValue(value->id);
4216 return 0; 4216 return nullptr;
4217 } 4217 }
4218 4218
4219 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationIterationCount () 4219 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationIterationCount ()
4220 { 4220 {
4221 CSSParserValue* value = m_valueList->current(); 4221 CSSParserValue* value = m_valueList->current();
4222 if (value->id == CSSValueInfinite) 4222 if (value->id == CSSValueInfinite)
4223 return cssValuePool().createIdentifierValue(value->id); 4223 return cssValuePool().createIdentifierValue(value->id);
4224 if (validUnit(value, FNumber | FNonNeg)) 4224 if (validUnit(value, FNumber | FNonNeg))
4225 return createPrimitiveNumericValue(value); 4225 return createPrimitiveNumericValue(value);
4226 return 0; 4226 return nullptr;
4227 } 4227 }
4228 4228
4229 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationName() 4229 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationName()
4230 { 4230 {
4231 CSSParserValue* value = m_valueList->current(); 4231 CSSParserValue* value = m_valueList->current();
4232 if (value->unit == CSSPrimitiveValue::CSS_STRING || value->unit == CSSPrimit iveValue::CSS_IDENT) { 4232 if (value->unit == CSSPrimitiveValue::CSS_STRING || value->unit == CSSPrimit iveValue::CSS_IDENT) {
4233 if (value->id == CSSValueNone || (value->unit == CSSPrimitiveValue::CSS_ STRING && equalIgnoringCase(value, "none"))) { 4233 if (value->id == CSSValueNone || (value->unit == CSSPrimitiveValue::CSS_ STRING && equalIgnoringCase(value, "none"))) {
4234 return cssValuePool().createIdentifierValue(CSSValueNone); 4234 return cssValuePool().createIdentifierValue(CSSValueNone);
4235 } else { 4235 } else {
4236 return createPrimitiveStringValue(value); 4236 return createPrimitiveStringValue(value);
4237 } 4237 }
4238 } 4238 }
4239 return 0; 4239 return nullptr;
4240 } 4240 }
4241 4241
4242 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationPlayState() 4242 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationPlayState()
4243 { 4243 {
4244 CSSParserValue* value = m_valueList->current(); 4244 CSSParserValue* value = m_valueList->current();
4245 if (value->id == CSSValueRunning || value->id == CSSValuePaused) 4245 if (value->id == CSSValueRunning || value->id == CSSValuePaused)
4246 return cssValuePool().createIdentifierValue(value->id); 4246 return cssValuePool().createIdentifierValue(value->id);
4247 return 0; 4247 return nullptr;
4248 } 4248 }
4249 4249
4250 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationProperty(Anima tionParseContext& context) 4250 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationProperty(Anima tionParseContext& context)
4251 { 4251 {
4252 CSSParserValue* value = m_valueList->current(); 4252 CSSParserValue* value = m_valueList->current();
4253 if (value->unit != CSSPrimitiveValue::CSS_IDENT) 4253 if (value->unit != CSSPrimitiveValue::CSS_IDENT)
4254 return 0; 4254 return nullptr;
4255 CSSPropertyID result = cssPropertyID(value->string); 4255 CSSPropertyID result = cssPropertyID(value->string);
4256 if (result) 4256 if (result)
4257 return cssValuePool().createIdentifierValue(result); 4257 return cssValuePool().createIdentifierValue(result);
4258 if (equalIgnoringCase(value, "all")) { 4258 if (equalIgnoringCase(value, "all")) {
4259 context.sawAnimationPropertyKeyword(); 4259 context.sawAnimationPropertyKeyword();
4260 return cssValuePool().createIdentifierValue(CSSValueAll); 4260 return cssValuePool().createIdentifierValue(CSSValueAll);
4261 } 4261 }
4262 if (equalIgnoringCase(value, "none")) { 4262 if (equalIgnoringCase(value, "none")) {
4263 context.commitAnimationPropertyKeyword(); 4263 context.commitAnimationPropertyKeyword();
4264 context.sawAnimationPropertyKeyword(); 4264 context.sawAnimationPropertyKeyword();
4265 return cssValuePool().createIdentifierValue(CSSValueNone); 4265 return cssValuePool().createIdentifierValue(CSSValueNone);
4266 } 4266 }
4267 return 0; 4267 return nullptr;
4268 } 4268 }
4269 4269
4270 bool CSSPropertyParser::parseTransformOriginShorthand(RefPtrWillBeRawPtr<CSSValu e>& value1, RefPtrWillBeRawPtr<CSSValue>& value2, RefPtrWillBeRawPtr<CSSValue>& value3) 4270 bool CSSPropertyParser::parseTransformOriginShorthand(RefPtrWillBeRawPtr<CSSValu e>& value1, RefPtrWillBeRawPtr<CSSValue>& value2, RefPtrWillBeRawPtr<CSSValue>& value3)
4271 { 4271 {
4272 parse2ValuesFillPosition(m_valueList.get(), value1, value2); 4272 parse2ValuesFillPosition(m_valueList.get(), value1, value2);
4273 4273
4274 // now get z 4274 // now get z
4275 if (m_valueList->current()) { 4275 if (m_valueList->current()) {
4276 if (validUnit(m_valueList->current(), FLength)) { 4276 if (validUnit(m_valueList->current(), FLength)) {
4277 value3 = createPrimitiveNumericValue(m_valueList->current()); 4277 value3 = createPrimitiveNumericValue(m_valueList->current());
(...skipping 24 matching lines...) Expand all
4302 4302
4303 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationTimingFunction () 4303 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseAnimationTimingFunction ()
4304 { 4304 {
4305 CSSParserValue* value = m_valueList->current(); 4305 CSSParserValue* value = m_valueList->current();
4306 if (value->id == CSSValueEase || value->id == CSSValueLinear || value->id == CSSValueEaseIn || value->id == CSSValueEaseOut 4306 if (value->id == CSSValueEase || value->id == CSSValueLinear || value->id == CSSValueEaseIn || value->id == CSSValueEaseOut
4307 || value->id == CSSValueEaseInOut || value->id == CSSValueStepStart || v alue->id == CSSValueStepEnd) 4307 || value->id == CSSValueEaseInOut || value->id == CSSValueStepStart || v alue->id == CSSValueStepEnd)
4308 return cssValuePool().createIdentifierValue(value->id); 4308 return cssValuePool().createIdentifierValue(value->id);
4309 4309
4310 // We must be a function. 4310 // We must be a function.
4311 if (value->unit != CSSParserValue::Function) 4311 if (value->unit != CSSParserValue::Function)
4312 return 0; 4312 return nullptr;
4313 4313
4314 CSSParserValueList* args = value->function->args.get(); 4314 CSSParserValueList* args = value->function->args.get();
4315 4315
4316 if (equalIgnoringCase(value->function->name, "steps(")) { 4316 if (equalIgnoringCase(value->function->name, "steps(")) {
4317 // For steps, 1 or 2 params must be specified (comma-separated) 4317 // For steps, 1 or 2 params must be specified (comma-separated)
4318 if (!args || (args->size() != 1 && args->size() != 3)) 4318 if (!args || (args->size() != 1 && args->size() != 3))
4319 return 0; 4319 return nullptr;
4320 4320
4321 // There are two values. 4321 // There are two values.
4322 int numSteps; 4322 int numSteps;
4323 bool stepAtStart = false; 4323 bool stepAtStart = false;
4324 4324
4325 CSSParserValue* v = args->current(); 4325 CSSParserValue* v = args->current();
4326 if (!validUnit(v, FInteger)) 4326 if (!validUnit(v, FInteger))
4327 return 0; 4327 return nullptr;
4328 numSteps = clampToInteger(v->fValue); 4328 numSteps = clampToInteger(v->fValue);
4329 if (numSteps < 1) 4329 if (numSteps < 1)
4330 return 0; 4330 return nullptr;
4331 v = args->next(); 4331 v = args->next();
4332 4332
4333 if (v) { 4333 if (v) {
4334 // There is a comma so we need to parse the second value 4334 // There is a comma so we need to parse the second value
4335 if (!isComma(v)) 4335 if (!isComma(v))
4336 return 0; 4336 return nullptr;
4337 v = args->next(); 4337 v = args->next();
4338 if (v->id != CSSValueStart && v->id != CSSValueEnd) 4338 if (v->id != CSSValueStart && v->id != CSSValueEnd)
4339 return 0; 4339 return nullptr;
4340 stepAtStart = v->id == CSSValueStart; 4340 stepAtStart = v->id == CSSValueStart;
4341 } 4341 }
4342 4342
4343 return CSSStepsTimingFunctionValue::create(numSteps, stepAtStart); 4343 return CSSStepsTimingFunctionValue::create(numSteps, stepAtStart);
4344 } 4344 }
4345 4345
4346 if (equalIgnoringCase(value->function->name, "cubic-bezier(")) { 4346 if (equalIgnoringCase(value->function->name, "cubic-bezier(")) {
4347 // For cubic bezier, 4 values must be specified. 4347 // For cubic bezier, 4 values must be specified.
4348 if (!args || args->size() != 7) 4348 if (!args || args->size() != 7)
4349 return 0; 4349 return nullptr;
4350 4350
4351 // There are two points specified. The x values must be between 0 and 1 but the y values can exceed this range. 4351 // There are two points specified. The x values must be between 0 and 1 but the y values can exceed this range.
4352 double x1, y1, x2, y2; 4352 double x1, y1, x2, y2;
4353 4353
4354 if (!parseCubicBezierTimingFunctionValue(args, x1)) 4354 if (!parseCubicBezierTimingFunctionValue(args, x1))
4355 return 0; 4355 return nullptr;
4356 if (x1 < 0 || x1 > 1) 4356 if (x1 < 0 || x1 > 1)
4357 return 0; 4357 return nullptr;
4358 if (!parseCubicBezierTimingFunctionValue(args, y1)) 4358 if (!parseCubicBezierTimingFunctionValue(args, y1))
4359 return 0; 4359 return nullptr;
4360 if (!parseCubicBezierTimingFunctionValue(args, x2)) 4360 if (!parseCubicBezierTimingFunctionValue(args, x2))
4361 return 0; 4361 return nullptr;
4362 if (x2 < 0 || x2 > 1) 4362 if (x2 < 0 || x2 > 1)
4363 return 0; 4363 return nullptr;
4364 if (!parseCubicBezierTimingFunctionValue(args, y2)) 4364 if (!parseCubicBezierTimingFunctionValue(args, y2))
4365 return 0; 4365 return nullptr;
4366 4366
4367 return CSSCubicBezierTimingFunctionValue::create(x1, y1, x2, y2); 4367 return CSSCubicBezierTimingFunctionValue::create(x1, y1, x2, y2);
4368 } 4368 }
4369 4369
4370 return 0; 4370 return nullptr;
4371 } 4371 }
4372 4372
4373 bool CSSPropertyParser::parseAnimationProperty(CSSPropertyID propId, RefPtrWillB eRawPtr<CSSValue>& result, AnimationParseContext& context) 4373 bool CSSPropertyParser::parseAnimationProperty(CSSPropertyID propId, RefPtrWillB eRawPtr<CSSValue>& result, AnimationParseContext& context)
4374 { 4374 {
4375 RefPtrWillBeRawPtr<CSSValueList> values; 4375 RefPtrWillBeRawPtr<CSSValueList> values;
4376 CSSParserValue* val; 4376 CSSParserValue* val;
4377 RefPtrWillBeRawPtr<CSSValue> value; 4377 RefPtrWillBeRawPtr<CSSValue> value;
4378 bool allowComma = false; 4378 bool allowComma = false;
4379 4379
4380 result = 0; 4380 result = nullptr;
4381 4381
4382 while ((val = m_valueList->current())) { 4382 while ((val = m_valueList->current())) {
4383 RefPtrWillBeRawPtr<CSSValue> currValue; 4383 RefPtrWillBeRawPtr<CSSValue> currValue;
4384 if (allowComma) { 4384 if (allowComma) {
4385 if (!isComma(val)) 4385 if (!isComma(val))
4386 return false; 4386 return false;
4387 m_valueList->next(); 4387 m_valueList->next();
4388 allowComma = false; 4388 allowComma = false;
4389 } 4389 }
4390 else { 4390 else {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
4543 } 4543 }
4544 } else if (value->id == CSSValueSpan) { 4544 } else if (value->id == CSSValueSpan) {
4545 hasSeenSpanKeyword = true; 4545 hasSeenSpanKeyword = true;
4546 if (m_valueList->next()) 4546 if (m_valueList->next())
4547 parseIntegerOrStringFromGridPosition(numericValue, gridLineName); 4547 parseIntegerOrStringFromGridPosition(numericValue, gridLineName);
4548 } 4548 }
4549 4549
4550 // Check that we have consumed all the value list. For shorthands, the parse r will pass 4550 // Check that we have consumed all the value list. For shorthands, the parse r will pass
4551 // the whole value list (including the opposite position). 4551 // the whole value list (including the opposite position).
4552 if (m_valueList->current() && !isForwardSlashOperator(m_valueList->current() )) 4552 if (m_valueList->current() && !isForwardSlashOperator(m_valueList->current() ))
4553 return 0; 4553 return nullptr;
4554 4554
4555 // If we didn't parse anything, this is not a valid grid position. 4555 // If we didn't parse anything, this is not a valid grid position.
4556 if (!hasSeenSpanKeyword && !gridLineName && !numericValue) 4556 if (!hasSeenSpanKeyword && !gridLineName && !numericValue)
4557 return 0; 4557 return nullptr;
4558 4558
4559 // Negative numbers are not allowed for span (but are for <integer>). 4559 // Negative numbers are not allowed for span (but are for <integer>).
4560 if (hasSeenSpanKeyword && numericValue && numericValue->getIntValue() < 0) 4560 if (hasSeenSpanKeyword && numericValue && numericValue->getIntValue() < 0)
4561 return 0; 4561 return nullptr;
4562 4562
4563 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated (); 4563 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated ();
4564 if (hasSeenSpanKeyword) 4564 if (hasSeenSpanKeyword)
4565 values->append(cssValuePool().createIdentifierValue(CSSValueSpan)); 4565 values->append(cssValuePool().createIdentifierValue(CSSValueSpan));
4566 if (numericValue) 4566 if (numericValue)
4567 values->append(numericValue.release()); 4567 values->append(numericValue.release());
4568 if (gridLineName) 4568 if (gridLineName)
4569 values->append(gridLineName.release()); 4569 values->append(gridLineName.release());
4570 ASSERT(values->length()); 4570 ASSERT(values->length());
4571 return values.release(); 4571 return values.release();
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
4780 CSSParserValue* currentValue = inputList.current(); 4780 CSSParserValue* currentValue = inputList.current();
4781 inputList.next(); 4781 inputList.next();
4782 4782
4783 if (currentValue->id == CSSValueAuto) 4783 if (currentValue->id == CSSValueAuto)
4784 return cssValuePool().createIdentifierValue(CSSValueAuto); 4784 return cssValuePool().createIdentifierValue(CSSValueAuto);
4785 4785
4786 if (currentValue->unit == CSSParserValue::Function && equalIgnoringCase(curr entValue->function->name, "minmax(")) { 4786 if (currentValue->unit == CSSParserValue::Function && equalIgnoringCase(curr entValue->function->name, "minmax(")) {
4787 // The spec defines the following grammar: minmax( <track-breadth> , <tr ack-breadth> ) 4787 // The spec defines the following grammar: minmax( <track-breadth> , <tr ack-breadth> )
4788 CSSParserValueList* arguments = currentValue->function->args.get(); 4788 CSSParserValueList* arguments = currentValue->function->args.get();
4789 if (!arguments || arguments->size() != 3 || !isComma(arguments->valueAt( 1))) 4789 if (!arguments || arguments->size() != 3 || !isComma(arguments->valueAt( 1)))
4790 return 0; 4790 return nullptr;
4791 4791
4792 RefPtrWillBeRawPtr<CSSPrimitiveValue> minTrackBreadth = parseGridBreadth (arguments->valueAt(0)); 4792 RefPtrWillBeRawPtr<CSSPrimitiveValue> minTrackBreadth = parseGridBreadth (arguments->valueAt(0));
4793 if (!minTrackBreadth) 4793 if (!minTrackBreadth)
4794 return 0; 4794 return nullptr;
4795 4795
4796 RefPtrWillBeRawPtr<CSSPrimitiveValue> maxTrackBreadth = parseGridBreadth (arguments->valueAt(2)); 4796 RefPtrWillBeRawPtr<CSSPrimitiveValue> maxTrackBreadth = parseGridBreadth (arguments->valueAt(2));
4797 if (!maxTrackBreadth) 4797 if (!maxTrackBreadth)
4798 return 0; 4798 return nullptr;
4799 4799
4800 RefPtrWillBeRawPtr<CSSValueList> parsedArguments = CSSValueList::createC ommaSeparated(); 4800 RefPtrWillBeRawPtr<CSSValueList> parsedArguments = CSSValueList::createC ommaSeparated();
4801 parsedArguments->append(minTrackBreadth); 4801 parsedArguments->append(minTrackBreadth);
4802 parsedArguments->append(maxTrackBreadth); 4802 parsedArguments->append(maxTrackBreadth);
4803 return CSSFunctionValue::create("minmax(", parsedArguments); 4803 return CSSFunctionValue::create("minmax(", parsedArguments);
4804 } 4804 }
4805 4805
4806 return parseGridBreadth(currentValue); 4806 return parseGridBreadth(currentValue);
4807 } 4807 }
4808 4808
4809 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseGridBreadth(CS SParserValue* currentValue) 4809 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseGridBreadth(CS SParserValue* currentValue)
4810 { 4810 {
4811 if (currentValue->id == CSSValueMinContent || currentValue->id == CSSValueMa xContent) 4811 if (currentValue->id == CSSValueMinContent || currentValue->id == CSSValueMa xContent)
4812 return cssValuePool().createIdentifierValue(currentValue->id); 4812 return cssValuePool().createIdentifierValue(currentValue->id);
4813 4813
4814 if (currentValue->unit == CSSPrimitiveValue::CSS_FR) { 4814 if (currentValue->unit == CSSPrimitiveValue::CSS_FR) {
4815 double flexValue = currentValue->fValue; 4815 double flexValue = currentValue->fValue;
4816 4816
4817 // Fractional unit is a non-negative dimension. 4817 // Fractional unit is a non-negative dimension.
4818 if (flexValue <= 0) 4818 if (flexValue <= 0)
4819 return 0; 4819 return nullptr;
4820 4820
4821 return cssValuePool().createValue(flexValue, CSSPrimitiveValue::CSS_FR); 4821 return cssValuePool().createValue(flexValue, CSSPrimitiveValue::CSS_FR);
4822 } 4822 }
4823 4823
4824 if (!validUnit(currentValue, FNonNeg | FLength | FPercent)) 4824 if (!validUnit(currentValue, FNonNeg | FLength | FPercent))
4825 return 0; 4825 return nullptr;
4826 4826
4827 return createPrimitiveNumericValue(currentValue); 4827 return createPrimitiveNumericValue(currentValue);
4828 } 4828 }
4829 4829
4830 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseGridTemplateAreas() 4830 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseGridTemplateAreas()
4831 { 4831 {
4832 NamedGridAreaMap gridAreaMap; 4832 NamedGridAreaMap gridAreaMap;
4833 size_t rowCount = 0; 4833 size_t rowCount = 0;
4834 size_t columnCount = 0; 4834 size_t columnCount = 0;
4835 4835
4836 while (CSSParserValue* currentValue = m_valueList->current()) { 4836 while (CSSParserValue* currentValue = m_valueList->current()) {
4837 if (currentValue->unit != CSSPrimitiveValue::CSS_STRING) 4837 if (currentValue->unit != CSSPrimitiveValue::CSS_STRING)
4838 return 0; 4838 return nullptr;
4839 4839
4840 String gridRowNames = currentValue->string; 4840 String gridRowNames = currentValue->string;
4841 if (!gridRowNames.length()) 4841 if (!gridRowNames.length())
4842 return 0; 4842 return nullptr;
4843 4843
4844 Vector<String> columnNames; 4844 Vector<String> columnNames;
4845 gridRowNames.split(' ', columnNames); 4845 gridRowNames.split(' ', columnNames);
4846 4846
4847 if (!columnCount) { 4847 if (!columnCount) {
4848 columnCount = columnNames.size(); 4848 columnCount = columnNames.size();
4849 ASSERT(columnCount); 4849 ASSERT(columnCount);
4850 } else if (columnCount != columnNames.size()) { 4850 } else if (columnCount != columnNames.size()) {
4851 // The declaration is invalid is all the rows don't have the number of columns. 4851 // The declaration is invalid is all the rows don't have the number of columns.
4852 return 0; 4852 return nullptr;
4853 } 4853 }
4854 4854
4855 for (size_t currentCol = 0; currentCol < columnCount; ++currentCol) { 4855 for (size_t currentCol = 0; currentCol < columnCount; ++currentCol) {
4856 const String& gridAreaName = columnNames[currentCol]; 4856 const String& gridAreaName = columnNames[currentCol];
4857 4857
4858 // Unamed areas are always valid (we consider them to be 1x1). 4858 // Unamed areas are always valid (we consider them to be 1x1).
4859 if (gridAreaName == ".") 4859 if (gridAreaName == ".")
4860 continue; 4860 continue;
4861 4861
4862 // We handle several grid areas with the same name at once to simpli fy the validation code. 4862 // We handle several grid areas with the same name at once to simpli fy the validation code.
4863 size_t lookAheadCol; 4863 size_t lookAheadCol;
4864 for (lookAheadCol = currentCol; lookAheadCol < (columnCount - 1); ++ lookAheadCol) { 4864 for (lookAheadCol = currentCol; lookAheadCol < (columnCount - 1); ++ lookAheadCol) {
4865 if (columnNames[lookAheadCol + 1] != gridAreaName) 4865 if (columnNames[lookAheadCol + 1] != gridAreaName)
4866 break; 4866 break;
4867 } 4867 }
4868 4868
4869 NamedGridAreaMap::iterator gridAreaIt = gridAreaMap.find(gridAreaNam e); 4869 NamedGridAreaMap::iterator gridAreaIt = gridAreaMap.find(gridAreaNam e);
4870 if (gridAreaIt == gridAreaMap.end()) { 4870 if (gridAreaIt == gridAreaMap.end()) {
4871 gridAreaMap.add(gridAreaName, GridCoordinate(GridSpan(rowCount, rowCount), GridSpan(currentCol, lookAheadCol))); 4871 gridAreaMap.add(gridAreaName, GridCoordinate(GridSpan(rowCount, rowCount), GridSpan(currentCol, lookAheadCol)));
4872 } else { 4872 } else {
4873 GridCoordinate& gridCoordinate = gridAreaIt->value; 4873 GridCoordinate& gridCoordinate = gridAreaIt->value;
4874 4874
4875 // The following checks test that the grid area is a single fill ed-in rectangle. 4875 // The following checks test that the grid area is a single fill ed-in rectangle.
4876 // 1. The new row is adjacent to the previously parsed row. 4876 // 1. The new row is adjacent to the previously parsed row.
4877 if (rowCount != gridCoordinate.rows.initialPositionIndex + 1) 4877 if (rowCount != gridCoordinate.rows.initialPositionIndex + 1)
4878 return 0; 4878 return nullptr;
4879 4879
4880 // 2. The new area starts at the same position as the previously parsed area. 4880 // 2. The new area starts at the same position as the previously parsed area.
4881 if (currentCol != gridCoordinate.columns.initialPositionIndex) 4881 if (currentCol != gridCoordinate.columns.initialPositionIndex)
4882 return 0; 4882 return nullptr;
4883 4883
4884 // 3. The new area ends at the same position as the previously p arsed area. 4884 // 3. The new area ends at the same position as the previously p arsed area.
4885 if (lookAheadCol != gridCoordinate.columns.finalPositionIndex) 4885 if (lookAheadCol != gridCoordinate.columns.finalPositionIndex)
4886 return 0; 4886 return nullptr;
4887 4887
4888 ++gridCoordinate.rows.finalPositionIndex; 4888 ++gridCoordinate.rows.finalPositionIndex;
4889 } 4889 }
4890 currentCol = lookAheadCol; 4890 currentCol = lookAheadCol;
4891 } 4891 }
4892 4892
4893 ++rowCount; 4893 ++rowCount;
4894 m_valueList->next(); 4894 m_valueList->next();
4895 } 4895 }
4896 4896
4897 if (!rowCount || !columnCount) 4897 if (!rowCount || !columnCount)
4898 return 0; 4898 return nullptr;
4899 4899
4900 return CSSGridTemplateAreasValue::create(gridAreaMap, rowCount, columnCount) ; 4900 return CSSGridTemplateAreasValue::create(gridAreaMap, rowCount, columnCount) ;
4901 } 4901 }
4902 4902
4903 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseCounterContent(CSSParse rValueList* args, bool counters) 4903 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseCounterContent(CSSParse rValueList* args, bool counters)
4904 { 4904 {
4905 unsigned numArgs = args->size(); 4905 unsigned numArgs = args->size();
4906 if (counters && numArgs != 3 && numArgs != 5) 4906 if (counters && numArgs != 3 && numArgs != 5)
4907 return 0; 4907 return nullptr;
4908 if (!counters && numArgs != 1 && numArgs != 3) 4908 if (!counters && numArgs != 1 && numArgs != 3)
4909 return 0; 4909 return nullptr;
4910 4910
4911 CSSParserValue* i = args->current(); 4911 CSSParserValue* i = args->current();
4912 if (i->unit != CSSPrimitiveValue::CSS_IDENT) 4912 if (i->unit != CSSPrimitiveValue::CSS_IDENT)
4913 return 0; 4913 return nullptr;
4914 RefPtrWillBeRawPtr<CSSPrimitiveValue> identifier = createPrimitiveStringValu e(i); 4914 RefPtrWillBeRawPtr<CSSPrimitiveValue> identifier = createPrimitiveStringValu e(i);
4915 4915
4916 RefPtrWillBeRawPtr<CSSPrimitiveValue> separator; 4916 RefPtrWillBeRawPtr<CSSPrimitiveValue> separator;
4917 if (!counters) 4917 if (!counters)
4918 separator = cssValuePool().createValue(String(), CSSPrimitiveValue::CSS_ STRING); 4918 separator = cssValuePool().createValue(String(), CSSPrimitiveValue::CSS_ STRING);
4919 else { 4919 else {
4920 i = args->next(); 4920 i = args->next();
4921 if (i->unit != CSSParserValue::Operator || i->iValue != ',') 4921 if (i->unit != CSSParserValue::Operator || i->iValue != ',')
4922 return 0; 4922 return nullptr;
4923 4923
4924 i = args->next(); 4924 i = args->next();
4925 if (i->unit != CSSPrimitiveValue::CSS_STRING) 4925 if (i->unit != CSSPrimitiveValue::CSS_STRING)
4926 return 0; 4926 return nullptr;
4927 4927
4928 separator = createPrimitiveStringValue(i); 4928 separator = createPrimitiveStringValue(i);
4929 } 4929 }
4930 4930
4931 RefPtrWillBeRawPtr<CSSPrimitiveValue> listStyle; 4931 RefPtrWillBeRawPtr<CSSPrimitiveValue> listStyle;
4932 i = args->next(); 4932 i = args->next();
4933 if (!i) // Make the list style default decimal 4933 if (!i) // Make the list style default decimal
4934 listStyle = cssValuePool().createIdentifierValue(CSSValueDecimal); 4934 listStyle = cssValuePool().createIdentifierValue(CSSValueDecimal);
4935 else { 4935 else {
4936 if (i->unit != CSSParserValue::Operator || i->iValue != ',') 4936 if (i->unit != CSSParserValue::Operator || i->iValue != ',')
4937 return 0; 4937 return nullptr;
4938 4938
4939 i = args->next(); 4939 i = args->next();
4940 if (i->unit != CSSPrimitiveValue::CSS_IDENT) 4940 if (i->unit != CSSPrimitiveValue::CSS_IDENT)
4941 return 0; 4941 return nullptr;
4942 4942
4943 CSSValueID listStyleID = CSSValueInvalid; 4943 CSSValueID listStyleID = CSSValueInvalid;
4944 if (i->id == CSSValueNone || (i->id >= CSSValueDisc && i->id <= CSSValue KatakanaIroha)) 4944 if (i->id == CSSValueNone || (i->id >= CSSValueDisc && i->id <= CSSValue KatakanaIroha))
4945 listStyleID = i->id; 4945 listStyleID = i->id;
4946 else 4946 else
4947 return 0; 4947 return nullptr;
4948 4948
4949 listStyle = cssValuePool().createIdentifierValue(listStyleID); 4949 listStyle = cssValuePool().createIdentifierValue(listStyleID);
4950 } 4950 }
4951 4951
4952 return cssValuePool().createValue(Counter::create(identifier.release(), list Style.release(), separator.release())); 4952 return cssValuePool().createValue(Counter::create(identifier.release(), list Style.release(), separator.release()));
4953 } 4953 }
4954 4954
4955 bool CSSPropertyParser::parseClipShape(CSSPropertyID propId, bool important) 4955 bool CSSPropertyParser::parseClipShape(CSSPropertyID propId, bool important)
4956 { 4956 {
4957 CSSParserValue* value = m_valueList->current(); 4957 CSSParserValue* value = m_valueList->current();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
5013 radii[3] = radii[1]; 5013 radii[3] = radii[1];
5014 } 5014 }
5015 5015
5016 // FIXME: This should be refactored with CSSParser::parseBorderRadius. 5016 // FIXME: This should be refactored with CSSParser::parseBorderRadius.
5017 // CSSParser::parseBorderRadius contains support for some legacy radius construc tion. 5017 // CSSParser::parseBorderRadius contains support for some legacy radius construc tion.
5018 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseInsetRoundedCorner s(PassRefPtrWillBeRawPtr<CSSBasicShapeInset> shape, CSSParserValueList* args) 5018 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseInsetRoundedCorner s(PassRefPtrWillBeRawPtr<CSSBasicShapeInset> shape, CSSParserValueList* args)
5019 { 5019 {
5020 CSSParserValue* argument = args->next(); 5020 CSSParserValue* argument = args->next();
5021 5021
5022 if (!argument) 5022 if (!argument)
5023 return 0; 5023 return nullptr;
5024 5024
5025 CSSParserValueList radiusArguments; 5025 CSSParserValueList radiusArguments;
5026 while (argument) { 5026 while (argument) {
5027 radiusArguments.addValue(*argument); 5027 radiusArguments.addValue(*argument);
5028 argument = args->next(); 5028 argument = args->next();
5029 } 5029 }
5030 5030
5031 unsigned num = radiusArguments.size(); 5031 unsigned num = radiusArguments.size();
5032 if (!num || num > 9) 5032 if (!num || num > 9)
5033 return 0; 5033 return nullptr;
5034 5034
5035 // FIXME: Refactor completeBorderRadii and the array 5035 // FIXME: Refactor completeBorderRadii and the array
5036 RefPtrWillBeRawPtr<CSSPrimitiveValue> radii[2][4]; 5036 RefPtrWillBeRawPtr<CSSPrimitiveValue> radii[2][4];
5037 5037
5038 unsigned indexAfterSlash = 0; 5038 unsigned indexAfterSlash = 0;
5039 for (unsigned i = 0; i < num; ++i) { 5039 for (unsigned i = 0; i < num; ++i) {
5040 CSSParserValue* value = radiusArguments.valueAt(i); 5040 CSSParserValue* value = radiusArguments.valueAt(i);
5041 if (value->unit == CSSParserValue::Operator) { 5041 if (value->unit == CSSParserValue::Operator) {
5042 if (value->iValue != '/') 5042 if (value->iValue != '/')
5043 return 0; 5043 return nullptr;
5044 5044
5045 if (!i || indexAfterSlash || i + 1 == num) 5045 if (!i || indexAfterSlash || i + 1 == num)
5046 return 0; 5046 return nullptr;
5047 5047
5048 indexAfterSlash = i + 1; 5048 indexAfterSlash = i + 1;
5049 completeBorderRadii(radii[0]); 5049 completeBorderRadii(radii[0]);
5050 continue; 5050 continue;
5051 } 5051 }
5052 5052
5053 if (i - indexAfterSlash >= 4) 5053 if (i - indexAfterSlash >= 4)
5054 return 0; 5054 return nullptr;
5055 5055
5056 if (!validUnit(value, FLength | FPercent | FNonNeg)) 5056 if (!validUnit(value, FLength | FPercent | FNonNeg))
5057 return 0; 5057 return nullptr;
5058 5058
5059 RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = createPrimitiveNumericVal ue(value); 5059 RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = createPrimitiveNumericVal ue(value);
5060 5060
5061 if (!indexAfterSlash) 5061 if (!indexAfterSlash)
5062 radii[0][i] = radius; 5062 radii[0][i] = radius;
5063 else 5063 else
5064 radii[1][i - indexAfterSlash] = radius.release(); 5064 radii[1][i - indexAfterSlash] = radius.release();
5065 } 5065 }
5066 5066
5067 if (!indexAfterSlash) { 5067 if (!indexAfterSlash) {
(...skipping 22 matching lines...) Expand all
5090 bool hasRoundedInset = false; 5090 bool hasRoundedInset = false;
5091 5091
5092 while (argument) { 5092 while (argument) {
5093 if (argument->unit == CSSPrimitiveValue::CSS_IDENT && equalIgnoringCase( argument->string, "round")) { 5093 if (argument->unit == CSSPrimitiveValue::CSS_IDENT && equalIgnoringCase( argument->string, "round")) {
5094 hasRoundedInset = true; 5094 hasRoundedInset = true;
5095 break; 5095 break;
5096 } 5096 }
5097 5097
5098 Units unitFlags = FLength | FPercent; 5098 Units unitFlags = FLength | FPercent;
5099 if (!validUnit(argument, unitFlags) || widthArguments.size() > 4) 5099 if (!validUnit(argument, unitFlags) || widthArguments.size() > 4)
5100 return 0; 5100 return nullptr;
5101 5101
5102 widthArguments.append(createPrimitiveNumericValue(argument)); 5102 widthArguments.append(createPrimitiveNumericValue(argument));
5103 argument = args->next(); 5103 argument = args->next();
5104 } 5104 }
5105 5105
5106 switch (widthArguments.size()) { 5106 switch (widthArguments.size()) {
5107 case 1: { 5107 case 1: {
5108 shape->updateShapeSize1Value(widthArguments[0].get()); 5108 shape->updateShapeSize1Value(widthArguments[0].get());
5109 break; 5109 break;
5110 } 5110 }
5111 case 2: { 5111 case 2: {
5112 shape->updateShapeSize2Values(widthArguments[0].get(), widthArguments[1] .get()); 5112 shape->updateShapeSize2Values(widthArguments[0].get(), widthArguments[1] .get());
5113 break; 5113 break;
5114 } 5114 }
5115 case 3: { 5115 case 3: {
5116 shape->updateShapeSize3Values(widthArguments[0].get(), widthArguments[1] .get(), widthArguments[2].get()); 5116 shape->updateShapeSize3Values(widthArguments[0].get(), widthArguments[1] .get(), widthArguments[2].get());
5117 break; 5117 break;
5118 } 5118 }
5119 case 4: { 5119 case 4: {
5120 shape->updateShapeSize4Values(widthArguments[0].get(), widthArguments[1] .get(), widthArguments[2].get(), widthArguments[3].get()); 5120 shape->updateShapeSize4Values(widthArguments[0].get(), widthArguments[1] .get(), widthArguments[2].get(), widthArguments[3].get());
5121 break; 5121 break;
5122 } 5122 }
5123 default: 5123 default:
5124 return 0; 5124 return nullptr;
5125 } 5125 }
5126 5126
5127 if (hasRoundedInset) 5127 if (hasRoundedInset)
5128 return parseInsetRoundedCorners(shape, args); 5128 return parseInsetRoundedCorners(shape, args);
5129 return shape; 5129 return shape;
5130 } 5130 }
5131 5131
5132 static bool isItemPositionKeyword(CSSValueID id) 5132 static bool isItemPositionKeyword(CSSValueID id)
5133 { 5133 {
5134 return id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter 5134 return id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter
(...skipping 10 matching lines...) Expand all
5145 CSSParserValue* value = m_valueList->current(); 5145 CSSParserValue* value = m_valueList->current();
5146 5146
5147 if (value->id == CSSValueAuto || value->id == CSSValueBaseline || value->id == CSSValueStretch) { 5147 if (value->id == CSSValueAuto || value->id == CSSValueBaseline || value->id == CSSValueStretch) {
5148 if (m_valueList->next()) 5148 if (m_valueList->next())
5149 return false; 5149 return false;
5150 5150
5151 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp ortant); 5151 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp ortant);
5152 return true; 5152 return true;
5153 } 5153 }
5154 5154
5155 RefPtrWillBeRawPtr<CSSPrimitiveValue> position = 0; 5155 RefPtrWillBeRawPtr<CSSPrimitiveValue> position = nullptr;
5156 RefPtrWillBeRawPtr<CSSPrimitiveValue> overflowAlignmentKeyword = 0; 5156 RefPtrWillBeRawPtr<CSSPrimitiveValue> overflowAlignmentKeyword = nullptr;
5157 if (isItemPositionKeyword(value->id)) { 5157 if (isItemPositionKeyword(value->id)) {
5158 position = cssValuePool().createIdentifierValue(value->id); 5158 position = cssValuePool().createIdentifierValue(value->id);
5159 value = m_valueList->next(); 5159 value = m_valueList->next();
5160 if (value) { 5160 if (value) {
5161 if (value->id == CSSValueTrue || value->id == CSSValueSafe) 5161 if (value->id == CSSValueTrue || value->id == CSSValueSafe)
5162 overflowAlignmentKeyword = cssValuePool().createIdentifierValue( value->id); 5162 overflowAlignmentKeyword = cssValuePool().createIdentifierValue( value->id);
5163 else 5163 else
5164 return false; 5164 return false;
5165 } 5165 }
5166 } else if (value->id == CSSValueTrue || value->id == CSSValueSafe) { 5166 } else if (value->id == CSSValueTrue || value->id == CSSValueSafe) {
(...skipping 20 matching lines...) Expand all
5187 5187
5188 return true; 5188 return true;
5189 } 5189 }
5190 5190
5191 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapeRectangl e(CSSParserValueList* args) 5191 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapeRectangl e(CSSParserValueList* args)
5192 { 5192 {
5193 ASSERT(args); 5193 ASSERT(args);
5194 5194
5195 // rect(x, y, width, height, [[rx], ry]) 5195 // rect(x, y, width, height, [[rx], ry])
5196 if (args->size() != 7 && args->size() != 9 && args->size() != 11) 5196 if (args->size() != 7 && args->size() != 9 && args->size() != 11)
5197 return 0; 5197 return nullptr;
5198 5198
5199 RefPtrWillBeRawPtr<CSSBasicShapeRectangle> shape = CSSBasicShapeRectangle::c reate(); 5199 RefPtrWillBeRawPtr<CSSBasicShapeRectangle> shape = CSSBasicShapeRectangle::c reate();
5200 5200
5201 unsigned argumentNumber = 0; 5201 unsigned argumentNumber = 0;
5202 CSSParserValue* argument = args->current(); 5202 CSSParserValue* argument = args->current();
5203 while (argument) { 5203 while (argument) {
5204 Units unitFlags = FLength | FPercent; 5204 Units unitFlags = FLength | FPercent;
5205 if (argumentNumber > 1) { 5205 if (argumentNumber > 1) {
5206 // Arguments width, height, rx, and ry cannot be negative. 5206 // Arguments width, height, rx, and ry cannot be negative.
5207 unitFlags = unitFlags | FNonNeg; 5207 unitFlags = unitFlags | FNonNeg;
5208 } 5208 }
5209 if (!validUnit(argument, unitFlags)) 5209 if (!validUnit(argument, unitFlags))
5210 return 0; 5210 return nullptr;
5211 5211
5212 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument); 5212 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument);
5213 ASSERT(argumentNumber < 6); 5213 ASSERT(argumentNumber < 6);
5214 switch (argumentNumber) { 5214 switch (argumentNumber) {
5215 case 0: 5215 case 0:
5216 shape->setX(length); 5216 shape->setX(length);
5217 break; 5217 break;
5218 case 1: 5218 case 1:
5219 shape->setY(length); 5219 shape->setY(length);
5220 break; 5220 break;
5221 case 2: 5221 case 2:
5222 shape->setWidth(length); 5222 shape->setWidth(length);
5223 break; 5223 break;
5224 case 3: 5224 case 3:
5225 shape->setHeight(length); 5225 shape->setHeight(length);
5226 break; 5226 break;
5227 case 4: 5227 case 4:
5228 shape->setRadiusX(length); 5228 shape->setRadiusX(length);
5229 break; 5229 break;
5230 case 5: 5230 case 5:
5231 shape->setRadiusY(length); 5231 shape->setRadiusY(length);
5232 break; 5232 break;
5233 } 5233 }
5234 argument = args->next(); 5234 argument = args->next();
5235 if (argument) { 5235 if (argument) {
5236 if (!isComma(argument)) 5236 if (!isComma(argument))
5237 return 0; 5237 return nullptr;
5238 5238
5239 argument = args->next(); 5239 argument = args->next();
5240 } 5240 }
5241 argumentNumber++; 5241 argumentNumber++;
5242 } 5242 }
5243 5243
5244 if (argumentNumber < 4) 5244 if (argumentNumber < 4)
5245 return 0; 5245 return nullptr;
5246 return shape; 5246 return shape;
5247 } 5247 }
5248 5248
5249 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapeInsetRec tangle(CSSParserValueList* args) 5249 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapeInsetRec tangle(CSSParserValueList* args)
5250 { 5250 {
5251 ASSERT(args); 5251 ASSERT(args);
5252 5252
5253 // inset-rectangle(top, right, bottom, left, [[rx], ry]) 5253 // inset-rectangle(top, right, bottom, left, [[rx], ry])
5254 if (args->size() != 7 && args->size() != 9 && args->size() != 11) 5254 if (args->size() != 7 && args->size() != 9 && args->size() != 11)
5255 return 0; 5255 return nullptr;
5256 5256
5257 RefPtrWillBeRawPtr<CSSBasicShapeInsetRectangle> shape = CSSBasicShapeInsetRe ctangle::create(); 5257 RefPtrWillBeRawPtr<CSSBasicShapeInsetRectangle> shape = CSSBasicShapeInsetRe ctangle::create();
5258 5258
5259 unsigned argumentNumber = 0; 5259 unsigned argumentNumber = 0;
5260 CSSParserValue* argument = args->current(); 5260 CSSParserValue* argument = args->current();
5261 while (argument) { 5261 while (argument) {
5262 Units unitFlags = FLength | FPercent | FNonNeg; 5262 Units unitFlags = FLength | FPercent | FNonNeg;
5263 if (!validUnit(argument, unitFlags)) 5263 if (!validUnit(argument, unitFlags))
5264 return 0; 5264 return nullptr;
5265 5265
5266 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument); 5266 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument);
5267 ASSERT(argumentNumber < 6); 5267 ASSERT(argumentNumber < 6);
5268 switch (argumentNumber) { 5268 switch (argumentNumber) {
5269 case 0: 5269 case 0:
5270 shape->setTop(length); 5270 shape->setTop(length);
5271 break; 5271 break;
5272 case 1: 5272 case 1:
5273 shape->setRight(length); 5273 shape->setRight(length);
5274 break; 5274 break;
5275 case 2: 5275 case 2:
5276 shape->setBottom(length); 5276 shape->setBottom(length);
5277 break; 5277 break;
5278 case 3: 5278 case 3:
5279 shape->setLeft(length); 5279 shape->setLeft(length);
5280 break; 5280 break;
5281 case 4: 5281 case 4:
5282 shape->setRadiusX(length); 5282 shape->setRadiusX(length);
5283 break; 5283 break;
5284 case 5: 5284 case 5:
5285 shape->setRadiusY(length); 5285 shape->setRadiusY(length);
5286 break; 5286 break;
5287 } 5287 }
5288 argument = args->next(); 5288 argument = args->next();
5289 if (argument) { 5289 if (argument) {
5290 if (!isComma(argument)) 5290 if (!isComma(argument))
5291 return 0; 5291 return nullptr;
5292 5292
5293 argument = args->next(); 5293 argument = args->next();
5294 } 5294 }
5295 argumentNumber++; 5295 argumentNumber++;
5296 } 5296 }
5297 5297
5298 if (argumentNumber < 4) 5298 if (argumentNumber < 4)
5299 return 0; 5299 return nullptr;
5300 return shape; 5300 return shape;
5301 } 5301 }
5302 5302
5303 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseShapeRadius(CS SParserValue* value) 5303 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseShapeRadius(CS SParserValue* value)
5304 { 5304 {
5305 if (value->id == CSSValueClosestSide || value->id == CSSValueFarthestSide) 5305 if (value->id == CSSValueClosestSide || value->id == CSSValueFarthestSide)
5306 return cssValuePool().createIdentifierValue(value->id); 5306 return cssValuePool().createIdentifierValue(value->id);
5307 5307
5308 if (!validUnit(value, FLength | FPercent | FNonNeg)) 5308 if (!validUnit(value, FLength | FPercent | FNonNeg))
5309 return 0; 5309 return nullptr;
5310 5310
5311 return createPrimitiveNumericValue(value); 5311 return createPrimitiveNumericValue(value);
5312 } 5312 }
5313 5313
5314 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapeCircle(C SSParserValueList* args) 5314 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapeCircle(C SSParserValueList* args)
5315 { 5315 {
5316 ASSERT(args); 5316 ASSERT(args);
5317 5317
5318 // circle(radius) 5318 // circle(radius)
5319 // circle(radius at <position> 5319 // circle(radius at <position>
5320 // circle(at <position>) 5320 // circle(at <position>)
5321 // where position defines centerX and centerY using a CSS <position> data ty pe. 5321 // where position defines centerX and centerY using a CSS <position> data ty pe.
5322 RefPtrWillBeRawPtr<CSSBasicShapeCircle> shape = CSSBasicShapeCircle::create( ); 5322 RefPtrWillBeRawPtr<CSSBasicShapeCircle> shape = CSSBasicShapeCircle::create( );
5323 5323
5324 for (CSSParserValue* argument = args->current(); argument; argument = args-> next()) { 5324 for (CSSParserValue* argument = args->current(); argument; argument = args-> next()) {
5325 // The call to parseFillPosition below should consume all of the 5325 // The call to parseFillPosition below should consume all of the
5326 // arguments except the first two. Thus, and index greater than one 5326 // arguments except the first two. Thus, and index greater than one
5327 // indicates an invalid production. 5327 // indicates an invalid production.
5328 if (args->currentIndex() > 1) 5328 if (args->currentIndex() > 1)
5329 return 0; 5329 return nullptr;
5330 5330
5331 if (!args->currentIndex() && argument->id != CSSValueAt) { 5331 if (!args->currentIndex() && argument->id != CSSValueAt) {
5332 if (RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = parseShapeRadius( argument)) { 5332 if (RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = parseShapeRadius( argument)) {
5333 shape->setRadius(radius); 5333 shape->setRadius(radius);
5334 continue; 5334 continue;
5335 } 5335 }
5336 5336
5337 return 0; 5337 return nullptr;
5338 } 5338 }
5339 5339
5340 if (argument->id == CSSValueAt) { 5340 if (argument->id == CSSValueAt) {
5341 RefPtrWillBeRawPtr<CSSValue> centerX; 5341 RefPtrWillBeRawPtr<CSSValue> centerX;
5342 RefPtrWillBeRawPtr<CSSValue> centerY; 5342 RefPtrWillBeRawPtr<CSSValue> centerY;
5343 args->next(); // set list to start of position center 5343 args->next(); // set list to start of position center
5344 parseFillPosition(args, centerX, centerY); 5344 parseFillPosition(args, centerX, centerY);
5345 if (centerX && centerY) { 5345 if (centerX && centerY) {
5346 ASSERT(centerX->isPrimitiveValue()); 5346 ASSERT(centerX->isPrimitiveValue());
5347 ASSERT(centerY->isPrimitiveValue()); 5347 ASSERT(centerY->isPrimitiveValue());
5348 shape->setCenterX(toCSSPrimitiveValue(centerX.get())); 5348 shape->setCenterX(toCSSPrimitiveValue(centerX.get()));
5349 shape->setCenterY(toCSSPrimitiveValue(centerY.get())); 5349 shape->setCenterY(toCSSPrimitiveValue(centerY.get()));
5350 } else { 5350 } else {
5351 return 0; 5351 return nullptr;
5352 } 5352 }
5353 } else { 5353 } else {
5354 return 0; 5354 return nullptr;
5355 } 5355 }
5356 } 5356 }
5357 5357
5358 return shape; 5358 return shape;
5359 } 5359 }
5360 5360
5361 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseDeprecatedBasicSha peCircle(CSSParserValueList* args) 5361 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseDeprecatedBasicSha peCircle(CSSParserValueList* args)
5362 { 5362 {
5363 ASSERT(args); 5363 ASSERT(args);
5364 5364
5365 // circle(centerX, centerY, radius) 5365 // circle(centerX, centerY, radius)
5366 if (args->size() != 5) 5366 if (args->size() != 5)
5367 return 0; 5367 return nullptr;
5368 5368
5369 RefPtrWillBeRawPtr<CSSDeprecatedBasicShapeCircle> shape = CSSDeprecatedBasic ShapeCircle::create(); 5369 RefPtrWillBeRawPtr<CSSDeprecatedBasicShapeCircle> shape = CSSDeprecatedBasic ShapeCircle::create();
5370 5370
5371 unsigned argumentNumber = 0; 5371 unsigned argumentNumber = 0;
5372 CSSParserValue* argument = args->current(); 5372 CSSParserValue* argument = args->current();
5373 while (argument) { 5373 while (argument) {
5374 Units unitFlags = FLength | FPercent; 5374 Units unitFlags = FLength | FPercent;
5375 if (argumentNumber == 2) { 5375 if (argumentNumber == 2) {
5376 // Argument radius cannot be negative. 5376 // Argument radius cannot be negative.
5377 unitFlags = unitFlags | FNonNeg; 5377 unitFlags = unitFlags | FNonNeg;
5378 } 5378 }
5379 5379
5380 if (!validUnit(argument, unitFlags)) 5380 if (!validUnit(argument, unitFlags))
5381 return 0; 5381 return nullptr;
5382 5382
5383 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument); 5383 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument);
5384 ASSERT(argumentNumber < 3); 5384 ASSERT(argumentNumber < 3);
5385 switch (argumentNumber) { 5385 switch (argumentNumber) {
5386 case 0: 5386 case 0:
5387 shape->setCenterX(length); 5387 shape->setCenterX(length);
5388 break; 5388 break;
5389 case 1: 5389 case 1:
5390 shape->setCenterY(length); 5390 shape->setCenterY(length);
5391 break; 5391 break;
5392 case 2: 5392 case 2:
5393 shape->setRadius(length); 5393 shape->setRadius(length);
5394 break; 5394 break;
5395 } 5395 }
5396 5396
5397 argument = args->next(); 5397 argument = args->next();
5398 if (argument) { 5398 if (argument) {
5399 if (!isComma(argument)) 5399 if (!isComma(argument))
5400 return 0; 5400 return nullptr;
5401 argument = args->next(); 5401 argument = args->next();
5402 } 5402 }
5403 argumentNumber++; 5403 argumentNumber++;
5404 } 5404 }
5405 5405
5406 if (argumentNumber < 3) 5406 if (argumentNumber < 3)
5407 return 0; 5407 return nullptr;
5408 return shape; 5408 return shape;
5409 } 5409 }
5410 5410
5411 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapeEllipse( CSSParserValueList* args) 5411 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapeEllipse( CSSParserValueList* args)
5412 { 5412 {
5413 ASSERT(args); 5413 ASSERT(args);
5414 5414
5415 // ellipse(radiusX) 5415 // ellipse(radiusX)
5416 // ellipse(radiusX at <position> 5416 // ellipse(radiusX at <position>
5417 // ellipse(radiusX radiusY) 5417 // ellipse(radiusX radiusY)
5418 // ellipse(radiusX radiusY at <position> 5418 // ellipse(radiusX radiusY at <position>
5419 // ellipse(at <position>) 5419 // ellipse(at <position>)
5420 // where position defines centerX and centerY using a CSS <position> data ty pe. 5420 // where position defines centerX and centerY using a CSS <position> data ty pe.
5421 RefPtrWillBeRawPtr<CSSBasicShapeEllipse> shape = CSSBasicShapeEllipse::creat e(); 5421 RefPtrWillBeRawPtr<CSSBasicShapeEllipse> shape = CSSBasicShapeEllipse::creat e();
5422 5422
5423 for (CSSParserValue* argument = args->current(); argument; argument = args-> next()) { 5423 for (CSSParserValue* argument = args->current(); argument; argument = args-> next()) {
5424 // The call to parseFillPosition below should consume all of the 5424 // The call to parseFillPosition below should consume all of the
5425 // arguments except the first three. Thus, an index greater than two 5425 // arguments except the first three. Thus, an index greater than two
5426 // indicates an invalid production. 5426 // indicates an invalid production.
5427 if (args->currentIndex() > 2) 5427 if (args->currentIndex() > 2)
5428 return 0; 5428 return nullptr;
5429 5429
5430 if (args->currentIndex() < 2 && argument->id != CSSValueAt) { 5430 if (args->currentIndex() < 2 && argument->id != CSSValueAt) {
5431 if (RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = parseShapeRadius( argument)) { 5431 if (RefPtrWillBeRawPtr<CSSPrimitiveValue> radius = parseShapeRadius( argument)) {
5432 if (!shape->radiusX()) 5432 if (!shape->radiusX())
5433 shape->setRadiusX(radius); 5433 shape->setRadiusX(radius);
5434 else 5434 else
5435 shape->setRadiusY(radius); 5435 shape->setRadiusY(radius);
5436 continue; 5436 continue;
5437 } 5437 }
5438 5438
5439 return 0; 5439 return nullptr;
5440 } 5440 }
5441 5441
5442 if (argument->id != CSSValueAt) 5442 if (argument->id != CSSValueAt)
5443 return 0; 5443 return nullptr;
5444 RefPtrWillBeRawPtr<CSSValue> centerX; 5444 RefPtrWillBeRawPtr<CSSValue> centerX;
5445 RefPtrWillBeRawPtr<CSSValue> centerY; 5445 RefPtrWillBeRawPtr<CSSValue> centerY;
5446 args->next(); // set list to start of position center 5446 args->next(); // set list to start of position center
5447 parseFillPosition(args, centerX, centerY); 5447 parseFillPosition(args, centerX, centerY);
5448 if (!centerX || !centerY) 5448 if (!centerX || !centerY)
5449 return 0; 5449 return nullptr;
5450 5450
5451 ASSERT(centerX->isPrimitiveValue()); 5451 ASSERT(centerX->isPrimitiveValue());
5452 ASSERT(centerY->isPrimitiveValue()); 5452 ASSERT(centerY->isPrimitiveValue());
5453 shape->setCenterX(toCSSPrimitiveValue(centerX.get())); 5453 shape->setCenterX(toCSSPrimitiveValue(centerX.get()));
5454 shape->setCenterY(toCSSPrimitiveValue(centerY.get())); 5454 shape->setCenterY(toCSSPrimitiveValue(centerY.get()));
5455 } 5455 }
5456 5456
5457 return shape; 5457 return shape;
5458 } 5458 }
5459 5459
5460 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseDeprecatedBasicSha peEllipse(CSSParserValueList* args) 5460 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseDeprecatedBasicSha peEllipse(CSSParserValueList* args)
5461 { 5461 {
5462 ASSERT(args); 5462 ASSERT(args);
5463 5463
5464 // ellipse(centerX, centerY, radiusX, radiusY) 5464 // ellipse(centerX, centerY, radiusX, radiusY)
5465 if (args->size() != 7) 5465 if (args->size() != 7)
5466 return 0; 5466 return nullptr;
5467 5467
5468 RefPtrWillBeRawPtr<CSSDeprecatedBasicShapeEllipse> shape = CSSDeprecatedBasi cShapeEllipse::create(); 5468 RefPtrWillBeRawPtr<CSSDeprecatedBasicShapeEllipse> shape = CSSDeprecatedBasi cShapeEllipse::create();
5469 unsigned argumentNumber = 0; 5469 unsigned argumentNumber = 0;
5470 CSSParserValue* argument = args->current(); 5470 CSSParserValue* argument = args->current();
5471 while (argument) { 5471 while (argument) {
5472 Units unitFlags = FLength | FPercent; 5472 Units unitFlags = FLength | FPercent;
5473 if (argumentNumber > 1) { 5473 if (argumentNumber > 1) {
5474 // Arguments radiusX and radiusY cannot be negative. 5474 // Arguments radiusX and radiusY cannot be negative.
5475 unitFlags = unitFlags | FNonNeg; 5475 unitFlags = unitFlags | FNonNeg;
5476 } 5476 }
5477 if (!validUnit(argument, unitFlags)) 5477 if (!validUnit(argument, unitFlags))
5478 return 0; 5478 return nullptr;
5479 5479
5480 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument); 5480 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumericVal ue(argument);
5481 ASSERT(argumentNumber < 4); 5481 ASSERT(argumentNumber < 4);
5482 switch (argumentNumber) { 5482 switch (argumentNumber) {
5483 case 0: 5483 case 0:
5484 shape->setCenterX(length); 5484 shape->setCenterX(length);
5485 break; 5485 break;
5486 case 1: 5486 case 1:
5487 shape->setCenterY(length); 5487 shape->setCenterY(length);
5488 break; 5488 break;
5489 case 2: 5489 case 2:
5490 shape->setRadiusX(length); 5490 shape->setRadiusX(length);
5491 break; 5491 break;
5492 case 3: 5492 case 3:
5493 shape->setRadiusY(length); 5493 shape->setRadiusY(length);
5494 break; 5494 break;
5495 } 5495 }
5496 5496
5497 argument = args->next(); 5497 argument = args->next();
5498 if (argument) { 5498 if (argument) {
5499 if (!isComma(argument)) 5499 if (!isComma(argument))
5500 return 0; 5500 return nullptr;
5501 argument = args->next(); 5501 argument = args->next();
5502 } 5502 }
5503 argumentNumber++; 5503 argumentNumber++;
5504 } 5504 }
5505 5505
5506 if (argumentNumber < 4) 5506 if (argumentNumber < 4)
5507 return 0; 5507 return nullptr;
5508 return shape; 5508 return shape;
5509 } 5509 }
5510 5510
5511 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapePolygon( CSSParserValueList* args) 5511 PassRefPtrWillBeRawPtr<CSSBasicShape> CSSPropertyParser::parseBasicShapePolygon( CSSParserValueList* args)
5512 { 5512 {
5513 ASSERT(args); 5513 ASSERT(args);
5514 5514
5515 unsigned size = args->size(); 5515 unsigned size = args->size();
5516 if (!size) 5516 if (!size)
5517 return 0; 5517 return nullptr;
5518 5518
5519 RefPtrWillBeRawPtr<CSSBasicShapePolygon> shape = CSSBasicShapePolygon::creat e(); 5519 RefPtrWillBeRawPtr<CSSBasicShapePolygon> shape = CSSBasicShapePolygon::creat e();
5520 5520
5521 CSSParserValue* argument = args->current(); 5521 CSSParserValue* argument = args->current();
5522 if (argument->id == CSSValueEvenodd || argument->id == CSSValueNonzero) { 5522 if (argument->id == CSSValueEvenodd || argument->id == CSSValueNonzero) {
5523 shape->setWindRule(argument->id == CSSValueEvenodd ? RULE_EVENODD : RULE _NONZERO); 5523 shape->setWindRule(argument->id == CSSValueEvenodd ? RULE_EVENODD : RULE _NONZERO);
5524 5524
5525 if (!isComma(args->next())) 5525 if (!isComma(args->next()))
5526 return 0; 5526 return nullptr;
5527 5527
5528 argument = args->next(); 5528 argument = args->next();
5529 size -= 2; 5529 size -= 2;
5530 } 5530 }
5531 5531
5532 // <length> <length>, ... <length> <length> -> each pair has 3 elements exce pt the last one 5532 // <length> <length>, ... <length> <length> -> each pair has 3 elements exce pt the last one
5533 if (!size || (size % 3) - 2) 5533 if (!size || (size % 3) - 2)
5534 return 0; 5534 return nullptr;
5535 5535
5536 CSSParserValue* argumentX = argument; 5536 CSSParserValue* argumentX = argument;
5537 while (argumentX) { 5537 while (argumentX) {
5538 if (!validUnit(argumentX, FLength | FPercent)) 5538 if (!validUnit(argumentX, FLength | FPercent))
5539 return 0; 5539 return nullptr;
5540 5540
5541 CSSParserValue* argumentY = args->next(); 5541 CSSParserValue* argumentY = args->next();
5542 if (!argumentY || !validUnit(argumentY, FLength | FPercent)) 5542 if (!argumentY || !validUnit(argumentY, FLength | FPercent))
5543 return 0; 5543 return nullptr;
5544 5544
5545 RefPtrWillBeRawPtr<CSSPrimitiveValue> xLength = createPrimitiveNumericVa lue(argumentX); 5545 RefPtrWillBeRawPtr<CSSPrimitiveValue> xLength = createPrimitiveNumericVa lue(argumentX);
5546 RefPtrWillBeRawPtr<CSSPrimitiveValue> yLength = createPrimitiveNumericVa lue(argumentY); 5546 RefPtrWillBeRawPtr<CSSPrimitiveValue> yLength = createPrimitiveNumericVa lue(argumentY);
5547 5547
5548 shape->appendPoint(xLength.release(), yLength.release()); 5548 shape->appendPoint(xLength.release(), yLength.release());
5549 5549
5550 CSSParserValue* commaOrNull = args->next(); 5550 CSSParserValue* commaOrNull = args->next();
5551 if (!commaOrNull) 5551 if (!commaOrNull)
5552 argumentX = 0; 5552 argumentX = 0;
5553 else if (!isComma(commaOrNull)) 5553 else if (!isComma(commaOrNull))
5554 return 0; 5554 return nullptr;
5555 else 5555 else
5556 argumentX = args->next(); 5556 argumentX = args->next();
5557 } 5557 }
5558 5558
5559 return shape; 5559 return shape;
5560 } 5560 }
5561 5561
5562 static bool isBoxValue(CSSValueID valueId) 5562 static bool isBoxValue(CSSValueID valueId)
5563 { 5563 {
5564 switch (valueId) { 5564 switch (valueId) {
(...skipping 19 matching lines...) Expand all
5584 if (isComma(value)) 5584 if (isComma(value))
5585 return true; 5585 return true;
5586 } 5586 }
5587 5587
5588 return false; 5588 return false;
5589 } 5589 }
5590 5590
5591 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseShapeProperty(CSSProper tyID propId) 5591 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseShapeProperty(CSSProper tyID propId)
5592 { 5592 {
5593 if (!RuntimeEnabledFeatures::cssShapesEnabled()) 5593 if (!RuntimeEnabledFeatures::cssShapesEnabled())
5594 return 0; 5594 return nullptr;
5595 5595
5596 CSSParserValue* value = m_valueList->current(); 5596 CSSParserValue* value = m_valueList->current();
5597 CSSValueID valueId = value->id; 5597 CSSValueID valueId = value->id;
5598 RefPtrWillBeRawPtr<CSSPrimitiveValue> boxValue; 5598 RefPtrWillBeRawPtr<CSSPrimitiveValue> boxValue;
5599 RefPtrWillBeRawPtr<CSSPrimitiveValue> shapeValue; 5599 RefPtrWillBeRawPtr<CSSPrimitiveValue> shapeValue;
5600 5600
5601 if (valueId == CSSValueNone 5601 if (valueId == CSSValueNone
5602 || (valueId == CSSValueOutsideShape && propId == CSSPropertyShapeInside) ) { 5602 || (valueId == CSSValueOutsideShape && propId == CSSPropertyShapeInside) ) {
5603 RefPtrWillBeRawPtr<CSSPrimitiveValue> keywordValue = parseValidPrimitive (valueId, value); 5603 RefPtrWillBeRawPtr<CSSPrimitiveValue> keywordValue = parseValidPrimitive (valueId, value);
5604 m_valueList->next(); 5604 m_valueList->next();
5605 return keywordValue.release(); 5605 return keywordValue.release();
5606 } 5606 }
5607 5607
5608 RefPtrWillBeRawPtr<CSSValue> imageValue; 5608 RefPtrWillBeRawPtr<CSSValue> imageValue;
5609 if (valueId != CSSValueNone && parseFillImage(m_valueList.get(), imageValue) ) { 5609 if (valueId != CSSValueNone && parseFillImage(m_valueList.get(), imageValue) ) {
5610 m_valueList->next(); 5610 m_valueList->next();
5611 return imageValue.release(); 5611 return imageValue.release();
5612 } 5612 }
5613 5613
5614 if (value->unit == CSSParserValue::Function) { 5614 if (value->unit == CSSParserValue::Function) {
5615 shapeValue = parseBasicShape(); 5615 shapeValue = parseBasicShape();
5616 if (!shapeValue) 5616 if (!shapeValue)
5617 return 0; 5617 return nullptr;
5618 } else if (isBoxValue(valueId)) { 5618 } else if (isBoxValue(valueId)) {
5619 boxValue = parseValidPrimitive(valueId, value); 5619 boxValue = parseValidPrimitive(valueId, value);
5620 m_valueList->next(); 5620 m_valueList->next();
5621 } else { 5621 } else {
5622 return 0; 5622 return nullptr;
5623 } 5623 }
5624 5624
5625 ASSERT(shapeValue || boxValue); 5625 ASSERT(shapeValue || boxValue);
5626 value = m_valueList->current(); 5626 value = m_valueList->current();
5627 5627
5628 if (value) { 5628 if (value) {
5629 valueId = value->id; 5629 valueId = value->id;
5630 if (boxValue && value->unit == CSSParserValue::Function) { 5630 if (boxValue && value->unit == CSSParserValue::Function) {
5631 shapeValue = parseBasicShape(); 5631 shapeValue = parseBasicShape();
5632 if (!shapeValue) 5632 if (!shapeValue)
5633 return 0; 5633 return nullptr;
5634 } else if (shapeValue && isBoxValue(valueId)) { 5634 } else if (shapeValue && isBoxValue(valueId)) {
5635 boxValue = parseValidPrimitive(valueId, value); 5635 boxValue = parseValidPrimitive(valueId, value);
5636 m_valueList->next(); 5636 m_valueList->next();
5637 } else { 5637 } else {
5638 return 0; 5638 return nullptr;
5639 } 5639 }
5640 5640
5641 ASSERT(shapeValue && boxValue); 5641 ASSERT(shapeValue && boxValue);
5642 shapeValue->getShapeValue()->setLayoutBox(boxValue.release()); 5642 shapeValue->getShapeValue()->setLayoutBox(boxValue.release());
5643 } 5643 }
5644 5644
5645 if (shapeValue) 5645 if (shapeValue)
5646 return shapeValue.release(); 5646 return shapeValue.release();
5647 return boxValue.release(); 5647 return boxValue.release();
5648 } 5648 }
5649 5649
5650 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseBasicShape() 5650 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseBasicShape()
5651 { 5651 {
5652 CSSParserValue* value = m_valueList->current(); 5652 CSSParserValue* value = m_valueList->current();
5653 ASSERT(value->unit == CSSParserValue::Function); 5653 ASSERT(value->unit == CSSParserValue::Function);
5654 CSSParserValueList* args = value->function->args.get(); 5654 CSSParserValueList* args = value->function->args.get();
5655 5655
5656 if (!args) 5656 if (!args)
5657 return 0; 5657 return nullptr;
5658 5658
5659 RefPtrWillBeRawPtr<CSSBasicShape> shape; 5659 RefPtrWillBeRawPtr<CSSBasicShape> shape;
5660 if (equalIgnoringCase(value->function->name, "rectangle(")) 5660 if (equalIgnoringCase(value->function->name, "rectangle("))
5661 shape = parseBasicShapeRectangle(args); 5661 shape = parseBasicShapeRectangle(args);
5662 else if (equalIgnoringCase(value->function->name, "circle(")) 5662 else if (equalIgnoringCase(value->function->name, "circle("))
5663 if (isDeprecatedBasicShape(args)) 5663 if (isDeprecatedBasicShape(args))
5664 shape = parseDeprecatedBasicShapeCircle(args); 5664 shape = parseDeprecatedBasicShapeCircle(args);
5665 else 5665 else
5666 shape = parseBasicShapeCircle(args); 5666 shape = parseBasicShapeCircle(args);
5667 else if (equalIgnoringCase(value->function->name, "ellipse(")) 5667 else if (equalIgnoringCase(value->function->name, "ellipse("))
5668 if (isDeprecatedBasicShape(args)) 5668 if (isDeprecatedBasicShape(args))
5669 shape = parseDeprecatedBasicShapeEllipse(args); 5669 shape = parseDeprecatedBasicShapeEllipse(args);
5670 else 5670 else
5671 shape = parseBasicShapeEllipse(args); 5671 shape = parseBasicShapeEllipse(args);
5672 else if (equalIgnoringCase(value->function->name, "polygon(")) 5672 else if (equalIgnoringCase(value->function->name, "polygon("))
5673 shape = parseBasicShapePolygon(args); 5673 shape = parseBasicShapePolygon(args);
5674 else if (equalIgnoringCase(value->function->name, "inset-rectangle(")) 5674 else if (equalIgnoringCase(value->function->name, "inset-rectangle("))
5675 shape = parseBasicShapeInsetRectangle(args); 5675 shape = parseBasicShapeInsetRectangle(args);
5676 else if (equalIgnoringCase(value->function->name, "inset(")) 5676 else if (equalIgnoringCase(value->function->name, "inset("))
5677 shape = parseBasicShapeInset(args); 5677 shape = parseBasicShapeInset(args);
5678 5678
5679 if (!shape) 5679 if (!shape)
5680 return 0; 5680 return nullptr;
5681 5681
5682 m_valueList->next(); 5682 m_valueList->next();
5683 return cssValuePool().createValue(shape.release()); 5683 return cssValuePool().createValue(shape.release());
5684 } 5684 }
5685 5685
5686 // [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-he ight' ]? 'font-family' 5686 // [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-he ight' ]? 'font-family'
5687 bool CSSPropertyParser::parseFont(bool important) 5687 bool CSSPropertyParser::parseFont(bool important)
5688 { 5688 {
5689 // Let's check if there is an inherit or initial somewhere in the shorthand. 5689 // Let's check if there is an inherit or initial somewhere in the shorthand.
5690 for (unsigned i = 0; i < m_valueList->size(); ++i) { 5690 for (unsigned i = 0; i < m_valueList->size(); ++i) {
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
5855 inFamily = false; 5855 inFamily = false;
5856 } 5856 }
5857 else if (nextValIsFontName) 5857 else if (nextValIsFontName)
5858 value = nextValue; 5858 value = nextValue;
5859 else 5859 else
5860 break; 5860 break;
5861 } 5861 }
5862 familyBuilder.commit(); 5862 familyBuilder.commit();
5863 5863
5864 if (!list->length()) 5864 if (!list->length())
5865 list = 0; 5865 list = nullptr;
5866 return list.release(); 5866 return list.release();
5867 } 5867 }
5868 5868
5869 bool CSSPropertyParser::parseLineHeight(bool important) 5869 bool CSSPropertyParser::parseLineHeight(bool important)
5870 { 5870 {
5871 CSSParserValue* value = m_valueList->current(); 5871 CSSParserValue* value = m_valueList->current();
5872 CSSValueID id = value->id; 5872 CSSValueID id = value->id;
5873 bool validPrimitive = false; 5873 bool validPrimitive = false;
5874 // normal | <number> | <length> | <percentage> | inherit 5874 // normal | <number> | <length> | <percentage> | inherit
5875 if (id == CSSValueNormal) 5875 if (id == CSSValueNormal)
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after
6557 return false; 6557 return false;
6558 colorArray[3] = max(0.0, min(1.0, parsedDouble(v, ReleaseParsedCalcValue ))); 6558 colorArray[3] = max(0.0, min(1.0, parsedDouble(v, ReleaseParsedCalcValue )));
6559 } 6559 }
6560 return true; 6560 return true;
6561 } 6561 }
6562 6562
6563 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseColor(CSSParse rValue* value) 6563 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseColor(CSSParse rValue* value)
6564 { 6564 {
6565 RGBA32 c = Color::transparent; 6565 RGBA32 c = Color::transparent;
6566 if (!parseColorFromValue(value ? value : m_valueList->current(), c)) 6566 if (!parseColorFromValue(value ? value : m_valueList->current(), c))
6567 return 0; 6567 return nullptr;
6568 return cssValuePool().createColorValue(c); 6568 return cssValuePool().createColorValue(c);
6569 } 6569 }
6570 6570
6571 bool CSSPropertyParser::parseColorFromValue(CSSParserValue* value, RGBA32& c) 6571 bool CSSPropertyParser::parseColorFromValue(CSSParserValue* value, RGBA32& c)
6572 { 6572 {
6573 if (inQuirksMode() && value->unit == CSSPrimitiveValue::CSS_NUMBER 6573 if (inQuirksMode() && value->unit == CSSPrimitiveValue::CSS_NUMBER
6574 && value->fValue >= 0. && value->fValue < 1000000.) { 6574 && value->fValue >= 0. && value->fValue < 1000000.) {
6575 String str = String::format("%06d", static_cast<int>((value->fValue+.5)) ); 6575 String str = String::format("%06d", static_cast<int>((value->fValue+.5)) );
6576 // FIXME: This should be strict parsing for SVG as well. 6576 // FIXME: This should be strict parsing for SVG as well.
6577 if (!fastParseColor(c, str, !inQuirksMode())) 6577 if (!fastParseColor(c, str, !inQuirksMode()))
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
6646 // Handle the ,, case gracefully by doing nothing. 6646 // Handle the ,, case gracefully by doing nothing.
6647 if (x || y || blur || spread || color || style) { 6647 if (x || y || blur || spread || color || style) {
6648 if (!values) 6648 if (!values)
6649 values = CSSValueList::createCommaSeparated(); 6649 values = CSSValueList::createCommaSeparated();
6650 6650
6651 // Construct the current shadow value and add it to the list. 6651 // Construct the current shadow value and add it to the list.
6652 values->append(CSSShadowValue::create(x.release(), y.release(), blur .release(), spread.release(), style.release(), color.release())); 6652 values->append(CSSShadowValue::create(x.release(), y.release(), blur .release(), spread.release(), style.release(), color.release()));
6653 } 6653 }
6654 6654
6655 // Now reset for the next shadow value. 6655 // Now reset for the next shadow value.
6656 x = 0; 6656 x = nullptr;
6657 y = 0; 6657 y = nullptr;
6658 blur = 0; 6658 blur = nullptr;
6659 spread = 0; 6659 spread = nullptr;
6660 style = 0; 6660 style = nullptr;
6661 color = 0; 6661 color = nullptr;
6662 6662
6663 allowX = true; 6663 allowX = true;
6664 allowColor = true; 6664 allowColor = true;
6665 allowBreak = true; 6665 allowBreak = true;
6666 allowY = false; 6666 allowY = false;
6667 allowBlur = false; 6667 allowBlur = false;
6668 allowSpread = false; 6668 allowSpread = false;
6669 allowStyle = property == CSSPropertyWebkitBoxShadow || property == CSSPr opertyBoxShadow; 6669 allowStyle = property == CSSPropertyWebkitBoxShadow || property == CSSPr opertyBoxShadow;
6670 } 6670 }
6671 6671
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
6744 bool allowBreak; 6744 bool allowBreak;
6745 }; 6745 };
6746 6746
6747 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseShadow(CSSParserVal ueList* valueList, CSSPropertyID propId) 6747 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseShadow(CSSParserVal ueList* valueList, CSSPropertyID propId)
6748 { 6748 {
6749 ShadowParseContext context(propId, this); 6749 ShadowParseContext context(propId, this);
6750 CSSParserValue* val; 6750 CSSParserValue* val;
6751 while ((val = valueList->current())) { 6751 while ((val = valueList->current())) {
6752 // Check for a comma break first. 6752 // Check for a comma break first.
6753 if (val->unit == CSSParserValue::Operator) { 6753 if (val->unit == CSSParserValue::Operator) {
6754 if (val->iValue != ',' || !context.allowBreak) 6754 if (val->iValue != ',' || !context.allowBreak) {
6755 // Other operators aren't legal or we aren't done with the curre nt shadow 6755 // Other operators aren't legal or we aren't done with the curre nt shadow
6756 // value. Treat as invalid. 6756 // value. Treat as invalid.
6757 return 0; 6757 return nullptr;
6758 }
6758 // The value is good. Commit it. 6759 // The value is good. Commit it.
6759 context.commitValue(); 6760 context.commitValue();
6760 } else if (validUnit(val, FLength, HTMLStandardMode)) { 6761 } else if (validUnit(val, FLength, HTMLStandardMode)) {
6761 // We required a length and didn't get one. Invalid. 6762 // We required a length and didn't get one. Invalid.
6762 if (!context.allowLength()) 6763 if (!context.allowLength())
6763 return 0; 6764 return nullptr;
6764 6765
6765 // Blur radius must be non-negative. 6766 // Blur radius must be non-negative.
6766 if (context.allowBlur && !validUnit(val, FLength | FNonNeg, HTMLStan dardMode)) 6767 if (context.allowBlur && !validUnit(val, FLength | FNonNeg, HTMLStan dardMode))
6767 return 0; 6768 return nullptr;
6768 6769
6769 // A length is allowed here. Construct the value and add it. 6770 // A length is allowed here. Construct the value and add it.
6770 context.commitLength(val); 6771 context.commitLength(val);
6771 } else if (val->id == CSSValueInset) { 6772 } else if (val->id == CSSValueInset) {
6772 if (!context.allowStyle) 6773 if (!context.allowStyle)
6773 return 0; 6774 return nullptr;
6774 6775
6775 context.commitStyle(val); 6776 context.commitStyle(val);
6776 } else { 6777 } else {
6777 // The only other type of value that's ok is a color value. 6778 // The only other type of value that's ok is a color value.
6778 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedColor; 6779 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedColor;
6779 bool isColor = ((val->id >= CSSValueAqua && val->id <= CSSValueWindo wtext) || val->id == CSSValueMenu 6780 bool isColor = ((val->id >= CSSValueAqua && val->id <= CSSValueWindo wtext) || val->id == CSSValueMenu
6780 || (val->id >= CSSValueWebkitFocusRingColor && val-> id <= CSSValueWebkitText && inQuirksMode()) 6781 || (val->id >= CSSValueWebkitFocusRingColor && val-> id <= CSSValueWebkitText && inQuirksMode())
6781 || val->id == CSSValueCurrentcolor); 6782 || val->id == CSSValueCurrentcolor);
6782 if (isColor) { 6783 if (isColor) {
6783 if (!context.allowColor) 6784 if (!context.allowColor)
6784 return 0; 6785 return nullptr;
6785 parsedColor = cssValuePool().createIdentifierValue(val->id); 6786 parsedColor = cssValuePool().createIdentifierValue(val->id);
6786 } 6787 }
6787 6788
6788 if (!parsedColor) 6789 if (!parsedColor)
6789 // It's not built-in. Try to parse it as a color. 6790 // It's not built-in. Try to parse it as a color.
6790 parsedColor = parseColor(val); 6791 parsedColor = parseColor(val);
6791 6792
6792 if (!parsedColor || !context.allowColor) 6793 if (!parsedColor || !context.allowColor)
6793 return 0; // This value is not a color or length and is invalid or 6794 return nullptr; // This value is not a color or length and is in valid or
6794 // it is a color, but a color isn't allowed at this po int. 6795 // it is a color, but a color isn't allowed at this po int.
6795 6796
6796 context.commitColor(parsedColor.release()); 6797 context.commitColor(parsedColor.release());
6797 } 6798 }
6798 6799
6799 valueList->next(); 6800 valueList->next();
6800 } 6801 }
6801 6802
6802 if (context.allowBreak) { 6803 if (context.allowBreak) {
6803 context.commitValue(); 6804 context.commitValue();
6804 if (context.values && context.values->length()) 6805 if (context.values && context.values->length())
6805 return context.values.release(); 6806 return context.values.release();
6806 } 6807 }
6807 6808
6808 return 0; 6809 return nullptr;
6809 } 6810 }
6810 6811
6811 bool CSSPropertyParser::parseReflect(CSSPropertyID propId, bool important) 6812 bool CSSPropertyParser::parseReflect(CSSPropertyID propId, bool important)
6812 { 6813 {
6813 // box-reflect: <direction> <offset> <mask> 6814 // box-reflect: <direction> <offset> <mask>
6814 6815
6815 // Direction comes first. 6816 // Direction comes first.
6816 CSSParserValue* val = m_valueList->current(); 6817 CSSParserValue* val = m_valueList->current();
6817 RefPtrWillBeRawPtr<CSSPrimitiveValue> direction; 6818 RefPtrWillBeRawPtr<CSSPrimitiveValue> direction;
6818 switch (val->id) { 6819 switch (val->id) {
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
7125 } 7126 }
7126 return false; 7127 return false;
7127 } 7128 }
7128 7129
7129 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseBorderImage(CSSProperty ID propId) 7130 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseBorderImage(CSSProperty ID propId)
7130 { 7131 {
7131 BorderImageParseContext context; 7132 BorderImageParseContext context;
7132 if (BorderImageParseContext::buildFromParser(*this, propId, context)) { 7133 if (BorderImageParseContext::buildFromParser(*this, propId, context)) {
7133 return context.commitCSSValue(); 7134 return context.commitCSSValue();
7134 } 7135 }
7135 return 0; 7136 return nullptr;
7136 } 7137 }
7137 7138
7138 static bool isBorderImageRepeatKeyword(int id) 7139 static bool isBorderImageRepeatKeyword(int id)
7139 { 7140 {
7140 return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound; 7141 return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound;
7141 } 7142 }
7142 7143
7143 bool CSSPropertyParser::parseBorderImageRepeat(RefPtrWillBeRawPtr<CSSValue>& res ult) 7144 bool CSSPropertyParser::parseBorderImageRepeat(RefPtrWillBeRawPtr<CSSValue>& res ult)
7144 { 7145 {
7145 RefPtrWillBeRawPtr<CSSPrimitiveValue> firstValue; 7146 RefPtrWillBeRawPtr<CSSPrimitiveValue> firstValue;
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
7741 a = args->next(); 7742 a = args->next();
7742 } 7743 }
7743 7744
7744 gradient = result.release(); 7745 gradient = result.release();
7745 return true; 7746 return true;
7746 } 7747 }
7747 7748
7748 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueFromSideKeyword(CSSParserV alue* a, bool& isHorizontal) 7749 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueFromSideKeyword(CSSParserV alue* a, bool& isHorizontal)
7749 { 7750 {
7750 if (a->unit != CSSPrimitiveValue::CSS_IDENT) 7751 if (a->unit != CSSPrimitiveValue::CSS_IDENT)
7751 return 0; 7752 return nullptr;
7752 7753
7753 switch (a->id) { 7754 switch (a->id) {
7754 case CSSValueLeft: 7755 case CSSValueLeft:
7755 case CSSValueRight: 7756 case CSSValueRight:
7756 isHorizontal = true; 7757 isHorizontal = true;
7757 break; 7758 break;
7758 case CSSValueTop: 7759 case CSSValueTop:
7759 case CSSValueBottom: 7760 case CSSValueBottom:
7760 isHorizontal = false; 7761 isHorizontal = false;
7761 break; 7762 break;
7762 default: 7763 default:
7763 return 0; 7764 return nullptr;
7764 } 7765 }
7765 return cssValuePool().createIdentifierValue(a->id); 7766 return cssValuePool().createIdentifierValue(a->id);
7766 } 7767 }
7767 7768
7768 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseGradientColorOrKeyword(CSSPropert yParser* p, CSSParserValue* value) 7769 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseGradientColorOrKeyword(CSSPropert yParser* p, CSSParserValue* value)
7769 { 7770 {
7770 CSSValueID id = value->id; 7771 CSSValueID id = value->id;
7771 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowt ext) || id == CSSValueMenu || id == CSSValueCurrentcolor) 7772 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowt ext) || id == CSSValueMenu || id == CSSValueCurrentcolor)
7772 return cssValuePool().createIdentifierValue(id); 7773 return cssValuePool().createIdentifierValue(id);
7773 7774
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
8319 8320
8320 canvas = CSSCanvasValue::create(value->string); 8321 canvas = CSSCanvasValue::create(value->string);
8321 return true; 8322 return true;
8322 } 8323 }
8323 8324
8324 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseImageSet(CSSParserValue List* valueList) 8325 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseImageSet(CSSParserValue List* valueList)
8325 { 8326 {
8326 CSSParserValue* function = valueList->current(); 8327 CSSParserValue* function = valueList->current();
8327 8328
8328 if (function->unit != CSSParserValue::Function) 8329 if (function->unit != CSSParserValue::Function)
8329 return 0; 8330 return nullptr;
8330 8331
8331 CSSParserValueList* functionArgs = valueList->current()->function->args.get( ); 8332 CSSParserValueList* functionArgs = valueList->current()->function->args.get( );
8332 if (!functionArgs || !functionArgs->size() || !functionArgs->current()) 8333 if (!functionArgs || !functionArgs->size() || !functionArgs->current())
8333 return 0; 8334 return nullptr;
8334 8335
8335 RefPtrWillBeRawPtr<CSSImageSetValue> imageSet = CSSImageSetValue::create(); 8336 RefPtrWillBeRawPtr<CSSImageSetValue> imageSet = CSSImageSetValue::create();
8336 8337
8337 CSSParserValue* arg = functionArgs->current(); 8338 CSSParserValue* arg = functionArgs->current();
8338 while (arg) { 8339 while (arg) {
8339 if (arg->unit != CSSPrimitiveValue::CSS_URI) 8340 if (arg->unit != CSSPrimitiveValue::CSS_URI)
8340 return 0; 8341 return nullptr;
8341 8342
8342 RefPtrWillBeRawPtr<CSSImageValue> image = CSSImageValue::create(complete URL(arg->string)); 8343 RefPtrWillBeRawPtr<CSSImageValue> image = CSSImageValue::create(complete URL(arg->string));
8343 imageSet->append(image); 8344 imageSet->append(image);
8344 8345
8345 arg = functionArgs->next(); 8346 arg = functionArgs->next();
8346 if (!arg || arg->unit != CSSPrimitiveValue::CSS_DIMENSION) 8347 if (!arg || arg->unit != CSSPrimitiveValue::CSS_DIMENSION)
8347 return 0; 8348 return nullptr;
8348 8349
8349 double imageScaleFactor = 0; 8350 double imageScaleFactor = 0;
8350 const String& string = arg->string; 8351 const String& string = arg->string;
8351 unsigned length = string.length(); 8352 unsigned length = string.length();
8352 if (!length) 8353 if (!length)
8353 return 0; 8354 return nullptr;
8354 if (string.is8Bit()) { 8355 if (string.is8Bit()) {
8355 const LChar* start = string.characters8(); 8356 const LChar* start = string.characters8();
8356 parseDouble(start, start + length, 'x', imageScaleFactor); 8357 parseDouble(start, start + length, 'x', imageScaleFactor);
8357 } else { 8358 } else {
8358 const UChar* start = string.characters16(); 8359 const UChar* start = string.characters16();
8359 parseDouble(start, start + length, 'x', imageScaleFactor); 8360 parseDouble(start, start + length, 'x', imageScaleFactor);
8360 } 8361 }
8361 if (imageScaleFactor <= 0) 8362 if (imageScaleFactor <= 0)
8362 return 0; 8363 return nullptr;
8363 imageSet->append(cssValuePool().createValue(imageScaleFactor, CSSPrimiti veValue::CSS_NUMBER)); 8364 imageSet->append(cssValuePool().createValue(imageScaleFactor, CSSPrimiti veValue::CSS_NUMBER));
8364 8365
8365 // If there are no more arguments, we're done. 8366 // If there are no more arguments, we're done.
8366 arg = functionArgs->next(); 8367 arg = functionArgs->next();
8367 if (!arg) 8368 if (!arg)
8368 break; 8369 break;
8369 8370
8370 // If there are more arguments, they should be after a comma. 8371 // If there are more arguments, they should be after a comma.
8371 if (!isComma(arg)) 8372 if (!isComma(arg))
8372 return 0; 8373 return nullptr;
8373 8374
8374 // Skip the comma and move on to the next argument. 8375 // Skip the comma and move on to the next argument.
8375 arg = functionArgs->next(); 8376 arg = functionArgs->next();
8376 } 8377 }
8377 8378
8378 return imageSet.release(); 8379 return imageSet.release();
8379 } 8380 }
8380 8381
8381 bool CSSPropertyParser::parseWillChange(bool important) 8382 bool CSSPropertyParser::parseWillChange(bool important)
8382 { 8383 {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
8565 private: 8566 private:
8566 CSSTransformValue::TransformOperationType m_type; 8567 CSSTransformValue::TransformOperationType m_type;
8567 unsigned m_argCount; 8568 unsigned m_argCount;
8568 bool m_allowSingleArgument; 8569 bool m_allowSingleArgument;
8569 CSSPropertyParser::Units m_unit; 8570 CSSPropertyParser::Units m_unit;
8570 }; 8571 };
8571 8572
8572 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseTransform() 8573 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseTransform()
8573 { 8574 {
8574 if (!m_valueList) 8575 if (!m_valueList)
8575 return 0; 8576 return nullptr;
8576 8577
8577 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ; 8578 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ;
8578 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) { 8579 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) {
8579 RefPtrWillBeRawPtr<CSSValue> parsedTransformValue = parseTransformValue( value); 8580 RefPtrWillBeRawPtr<CSSValue> parsedTransformValue = parseTransformValue( value);
8580 if (!parsedTransformValue) 8581 if (!parsedTransformValue)
8581 return 0; 8582 return nullptr;
8582 8583
8583 list->append(parsedTransformValue.release()); 8584 list->append(parsedTransformValue.release());
8584 } 8585 }
8585 8586
8586 return list.release(); 8587 return list.release();
8587 } 8588 }
8588 8589
8589 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTransformValue(CSSParse rValue *value) 8590 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTransformValue(CSSParse rValue *value)
8590 { 8591 {
8591 if (value->unit != CSSParserValue::Function || !value->function) 8592 if (value->unit != CSSParserValue::Function || !value->function)
8592 return 0; 8593 return nullptr;
8593 8594
8594 // Every primitive requires at least one argument. 8595 // Every primitive requires at least one argument.
8595 CSSParserValueList* args = value->function->args.get(); 8596 CSSParserValueList* args = value->function->args.get();
8596 if (!args) 8597 if (!args)
8597 return 0; 8598 return nullptr;
8598 8599
8599 // See if the specified primitive is one we understand. 8600 // See if the specified primitive is one we understand.
8600 TransformOperationInfo info(value->function->name); 8601 TransformOperationInfo info(value->function->name);
8601 if (info.unknown()) 8602 if (info.unknown())
8602 return 0; 8603 return nullptr;
8603 8604
8604 if (!info.hasCorrectArgCount(args->size())) 8605 if (!info.hasCorrectArgCount(args->size()))
8605 return 0; 8606 return nullptr;
8606 8607
8607 // The transform is a list of functional primitives that specify transform o perations. 8608 // The transform is a list of functional primitives that specify transform o perations.
8608 // We collect a list of CSSTransformValues, where each value specifies a sin gle operation. 8609 // We collect a list of CSSTransformValues, where each value specifies a sin gle operation.
8609 8610
8610 // Create the new CSSTransformValue for this operation and add it to our lis t. 8611 // Create the new CSSTransformValue for this operation and add it to our lis t.
8611 RefPtrWillBeRawPtr<CSSTransformValue> transformValue = CSSTransformValue::cr eate(info.type()); 8612 RefPtrWillBeRawPtr<CSSTransformValue> transformValue = CSSTransformValue::cr eate(info.type());
8612 8613
8613 // Snag our values. 8614 // Snag our values.
8614 CSSParserValue* a = args->current(); 8615 CSSParserValue* a = args->current();
8615 unsigned argNumber = 0; 8616 unsigned argNumber = 0;
8616 while (a) { 8617 while (a) {
8617 CSSPropertyParser::Units unit = info.unit(); 8618 CSSPropertyParser::Units unit = info.unit();
8618 8619
8619 if (info.type() == CSSTransformValue::Rotate3DTransformOperation && argN umber == 3) { 8620 if (info.type() == CSSTransformValue::Rotate3DTransformOperation && argN umber == 3) {
8620 // 4th param of rotate3d() is an angle rather than a bare number, va lidate it as such 8621 // 4th param of rotate3d() is an angle rather than a bare number, va lidate it as such
8621 if (!validUnit(a, FAngle, HTMLStandardMode)) 8622 if (!validUnit(a, FAngle, HTMLStandardMode))
8622 return 0; 8623 return nullptr;
8623 } else if (info.type() == CSSTransformValue::Translate3DTransformOperati on && argNumber == 2) { 8624 } else if (info.type() == CSSTransformValue::Translate3DTransformOperati on && argNumber == 2) {
8624 // 3rd param of translate3d() cannot be a percentage 8625 // 3rd param of translate3d() cannot be a percentage
8625 if (!validUnit(a, FLength, HTMLStandardMode)) 8626 if (!validUnit(a, FLength, HTMLStandardMode))
8626 return 0; 8627 return nullptr;
8627 } else if (info.type() == CSSTransformValue::TranslateZTransformOperatio n && !argNumber) { 8628 } else if (info.type() == CSSTransformValue::TranslateZTransformOperatio n && !argNumber) {
8628 // 1st param of translateZ() cannot be a percentage 8629 // 1st param of translateZ() cannot be a percentage
8629 if (!validUnit(a, FLength, HTMLStandardMode)) 8630 if (!validUnit(a, FLength, HTMLStandardMode))
8630 return 0; 8631 return nullptr;
8631 } else if (info.type() == CSSTransformValue::PerspectiveTransformOperati on && !argNumber) { 8632 } else if (info.type() == CSSTransformValue::PerspectiveTransformOperati on && !argNumber) {
8632 // 1st param of perspective() must be a non-negative number (depreca ted) or length. 8633 // 1st param of perspective() must be a non-negative number (depreca ted) or length.
8633 if (!validUnit(a, FNumber | FLength | FNonNeg, HTMLStandardMode)) 8634 if (!validUnit(a, FNumber | FLength | FNonNeg, HTMLStandardMode))
8634 return 0; 8635 return nullptr;
8635 } else if (!validUnit(a, unit, HTMLStandardMode)) 8636 } else if (!validUnit(a, unit, HTMLStandardMode)) {
8636 return 0; 8637 return nullptr;
8638 }
8637 8639
8638 // Add the value to the current transform operation. 8640 // Add the value to the current transform operation.
8639 transformValue->append(createPrimitiveNumericValue(a)); 8641 transformValue->append(createPrimitiveNumericValue(a));
8640 8642
8641 a = args->next(); 8643 a = args->next();
8642 if (!a) 8644 if (!a)
8643 break; 8645 break;
8644 if (a->unit != CSSParserValue::Operator || a->iValue != ',') 8646 if (a->unit != CSSParserValue::Operator || a->iValue != ',')
8645 return 0; 8647 return nullptr;
8646 a = args->next(); 8648 a = args->next();
8647 8649
8648 argNumber++; 8650 argNumber++;
8649 } 8651 }
8650 8652
8651 return transformValue.release(); 8653 return transformValue.release();
8652 } 8654 }
8653 8655
8654 bool CSSPropertyParser::isBlendMode(CSSValueID valueID) 8656 bool CSSPropertyParser::isBlendMode(CSSValueID valueID)
8655 { 8657 {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
8697 8699
8698 switch (filterType) { 8700 switch (filterType) {
8699 case CSSFilterValue::GrayscaleFilterOperation: 8701 case CSSFilterValue::GrayscaleFilterOperation:
8700 case CSSFilterValue::SepiaFilterOperation: 8702 case CSSFilterValue::SepiaFilterOperation:
8701 case CSSFilterValue::SaturateFilterOperation: 8703 case CSSFilterValue::SaturateFilterOperation:
8702 case CSSFilterValue::InvertFilterOperation: 8704 case CSSFilterValue::InvertFilterOperation:
8703 case CSSFilterValue::OpacityFilterOperation: 8705 case CSSFilterValue::OpacityFilterOperation:
8704 case CSSFilterValue::ContrastFilterOperation: { 8706 case CSSFilterValue::ContrastFilterOperation: {
8705 // One optional argument, 0-1 or 0%-100%, if missing use 100%. 8707 // One optional argument, 0-1 or 0%-100%, if missing use 100%.
8706 if (args->size() > 1) 8708 if (args->size() > 1)
8707 return 0; 8709 return nullptr;
8708 8710
8709 if (args->size()) { 8711 if (args->size()) {
8710 CSSParserValue* value = args->current(); 8712 CSSParserValue* value = args->current();
8711 if (!validUnit(value, FNumber | FPercent | FNonNeg, HTMLStandardMode )) 8713 if (!validUnit(value, FNumber | FPercent | FNonNeg, HTMLStandardMode ))
8712 return 0; 8714 return nullptr;
8713 8715
8714 double amount = value->fValue; 8716 double amount = value->fValue;
8715 8717
8716 // Saturate and Contrast allow values over 100%. 8718 // Saturate and Contrast allow values over 100%.
8717 if (filterType != CSSFilterValue::SaturateFilterOperation 8719 if (filterType != CSSFilterValue::SaturateFilterOperation
8718 && filterType != CSSFilterValue::ContrastFilterOperation) { 8720 && filterType != CSSFilterValue::ContrastFilterOperation) {
8719 double maxAllowed = value->unit == CSSPrimitiveValue::CSS_PERCEN TAGE ? 100.0 : 1.0; 8721 double maxAllowed = value->unit == CSSPrimitiveValue::CSS_PERCEN TAGE ? 100.0 : 1.0;
8720 if (amount > maxAllowed) 8722 if (amount > maxAllowed)
8721 return 0; 8723 return nullptr;
8722 } 8724 }
8723 8725
8724 filterValue->append(cssValuePool().createValue(amount, static_cast<C SSPrimitiveValue::UnitTypes>(value->unit))); 8726 filterValue->append(cssValuePool().createValue(amount, static_cast<C SSPrimitiveValue::UnitTypes>(value->unit)));
8725 } 8727 }
8726 break; 8728 break;
8727 } 8729 }
8728 case CSSFilterValue::BrightnessFilterOperation: { 8730 case CSSFilterValue::BrightnessFilterOperation: {
8729 // One optional argument, if missing use 100%. 8731 // One optional argument, if missing use 100%.
8730 if (args->size() > 1) 8732 if (args->size() > 1)
8731 return 0; 8733 return nullptr;
8732 8734
8733 if (args->size()) { 8735 if (args->size()) {
8734 CSSParserValue* value = args->current(); 8736 CSSParserValue* value = args->current();
8735 if (!validUnit(value, FNumber | FPercent, HTMLStandardMode)) 8737 if (!validUnit(value, FNumber | FPercent, HTMLStandardMode))
8736 return 0; 8738 return nullptr;
8737 8739
8738 filterValue->append(cssValuePool().createValue(value->fValue, static _cast<CSSPrimitiveValue::UnitTypes>(value->unit))); 8740 filterValue->append(cssValuePool().createValue(value->fValue, static _cast<CSSPrimitiveValue::UnitTypes>(value->unit)));
8739 } 8741 }
8740 break; 8742 break;
8741 } 8743 }
8742 case CSSFilterValue::HueRotateFilterOperation: { 8744 case CSSFilterValue::HueRotateFilterOperation: {
8743 // hue-rotate() takes one optional angle. 8745 // hue-rotate() takes one optional angle.
8744 if (args->size() > 1) 8746 if (args->size() > 1)
8745 return 0; 8747 return nullptr;
8746 8748
8747 if (args->size()) { 8749 if (args->size()) {
8748 CSSParserValue* argument = args->current(); 8750 CSSParserValue* argument = args->current();
8749 if (!validUnit(argument, FAngle, HTMLStandardMode)) 8751 if (!validUnit(argument, FAngle, HTMLStandardMode))
8750 return 0; 8752 return nullptr;
8751 8753
8752 filterValue->append(createPrimitiveNumericValue(argument)); 8754 filterValue->append(createPrimitiveNumericValue(argument));
8753 } 8755 }
8754 break; 8756 break;
8755 } 8757 }
8756 case CSSFilterValue::BlurFilterOperation: { 8758 case CSSFilterValue::BlurFilterOperation: {
8757 // Blur takes a single length. Zero parameters are allowed. 8759 // Blur takes a single length. Zero parameters are allowed.
8758 if (args->size() > 1) 8760 if (args->size() > 1)
8759 return 0; 8761 return nullptr;
8760 8762
8761 if (args->size()) { 8763 if (args->size()) {
8762 CSSParserValue* argument = args->current(); 8764 CSSParserValue* argument = args->current();
8763 if (!validUnit(argument, FLength | FNonNeg, HTMLStandardMode)) 8765 if (!validUnit(argument, FLength | FNonNeg, HTMLStandardMode))
8764 return 0; 8766 return nullptr;
8765 8767
8766 filterValue->append(createPrimitiveNumericValue(argument)); 8768 filterValue->append(createPrimitiveNumericValue(argument));
8767 } 8769 }
8768 break; 8770 break;
8769 } 8771 }
8770 case CSSFilterValue::DropShadowFilterOperation: { 8772 case CSSFilterValue::DropShadowFilterOperation: {
8771 // drop-shadow() takes a single shadow. 8773 // drop-shadow() takes a single shadow.
8772 RefPtrWillBeRawPtr<CSSValueList> shadowValueList = parseShadow(args, CSS PropertyWebkitFilter); 8774 RefPtrWillBeRawPtr<CSSValueList> shadowValueList = parseShadow(args, CSS PropertyWebkitFilter);
8773 if (!shadowValueList || shadowValueList->length() != 1) 8775 if (!shadowValueList || shadowValueList->length() != 1)
8774 return 0; 8776 return nullptr;
8775 8777
8776 filterValue->append((shadowValueList.release())->itemWithoutBoundsCheck( 0)); 8778 filterValue->append((shadowValueList.release())->itemWithoutBoundsCheck( 0));
8777 break; 8779 break;
8778 } 8780 }
8779 default: 8781 default:
8780 ASSERT_NOT_REACHED(); 8782 ASSERT_NOT_REACHED();
8781 } 8783 }
8782 return filterValue.release(); 8784 return filterValue.release();
8783 } 8785 }
8784 8786
8785 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFilter() 8787 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFilter()
8786 { 8788 {
8787 if (!m_valueList) 8789 if (!m_valueList)
8788 return 0; 8790 return nullptr;
8789 8791
8790 // The filter is a list of functional primitives that specify individual ope rations. 8792 // The filter is a list of functional primitives that specify individual ope rations.
8791 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ; 8793 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ;
8792 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) { 8794 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) {
8793 if (value->unit != CSSPrimitiveValue::CSS_URI && (value->unit != CSSPars erValue::Function || !value->function)) 8795 if (value->unit != CSSPrimitiveValue::CSS_URI && (value->unit != CSSPars erValue::Function || !value->function))
8794 return 0; 8796 return nullptr;
8795 8797
8796 CSSFilterValue::FilterOperationType filterType = CSSFilterValue::Unknown FilterOperation; 8798 CSSFilterValue::FilterOperationType filterType = CSSFilterValue::Unknown FilterOperation;
8797 8799
8798 // See if the specified primitive is one we understand. 8800 // See if the specified primitive is one we understand.
8799 if (value->unit == CSSPrimitiveValue::CSS_URI) { 8801 if (value->unit == CSSPrimitiveValue::CSS_URI) {
8800 RefPtrWillBeRawPtr<CSSFilterValue> referenceFilterValue = CSSFilterV alue::create(CSSFilterValue::ReferenceFilterOperation); 8802 RefPtrWillBeRawPtr<CSSFilterValue> referenceFilterValue = CSSFilterV alue::create(CSSFilterValue::ReferenceFilterOperation);
8801 list->append(referenceFilterValue); 8803 list->append(referenceFilterValue);
8802 referenceFilterValue->append(CSSSVGDocumentValue::create(value->stri ng)); 8804 referenceFilterValue->append(CSSSVGDocumentValue::create(value->stri ng));
8803 } else { 8805 } else {
8804 const CSSParserString name = value->function->name; 8806 const CSSParserString name = value->function->name;
8805 unsigned maximumArgumentCount = 1; 8807 unsigned maximumArgumentCount = 1;
8806 8808
8807 filterInfoForName(name, filterType, maximumArgumentCount); 8809 filterInfoForName(name, filterType, maximumArgumentCount);
8808 8810
8809 if (filterType == CSSFilterValue::UnknownFilterOperation) 8811 if (filterType == CSSFilterValue::UnknownFilterOperation)
8810 return 0; 8812 return nullptr;
8811 8813
8812 CSSParserValueList* args = value->function->args.get(); 8814 CSSParserValueList* args = value->function->args.get();
8813 if (!args) 8815 if (!args)
8814 return 0; 8816 return nullptr;
8815 8817
8816 RefPtrWillBeRawPtr<CSSFilterValue> filterValue = parseBuiltinFilterA rguments(args, filterType); 8818 RefPtrWillBeRawPtr<CSSFilterValue> filterValue = parseBuiltinFilterA rguments(args, filterType);
8817 if (!filterValue) 8819 if (!filterValue)
8818 return 0; 8820 return nullptr;
8819 8821
8820 list->append(filterValue); 8822 list->append(filterValue);
8821 } 8823 }
8822 } 8824 }
8823 8825
8824 return list.release(); 8826 return list.release();
8825 } 8827 }
8826 8828
8827 bool CSSPropertyParser::parseTransformOrigin(CSSPropertyID propId, CSSPropertyID & propId1, CSSPropertyID& propId2, CSSPropertyID& propId3, RefPtrWillBeRawPtr<CS SValue>& value, RefPtrWillBeRawPtr<CSSValue>& value2, RefPtrWillBeRawPtr<CSSValu e>& value3) 8829 bool CSSPropertyParser::parseTransformOrigin(CSSPropertyID propId, CSSPropertyID & propId1, CSSPropertyID& propId2, CSSPropertyID& propId3, RefPtrWillBeRawPtr<CS SValue>& value, RefPtrWillBeRawPtr<CSSValue>& value2, RefPtrWillBeRawPtr<CSSValu e>& value3)
8828 { 8830 {
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
9081 if (m_valueList->size() == 1) { 9083 if (m_valueList->size() == 1) {
9082 CSSParserValue* value = m_valueList->current(); 9084 CSSParserValue* value = m_valueList->current();
9083 if (!value->id && validUnit(value, FLength | FPercent)) { 9085 if (!value->id && validUnit(value, FLength | FPercent)) {
9084 list->append(createPrimitiveNumericValue(value)); 9086 list->append(createPrimitiveNumericValue(value));
9085 m_valueList->next(); 9087 m_valueList->next();
9086 return list.release(); 9088 return list.release();
9087 } 9089 }
9088 } 9090 }
9089 9091
9090 if (!RuntimeEnabledFeatures::css3TextEnabled()) 9092 if (!RuntimeEnabledFeatures::css3TextEnabled())
9091 return 0; 9093 return nullptr;
9092 9094
9093 // The case where text-indent has only <length>(or <percentage>) value 9095 // The case where text-indent has only <length>(or <percentage>) value
9094 // is handled above if statement even though css3TextEnabled() returns true. 9096 // is handled above if statement even though css3TextEnabled() returns true.
9095 9097
9096 // [ [ <length> | <percentage> ] && each-line ] | inherit 9098 // [ [ <length> | <percentage> ] && each-line ] | inherit
9097 if (m_valueList->size() != 2) 9099 if (m_valueList->size() != 2)
9098 return 0; 9100 return nullptr;
9099 9101
9100 CSSParserValue* firstValue = m_valueList->current(); 9102 CSSParserValue* firstValue = m_valueList->current();
9101 CSSParserValue* secondValue = m_valueList->next(); 9103 CSSParserValue* secondValue = m_valueList->next();
9102 CSSParserValue* lengthOrPercentageValue = 0; 9104 CSSParserValue* lengthOrPercentageValue = 0;
9103 9105
9104 // [ <length> | <percentage> ] each-line 9106 // [ <length> | <percentage> ] each-line
9105 if (validUnit(firstValue, FLength | FPercent) && secondValue->id == CSSValue EachLine) 9107 if (validUnit(firstValue, FLength | FPercent) && secondValue->id == CSSValue EachLine)
9106 lengthOrPercentageValue = firstValue; 9108 lengthOrPercentageValue = firstValue;
9107 // each-line [ <length> | <percentage> ] 9109 // each-line [ <length> | <percentage> ]
9108 else if (firstValue->id == CSSValueEachLine && validUnit(secondValue, FLengt h | FPercent)) 9110 else if (firstValue->id == CSSValueEachLine && validUnit(secondValue, FLengt h | FPercent))
9109 lengthOrPercentageValue = secondValue; 9111 lengthOrPercentageValue = secondValue;
9110 9112
9111 if (lengthOrPercentageValue) { 9113 if (lengthOrPercentageValue) {
9112 list->append(createPrimitiveNumericValue(lengthOrPercentageValue)); 9114 list->append(createPrimitiveNumericValue(lengthOrPercentageValue));
9113 list->append(cssValuePool().createIdentifierValue(CSSValueEachLine)); 9115 list->append(cssValuePool().createIdentifierValue(CSSValueEachLine));
9114 m_valueList->next(); 9116 m_valueList->next();
9115 return list.release(); 9117 return list.release();
9116 } 9118 }
9117 9119
9118 return 0; 9120 return nullptr;
9119 } 9121 }
9120 9122
9121 bool CSSPropertyParser::parseLineBoxContain(bool important) 9123 bool CSSPropertyParser::parseLineBoxContain(bool important)
9122 { 9124 {
9123 LineBoxContain lineBoxContain = LineBoxContainNone; 9125 LineBoxContain lineBoxContain = LineBoxContainNone;
9124 9126
9125 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) { 9127 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) {
9126 if (value->id == CSSValueBlock) { 9128 if (value->id == CSSValueBlock) {
9127 if (lineBoxContain & LineBoxContainBlock) 9129 if (lineBoxContain & LineBoxContainBlock)
9128 return false; 9130 return false;
(...skipping 1034 matching lines...) Expand 10 before | Expand all | Expand 10 after
10163 { 10165 {
10164 // The tokenizer checks for the construct of an+b. 10166 // The tokenizer checks for the construct of an+b.
10165 // However, since the {ident} rule precedes the {nth} rule, some of those 10167 // However, since the {ident} rule precedes the {nth} rule, some of those
10166 // tokens are identified as string literal. Furthermore we need to accept 10168 // tokens are identified as string literal. Furthermore we need to accept
10167 // "odd" and "even" which does not match to an+b. 10169 // "odd" and "even" which does not match to an+b.
10168 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") 10170 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even")
10169 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); 10171 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n");
10170 } 10172 }
10171 10173
10172 } 10174 }
OLDNEW
« no previous file with comments | « Source/core/css/StyleRuleImport.cpp ('k') | Source/core/css/resolver/AnimatedStyleBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698