OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "config.h" | 5 #include "config.h" |
6 #include "core/css/parser/CSSParser.h" | 6 #include "core/css/parser/CSSParser.h" |
7 | 7 |
8 #include "core/css/CSSKeyframeRule.h" | 8 #include "core/css/CSSKeyframeRule.h" |
9 #include "core/css/StyleColor.h" | 9 #include "core/css/StyleColor.h" |
10 #include "core/css/StylePropertySet.h" | 10 #include "core/css/StylePropertySet.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 if (observer) | 45 if (observer) |
46 return CSSParserImpl::parseStyleSheetForInspector(text, context, *observ
er); | 46 return CSSParserImpl::parseStyleSheetForInspector(text, context, *observ
er); |
47 return CSSParserImpl::parseStyleSheet(text, context, styleSheet); | 47 return CSSParserImpl::parseStyleSheet(text, context, styleSheet); |
48 } | 48 } |
49 | 49 |
50 bool CSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropertyID u
nresolvedProperty, const String& string, bool important, CSSParserMode parserMod
e, StyleSheetContents* styleSheet) | 50 bool CSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropertyID u
nresolvedProperty, const String& string, bool important, CSSParserMode parserMod
e, StyleSheetContents* styleSheet) |
51 { | 51 { |
52 if (string.isEmpty()) | 52 if (string.isEmpty()) |
53 return false; | 53 return false; |
54 CSSPropertyID resolvedProperty = resolveCSSPropertyID(unresolvedProperty); | 54 CSSPropertyID resolvedProperty = resolveCSSPropertyID(unresolvedProperty); |
55 RefPtrWillBeRawPtr<CSSValue> value = CSSParserFastPaths::maybeParseValue(res
olvedProperty, string, parserMode); | 55 NullableCSSValue value = CSSParserFastPaths::maybeParseValue(resolvedPropert
y, string, parserMode); |
56 if (value) | 56 if (value) |
57 return declaration->setProperty(CSSProperty(resolvedProperty, value.rele
ase(), important)); | 57 return declaration->setProperty(CSSProperty(resolvedProperty, *value, im
portant)); |
58 CSSParserContext context(parserMode, 0); | 58 CSSParserContext context(parserMode, 0); |
59 if (styleSheet) { | 59 if (styleSheet) { |
60 context = styleSheet->parserContext(); | 60 context = styleSheet->parserContext(); |
61 context.setMode(parserMode); | 61 context.setMode(parserMode); |
62 } | 62 } |
63 return parseValue(declaration, unresolvedProperty, string, important, contex
t); | 63 return parseValue(declaration, unresolvedProperty, string, important, contex
t); |
64 } | 64 } |
65 | 65 |
66 bool CSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropertyID u
nresolvedProperty, const String& string, bool important, const CSSParserContext&
context) | 66 bool CSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropertyID u
nresolvedProperty, const String& string, bool important, const CSSParserContext&
context) |
67 { | 67 { |
68 return CSSParserImpl::parseValue(declaration, unresolvedProperty, string, im
portant, context); | 68 return CSSParserImpl::parseValue(declaration, unresolvedProperty, string, im
portant, context); |
69 } | 69 } |
70 | 70 |
71 PassRefPtrWillBeRawPtr<CSSValue> CSSParser::parseSingleValue(CSSPropertyID prope
rtyID, const String& string, const CSSParserContext& context) | 71 NullableCSSValue CSSParser::parseSingleValue(CSSPropertyID propertyID, const Str
ing& string, const CSSParserContext& context) |
72 { | 72 { |
73 if (string.isEmpty()) | 73 if (string.isEmpty()) |
74 return nullptr; | 74 return nullptr; |
75 if (RefPtrWillBeRawPtr<CSSValue> value = CSSParserFastPaths::maybeParseValue
(propertyID, string, context.mode())) | 75 if (NullableCSSValue value = CSSParserFastPaths::maybeParseValue(propertyID,
string, context.mode())) |
76 return value; | 76 return value; |
77 RefPtrWillBeRawPtr<MutableStylePropertySet> stylePropertySet = MutableStyleP
ropertySet::create(); | 77 RefPtrWillBeRawPtr<MutableStylePropertySet> stylePropertySet = MutableStyleP
ropertySet::create(); |
78 bool changed = parseValue(stylePropertySet.get(), propertyID, string, false,
context); | 78 bool changed = parseValue(stylePropertySet.get(), propertyID, string, false,
context); |
79 ASSERT_UNUSED(changed, changed == stylePropertySet->hasProperty(propertyID))
; | 79 ASSERT_UNUSED(changed, changed == stylePropertySet->hasProperty(propertyID))
; |
80 return stylePropertySet->getPropertyCSSValue(propertyID); | 80 return stylePropertySet->getPropertyCSSValue(propertyID); |
81 } | 81 } |
82 | 82 |
83 PassRefPtrWillBeRawPtr<ImmutableStylePropertySet> CSSParser::parseInlineStyleDec
laration(const String& styleString, Element* element) | 83 PassRefPtrWillBeRawPtr<ImmutableStylePropertySet> CSSParser::parseInlineStyleDec
laration(const String& styleString, Element* element) |
84 { | 84 { |
85 return CSSParserImpl::parseInlineStyleDeclaration(styleString, element); | 85 return CSSParserImpl::parseInlineStyleDeclaration(styleString, element); |
(...skipping 26 matching lines...) Expand all Loading... |
112 if (CSSPropertyParser::fastParseColor(color, string, strict)) | 112 if (CSSPropertyParser::fastParseColor(color, string, strict)) |
113 return true; | 113 return true; |
114 | 114 |
115 // In case the fast-path parser didn't understand the color, try the full pa
rser. | 115 // In case the fast-path parser didn't understand the color, try the full pa
rser. |
116 RefPtrWillBeRawPtr<MutableStylePropertySet> stylePropertySet = MutableStyleP
ropertySet::create(); | 116 RefPtrWillBeRawPtr<MutableStylePropertySet> stylePropertySet = MutableStyleP
ropertySet::create(); |
117 // FIXME: The old CSS parser is only working in strict mode ignoring the str
ict parameter. | 117 // FIXME: The old CSS parser is only working in strict mode ignoring the str
ict parameter. |
118 // It needs to be investigated why. | 118 // It needs to be investigated why. |
119 if (!parseValue(stylePropertySet.get(), CSSPropertyColor, string, false, str
ictCSSParserContext())) | 119 if (!parseValue(stylePropertySet.get(), CSSPropertyColor, string, false, str
ictCSSParserContext())) |
120 return false; | 120 return false; |
121 | 121 |
122 RefPtrWillBeRawPtr<CSSValue> value = stylePropertySet->getPropertyCSSValue(C
SSPropertyColor); | 122 NullableCSSValue value = stylePropertySet->getPropertyCSSValue(CSSPropertyCo
lor); |
123 if (!value || !value->isPrimitiveValue()) | 123 if (!value || !value->isPrimitiveValue()) |
124 return false; | 124 return false; |
125 | 125 |
126 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value.get()); | 126 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
127 if (!primitiveValue->isRGBColor()) | 127 if (!primitiveValue->isRGBColor()) |
128 return false; | 128 return false; |
129 | 129 |
130 color = primitiveValue->getRGBA32Value(); | 130 color = primitiveValue->getRGBA32Value(); |
131 return true; | 131 return true; |
132 } | 132 } |
133 | 133 |
134 StyleColor CSSParser::colorFromRGBColorString(const String& string) | 134 StyleColor CSSParser::colorFromRGBColorString(const String& string) |
135 { | 135 { |
136 // FIXME: Rework css parser so it is more SVG aware. | 136 // FIXME: Rework css parser so it is more SVG aware. |
(...skipping 10 matching lines...) Expand all Loading... |
147 cssColor.init(colorString); | 147 cssColor.init(colorString); |
148 CSSValueID id = cssValueKeywordID(cssColor); | 148 CSSValueID id = cssValueKeywordID(cssColor); |
149 if (!CSSPropertyParser::isSystemColor(id)) | 149 if (!CSSPropertyParser::isSystemColor(id)) |
150 return false; | 150 return false; |
151 | 151 |
152 Color parsedColor = LayoutTheme::theme().systemColor(id); | 152 Color parsedColor = LayoutTheme::theme().systemColor(id); |
153 color = parsedColor.rgb(); | 153 color = parsedColor.rgb(); |
154 return true; | 154 return true; |
155 } | 155 } |
156 | 156 |
157 PassRefPtrWillBeRawPtr<CSSValue> CSSParser::parseFontFaceDescriptor(CSSPropertyI
D propertyID, const String& propertyValue, const CSSParserContext& context) | 157 NullableCSSValue CSSParser::parseFontFaceDescriptor(CSSPropertyID propertyID, co
nst String& propertyValue, const CSSParserContext& context) |
158 { | 158 { |
159 StringBuilder builder; | 159 StringBuilder builder; |
160 builder.appendLiteral("@font-face { "); | 160 builder.appendLiteral("@font-face { "); |
161 builder.append(getPropertyNameString(propertyID)); | 161 builder.append(getPropertyNameString(propertyID)); |
162 builder.appendLiteral(" : "); | 162 builder.appendLiteral(" : "); |
163 builder.append(propertyValue); | 163 builder.append(propertyValue); |
164 builder.appendLiteral("; }"); | 164 builder.appendLiteral("; }"); |
165 RefPtrWillBeRawPtr<StyleRuleBase> rule = parseRule(context, builder.toString
()); | 165 RefPtrWillBeRawPtr<StyleRuleBase> rule = parseRule(context, builder.toString
()); |
166 if (!rule || !rule->isFontFaceRule()) | 166 if (!rule || !rule->isFontFaceRule()) |
167 return nullptr; | 167 return nullptr; |
168 return toStyleRuleFontFace(rule.get())->properties().getPropertyCSSValue(pro
pertyID); | 168 return toStyleRuleFontFace(rule.get())->properties().getPropertyCSSValue(pro
pertyID); |
169 } | 169 } |
170 | 170 |
171 } // namespace blink | 171 } // namespace blink |
OLD | NEW |