| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/css/parser/CSSPropertyParser.h" | 5 #include "core/css/parser/CSSPropertyParser.h" |
| 6 | 6 |
| 7 #include "core/StylePropertyShorthand.h" | 7 #include "core/StylePropertyShorthand.h" |
| 8 #include "core/css/CSSBasicShapeValues.h" | 8 #include "core/css/CSSBasicShapeValues.h" |
| 9 #include "core/css/CSSBorderImage.h" | 9 #include "core/css/CSSBorderImage.h" |
| 10 #include "core/css/CSSContentDistributionValue.h" | 10 #include "core/css/CSSContentDistributionValue.h" |
| 11 #include "core/css/CSSCounterValue.h" | 11 #include "core/css/CSSCounterValue.h" |
| 12 #include "core/css/CSSCrossfadeValue.h" | 12 #include "core/css/CSSCrossfadeValue.h" |
| 13 #include "core/css/CSSCursorImageValue.h" | 13 #include "core/css/CSSCursorImageValue.h" |
| 14 #include "core/css/CSSCustomIdentValue.h" | 14 #include "core/css/CSSCustomIdentValue.h" |
| 15 #include "core/css/CSSFontFaceSrcValue.h" | 15 #include "core/css/CSSFontFaceSrcValue.h" |
| 16 #include "core/css/CSSFontFeatureValue.h" | 16 #include "core/css/CSSFontFeatureValue.h" |
| 17 #include "core/css/CSSFunctionValue.h" | 17 #include "core/css/CSSFunctionValue.h" |
| 18 #include "core/css/CSSGradientValue.h" | 18 #include "core/css/CSSGradientValue.h" |
| 19 #include "core/css/CSSImageSetValue.h" | 19 #include "core/css/CSSImageSetValue.h" |
| 20 #include "core/css/CSSPaintValue.h" |
| 20 #include "core/css/CSSPathValue.h" | 21 #include "core/css/CSSPathValue.h" |
| 21 #include "core/css/CSSPrimitiveValueMappings.h" | 22 #include "core/css/CSSPrimitiveValueMappings.h" |
| 22 #include "core/css/CSSQuadValue.h" | 23 #include "core/css/CSSQuadValue.h" |
| 23 #include "core/css/CSSReflectValue.h" | 24 #include "core/css/CSSReflectValue.h" |
| 24 #include "core/css/CSSSVGDocumentValue.h" | 25 #include "core/css/CSSSVGDocumentValue.h" |
| 25 #include "core/css/CSSShadowValue.h" | 26 #include "core/css/CSSShadowValue.h" |
| 26 #include "core/css/CSSStringValue.h" | 27 #include "core/css/CSSStringValue.h" |
| 27 #include "core/css/CSSTimingFunctionValue.h" | 28 #include "core/css/CSSTimingFunctionValue.h" |
| 28 #include "core/css/CSSURIValue.h" | 29 #include "core/css/CSSURIValue.h" |
| 29 #include "core/css/CSSUnicodeRangeValue.h" | 30 #include "core/css/CSSUnicodeRangeValue.h" |
| (...skipping 1880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1910 static PassRefPtrWillBeRawPtr<CSSValue> consumePositionX(CSSParserTokenRange& ra
nge, CSSParserMode cssParserMode) | 1911 static PassRefPtrWillBeRawPtr<CSSValue> consumePositionX(CSSParserTokenRange& ra
nge, CSSParserMode cssParserMode) |
| 1911 { | 1912 { |
| 1912 return consumePositionLonghand<CSSValueLeft, CSSValueRight>(range, cssParser
Mode); | 1913 return consumePositionLonghand<CSSValueLeft, CSSValueRight>(range, cssParser
Mode); |
| 1913 } | 1914 } |
| 1914 | 1915 |
| 1915 static PassRefPtrWillBeRawPtr<CSSValue> consumePositionY(CSSParserTokenRange& ra
nge, CSSParserMode cssParserMode) | 1916 static PassRefPtrWillBeRawPtr<CSSValue> consumePositionY(CSSParserTokenRange& ra
nge, CSSParserMode cssParserMode) |
| 1916 { | 1917 { |
| 1917 return consumePositionLonghand<CSSValueTop, CSSValueBottom>(range, cssParser
Mode); | 1918 return consumePositionLonghand<CSSValueTop, CSSValueBottom>(range, cssParser
Mode); |
| 1918 } | 1919 } |
| 1919 | 1920 |
| 1920 static PassRefPtrWillBeRawPtr<CSSValue> consumePaint(CSSParserTokenRange& range,
CSSParserMode cssParserMode) | 1921 static PassRefPtrWillBeRawPtr<CSSValue> consumePaintStroke(CSSParserTokenRange&
range, CSSParserMode cssParserMode) |
| 1921 { | 1922 { |
| 1922 if (range.peek().id() == CSSValueNone) | 1923 if (range.peek().id() == CSSValueNone) |
| 1923 return consumeIdent(range); | 1924 return consumeIdent(range); |
| 1924 String url = consumeUrl(range); | 1925 String url = consumeUrl(range); |
| 1925 if (!url.isNull()) { | 1926 if (!url.isNull()) { |
| 1926 RefPtrWillBeRawPtr<CSSValue> parsedValue = nullptr; | 1927 RefPtrWillBeRawPtr<CSSValue> parsedValue = nullptr; |
| 1927 if (range.peek().id() == CSSValueNone) | 1928 if (range.peek().id() == CSSValueNone) |
| 1928 parsedValue = consumeIdent(range); | 1929 parsedValue = consumeIdent(range); |
| 1929 else | 1930 else |
| 1930 parsedValue = consumeColor(range, cssParserMode); | 1931 parsedValue = consumeColor(range, cssParserMode); |
| (...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2444 if (percentageArg.type() == PercentageToken) | 2445 if (percentageArg.type() == PercentageToken) |
| 2445 percentage = cssValuePool().createValue(clampTo<double>(percentageArg.nu
mericValue() / 100, 0, 1), CSSPrimitiveValue::UnitType::Number); | 2446 percentage = cssValuePool().createValue(clampTo<double>(percentageArg.nu
mericValue() / 100, 0, 1), CSSPrimitiveValue::UnitType::Number); |
| 2446 else if (percentageArg.type() == NumberToken) | 2447 else if (percentageArg.type() == NumberToken) |
| 2447 percentage = cssValuePool().createValue(clampTo<double>(percentageArg.nu
mericValue(), 0, 1), CSSPrimitiveValue::UnitType::Number); | 2448 percentage = cssValuePool().createValue(clampTo<double>(percentageArg.nu
mericValue(), 0, 1), CSSPrimitiveValue::UnitType::Number); |
| 2448 | 2449 |
| 2449 if (!percentage) | 2450 if (!percentage) |
| 2450 return nullptr; | 2451 return nullptr; |
| 2451 return CSSCrossfadeValue::create(fromImageValue, toImageValue, percentage); | 2452 return CSSCrossfadeValue::create(fromImageValue, toImageValue, percentage); |
| 2452 } | 2453 } |
| 2453 | 2454 |
| 2455 static PassRefPtrWillBeRawPtr<CSSValue> consumePaint(CSSParserTokenRange& args,
CSSParserContext context) |
| 2456 { |
| 2457 ASSERT(RuntimeEnabledFeatures::cssPaintAPIEnabled()); |
| 2458 |
| 2459 RefPtrWillBeRawPtr<CSSCustomIdentValue> name = consumeCustomIdent(args); |
| 2460 if (!name) |
| 2461 return nullptr; |
| 2462 |
| 2463 return CSSPaintValue::create(name.release()); |
| 2464 } |
| 2465 |
| 2454 static PassRefPtrWillBeRawPtr<CSSValue> consumeGeneratedImage(CSSParserTokenRang
e& range, CSSParserContext context) | 2466 static PassRefPtrWillBeRawPtr<CSSValue> consumeGeneratedImage(CSSParserTokenRang
e& range, CSSParserContext context) |
| 2455 { | 2467 { |
| 2456 CSSValueID id = range.peek().functionId(); | 2468 CSSValueID id = range.peek().functionId(); |
| 2457 CSSParserTokenRange rangeCopy = range; | 2469 CSSParserTokenRange rangeCopy = range; |
| 2458 CSSParserTokenRange args = consumeFunction(rangeCopy); | 2470 CSSParserTokenRange args = consumeFunction(rangeCopy); |
| 2459 RefPtrWillBeRawPtr<CSSValue> result = nullptr; | 2471 RefPtrWillBeRawPtr<CSSValue> result = nullptr; |
| 2460 if (id == CSSValueRadialGradient) { | 2472 if (id == CSSValueRadialGradient) { |
| 2461 result = consumeRadialGradient(args, context.mode(), NonRepeating); | 2473 result = consumeRadialGradient(args, context.mode(), NonRepeating); |
| 2462 } else if (id == CSSValueRepeatingRadialGradient) { | 2474 } else if (id == CSSValueRepeatingRadialGradient) { |
| 2463 result = consumeRadialGradient(args, context.mode(), Repeating); | 2475 result = consumeRadialGradient(args, context.mode(), Repeating); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2484 // FIXME: This should send a deprecation message. | 2496 // FIXME: This should send a deprecation message. |
| 2485 if (context.useCounter()) | 2497 if (context.useCounter()) |
| 2486 context.useCounter()->count(UseCounter::DeprecatedWebKitRadialGradie
nt); | 2498 context.useCounter()->count(UseCounter::DeprecatedWebKitRadialGradie
nt); |
| 2487 result = consumeDeprecatedRadialGradient(args, context.mode(), NonRepeat
ing); | 2499 result = consumeDeprecatedRadialGradient(args, context.mode(), NonRepeat
ing); |
| 2488 } else if (id == CSSValueWebkitRepeatingRadialGradient) { | 2500 } else if (id == CSSValueWebkitRepeatingRadialGradient) { |
| 2489 if (context.useCounter()) | 2501 if (context.useCounter()) |
| 2490 context.useCounter()->count(UseCounter::DeprecatedWebKitRepeatingRad
ialGradient); | 2502 context.useCounter()->count(UseCounter::DeprecatedWebKitRepeatingRad
ialGradient); |
| 2491 result = consumeDeprecatedRadialGradient(args, context.mode(), Repeating
); | 2503 result = consumeDeprecatedRadialGradient(args, context.mode(), Repeating
); |
| 2492 } else if (id == CSSValueWebkitCrossFade) { | 2504 } else if (id == CSSValueWebkitCrossFade) { |
| 2493 result = consumeCrossFade(args, context); | 2505 result = consumeCrossFade(args, context); |
| 2506 } else if (id == CSSValuePaint) { |
| 2507 result = RuntimeEnabledFeatures::cssPaintAPIEnabled() ? consumePaint(arg
s, context) : nullptr; |
| 2494 } | 2508 } |
| 2495 if (!result || !args.atEnd()) | 2509 if (!result || !args.atEnd()) |
| 2496 return nullptr; | 2510 return nullptr; |
| 2497 range = rangeCopy; | 2511 range = rangeCopy; |
| 2498 return result; | 2512 return result; |
| 2499 } | 2513 } |
| 2500 | 2514 |
| 2501 static bool isGeneratedImage(CSSValueID id) | 2515 static bool isGeneratedImage(CSSValueID id) |
| 2502 { | 2516 { |
| 2503 return id == CSSValueLinearGradient || id == CSSValueRadialGradient | 2517 return id == CSSValueLinearGradient || id == CSSValueRadialGradient |
| 2504 || id == CSSValueRepeatingLinearGradient || id == CSSValueRepeatingRadia
lGradient | 2518 || id == CSSValueRepeatingLinearGradient || id == CSSValueRepeatingRadia
lGradient |
| 2505 || id == CSSValueWebkitLinearGradient || id == CSSValueWebkitRadialGradi
ent | 2519 || id == CSSValueWebkitLinearGradient || id == CSSValueWebkitRadialGradi
ent |
| 2506 || id == CSSValueWebkitRepeatingLinearGradient || id == CSSValueWebkitRe
peatingRadialGradient | 2520 || id == CSSValueWebkitRepeatingLinearGradient || id == CSSValueWebkitRe
peatingRadialGradient |
| 2507 || id == CSSValueWebkitGradient || id == CSSValueWebkitCrossFade; | 2521 || id == CSSValueWebkitGradient || id == CSSValueWebkitCrossFade || id =
= CSSValuePaint; |
| 2508 } | 2522 } |
| 2509 | 2523 |
| 2510 static PassRefPtrWillBeRawPtr<CSSValue> consumeImage(CSSParserTokenRange& range,
CSSParserContext context) | 2524 static PassRefPtrWillBeRawPtr<CSSValue> consumeImage(CSSParserTokenRange& range,
CSSParserContext context) |
| 2511 { | 2525 { |
| 2512 if (range.peek().id() == CSSValueNone) | 2526 if (range.peek().id() == CSSValueNone) |
| 2513 return consumeIdent(range); | 2527 return consumeIdent(range); |
| 2514 | 2528 |
| 2515 AtomicString uri(consumeUrl(range)); | 2529 AtomicString uri(consumeUrl(range)); |
| 2516 if (!uri.isNull()) | 2530 if (!uri.isNull()) |
| 2517 return createCSSImageValueWithReferrer(uri, context); | 2531 return createCSSImageValueWithReferrer(uri, context); |
| (...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3490 case CSSPropertyWebkitTransformOriginX: | 3504 case CSSPropertyWebkitTransformOriginX: |
| 3491 case CSSPropertyWebkitPerspectiveOriginX: | 3505 case CSSPropertyWebkitPerspectiveOriginX: |
| 3492 return consumePositionX(m_range, m_context.mode()); | 3506 return consumePositionX(m_range, m_context.mode()); |
| 3493 case CSSPropertyWebkitTransformOriginY: | 3507 case CSSPropertyWebkitTransformOriginY: |
| 3494 case CSSPropertyWebkitPerspectiveOriginY: | 3508 case CSSPropertyWebkitPerspectiveOriginY: |
| 3495 return consumePositionY(m_range, m_context.mode()); | 3509 return consumePositionY(m_range, m_context.mode()); |
| 3496 case CSSPropertyWebkitTransformOriginZ: | 3510 case CSSPropertyWebkitTransformOriginZ: |
| 3497 return consumeLength(m_range, m_context.mode(), ValueRangeAll); | 3511 return consumeLength(m_range, m_context.mode(), ValueRangeAll); |
| 3498 case CSSPropertyFill: | 3512 case CSSPropertyFill: |
| 3499 case CSSPropertyStroke: | 3513 case CSSPropertyStroke: |
| 3500 return consumePaint(m_range, m_context.mode()); | 3514 return consumePaintStroke(m_range, m_context.mode()); |
| 3501 case CSSPropertyPaintOrder: | 3515 case CSSPropertyPaintOrder: |
| 3502 return consumePaintOrder(m_range); | 3516 return consumePaintOrder(m_range); |
| 3503 case CSSPropertyMarkerStart: | 3517 case CSSPropertyMarkerStart: |
| 3504 case CSSPropertyMarkerMid: | 3518 case CSSPropertyMarkerMid: |
| 3505 case CSSPropertyMarkerEnd: | 3519 case CSSPropertyMarkerEnd: |
| 3506 case CSSPropertyClipPath: | 3520 case CSSPropertyClipPath: |
| 3507 case CSSPropertyFilter: | 3521 case CSSPropertyFilter: |
| 3508 case CSSPropertyMask: | 3522 case CSSPropertyMask: |
| 3509 return consumeNoneOrURI(m_range); | 3523 return consumeNoneOrURI(m_range); |
| 3510 case CSSPropertyFlexBasis: | 3524 case CSSPropertyFlexBasis: |
| (...skipping 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4567 m_currentShorthand = oldShorthand; | 4581 m_currentShorthand = oldShorthand; |
| 4568 CSSParserValueList valueList(m_range); | 4582 CSSParserValueList valueList(m_range); |
| 4569 if (!valueList.size()) | 4583 if (!valueList.size()) |
| 4570 return false; | 4584 return false; |
| 4571 m_valueList = &valueList; | 4585 m_valueList = &valueList; |
| 4572 return legacyParseShorthand(unresolvedProperty, important); | 4586 return legacyParseShorthand(unresolvedProperty, important); |
| 4573 } | 4587 } |
| 4574 } | 4588 } |
| 4575 | 4589 |
| 4576 } // namespace blink | 4590 } // namespace blink |
| OLD | NEW |