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

Side by Side Diff: Source/core/css/parser/CSSPropertyParser.cpp

Issue 907063002: Remove friend declarations from CSSPropertyParser (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Another approach Created 5 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
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.h ('k') | no next file » | 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 5400 matching lines...) Expand 10 before | Expand all | Expand 10 after
5411 } 5411 }
5412 5412
5413 return true; 5413 return true;
5414 } 5414 }
5415 5415
5416 // This class tracks parsing state for shadow values. If it goes out of scope ( e.g., due to an early return) 5416 // This class tracks parsing state for shadow values. If it goes out of scope ( e.g., due to an early return)
5417 // without the allowBreak bit being set, then it will clean up all of the object s and destroy them. 5417 // without the allowBreak bit being set, then it will clean up all of the object s and destroy them.
5418 class ShadowParseContext { 5418 class ShadowParseContext {
5419 STACK_ALLOCATED(); 5419 STACK_ALLOCATED();
5420 public: 5420 public:
5421 ShadowParseContext(CSSPropertyID prop, CSSPropertyParser* parser) 5421 ShadowParseContext(CSSPropertyID prop)
5422 : property(prop) 5422 : property(prop)
5423 , m_parser(parser)
5424 , allowX(true) 5423 , allowX(true)
5425 , allowY(false) 5424 , allowY(false)
5426 , allowBlur(false) 5425 , allowBlur(false)
5427 , allowSpread(false) 5426 , allowSpread(false)
5428 , allowColor(true) 5427 , allowColor(true)
5429 , allowStyle(prop == CSSPropertyWebkitBoxShadow || prop == CSSPropertyBo xShadow) 5428 , allowStyle(prop == CSSPropertyWebkitBoxShadow || prop == CSSPropertyBo xShadow)
5430 , allowBreak(true) 5429 , allowBreak(true)
5431 { 5430 {
5432 } 5431 }
5433 5432
(...skipping 20 matching lines...) Expand all
5454 5453
5455 allowX = true; 5454 allowX = true;
5456 allowColor = true; 5455 allowColor = true;
5457 allowBreak = true; 5456 allowBreak = true;
5458 allowY = false; 5457 allowY = false;
5459 allowBlur = false; 5458 allowBlur = false;
5460 allowSpread = false; 5459 allowSpread = false;
5461 allowStyle = property == CSSPropertyWebkitBoxShadow || property == CSSPr opertyBoxShadow; 5460 allowStyle = property == CSSPropertyWebkitBoxShadow || property == CSSPr opertyBoxShadow;
5462 } 5461 }
5463 5462
5464 void commitLength(CSSParserValue* v) 5463 void commitLength(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val)
5465 { 5464 {
5466 RefPtrWillBeRawPtr<CSSPrimitiveValue> val = m_parser->createPrimitiveNum ericValue(v);
5467
5468 if (allowX) { 5465 if (allowX) {
5469 x = val.release(); 5466 x = val;
5470 allowX = false; 5467 allowX = false;
5471 allowY = true; 5468 allowY = true;
5472 allowColor = false; 5469 allowColor = false;
5473 allowStyle = false; 5470 allowStyle = false;
5474 allowBreak = false; 5471 allowBreak = false;
5475 } else if (allowY) { 5472 } else if (allowY) {
5476 y = val.release(); 5473 y = val;
5477 allowY = false; 5474 allowY = false;
5478 allowBlur = true; 5475 allowBlur = true;
5479 allowColor = true; 5476 allowColor = true;
5480 allowStyle = property == CSSPropertyWebkitBoxShadow || property == C SSPropertyBoxShadow; 5477 allowStyle = property == CSSPropertyWebkitBoxShadow || property == C SSPropertyBoxShadow;
5481 allowBreak = true; 5478 allowBreak = true;
5482 } else if (allowBlur) { 5479 } else if (allowBlur) {
5483 blur = val.release(); 5480 blur = val;
5484 allowBlur = false; 5481 allowBlur = false;
5485 allowSpread = property == CSSPropertyWebkitBoxShadow || property == CSSPropertyBoxShadow; 5482 allowSpread = property == CSSPropertyWebkitBoxShadow || property == CSSPropertyBoxShadow;
5486 } else if (allowSpread) { 5483 } else if (allowSpread) {
5487 spread = val.release(); 5484 spread = val;
5488 allowSpread = false; 5485 allowSpread = false;
5489 } 5486 }
5490 } 5487 }
5491 5488
5492 void commitColor(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val) 5489 void commitColor(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val)
5493 { 5490 {
5494 color = val; 5491 color = val;
5495 allowColor = false; 5492 allowColor = false;
5496 if (allowX) { 5493 if (allowX) {
5497 allowStyle = false; 5494 allowStyle = false;
(...skipping 12 matching lines...) Expand all
5510 if (allowX) 5507 if (allowX)
5511 allowBreak = false; 5508 allowBreak = false;
5512 else { 5509 else {
5513 allowBlur = false; 5510 allowBlur = false;
5514 allowSpread = false; 5511 allowSpread = false;
5515 allowColor = false; 5512 allowColor = false;
5516 } 5513 }
5517 } 5514 }
5518 5515
5519 CSSPropertyID property; 5516 CSSPropertyID property;
5520 CSSPropertyParser* m_parser;
5521 5517
5522 RefPtrWillBeMember<CSSValueList> values; 5518 RefPtrWillBeMember<CSSValueList> values;
5523 RefPtrWillBeMember<CSSPrimitiveValue> x; 5519 RefPtrWillBeMember<CSSPrimitiveValue> x;
5524 RefPtrWillBeMember<CSSPrimitiveValue> y; 5520 RefPtrWillBeMember<CSSPrimitiveValue> y;
5525 RefPtrWillBeMember<CSSPrimitiveValue> blur; 5521 RefPtrWillBeMember<CSSPrimitiveValue> blur;
5526 RefPtrWillBeMember<CSSPrimitiveValue> spread; 5522 RefPtrWillBeMember<CSSPrimitiveValue> spread;
5527 RefPtrWillBeMember<CSSPrimitiveValue> style; 5523 RefPtrWillBeMember<CSSPrimitiveValue> style;
5528 RefPtrWillBeMember<CSSPrimitiveValue> color; 5524 RefPtrWillBeMember<CSSPrimitiveValue> color;
5529 5525
5530 bool allowX; 5526 bool allowX;
5531 bool allowY; 5527 bool allowY;
5532 bool allowBlur; 5528 bool allowBlur;
5533 bool allowSpread; 5529 bool allowSpread;
5534 bool allowColor; 5530 bool allowColor;
5535 bool allowStyle; // inset or not. 5531 bool allowStyle; // inset or not.
5536 bool allowBreak; 5532 bool allowBreak;
5537 }; 5533 };
5538 5534
5539 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseShadow(CSSParserVal ueList* valueList, CSSPropertyID propId) 5535 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseShadow(CSSParserVal ueList* valueList, CSSPropertyID propId)
5540 { 5536 {
5541 ShadowParseContext context(propId, this); 5537 ShadowParseContext context(propId);
5542 for (CSSParserValue* val = valueList->current(); val; val = valueList->next( )) { 5538 for (CSSParserValue* val = valueList->current(); val; val = valueList->next( )) {
5543 // Check for a comma break first. 5539 // Check for a comma break first.
5544 if (val->unit == CSSParserValue::Operator) { 5540 if (val->unit == CSSParserValue::Operator) {
5545 if (val->iValue != ',' || !context.allowBreak) { 5541 if (val->iValue != ',' || !context.allowBreak) {
5546 // Other operators aren't legal or we aren't done with the curre nt shadow 5542 // Other operators aren't legal or we aren't done with the curre nt shadow
5547 // value. Treat as invalid. 5543 // value. Treat as invalid.
5548 return nullptr; 5544 return nullptr;
5549 } 5545 }
5550 // The value is good. Commit it. 5546 // The value is good. Commit it.
5551 context.commitValue(); 5547 context.commitValue();
5552 } else if (validUnit(val, FLength, HTMLStandardMode)) { 5548 } else if (validUnit(val, FLength, HTMLStandardMode)) {
5553 // We required a length and didn't get one. Invalid. 5549 // We required a length and didn't get one. Invalid.
5554 if (!context.allowLength()) 5550 if (!context.allowLength())
5555 return nullptr; 5551 return nullptr;
5556 5552
5557 // Blur radius must be non-negative. 5553 // Blur radius must be non-negative.
5558 if (context.allowBlur && !validUnit(val, FLength | FNonNeg, HTMLStan dardMode)) 5554 if (context.allowBlur && !validUnit(val, FLength | FNonNeg, HTMLStan dardMode))
5559 return nullptr; 5555 return nullptr;
5560 5556
5561 // A length is allowed here. Construct the value and add it. 5557 // A length is allowed here. Construct the value and add it.
5562 context.commitLength(val); 5558 RefPtrWillBeRawPtr<CSSPrimitiveValue> length = createPrimitiveNumeri cValue(val);
Timothy Loh 2015/02/11 02:59:48 Maybe just inline this in the function call
5559 context.commitLength(length.release());
5563 } else if (val->id == CSSValueInset) { 5560 } else if (val->id == CSSValueInset) {
5564 if (!context.allowStyle) 5561 if (!context.allowStyle)
5565 return nullptr; 5562 return nullptr;
5566 5563
5567 context.commitStyle(val); 5564 context.commitStyle(val);
5568 } else { 5565 } else {
5569 // The only other type of value that's ok is a color value. 5566 // The only other type of value that's ok is a color value.
5570 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedColor = nullptr; 5567 RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedColor = nullptr;
5571 bool isColor = ((val->id >= CSSValueAqua && val->id <= CSSValueWindo wtext) || val->id == CSSValueMenu 5568 bool isColor = ((val->id >= CSSValueAqua && val->id <= CSSValueWindo wtext) || val->id == CSSValueMenu
5572 || (val->id >= CSSValueWebkitFocusRingColor && val-> id <= CSSValueWebkitText && inQuirksMode()) 5569 || (val->id >= CSSValueWebkitFocusRingColor && val-> id <= CSSValueWebkitText && inQuirksMode())
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
5800 m_requireOutset = false; 5797 m_requireOutset = false;
5801 m_allowImageSlice = !m_imageSlice; 5798 m_allowImageSlice = !m_imageSlice;
5802 m_allowImage = !m_image; 5799 m_allowImage = !m_image;
5803 } 5800 }
5804 5801
5805 PassRefPtrWillBeRawPtr<CSSValue> commitCSSValue() 5802 PassRefPtrWillBeRawPtr<CSSValue> commitCSSValue()
5806 { 5803 {
5807 return createBorderImageValue(m_image, m_imageSlice.get(), m_borderWidth .get(), m_outset.get(), m_repeat.get()); 5804 return createBorderImageValue(m_image, m_imageSlice.get(), m_borderWidth .get(), m_outset.get(), m_repeat.get());
5808 } 5805 }
5809 5806
5810 void commitMaskBoxImage(CSSPropertyParser* parser, bool important)
5811 {
5812 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageSource, parser, m _image, important);
5813 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageSlice, parser, m_ imageSlice.get(), important);
5814 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageWidth, parser, m_ borderWidth.get(), important);
5815 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageOutset, parser, m _outset.get(), important);
5816 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageRepeat, parser, m _repeat.get(), important);
5817 }
5818
5819 void commitBorderImage(CSSPropertyParser* parser, bool important)
5820 {
5821 commitBorderImageProperty(CSSPropertyBorderImageSource, parser, m_image, important);
5822 commitBorderImageProperty(CSSPropertyBorderImageSlice, parser, m_imageSl ice.get(), important);
5823 commitBorderImageProperty(CSSPropertyBorderImageWidth, parser, m_borderW idth.get(), important);
5824 commitBorderImageProperty(CSSPropertyBorderImageOutset, parser, m_outset .get(), important);
5825 commitBorderImageProperty(CSSPropertyBorderImageRepeat, parser, m_repeat , important);
5826 }
5827
5828 void commitBorderImageProperty(CSSPropertyID propId, CSSPropertyParser* pars er, PassRefPtrWillBeRawPtr<CSSValue> value, bool important)
5829 {
5830 if (value)
5831 parser->addProperty(propId, value, important);
5832 else
5833 parser->addProperty(propId, cssValuePool().createImplicitInitialValu e(), important, true);
5834 }
5835
5836 static bool buildFromParser(CSSPropertyParser&, CSSPropertyID, BorderImagePa rseContext&);
5837
5838 bool m_canAdvance; 5807 bool m_canAdvance;
5839 5808
5840 bool m_allowCommit; 5809 bool m_allowCommit;
5841 bool m_allowImage; 5810 bool m_allowImage;
5842 bool m_allowImageSlice; 5811 bool m_allowImageSlice;
5843 bool m_allowRepeat; 5812 bool m_allowRepeat;
5844 bool m_allowForwardSlashOperator; 5813 bool m_allowForwardSlashOperator;
5845 5814
5846 bool m_allowWidth; 5815 bool m_allowWidth;
5847 bool m_requireOutset; 5816 bool m_requireOutset;
5848 5817
5849 RefPtrWillBeMember<CSSValue> m_image; 5818 RefPtrWillBeMember<CSSValue> m_image;
5850 RefPtrWillBeMember<CSSBorderImageSliceValue> m_imageSlice; 5819 RefPtrWillBeMember<CSSBorderImageSliceValue> m_imageSlice;
5851 RefPtrWillBeMember<CSSPrimitiveValue> m_borderWidth; 5820 RefPtrWillBeMember<CSSPrimitiveValue> m_borderWidth;
5852 RefPtrWillBeMember<CSSPrimitiveValue> m_outset; 5821 RefPtrWillBeMember<CSSPrimitiveValue> m_outset;
5853 5822
5854 RefPtrWillBeMember<CSSValue> m_repeat; 5823 RefPtrWillBeMember<CSSValue> m_repeat;
5855 }; 5824 };
5856 5825
5857 bool BorderImageParseContext::buildFromParser(CSSPropertyParser& parser, CSSProp ertyID propId, BorderImageParseContext& context) 5826 bool CSSPropertyParser::buildBorderImageParseContext(CSSPropertyID propId, Borde rImageParseContext& context)
5858 { 5827 {
5859 CSSPropertyParser::ShorthandScope scope(&parser, propId); 5828 CSSPropertyParser::ShorthandScope scope(this, propId);
5860 while (CSSParserValue* val = parser.m_valueList->current()) { 5829 while (CSSParserValue* val = m_valueList->current()) {
5861 context.setCanAdvance(false); 5830 context.setCanAdvance(false);
5862 5831
5863 if (!context.canAdvance() && context.allowForwardSlashOperator() && isFo rwardSlashOperator(val)) 5832 if (!context.canAdvance() && context.allowForwardSlashOperator() && isFo rwardSlashOperator(val))
5864 context.commitForwardSlashOperator(); 5833 context.commitForwardSlashOperator();
5865 5834
5866 if (!context.canAdvance() && context.allowImage()) { 5835 if (!context.canAdvance() && context.allowImage()) {
5867 if (val->unit == CSSPrimitiveValue::CSS_URI) { 5836 if (val->unit == CSSPrimitiveValue::CSS_URI) {
5868 context.commitImage(parser.createCSSImageValueWithReferrer(val-> string, parser.m_context.completeURL(val->string))); 5837 context.commitImage(createCSSImageValueWithReferrer(val->string, m_context.completeURL(val->string)));
5869 } else if (isGeneratedImageValue(val)) { 5838 } else if (isGeneratedImageValue(val)) {
5870 RefPtrWillBeRawPtr<CSSValue> value = nullptr; 5839 RefPtrWillBeRawPtr<CSSValue> value = nullptr;
5871 if (parser.parseGeneratedImage(parser.m_valueList, value)) 5840 if (parseGeneratedImage(m_valueList, value))
5872 context.commitImage(value.release()); 5841 context.commitImage(value.release());
5873 else 5842 else
5874 return false; 5843 return false;
5875 } else if (val->unit == CSSParserValue::Function && val->function->i d == CSSValueWebkitImageSet) { 5844 } else if (val->unit == CSSParserValue::Function && val->function->i d == CSSValueWebkitImageSet) {
5876 RefPtrWillBeRawPtr<CSSValue> value = parser.parseImageSet(parser .m_valueList); 5845 RefPtrWillBeRawPtr<CSSValue> value = parseImageSet(m_valueList);
5877 if (value) 5846 if (value)
5878 context.commitImage(value.release()); 5847 context.commitImage(value.release());
5879 else 5848 else
5880 return false; 5849 return false;
5881 } else if (val->id == CSSValueNone) 5850 } else if (val->id == CSSValueNone)
5882 context.commitImage(cssValuePool().createIdentifierValue(CSSValu eNone)); 5851 context.commitImage(cssValuePool().createIdentifierValue(CSSValu eNone));
5883 } 5852 }
5884 5853
5885 if (!context.canAdvance() && context.allowImageSlice()) { 5854 if (!context.canAdvance() && context.allowImageSlice()) {
5886 RefPtrWillBeRawPtr<CSSBorderImageSliceValue> imageSlice = nullptr; 5855 RefPtrWillBeRawPtr<CSSBorderImageSliceValue> imageSlice = nullptr;
5887 if (parser.parseBorderImageSlice(propId, imageSlice)) 5856 if (parseBorderImageSlice(propId, imageSlice))
5888 context.commitImageSlice(imageSlice.release()); 5857 context.commitImageSlice(imageSlice.release());
5889 } 5858 }
5890 5859
5891 if (!context.canAdvance() && context.allowRepeat()) { 5860 if (!context.canAdvance() && context.allowRepeat()) {
5892 RefPtrWillBeRawPtr<CSSValue> repeat = nullptr; 5861 RefPtrWillBeRawPtr<CSSValue> repeat = nullptr;
5893 if (parser.parseBorderImageRepeat(repeat)) 5862 if (parseBorderImageRepeat(repeat))
5894 context.commitRepeat(repeat.release()); 5863 context.commitRepeat(repeat.release());
5895 } 5864 }
5896 5865
5897 if (!context.canAdvance() && context.allowWidth()) { 5866 if (!context.canAdvance() && context.allowWidth()) {
5898 RefPtrWillBeRawPtr<CSSPrimitiveValue> borderWidth = nullptr; 5867 RefPtrWillBeRawPtr<CSSPrimitiveValue> borderWidth = nullptr;
5899 if (parser.parseBorderImageWidth(borderWidth)) 5868 if (parseBorderImageWidth(borderWidth))
5900 context.commitBorderWidth(borderWidth.release()); 5869 context.commitBorderWidth(borderWidth.release());
5901 } 5870 }
5902 5871
5903 if (!context.canAdvance() && context.requireOutset()) { 5872 if (!context.canAdvance() && context.requireOutset()) {
5904 RefPtrWillBeRawPtr<CSSPrimitiveValue> borderOutset = nullptr; 5873 RefPtrWillBeRawPtr<CSSPrimitiveValue> borderOutset = nullptr;
5905 if (parser.parseBorderImageOutset(borderOutset)) 5874 if (parseBorderImageOutset(borderOutset))
5906 context.commitBorderOutset(borderOutset.release()); 5875 context.commitBorderOutset(borderOutset.release());
5907 } 5876 }
5908 5877
5909 if (!context.canAdvance()) 5878 if (!context.canAdvance())
5910 return false; 5879 return false;
5911 5880
5912 parser.m_valueList->next(); 5881 m_valueList->next();
5913 } 5882 }
5914 5883
5915 return context.allowCommit(); 5884 return context.allowCommit();
5916 } 5885 }
5917 5886
5887 void CSSPropertyParser::commitBorderImageProperty(CSSPropertyID propId, PassRefP trWillBeRawPtr<CSSValue> value, bool important)
5888 {
5889 if (value)
5890 addProperty(propId, value, important);
5891 else
5892 addProperty(propId, cssValuePool().createImplicitInitialValue(), importa nt, true);
5893 }
5894
5918 bool CSSPropertyParser::parseBorderImageShorthand(CSSPropertyID propId, bool imp ortant) 5895 bool CSSPropertyParser::parseBorderImageShorthand(CSSPropertyID propId, bool imp ortant)
5919 { 5896 {
5920 BorderImageParseContext context; 5897 BorderImageParseContext context;
5921 if (BorderImageParseContext::buildFromParser(*this, propId, context)) { 5898 if (buildBorderImageParseContext(propId, context)) {
5922 switch (propId) { 5899 switch (propId) {
5923 case CSSPropertyWebkitMaskBoxImage: 5900 case CSSPropertyWebkitMaskBoxImage:
5924 context.commitMaskBoxImage(this, important); 5901 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageSource, conte xt.m_image, important);
5902 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageSlice, contex t.m_imageSlice.get(), important);
5903 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageWidth, contex t.m_borderWidth.get(), important);
5904 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageOutset, conte xt.m_outset.get(), important);
5905 commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageRepeat, conte xt.m_repeat.get(), important);
5925 return true; 5906 return true;
5926 case CSSPropertyBorderImage: 5907 case CSSPropertyBorderImage:
5927 context.commitBorderImage(this, important); 5908 commitBorderImageProperty(CSSPropertyBorderImageSource, context.m_im age, important);
5909 commitBorderImageProperty(CSSPropertyBorderImageSlice, context.m_ima geSlice.get(), important);
5910 commitBorderImageProperty(CSSPropertyBorderImageWidth, context.m_bor derWidth.get(), important);
5911 commitBorderImageProperty(CSSPropertyBorderImageOutset, context.m_ou tset.get(), important);
5912 commitBorderImageProperty(CSSPropertyBorderImageRepeat, context.m_re peat, important);
5928 return true; 5913 return true;
5929 default: 5914 default:
5930 ASSERT_NOT_REACHED(); 5915 ASSERT_NOT_REACHED();
5931 return false; 5916 return false;
5932 } 5917 }
5933 } 5918 }
5934 return false; 5919 return false;
5935 } 5920 }
5936 5921
5937 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseBorderImage(CSSProperty ID propId) 5922 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseBorderImage(CSSProperty ID propId)
5938 { 5923 {
5939 BorderImageParseContext context; 5924 BorderImageParseContext context;
5940 if (BorderImageParseContext::buildFromParser(*this, propId, context)) { 5925 if (buildBorderImageParseContext(propId, context)) {
5941 return context.commitCSSValue(); 5926 return context.commitCSSValue();
5942 } 5927 }
5943 return nullptr; 5928 return nullptr;
5944 } 5929 }
5945 5930
5946 static bool isBorderImageRepeatKeyword(int id) 5931 static bool isBorderImageRepeatKeyword(int id)
5947 { 5932 {
5948 return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound; 5933 return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound;
5949 } 5934 }
5950 5935
(...skipping 25 matching lines...) Expand all
5976 } else 5961 } else
5977 secondValue = firstValue; 5962 secondValue = firstValue;
5978 5963
5979 result = createPrimitiveValuePair(firstValue, secondValue); 5964 result = createPrimitiveValuePair(firstValue, secondValue);
5980 return true; 5965 return true;
5981 } 5966 }
5982 5967
5983 class BorderImageSliceParseContext { 5968 class BorderImageSliceParseContext {
5984 STACK_ALLOCATED(); 5969 STACK_ALLOCATED();
5985 public: 5970 public:
5986 BorderImageSliceParseContext(CSSPropertyParser* parser) 5971 BorderImageSliceParseContext()
5987 : m_parser(parser) 5972 : m_allowNumber(true)
5988 , m_allowNumber(true)
5989 , m_allowFill(true) 5973 , m_allowFill(true)
5990 , m_allowFinalCommit(false) 5974 , m_allowFinalCommit(false)
5991 , m_fill(false) 5975 , m_fill(false)
5992 { } 5976 { }
5993 5977
5994 bool allowNumber() const { return m_allowNumber; } 5978 bool allowNumber() const { return m_allowNumber; }
5995 bool allowFill() const { return m_allowFill; } 5979 bool allowFill() const { return m_allowFill; }
5996 bool allowFinalCommit() const { return m_allowFinalCommit; } 5980 bool allowFinalCommit() const { return m_allowFinalCommit; }
5997 CSSPrimitiveValue* top() const { return m_top.get(); } 5981 CSSPrimitiveValue* top() const { return m_top.get(); }
5998 5982
5999 void commitNumber(CSSParserValue* v) 5983 void commitNumber(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val)
6000 { 5984 {
6001 RefPtrWillBeRawPtr<CSSPrimitiveValue> val = m_parser->createPrimitiveNum ericValue(v);
6002 if (!m_top) 5985 if (!m_top)
6003 m_top = val; 5986 m_top = val;
6004 else if (!m_right) 5987 else if (!m_right)
6005 m_right = val; 5988 m_right = val;
6006 else if (!m_bottom) 5989 else if (!m_bottom)
6007 m_bottom = val; 5990 m_bottom = val;
6008 else { 5991 else {
6009 ASSERT(!m_left); 5992 ASSERT(!m_left);
6010 m_left = val; 5993 m_left = val;
6011 } 5994 }
(...skipping 25 matching lines...) Expand all
6037 quad->setTop(m_top); 6020 quad->setTop(m_top);
6038 quad->setRight(m_right); 6021 quad->setRight(m_right);
6039 quad->setBottom(m_bottom); 6022 quad->setBottom(m_bottom);
6040 quad->setLeft(m_left); 6023 quad->setLeft(m_left);
6041 6024
6042 // Make our new border image value now. 6025 // Make our new border image value now.
6043 return CSSBorderImageSliceValue::create(cssValuePool().createValue(quad. release()), m_fill); 6026 return CSSBorderImageSliceValue::create(cssValuePool().createValue(quad. release()), m_fill);
6044 } 6027 }
6045 6028
6046 private: 6029 private:
6047 CSSPropertyParser* m_parser;
6048
6049 bool m_allowNumber; 6030 bool m_allowNumber;
6050 bool m_allowFill; 6031 bool m_allowFill;
6051 bool m_allowFinalCommit; 6032 bool m_allowFinalCommit;
6052 6033
6053 RefPtrWillBeMember<CSSPrimitiveValue> m_top; 6034 RefPtrWillBeMember<CSSPrimitiveValue> m_top;
6054 RefPtrWillBeMember<CSSPrimitiveValue> m_right; 6035 RefPtrWillBeMember<CSSPrimitiveValue> m_right;
6055 RefPtrWillBeMember<CSSPrimitiveValue> m_bottom; 6036 RefPtrWillBeMember<CSSPrimitiveValue> m_bottom;
6056 RefPtrWillBeMember<CSSPrimitiveValue> m_left; 6037 RefPtrWillBeMember<CSSPrimitiveValue> m_left;
6057 6038
6058 bool m_fill; 6039 bool m_fill;
6059 }; 6040 };
6060 6041
6061 bool CSSPropertyParser::parseBorderImageSlice(CSSPropertyID propId, RefPtrWillBe RawPtr<CSSBorderImageSliceValue>& result) 6042 bool CSSPropertyParser::parseBorderImageSlice(CSSPropertyID propId, RefPtrWillBe RawPtr<CSSBorderImageSliceValue>& result)
6062 { 6043 {
6063 BorderImageSliceParseContext context(this); 6044 BorderImageSliceParseContext context;
6064 for (CSSParserValue* val = m_valueList->current(); val; val = m_valueList->n ext()) { 6045 for (CSSParserValue* val = m_valueList->current(); val; val = m_valueList->n ext()) {
6065 // FIXME calc() http://webkit.org/b/16662 : calc is parsed but values ar e not created yet. 6046 // FIXME calc() http://webkit.org/b/16662 : calc is parsed but values ar e not created yet.
6066 if (context.allowNumber() && !isCalculation(val) && validUnit(val, FInte ger | FNonNeg | FPercent)) { 6047 if (context.allowNumber() && !isCalculation(val) && validUnit(val, FInte ger | FNonNeg | FPercent)) {
6067 context.commitNumber(val); 6048 context.commitNumber(createPrimitiveNumericValue(val));
6068 } else if (context.allowFill() && val->id == CSSValueFill) { 6049 } else if (context.allowFill() && val->id == CSSValueFill) {
6069 context.commitFill(); 6050 context.commitFill();
6070 } else if (!inShorthand()) { 6051 } else if (!inShorthand()) {
6071 // If we're not parsing a shorthand then we are invalid. 6052 // If we're not parsing a shorthand then we are invalid.
6072 return false; 6053 return false;
6073 } else { 6054 } else {
6074 if (context.allowFinalCommit()) { 6055 if (context.allowFinalCommit()) {
6075 // We're going to successfully parse, but we don't want to consu me this token. 6056 // We're going to successfully parse, but we don't want to consu me this token.
6076 m_valueList->previous(); 6057 m_valueList->previous();
6077 } 6058 }
(...skipping 11 matching lines...) Expand all
6089 result = context.commitBorderImageSlice(); 6070 result = context.commitBorderImageSlice();
6090 return true; 6071 return true;
6091 } 6072 }
6092 6073
6093 return false; 6074 return false;
6094 } 6075 }
6095 6076
6096 class BorderImageQuadParseContext { 6077 class BorderImageQuadParseContext {
6097 STACK_ALLOCATED(); 6078 STACK_ALLOCATED();
6098 public: 6079 public:
6099 BorderImageQuadParseContext(CSSPropertyParser* parser) 6080 BorderImageQuadParseContext()
6100 : m_parser(parser) 6081 : m_allowNumber(true)
6101 , m_allowNumber(true)
6102 , m_allowFinalCommit(false) 6082 , m_allowFinalCommit(false)
6103 { } 6083 { }
6104 6084
6105 bool allowNumber() const { return m_allowNumber; } 6085 bool allowNumber() const { return m_allowNumber; }
6106 bool allowFinalCommit() const { return m_allowFinalCommit; } 6086 bool allowFinalCommit() const { return m_allowFinalCommit; }
6107 CSSPrimitiveValue* top() const { return m_top.get(); } 6087 CSSPrimitiveValue* top() const { return m_top.get(); }
6108 6088
6109 void commitNumber(CSSParserValue* v) 6089 void commitNumber(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val)
6110 { 6090 {
6111 RefPtrWillBeRawPtr<CSSPrimitiveValue> val = nullptr;
6112 if (v->id == CSSValueAuto)
6113 val = cssValuePool().createIdentifierValue(v->id);
6114 else
6115 val = m_parser->createPrimitiveNumericValue(v);
6116
6117 if (!m_top) 6091 if (!m_top)
6118 m_top = val; 6092 m_top = val;
6119 else if (!m_right) 6093 else if (!m_right)
6120 m_right = val; 6094 m_right = val;
6121 else if (!m_bottom) 6095 else if (!m_bottom)
6122 m_bottom = val; 6096 m_bottom = val;
6123 else { 6097 else {
6124 ASSERT(!m_left); 6098 ASSERT(!m_left);
6125 m_left = val; 6099 m_left = val;
6126 } 6100 }
(...skipping 25 matching lines...) Expand all
6152 quad->setTop(m_top); 6126 quad->setTop(m_top);
6153 quad->setRight(m_right); 6127 quad->setRight(m_right);
6154 quad->setBottom(m_bottom); 6128 quad->setBottom(m_bottom);
6155 quad->setLeft(m_left); 6129 quad->setLeft(m_left);
6156 6130
6157 // Make our new value now. 6131 // Make our new value now.
6158 return cssValuePool().createValue(quad.release()); 6132 return cssValuePool().createValue(quad.release());
6159 } 6133 }
6160 6134
6161 private: 6135 private:
6162 CSSPropertyParser* m_parser;
6163
6164 bool m_allowNumber; 6136 bool m_allowNumber;
6165 bool m_allowFinalCommit; 6137 bool m_allowFinalCommit;
6166 6138
6167 RefPtrWillBeMember<CSSPrimitiveValue> m_top; 6139 RefPtrWillBeMember<CSSPrimitiveValue> m_top;
6168 RefPtrWillBeMember<CSSPrimitiveValue> m_right; 6140 RefPtrWillBeMember<CSSPrimitiveValue> m_right;
6169 RefPtrWillBeMember<CSSPrimitiveValue> m_bottom; 6141 RefPtrWillBeMember<CSSPrimitiveValue> m_bottom;
6170 RefPtrWillBeMember<CSSPrimitiveValue> m_left; 6142 RefPtrWillBeMember<CSSPrimitiveValue> m_left;
6171 }; 6143 };
6172 6144
6173 bool CSSPropertyParser::parseBorderImageQuad(Units validUnits, RefPtrWillBeRawPt r<CSSPrimitiveValue>& result) 6145 bool CSSPropertyParser::parseBorderImageQuad(Units validUnits, RefPtrWillBeRawPt r<CSSPrimitiveValue>& result)
6174 { 6146 {
6175 BorderImageQuadParseContext context(this); 6147 BorderImageQuadParseContext context;
6176 for (CSSParserValue* val = m_valueList->current(); val; val = m_valueList->n ext()) { 6148 for (CSSParserValue* val = m_valueList->current(); val; val = m_valueList->n ext()) {
6177 if (context.allowNumber() && (validUnit(val, validUnits, HTMLStandardMod e) || val->id == CSSValueAuto)) { 6149 if (context.allowNumber() && (validUnit(val, validUnits, HTMLStandardMod e) || val->id == CSSValueAuto)) {
6178 context.commitNumber(val); 6150 if (val->id == CSSValueAuto)
6151 context.commitNumber(cssValuePool().createIdentifierValue(val->i d));
6152 else
6153 context.commitNumber(createPrimitiveNumericValue(val));
6179 } else if (!inShorthand()) { 6154 } else if (!inShorthand()) {
6180 // If we're not parsing a shorthand then we are invalid. 6155 // If we're not parsing a shorthand then we are invalid.
6181 return false; 6156 return false;
6182 } else { 6157 } else {
6183 if (context.allowFinalCommit()) 6158 if (context.allowFinalCommit())
6184 m_valueList->previous(); // The shorthand loop will advance back to this point. 6159 m_valueList->previous(); // The shorthand loop will advance back to this point.
6185 break; 6160 break;
6186 } 6161 }
6187 } 6162 }
6188 6163
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
6306 || (a->id == CSSValueBottom && !horizontal)) 6281 || (a->id == CSSValueBottom && !horizontal))
6307 result = cssValuePool().createValue(100., CSSPrimitiveValue::CSS_PER CENTAGE); 6282 result = cssValuePool().createValue(100., CSSPrimitiveValue::CSS_PER CENTAGE);
6308 else if (a->id == CSSValueCenter) 6283 else if (a->id == CSSValueCenter)
6309 result = cssValuePool().createValue(50., CSSPrimitiveValue::CSS_PERC ENTAGE); 6284 result = cssValuePool().createValue(50., CSSPrimitiveValue::CSS_PERC ENTAGE);
6310 } else if (a->unit == CSSPrimitiveValue::CSS_NUMBER || a->unit == CSSPrimiti veValue::CSS_PERCENTAGE) { 6285 } else if (a->unit == CSSPrimitiveValue::CSS_NUMBER || a->unit == CSSPrimiti veValue::CSS_PERCENTAGE) {
6311 result = cssValuePool().createValue(a->fValue, static_cast<CSSPrimitiveV alue::UnitType>(a->unit)); 6286 result = cssValuePool().createValue(a->fValue, static_cast<CSSPrimitiveV alue::UnitType>(a->unit));
6312 } 6287 }
6313 return result; 6288 return result;
6314 } 6289 }
6315 6290
6316 bool parseDeprecatedGradientColorStop(CSSPropertyParser* p, CSSParserValue* a, C SSGradientColorStop& stop) 6291 bool CSSPropertyParser::parseDeprecatedGradientColorStop(CSSParserValue* a, CSSG radientColorStop& stop)
6317 { 6292 {
6318 if (a->unit != CSSParserValue::Function) 6293 if (a->unit != CSSParserValue::Function)
6319 return false; 6294 return false;
6320 6295
6321 if (a->function->id != CSSValueFrom 6296 if (a->function->id != CSSValueFrom
6322 && a->function->id != CSSValueTo 6297 && a->function->id != CSSValueTo
6323 && a->function->id != CSSValueColorStop) 6298 && a->function->id != CSSValueColorStop)
6324 return false; 6299 return false;
6325 6300
6326 CSSParserValueList* args = a->function->args.get(); 6301 CSSParserValueList* args = a->function->args.get();
6327 if (!args) 6302 if (!args)
6328 return false; 6303 return false;
6329 6304
6330 if (a->function->id == CSSValueFrom || a->function->id == CSSValueTo) { 6305 if (a->function->id == CSSValueFrom || a->function->id == CSSValueTo) {
6331 // The "from" and "to" stops expect 1 argument. 6306 // The "from" and "to" stops expect 1 argument.
6332 if (args->size() != 1) 6307 if (args->size() != 1)
6333 return false; 6308 return false;
6334 6309
6335 if (a->function->id == CSSValueFrom) 6310 if (a->function->id == CSSValueFrom)
6336 stop.m_position = cssValuePool().createValue(0, CSSPrimitiveValue::C SS_NUMBER); 6311 stop.m_position = cssValuePool().createValue(0, CSSPrimitiveValue::C SS_NUMBER);
6337 else 6312 else
6338 stop.m_position = cssValuePool().createValue(1, CSSPrimitiveValue::C SS_NUMBER); 6313 stop.m_position = cssValuePool().createValue(1, CSSPrimitiveValue::C SS_NUMBER);
6339 6314
6340 CSSValueID id = args->current()->id; 6315 CSSValueID id = args->current()->id;
6341 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWin dowtext) || id == CSSValueMenu) 6316 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWin dowtext) || id == CSSValueMenu)
6342 stop.m_color = cssValuePool().createIdentifierValue(id); 6317 stop.m_color = cssValuePool().createIdentifierValue(id);
6343 else 6318 else
6344 stop.m_color = p->parseColor(args->current()); 6319 stop.m_color = parseColor(args->current());
6345 if (!stop.m_color) 6320 if (!stop.m_color)
6346 return false; 6321 return false;
6347 } 6322 }
6348 6323
6349 // The "color-stop" function expects 3 arguments. 6324 // The "color-stop" function expects 3 arguments.
6350 if (a->function->id == CSSValueColorStop) { 6325 if (a->function->id == CSSValueColorStop) {
6351 if (args->size() != 3) 6326 if (args->size() != 3)
6352 return false; 6327 return false;
6353 6328
6354 CSSParserValue* stopArg = args->current(); 6329 CSSParserValue* stopArg = args->current();
6355 if (stopArg->unit == CSSPrimitiveValue::CSS_PERCENTAGE) 6330 if (stopArg->unit == CSSPrimitiveValue::CSS_PERCENTAGE)
6356 stop.m_position = cssValuePool().createValue(stopArg->fValue / 100, CSSPrimitiveValue::CSS_NUMBER); 6331 stop.m_position = cssValuePool().createValue(stopArg->fValue / 100, CSSPrimitiveValue::CSS_NUMBER);
6357 else if (stopArg->unit == CSSPrimitiveValue::CSS_NUMBER) 6332 else if (stopArg->unit == CSSPrimitiveValue::CSS_NUMBER)
6358 stop.m_position = cssValuePool().createValue(stopArg->fValue, CSSPri mitiveValue::CSS_NUMBER); 6333 stop.m_position = cssValuePool().createValue(stopArg->fValue, CSSPri mitiveValue::CSS_NUMBER);
6359 else 6334 else
6360 return false; 6335 return false;
6361 6336
6362 args->next(); 6337 args->next();
6363 if (!consumeComma(args)) 6338 if (!consumeComma(args))
6364 return false; 6339 return false;
6365 6340
6366 stopArg = args->current(); 6341 stopArg = args->current();
6367 CSSValueID id = stopArg->id; 6342 CSSValueID id = stopArg->id;
6368 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWin dowtext) || id == CSSValueMenu) 6343 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWin dowtext) || id == CSSValueMenu)
6369 stop.m_color = cssValuePool().createIdentifierValue(id); 6344 stop.m_color = cssValuePool().createIdentifierValue(id);
6370 else 6345 else
6371 stop.m_color = p->parseColor(stopArg); 6346 stop.m_color = parseColor(stopArg);
6372 if (!stop.m_color) 6347 if (!stop.m_color)
6373 return false; 6348 return false;
6374 } 6349 }
6375 6350
6376 return true; 6351 return true;
6377 } 6352 }
6378 6353
6379 bool CSSPropertyParser::parseDeprecatedGradient(CSSParserValueList* valueList, R efPtrWillBeRawPtr<CSSValue>& gradient) 6354 bool CSSPropertyParser::parseDeprecatedGradient(CSSParserValueList* valueList, R efPtrWillBeRawPtr<CSSValue>& gradient)
6380 { 6355 {
6381 // Walk the arguments. 6356 // Walk the arguments.
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
6490 if (!consumeComma(args)) 6465 if (!consumeComma(args))
6491 return false; 6466 return false;
6492 6467
6493 // Now examine the stop itself. 6468 // Now examine the stop itself.
6494 a = args->current(); 6469 a = args->current();
6495 if (!a) 6470 if (!a)
6496 return false; 6471 return false;
6497 6472
6498 // The function name needs to be one of "from", "to", or "color-stop." 6473 // The function name needs to be one of "from", "to", or "color-stop."
6499 CSSGradientColorStop stop; 6474 CSSGradientColorStop stop;
6500 if (!parseDeprecatedGradientColorStop(this, a, stop)) 6475 if (!parseDeprecatedGradientColorStop(a, stop))
6501 return false; 6476 return false;
6502 result->addStop(stop); 6477 result->addStop(stop);
6503 6478
6504 // Advance 6479 // Advance
6505 a = args->next(); 6480 a = args->next();
6506 } 6481 }
6507 6482
6508 gradient = result.release(); 6483 gradient = result.release();
6509 return true; 6484 return true;
6510 } 6485 }
(...skipping 11 matching lines...) Expand all
6522 case CSSValueTop: 6497 case CSSValueTop:
6523 case CSSValueBottom: 6498 case CSSValueBottom:
6524 isHorizontal = false; 6499 isHorizontal = false;
6525 break; 6500 break;
6526 default: 6501 default:
6527 return nullptr; 6502 return nullptr;
6528 } 6503 }
6529 return cssValuePool().createIdentifierValue(a->id); 6504 return cssValuePool().createIdentifierValue(a->id);
6530 } 6505 }
6531 6506
6532 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseGradientColorOrKeyword(CSSPropert yParser* p, CSSParserValue* value)
6533 {
6534 CSSValueID id = value->id;
6535 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWindowt ext) || id == CSSValueMenu || id == CSSValueCurrentcolor)
6536 return cssValuePool().createIdentifierValue(id);
6537
6538 return p->parseColor(value);
6539 }
6540
6541 bool CSSPropertyParser::parseDeprecatedLinearGradient(CSSParserValueList* valueL ist, RefPtrWillBeRawPtr<CSSValue>& gradient, CSSGradientRepeat repeating) 6507 bool CSSPropertyParser::parseDeprecatedLinearGradient(CSSParserValueList* valueL ist, RefPtrWillBeRawPtr<CSSValue>& gradient, CSSGradientRepeat repeating)
6542 { 6508 {
6543 RefPtrWillBeRawPtr<CSSLinearGradientValue> result = CSSLinearGradientValue:: create(repeating, CSSPrefixedLinearGradient); 6509 RefPtrWillBeRawPtr<CSSLinearGradientValue> result = CSSLinearGradientValue:: create(repeating, CSSPrefixedLinearGradient);
6544 6510
6545 // Walk the arguments. 6511 // Walk the arguments.
6546 CSSParserValueList* args = valueList->current()->function->args.get(); 6512 CSSParserValueList* args = valueList->current()->function->args.get();
6547 if (!args || !args->size()) 6513 if (!args || !args->size())
6548 return false; 6514 return false;
6549 6515
6550 CSSParserValue* a = args->current(); 6516 CSSParserValue* a = args->current();
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
6935 return false; 6901 return false;
6936 6902
6937 a = valueList->next(); 6903 a = valueList->next();
6938 if (!a) 6904 if (!a)
6939 return false; 6905 return false;
6940 } 6906 }
6941 6907
6942 // <color-stop> = <color> [ <percentage> | <length> ]? 6908 // <color-stop> = <color> [ <percentage> | <length> ]?
6943 // <color-hint> = <length> | <percentage> 6909 // <color-hint> = <length> | <percentage>
6944 CSSGradientColorStop stop; 6910 CSSGradientColorStop stop;
6945 stop.m_color = parseGradientColorOrKeyword(this, a); 6911 CSSValueID id = a->id;
6912 if (id == CSSValueWebkitText || (id >= CSSValueAqua && id <= CSSValueWin dowtext) || id == CSSValueMenu || id == CSSValueCurrentcolor)
6913 stop.m_color = cssValuePool().createIdentifierValue(id);
6914 else
6915 stop.m_color = parseColor(a);
6916
6946 6917
6947 // Two hints in a row are not allowed. 6918 // Two hints in a row are not allowed.
6948 if (!stop.m_color && (!supportsColorHints || previousStopWasColorHint)) 6919 if (!stop.m_color && (!supportsColorHints || previousStopWasColorHint))
6949 return false; 6920 return false;
6950 previousStopWasColorHint = !stop.m_color; 6921 previousStopWasColorHint = !stop.m_color;
6951 6922
6952 if (stop.m_color) 6923 if (stop.m_color)
6953 a = valueList->next(); 6924 a = valueList->next();
6954 6925
6955 if (a) { 6926 if (a) {
(...skipping 1591 matching lines...) Expand 10 before | Expand all | Expand 10 after
8547 } 8518 }
8548 } 8519 }
8549 8520
8550 if (!list->length()) 8521 if (!list->length())
8551 return nullptr; 8522 return nullptr;
8552 8523
8553 return list.release(); 8524 return list.release();
8554 } 8525 }
8555 8526
8556 } // namespace blink 8527 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698