Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1085 case CSSPropertyMarkerEnd: | 1085 case CSSPropertyMarkerEnd: |
| 1086 case CSSPropertyFlex: | 1086 case CSSPropertyFlex: |
| 1087 case CSSPropertyFlexBasis: | 1087 case CSSPropertyFlexBasis: |
| 1088 case CSSPropertyFlexGrow: | 1088 case CSSPropertyFlexGrow: |
| 1089 case CSSPropertyFlexShrink: | 1089 case CSSPropertyFlexShrink: |
| 1090 case CSSPropertyFlexFlow: | 1090 case CSSPropertyFlexFlow: |
| 1091 case CSSPropertyStrokeDasharray: | 1091 case CSSPropertyStrokeDasharray: |
| 1092 case CSSPropertyWebkitColumnRule: | 1092 case CSSPropertyWebkitColumnRule: |
| 1093 case CSSPropertyWebkitColumnRuleColor: | 1093 case CSSPropertyWebkitColumnRuleColor: |
| 1094 case CSSPropertyWebkitColumnRuleWidth: | 1094 case CSSPropertyWebkitColumnRuleWidth: |
| 1095 case CSSPropertyClipPath: | |
| 1096 case CSSPropertyFilter: | |
| 1097 case CSSPropertyMask: | |
| 1098 case CSSPropertyStrokeOpacity: | |
| 1099 case CSSPropertyFillOpacity: | |
| 1100 case CSSPropertyStopOpacity: | |
| 1101 case CSSPropertyFloodOpacity: | |
| 1102 case CSSPropertyBaselineShift: | |
| 1103 case CSSPropertyStrokeMiterlimit: | |
| 1104 case CSSPropertyStrokeWidth: | |
| 1105 case CSSPropertyStrokeDashoffset: | |
| 1106 case CSSPropertyCx: | |
| 1107 case CSSPropertyCy: | |
| 1108 case CSSPropertyX: | |
| 1109 case CSSPropertyY: | |
| 1110 case CSSPropertyR: | |
| 1111 case CSSPropertyRx: | |
| 1112 case CSSPropertyRy: | |
| 1095 validPrimitive = false; | 1113 validPrimitive = false; |
| 1096 break; | 1114 break; |
| 1097 | 1115 |
| 1098 case CSSPropertyScrollSnapPointsX: | 1116 case CSSPropertyScrollSnapPointsX: |
| 1099 case CSSPropertyScrollSnapPointsY: | 1117 case CSSPropertyScrollSnapPointsY: |
| 1100 parsedValue = parseScrollSnapPoints(); | 1118 parsedValue = parseScrollSnapPoints(); |
| 1101 break; | 1119 break; |
| 1102 case CSSPropertyScrollSnapCoordinate: | 1120 case CSSPropertyScrollSnapCoordinate: |
| 1103 parsedValue = parseScrollSnapCoordinate(); | 1121 parsedValue = parseScrollSnapCoordinate(); |
| 1104 break; | 1122 break; |
| 1105 case CSSPropertyScrollSnapDestination: | 1123 case CSSPropertyScrollSnapDestination: |
| 1106 parsedValue = parsePosition(m_valueList); | 1124 parsedValue = parsePosition(m_valueList); |
| 1107 break; | 1125 break; |
| 1108 | 1126 |
| 1109 default: | 1127 default: |
| 1110 return parseSVGValue(propId, important); | 1128 // If you crash here, it's because you added a css property and are not handling it |
| 1129 // in either this switch statement or the one in CSSPropertyParser::pars eValue | |
|
Timothy Loh
2015/11/30 06:09:57
probably should update this to.. ::parseSingleValu
rwlbuis
2015/11/30 22:17:43
Done.
| |
| 1130 ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", propId); | |
| 1131 return false; | |
| 1111 } | 1132 } |
| 1112 | 1133 |
| 1113 if (validPrimitive) { | 1134 if (validPrimitive) { |
| 1114 parsedValue = parseValidPrimitive(id, value); | 1135 parsedValue = parseValidPrimitive(id, value); |
| 1115 m_valueList->next(); | 1136 m_valueList->next(); |
| 1116 } | 1137 } |
| 1117 ASSERT(!m_parsedCalculation); | 1138 ASSERT(!m_parsedCalculation); |
| 1118 if (parsedValue) { | 1139 if (parsedValue) { |
| 1119 if (!m_valueList->current() || inShorthand()) { | 1140 if (!m_valueList->current() || inShorthand()) { |
| 1120 addProperty(propId, parsedValue.release(), important); | 1141 addProperty(propId, parsedValue.release(), important); |
| (...skipping 4167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5288 return CSSValueInvalid; | 5309 return CSSValueInvalid; |
| 5289 | 5310 |
| 5290 return string.is8Bit() ? cssValueKeywordID(string.characters8(), length) : c ssValueKeywordID(string.characters16(), length); | 5311 return string.is8Bit() ? cssValueKeywordID(string.characters8(), length) : c ssValueKeywordID(string.characters16(), length); |
| 5291 } | 5312 } |
| 5292 | 5313 |
| 5293 bool CSSPropertyParser::isSystemColor(CSSValueID id) | 5314 bool CSSPropertyParser::isSystemColor(CSSValueID id) |
| 5294 { | 5315 { |
| 5295 return (id >= CSSValueActiveborder && id <= CSSValueWindowtext) || id == CSS ValueMenu; | 5316 return (id >= CSSValueActiveborder && id <= CSSValueWindowtext) || id == CSS ValueMenu; |
| 5296 } | 5317 } |
| 5297 | 5318 |
| 5298 bool CSSPropertyParser::parseSVGValue(CSSPropertyID propId, bool important) | |
| 5299 { | |
| 5300 CSSParserValue* value = m_valueList->current(); | |
| 5301 ASSERT(value); | |
| 5302 | |
| 5303 CSSValueID id = value->id; | |
| 5304 | |
| 5305 bool validPrimitive = false; | |
| 5306 RefPtrWillBeRawPtr<CSSValue> parsedValue = nullptr; | |
| 5307 | |
| 5308 switch (propId) { | |
| 5309 /* The comment to the right defines all valid value of these | |
| 5310 * properties as defined in SVG 1.1, Appendix N. Property index */ | |
| 5311 case CSSPropertyBaselineShift: | |
| 5312 // baseline | super | sub | <percentage> | <length> | inherit | |
| 5313 if (id == CSSValueBaseline || id == CSSValueSub || id == CSSValueSuper) | |
| 5314 validPrimitive = true; | |
| 5315 else | |
| 5316 validPrimitive = validUnit(value, FLength | FPercent, SVGAttributeMo de); | |
| 5317 break; | |
| 5318 | |
| 5319 case CSSPropertyClipPath: | |
| 5320 case CSSPropertyFilter: | |
| 5321 case CSSPropertyMask: | |
| 5322 if (id == CSSValueNone) { | |
| 5323 validPrimitive = true; | |
| 5324 } else if (value->m_unit == CSSParserValue::URI) { | |
| 5325 parsedValue = CSSURIValue::create(value->string); | |
| 5326 if (parsedValue) | |
| 5327 m_valueList->next(); | |
| 5328 } | |
| 5329 break; | |
| 5330 | |
| 5331 case CSSPropertyStrokeMiterlimit: // <miterlimit> | inherit | |
| 5332 validPrimitive = validUnit(value, FNumber | FNonNeg, SVGAttributeMode); | |
| 5333 break; | |
| 5334 | |
| 5335 case CSSPropertyStrokeOpacity: // <opacity-value> | inherit | |
| 5336 case CSSPropertyFillOpacity: | |
| 5337 case CSSPropertyStopOpacity: | |
| 5338 case CSSPropertyFloodOpacity: | |
| 5339 validPrimitive = validUnit(value, FNumber | FPercent, SVGAttributeMode); | |
| 5340 break; | |
| 5341 | |
| 5342 /* Start of supported CSS properties with validation. This is needed for par seShortHand to work | |
| 5343 * correctly and allows optimization in applyRule(..) | |
| 5344 */ | |
| 5345 | |
| 5346 case CSSPropertyStrokeWidth: // <length> | inherit | |
| 5347 case CSSPropertyStrokeDashoffset: | |
| 5348 case CSSPropertyCx: | |
| 5349 case CSSPropertyCy: | |
| 5350 case CSSPropertyX: | |
| 5351 case CSSPropertyY: | |
| 5352 case CSSPropertyR: | |
| 5353 case CSSPropertyRx: | |
| 5354 case CSSPropertyRy: | |
| 5355 validPrimitive = validUnit(value, FLength | FPercent, SVGAttributeMode); | |
| 5356 break; | |
| 5357 | |
| 5358 default: | |
| 5359 // If you crash here, it's because you added a css property and are not handling it | |
| 5360 // in either this switch statement or the one in CSSPropertyParser::pars eValue | |
| 5361 ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", propId); | |
| 5362 return false; | |
| 5363 } | |
| 5364 | |
| 5365 if (validPrimitive) { | |
| 5366 if (id) | |
| 5367 parsedValue = CSSPrimitiveValue::createIdentifier(id); | |
| 5368 else if (value->m_unit == CSSParserValue::String) | |
| 5369 parsedValue = CSSStringValue::create(value->string); | |
| 5370 else if (value->unit() >= CSSPrimitiveValue::UnitType::Number && value-> unit() <= CSSPrimitiveValue::UnitType::Kilohertz) | |
| 5371 parsedValue = CSSPrimitiveValue::create(value->fValue, value->unit() ); | |
| 5372 else if (value->unit() == CSSPrimitiveValue::UnitType::Rems || value->un it() == CSSPrimitiveValue::UnitType::Chs) | |
| 5373 parsedValue = CSSPrimitiveValue::create(value->fValue, value->unit() ); | |
| 5374 else if (value->unit() == CSSPrimitiveValue::UnitType::QuirkyEms) | |
| 5375 parsedValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitiveV alue::UnitType::QuirkyEms); | |
| 5376 if (isCalculation(value)) { | |
| 5377 // FIXME calc() http://webkit.org/b/16662 : actually create a CSSPri mitiveValue here, ie | |
| 5378 // parsedValue = CSSPrimitiveValue::create(m_parsedCalculation.relea se()); | |
| 5379 m_parsedCalculation.release(); | |
| 5380 parsedValue = nullptr; | |
| 5381 } | |
| 5382 m_valueList->next(); | |
| 5383 } | |
| 5384 if (!parsedValue || (m_valueList->current() && !inShorthand())) | |
| 5385 return false; | |
| 5386 | |
| 5387 addProperty(propId, parsedValue.release(), important); | |
| 5388 return true; | |
| 5389 } | |
| 5390 | |
| 5391 } // namespace blink | 5319 } // namespace blink |
| OLD | NEW |