Chromium Code Reviews| 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/CSSCalculationValue.h" | 10 #include "core/css/CSSCalculationValue.h" |
| (...skipping 3374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3385 if (range.peek().id() == CSSValueFromImage) | 3385 if (range.peek().id() == CSSValueFromImage) |
| 3386 return consumeIdent(range); | 3386 return consumeIdent(range); |
| 3387 if (range.peek().type() != NumberToken) { | 3387 if (range.peek().type() != NumberToken) { |
| 3388 RefPtrWillBeRawPtr<CSSPrimitiveValue> angle = consumeAngle(range, cssPar serMode); | 3388 RefPtrWillBeRawPtr<CSSPrimitiveValue> angle = consumeAngle(range, cssPar serMode); |
| 3389 if (angle && angle->getDoubleValue() == 0) | 3389 if (angle && angle->getDoubleValue() == 0) |
| 3390 return angle; | 3390 return angle; |
| 3391 } | 3391 } |
| 3392 return nullptr; | 3392 return nullptr; |
| 3393 } | 3393 } |
| 3394 | 3394 |
| 3395 static PassRefPtrWillBeRawPtr<CSSValue> consumeBackgroundClip(CSSParserTokenRang e& range) | |
| 3396 { | |
| 3397 return consumeIdent<CSSValueBorderBox, CSSValuePaddingBox, CSSValueContentBo x>(range); | |
| 3398 } | |
| 3399 | |
| 3400 static PassRefPtrWillBeRawPtr<CSSValue> consumeBackgroundBlendMode(CSSParserToke nRange& range) | |
| 3401 { | |
| 3402 if (identMatches<CSSValueNormal, CSSValueOverlay>(range.peek().id())) | |
|
Timothy Loh
2016/02/19 04:11:13
I think it'd be clearer to not use these helpers h
rwlbuis
2016/02/21 18:22:08
Done.
| |
| 3403 return consumeIdent(range); | |
| 3404 return consumeIdentRange(range, CSSValueMultiply, CSSValueLuminosity); | |
| 3405 } | |
| 3406 | |
| 3407 static PassRefPtrWillBeRawPtr<CSSValue> consumeBackgroundAttachment(CSSParserTok enRange& range) | |
| 3408 { | |
| 3409 return consumeIdent<CSSValueScroll, CSSValueFixed, CSSValueLocal>(range); | |
| 3410 } | |
| 3411 | |
| 3412 static PassRefPtrWillBeRawPtr<CSSValue> consumeBackgroundOrigin(CSSParserTokenRa nge& range) | |
|
Timothy Loh
2016/02/19 04:11:13
Can we merge this and consumeBackgroundClip and na
rwlbuis
2016/02/21 18:22:08
Done.
| |
| 3413 { | |
| 3414 return consumeIdent<CSSValueBorderBox, CSSValuePaddingBox, CSSValueContentBo x>(range); | |
| 3415 } | |
| 3416 | |
| 3417 static PassRefPtrWillBeRawPtr<CSSValue> consumeBackgroundComposite(CSSParserToke nRange& range) | |
| 3418 { | |
| 3419 return consumeIdentRange(range, CSSValueClear, CSSValuePlusLighter); | |
| 3420 } | |
| 3421 | |
| 3422 static PassRefPtrWillBeRawPtr<CSSValue> consumeMaskSourceType(CSSParserTokenRang e& range) | |
| 3423 { | |
| 3424 ASSERT(RuntimeEnabledFeatures::cssMaskSourceTypeEnabled()); | |
| 3425 return consumeIdent<CSSValueAuto, CSSValueAlpha, CSSValueLuminance>(range); | |
| 3426 } | |
| 3427 | |
| 3428 static PassRefPtrWillBeRawPtr<CSSValue> consumeClipOrOrigin(CSSPropertyID proper ty, CSSParserTokenRange& range, const CSSParserContext& context) | |
|
Timothy Loh
2016/02/19 04:11:13
consumePrefixedBackgroundBox?
rwlbuis
2016/02/21 18:22:08
Done.
| |
| 3429 { | |
| 3430 // CSSValueBorder, CSSValuePadding and CSSValueContent are deprecated and do not apply to the version of the property that has the -webkit- prefix removed. | |
|
Timothy Loh
2016/02/19 04:11:13
Maybe better to talk about the actual values and n
rwlbuis
2016/02/21 18:22:08
Done.
| |
| 3431 if (RefPtrWillBeRawPtr<CSSValue> value = consumeIdentRange(range, CSSValueBo rder, CSSValuePaddingBox)) | |
| 3432 return value.release(); | |
| 3433 if ((property == CSSPropertyWebkitBackgroundClip || property == CSSPropertyW ebkitMaskClip) && range.peek().id() == CSSValueText) | |
| 3434 return consumeIdent(range); | |
| 3435 return nullptr; | |
| 3436 } | |
| 3437 | |
| 3438 static PassRefPtrWillBeRawPtr<CSSValue> consumeBackgroundSize(CSSPropertyID unre solvedProperty, CSSParserTokenRange& range, CSSParserMode mode) | |
| 3439 { | |
| 3440 if (identMatches<CSSValueContain, CSSValueCover>(range.peek().id())) | |
| 3441 return consumeIdent(range); | |
| 3442 | |
| 3443 RefPtrWillBeRawPtr<CSSPrimitiveValue> horizontal = consumeIdent<CSSValueAuto >(range); | |
| 3444 if (!horizontal) | |
| 3445 horizontal = consumeLengthOrPercent(range, mode, ValueRangeAll, Unitless Quirk::Forbid); | |
| 3446 | |
| 3447 RefPtrWillBeRawPtr<CSSPrimitiveValue> vertical = nullptr; | |
| 3448 if (!range.atEnd()) { | |
| 3449 if (identMatches<CSSValueAuto>(range.peek().id())) // `auto' is the defa ult | |
|
Timothy Loh
2016/02/19 04:11:13
Why not just range.peek().id() == CSSValueAuto?
rwlbuis
2016/02/21 18:22:08
Done.
| |
| 3450 range.consumeIncludingWhitespace(); | |
| 3451 else | |
| 3452 vertical = consumeLengthOrPercent(range, mode, ValueRangeAll, Unitle ssQuirk::Forbid); | |
| 3453 } else if (unresolvedProperty == CSSPropertyAliasWebkitBackgroundSize) { | |
| 3454 // For backwards compatibility we set the second value to the first if i t is omitted. | |
|
Timothy Loh
2016/02/19 04:11:13
I don't think this needs to talk about masks here.
rwlbuis
2016/02/21 18:22:08
Done.
| |
| 3455 // We only need to do this for -webkit-background-size. It should be saf e to let masks match | |
| 3456 // the real property. | |
| 3457 vertical = horizontal; | |
| 3458 } | |
| 3459 if (!vertical) | |
| 3460 return horizontal; | |
| 3461 return CSSValuePair::create(horizontal.release(), vertical.release(), CSSVal uePair::KeepIdenticalValues); | |
| 3462 } | |
| 3463 | |
| 3464 static PassRefPtrWillBeRawPtr<CSSValue> consumeBackgroundComponent(CSSPropertyID property, CSSParserTokenRange& range, const CSSParserContext& context) | |
|
Timothy Loh
2016/02/19 04:11:13
property -> unresolvedProperty
rwlbuis
2016/02/21 18:22:08
Done.
| |
| 3465 { | |
| 3466 switch (property) { | |
| 3467 case CSSPropertyBackgroundClip: | |
| 3468 return consumeBackgroundClip(range); | |
| 3469 case CSSPropertyBackgroundBlendMode: | |
| 3470 return consumeBackgroundBlendMode(range); | |
| 3471 case CSSPropertyBackgroundAttachment: | |
| 3472 return consumeBackgroundAttachment(range); | |
| 3473 case CSSPropertyBackgroundOrigin: | |
| 3474 return consumeBackgroundOrigin(range); | |
| 3475 case CSSPropertyWebkitBackgroundComposite: | |
| 3476 case CSSPropertyWebkitMaskComposite: | |
| 3477 return consumeBackgroundComposite(range); | |
| 3478 case CSSPropertyMaskSourceType: | |
| 3479 return consumeMaskSourceType(range); | |
| 3480 case CSSPropertyWebkitBackgroundClip: | |
| 3481 case CSSPropertyWebkitBackgroundOrigin: | |
| 3482 case CSSPropertyWebkitMaskClip: | |
| 3483 case CSSPropertyWebkitMaskOrigin: | |
| 3484 return consumeClipOrOrigin(property, range, context); | |
| 3485 case CSSPropertyBackgroundImage: | |
| 3486 case CSSPropertyWebkitMaskImage: | |
| 3487 return consumeImage(range, context); | |
| 3488 case CSSPropertyBackgroundPositionX: | |
| 3489 case CSSPropertyWebkitMaskPositionX: | |
| 3490 return consumePositionX(range, context.mode()); | |
| 3491 case CSSPropertyBackgroundPositionY: | |
| 3492 case CSSPropertyWebkitMaskPositionY: | |
| 3493 return consumePositionY(range, context.mode()); | |
| 3494 case CSSPropertyBackgroundSize: | |
| 3495 case CSSPropertyAliasWebkitBackgroundSize: | |
| 3496 case CSSPropertyWebkitMaskSize: | |
| 3497 return consumeBackgroundSize(property, range, context.mode()); | |
| 3498 case CSSPropertyBackgroundColor: | |
| 3499 return consumeColor(range, context.mode()); | |
| 3500 default: | |
| 3501 break; | |
| 3502 }; | |
| 3503 return nullptr; | |
| 3504 } | |
| 3505 | |
| 3506 static void addBackgroundValue(RefPtrWillBeRawPtr<CSSValue>& lvalue, PassRefPtrW illBeRawPtr<CSSValue> rvalue) | |
|
Timothy Loh
2016/02/19 04:11:13
I think it'd help to write a comment like
// To co
rwlbuis
2016/02/21 18:22:07
Done.
| |
| 3507 { | |
| 3508 if (lvalue) { | |
| 3509 if (lvalue->isBaseValueList()) { | |
|
Timothy Loh
2016/02/19 04:11:13
How about
if (!list->isBaseValueList()) {
Ref
rwlbuis
2016/02/21 18:22:07
Done, except that I have to cast to CSSValueList :
| |
| 3510 toCSSValueList(lvalue.get())->append(rvalue); | |
| 3511 } else { | |
| 3512 PassRefPtrWillBeRawPtr<CSSValue> oldlValue(lvalue.release()); | |
| 3513 PassRefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createComm aSeparated(); | |
| 3514 list->append(oldlValue); | |
| 3515 list->append(rvalue); | |
| 3516 lvalue = list; | |
| 3517 } | |
| 3518 } else { | |
| 3519 lvalue = rvalue; | |
| 3520 } | |
| 3521 } | |
| 3522 | |
| 3523 static PassRefPtrWillBeRawPtr<CSSValue> consumeCommaSeparatedBackgroundComponent (CSSPropertyID property, CSSParserTokenRange& range, const CSSParserContext& con text) | |
| 3524 { | |
| 3525 RefPtrWillBeRawPtr<CSSValue> ret = nullptr; | |
|
Timothy Loh
2016/02/19 04:11:13
ret -> result
rwlbuis
2016/02/21 18:22:07
Done.
| |
| 3526 do { | |
| 3527 RefPtrWillBeRawPtr<CSSValue> value = consumeBackgroundComponent(property , range, context); | |
| 3528 if (!value) | |
| 3529 return nullptr; | |
| 3530 addBackgroundValue(ret, value); | |
| 3531 } while (consumeCommaIncludingWhitespace(range)); | |
| 3532 return ret.release(); | |
| 3533 } | |
| 3534 | |
| 3395 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty ID unresolvedProperty) | 3535 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty ID unresolvedProperty) |
| 3396 { | 3536 { |
| 3397 CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty); | 3537 CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty); |
| 3398 if (CSSParserFastPaths::isKeywordPropertyID(property)) { | 3538 if (CSSParserFastPaths::isKeywordPropertyID(property)) { |
| 3399 if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(property, m_rang e.peek().id())) | 3539 if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(property, m_rang e.peek().id())) |
| 3400 return nullptr; | 3540 return nullptr; |
| 3401 return consumeIdent(m_range); | 3541 return consumeIdent(m_range); |
| 3402 } | 3542 } |
| 3403 switch (property) { | 3543 switch (property) { |
| 3404 case CSSPropertyWillChange: | 3544 case CSSPropertyWillChange: |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3548 case CSSPropertyWebkitBorderEndColor: | 3688 case CSSPropertyWebkitBorderEndColor: |
| 3549 case CSSPropertyWebkitBorderBeforeColor: | 3689 case CSSPropertyWebkitBorderBeforeColor: |
| 3550 case CSSPropertyWebkitBorderAfterColor: | 3690 case CSSPropertyWebkitBorderAfterColor: |
| 3551 case CSSPropertyWebkitTextStrokeColor: | 3691 case CSSPropertyWebkitTextStrokeColor: |
| 3552 case CSSPropertyStopColor: | 3692 case CSSPropertyStopColor: |
| 3553 case CSSPropertyFloodColor: | 3693 case CSSPropertyFloodColor: |
| 3554 case CSSPropertyLightingColor: | 3694 case CSSPropertyLightingColor: |
| 3555 case CSSPropertyWebkitColumnRuleColor: | 3695 case CSSPropertyWebkitColumnRuleColor: |
| 3556 return consumeColor(m_range, m_context.mode()); | 3696 return consumeColor(m_range, m_context.mode()); |
| 3557 case CSSPropertyColor: | 3697 case CSSPropertyColor: |
| 3698 case CSSPropertyBackgroundColor: | |
| 3558 return consumeColor(m_range, m_context.mode(), inQuirksMode()); | 3699 return consumeColor(m_range, m_context.mode(), inQuirksMode()); |
| 3559 case CSSPropertyWebkitBorderStartWidth: | 3700 case CSSPropertyWebkitBorderStartWidth: |
| 3560 case CSSPropertyWebkitBorderEndWidth: | 3701 case CSSPropertyWebkitBorderEndWidth: |
| 3561 case CSSPropertyWebkitBorderBeforeWidth: | 3702 case CSSPropertyWebkitBorderBeforeWidth: |
| 3562 case CSSPropertyWebkitBorderAfterWidth: | 3703 case CSSPropertyWebkitBorderAfterWidth: |
| 3563 return consumeBorderWidth(m_range, m_context.mode(), UnitlessQuirk::Forb id); | 3704 return consumeBorderWidth(m_range, m_context.mode(), UnitlessQuirk::Forb id); |
| 3564 case CSSPropertyBorderBottomColor: | 3705 case CSSPropertyBorderBottomColor: |
| 3565 case CSSPropertyBorderLeftColor: | 3706 case CSSPropertyBorderLeftColor: |
| 3566 case CSSPropertyBorderRightColor: | 3707 case CSSPropertyBorderRightColor: |
| 3567 case CSSPropertyBorderTopColor: { | 3708 case CSSPropertyBorderTopColor: { |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3717 case CSSPropertyWebkitBorderImage: | 3858 case CSSPropertyWebkitBorderImage: |
| 3718 return consumeWebkitBorderImage(property, m_range, m_context); | 3859 return consumeWebkitBorderImage(property, m_range, m_context); |
| 3719 case CSSPropertyWebkitBoxReflect: | 3860 case CSSPropertyWebkitBoxReflect: |
| 3720 return consumeReflect(m_range, m_context); | 3861 return consumeReflect(m_range, m_context); |
| 3721 case CSSPropertyFontSizeAdjust: | 3862 case CSSPropertyFontSizeAdjust: |
| 3722 ASSERT(RuntimeEnabledFeatures::cssFontSizeAdjustEnabled()); | 3863 ASSERT(RuntimeEnabledFeatures::cssFontSizeAdjustEnabled()); |
| 3723 return consumeFontSizeAdjust(m_range); | 3864 return consumeFontSizeAdjust(m_range); |
| 3724 case CSSPropertyImageOrientation: | 3865 case CSSPropertyImageOrientation: |
| 3725 ASSERT(RuntimeEnabledFeatures::imageOrientationEnabled()); | 3866 ASSERT(RuntimeEnabledFeatures::imageOrientationEnabled()); |
| 3726 return consumeImageOrientation(m_range, m_context.mode()); | 3867 return consumeImageOrientation(m_range, m_context.mode()); |
| 3868 case CSSPropertyBackgroundClip: | |
|
Timothy Loh
2016/02/19 04:11:13
Probably looks better sorted ;)
rwlbuis
2016/02/21 18:22:08
Done.
| |
| 3869 case CSSPropertyBackgroundBlendMode: | |
| 3870 case CSSPropertyBackgroundAttachment: | |
| 3871 case CSSPropertyBackgroundOrigin: | |
| 3872 case CSSPropertyWebkitBackgroundComposite: | |
| 3873 case CSSPropertyWebkitMaskComposite: | |
| 3874 case CSSPropertyMaskSourceType: | |
| 3875 case CSSPropertyWebkitBackgroundClip: | |
| 3876 case CSSPropertyWebkitBackgroundOrigin: | |
| 3877 case CSSPropertyWebkitMaskClip: | |
| 3878 case CSSPropertyWebkitMaskOrigin: | |
| 3879 case CSSPropertyBackgroundImage: | |
| 3880 case CSSPropertyWebkitMaskImage: | |
| 3881 case CSSPropertyBackgroundPositionX: | |
| 3882 case CSSPropertyWebkitMaskPositionX: | |
| 3883 case CSSPropertyBackgroundPositionY: | |
| 3884 case CSSPropertyWebkitMaskPositionY: | |
| 3885 case CSSPropertyBackgroundSize: | |
| 3886 case CSSPropertyWebkitMaskSize: | |
| 3887 return consumeCommaSeparatedBackgroundComponent(unresolvedProperty, m_ra nge, m_context); | |
| 3888 case CSSPropertyWebkitMaskRepeatX: | |
| 3889 case CSSPropertyWebkitMaskRepeatY: | |
| 3890 return nullptr; | |
| 3727 default: | 3891 default: |
| 3728 CSSParserValueList valueList(m_range); | 3892 CSSParserValueList valueList(m_range); |
| 3729 if (valueList.size()) { | 3893 if (valueList.size()) { |
| 3730 m_valueList = &valueList; | 3894 m_valueList = &valueList; |
| 3731 if (RefPtrWillBeRawPtr<CSSValue> result = legacyParseValue(unresolve dProperty)) { | 3895 if (RefPtrWillBeRawPtr<CSSValue> result = legacyParseValue(unresolve dProperty)) { |
| 3732 while (!m_range.atEnd()) | 3896 while (!m_range.atEnd()) |
| 3733 m_range.consume(); | 3897 m_range.consume(); |
| 3734 return result.release(); | 3898 return result.release(); |
| 3735 } | 3899 } |
| 3736 } | 3900 } |
| (...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4511 m_currentShorthand = oldShorthand; | 4675 m_currentShorthand = oldShorthand; |
| 4512 CSSParserValueList valueList(m_range); | 4676 CSSParserValueList valueList(m_range); |
| 4513 if (!valueList.size()) | 4677 if (!valueList.size()) |
| 4514 return false; | 4678 return false; |
| 4515 m_valueList = &valueList; | 4679 m_valueList = &valueList; |
| 4516 return legacyParseShorthand(unresolvedProperty, important); | 4680 return legacyParseShorthand(unresolvedProperty, important); |
| 4517 } | 4681 } |
| 4518 } | 4682 } |
| 4519 | 4683 |
| 4520 } // namespace blink | 4684 } // namespace blink |
| OLD | NEW |