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 <memory> | 7 #include <memory> |
8 #include "core/StylePropertyShorthand.h" | 8 #include "core/StylePropertyShorthand.h" |
9 #include "core/css/CSSBasicShapeValues.h" | 9 #include "core/css/CSSBasicShapeValues.h" |
10 #include "core/css/CSSBorderImage.h" | 10 #include "core/css/CSSBorderImage.h" |
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 if (args.AtEnd()) { | 640 if (args.AtEnd()) { |
641 context->Count(UseCounter::kCSSFilterFunctionNoArguments); | 641 context->Count(UseCounter::kCSSFilterFunctionNoArguments); |
642 return filter_value; | 642 return filter_value; |
643 } | 643 } |
644 if (filter_type == CSSValueBrightness) { | 644 if (filter_type == CSSValueBrightness) { |
645 // FIXME (crbug.com/397061): Support calc expressions like calc(10% + 0.5) | 645 // FIXME (crbug.com/397061): Support calc expressions like calc(10% + 0.5) |
646 parsed_value = ConsumePercent(args, kValueRangeAll); | 646 parsed_value = ConsumePercent(args, kValueRangeAll); |
647 if (!parsed_value) | 647 if (!parsed_value) |
648 parsed_value = ConsumeNumber(args, kValueRangeAll); | 648 parsed_value = ConsumeNumber(args, kValueRangeAll); |
649 } else if (filter_type == CSSValueHueRotate) { | 649 } else if (filter_type == CSSValueHueRotate) { |
650 parsed_value = ConsumeAngle(args); | 650 parsed_value = |
| 651 ConsumeAngle(args, *context, UseCounter::kUnitlessZeroAngleFilter); |
651 } else if (filter_type == CSSValueBlur) { | 652 } else if (filter_type == CSSValueBlur) { |
652 parsed_value = | 653 parsed_value = |
653 ConsumeLength(args, kHTMLStandardMode, kValueRangeNonNegative); | 654 ConsumeLength(args, kHTMLStandardMode, kValueRangeNonNegative); |
654 } else { | 655 } else { |
655 // FIXME (crbug.com/397061): Support calc expressions like calc(10% + 0.5) | 656 // FIXME (crbug.com/397061): Support calc expressions like calc(10% + 0.5) |
656 parsed_value = ConsumePercent(args, kValueRangeNonNegative); | 657 parsed_value = ConsumePercent(args, kValueRangeNonNegative); |
657 if (!parsed_value) | 658 if (!parsed_value) |
658 parsed_value = ConsumeNumber(args, kValueRangeNonNegative); | 659 parsed_value = ConsumeNumber(args, kValueRangeNonNegative); |
659 if (parsed_value && filter_type != CSSValueSaturate && | 660 if (parsed_value && filter_type != CSSValueSaturate && |
660 filter_type != CSSValueContrast) { | 661 filter_type != CSSValueContrast) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 if (list->HasValue(*ident)) | 709 if (list->HasValue(*ident)) |
709 return nullptr; | 710 return nullptr; |
710 list->Append(*ident); | 711 list->Append(*ident); |
711 } | 712 } |
712 | 713 |
713 if (!list->length()) | 714 if (!list->length()) |
714 return nullptr; | 715 return nullptr; |
715 return list; | 716 return list; |
716 } | 717 } |
717 | 718 |
718 static CSSValue* ConsumeOffsetRotate(CSSParserTokenRange& range) { | 719 static CSSValue* ConsumeOffsetRotate(CSSParserTokenRange& range, |
719 CSSValue* angle = ConsumeAngle(range); | 720 const CSSParserContext& context) { |
| 721 CSSValue* angle = |
| 722 ConsumeAngle(range, context, UseCounter::kUnitlessZeroAngleOffsetRotate); |
720 CSSValue* keyword = ConsumeIdent<CSSValueAuto, CSSValueReverse>(range); | 723 CSSValue* keyword = ConsumeIdent<CSSValueAuto, CSSValueReverse>(range); |
721 if (!angle && !keyword) | 724 if (!angle && !keyword) |
722 return nullptr; | 725 return nullptr; |
723 | 726 |
724 if (!angle) | 727 if (!angle) { |
725 angle = ConsumeAngle(range); | 728 angle = ConsumeAngle(range, context, |
| 729 UseCounter::kUnitlessZeroAngleOffsetRotate); |
| 730 } |
726 | 731 |
727 CSSValueList* list = CSSValueList::CreateSpaceSeparated(); | 732 CSSValueList* list = CSSValueList::CreateSpaceSeparated(); |
728 if (keyword) | 733 if (keyword) |
729 list->Append(*keyword); | 734 list->Append(*keyword); |
730 if (angle) | 735 if (angle) |
731 list->Append(*angle); | 736 list->Append(*angle); |
732 return list; | 737 return list; |
733 } | 738 } |
734 | 739 |
735 // offset: <offset-path> <offset-distance> <offset-rotate> | 740 // offset: <offset-path> <offset-distance> <offset-rotate> |
736 bool CSSPropertyParser::ConsumeOffsetShorthand(bool important) { | 741 bool CSSPropertyParser::ConsumeOffsetShorthand(bool important) { |
737 const CSSValue* offset_path = | 742 const CSSValue* offset_path = |
738 CSSPropertyOffsetPathUtils::ConsumeOffsetPath(range_, context_); | 743 CSSPropertyOffsetPathUtils::ConsumeOffsetPath(range_, context_); |
739 const CSSValue* offset_distance = | 744 const CSSValue* offset_distance = |
740 ConsumeLengthOrPercent(range_, context_->Mode(), kValueRangeAll); | 745 ConsumeLengthOrPercent(range_, context_->Mode(), kValueRangeAll); |
741 const CSSValue* offset_rotate = ConsumeOffsetRotate(range_); | 746 const CSSValue* offset_rotate = ConsumeOffsetRotate(range_, *context_); |
742 if (!offset_path || !offset_distance || !offset_rotate || !range_.AtEnd()) | 747 if (!offset_path || !offset_distance || !offset_rotate || !range_.AtEnd()) |
743 return false; | 748 return false; |
744 | 749 |
745 AddProperty(CSSPropertyOffsetPath, CSSPropertyOffset, *offset_path, | 750 AddProperty(CSSPropertyOffsetPath, CSSPropertyOffset, *offset_path, |
746 important); | 751 important); |
747 AddProperty(CSSPropertyOffsetDistance, CSSPropertyOffset, *offset_distance, | 752 AddProperty(CSSPropertyOffsetDistance, CSSPropertyOffset, *offset_distance, |
748 important); | 753 important); |
749 AddProperty(CSSPropertyOffsetRotate, CSSPropertyOffset, *offset_rotate, | 754 AddProperty(CSSPropertyOffsetRotate, CSSPropertyOffset, *offset_rotate, |
750 important); | 755 important); |
751 | 756 |
(...skipping 984 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1736 return ConsumeFilter(range_, context_); | 1741 return ConsumeFilter(range_, context_); |
1737 case CSSPropertyTextDecoration: | 1742 case CSSPropertyTextDecoration: |
1738 DCHECK(!RuntimeEnabledFeatures::css3TextDecorationsEnabled()); | 1743 DCHECK(!RuntimeEnabledFeatures::css3TextDecorationsEnabled()); |
1739 // fallthrough | 1744 // fallthrough |
1740 case CSSPropertyWebkitTextDecorationsInEffect: | 1745 case CSSPropertyWebkitTextDecorationsInEffect: |
1741 case CSSPropertyTextDecorationLine: | 1746 case CSSPropertyTextDecorationLine: |
1742 return ConsumeTextDecorationLine(range_); | 1747 return ConsumeTextDecorationLine(range_); |
1743 case CSSPropertyOffsetDistance: | 1748 case CSSPropertyOffsetDistance: |
1744 return ConsumeLengthOrPercent(range_, context_->Mode(), kValueRangeAll); | 1749 return ConsumeLengthOrPercent(range_, context_->Mode(), kValueRangeAll); |
1745 case CSSPropertyOffsetRotate: | 1750 case CSSPropertyOffsetRotate: |
1746 return ConsumeOffsetRotate(range_); | 1751 return ConsumeOffsetRotate(range_, *context_); |
1747 case CSSPropertyWebkitTransformOriginX: | 1752 case CSSPropertyWebkitTransformOriginX: |
1748 case CSSPropertyWebkitPerspectiveOriginX: | 1753 case CSSPropertyWebkitPerspectiveOriginX: |
1749 return CSSPropertyPositionUtils::ConsumePositionLonghand<CSSValueLeft, | 1754 return CSSPropertyPositionUtils::ConsumePositionLonghand<CSSValueLeft, |
1750 CSSValueRight>( | 1755 CSSValueRight>( |
1751 range_, context_->Mode()); | 1756 range_, context_->Mode()); |
1752 case CSSPropertyWebkitTransformOriginY: | 1757 case CSSPropertyWebkitTransformOriginY: |
1753 case CSSPropertyWebkitPerspectiveOriginY: | 1758 case CSSPropertyWebkitPerspectiveOriginY: |
1754 return CSSPropertyPositionUtils::ConsumePositionLonghand<CSSValueTop, | 1759 return CSSPropertyPositionUtils::ConsumePositionLonghand<CSSValueTop, |
1755 CSSValueBottom>( | 1760 CSSValueBottom>( |
1756 range_, context_->Mode()); | 1761 range_, context_->Mode()); |
(...skipping 1667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3424 case CSSPropertyPlaceItems: | 3429 case CSSPropertyPlaceItems: |
3425 return ConsumePlaceItemsShorthand(important); | 3430 return ConsumePlaceItemsShorthand(important); |
3426 case CSSPropertyPlaceSelf: | 3431 case CSSPropertyPlaceSelf: |
3427 return ConsumePlaceSelfShorthand(important); | 3432 return ConsumePlaceSelfShorthand(important); |
3428 default: | 3433 default: |
3429 return false; | 3434 return false; |
3430 } | 3435 } |
3431 } | 3436 } |
3432 | 3437 |
3433 } // namespace blink | 3438 } // namespace blink |
OLD | NEW |