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

Side by Side Diff: Source/core/css/MediaQueryExp.cpp

Issue 178803006: Turn MQ classes into thread safe (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Another rebase Created 6 years, 9 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/MediaQueryExp.h ('k') | Source/core/html/parser/HTMLParserIdioms.h » ('j') | 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 * CSS Media Query 2 * CSS Media Query
3 * 3 *
4 * Copyright (C) 2006 Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>. 4 * Copyright (C) 2006 Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>.
5 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 5 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
6 * Copyright (C) 2013 Apple Inc. All rights reserved. 6 * Copyright (C) 2013 Apple Inc. All rights reserved.
7 * 7 *
8 * Redistribution and use in source and binary forms, with or without 8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions 9 * modification, are permitted provided that the following conditions
10 * are met: 10 * are met:
(...skipping 14 matching lines...) Expand all
25 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */ 28 */
29 29
30 #include "config.h" 30 #include "config.h"
31 #include "core/css/MediaQueryExp.h" 31 #include "core/css/MediaQueryExp.h"
32 32
33 #include "CSSValueKeywords.h" 33 #include "CSSValueKeywords.h"
34 #include "core/css/CSSAspectRatioValue.h" 34 #include "core/css/CSSAspectRatioValue.h"
35 #include "core/css/parser/BisonCSSParser.h" 35 #include "core/css/CSSParserValues.h"
36 #include "core/css/CSSPrimitiveValue.h" 36 #include "core/css/CSSPrimitiveValue.h"
37 #include "core/html/parser/HTMLParserIdioms.h"
37 #include "wtf/text/StringBuilder.h" 38 #include "wtf/text/StringBuilder.h"
38 39
39 namespace WebCore { 40 namespace WebCore {
40 41
41 static inline bool featureWithCSSValueID(const AtomicString& mediaFeature, const CSSParserValue* value) 42 using namespace MediaFeatureNames;
43
44 // Since the comparisons we do here are on static strings and since most of the strings are not equal,
45 // we use this function to only compare the StringImpl addresses.
46 static inline bool stringImplEquals(const String& mediaFeature, const String& ot herMediaFeature)
47 {
48 return (mediaFeature.impl() == otherMediaFeature.impl());
49 }
abarth-chromium 2014/03/06 16:59:58 I'm still not convinced this optimization is impor
abarth-chromium 2014/03/06 17:05:45 Maybe add a general equal codepath that checks isA
50
51 static inline bool featureWithCSSValueID(const String& mediaFeature, const CSSPa rserValue* value)
42 { 52 {
43 if (!value->id) 53 if (!value->id)
44 return false; 54 return false;
45 55
46 return mediaFeature == MediaFeatureNames::orientationMediaFeature 56 return stringImplEquals(mediaFeature, orientationMediaFeature)
47 || mediaFeature == MediaFeatureNames::viewModeMediaFeature 57 || stringImplEquals(mediaFeature, viewModeMediaFeature)
48 || mediaFeature == MediaFeatureNames::pointerMediaFeature 58 || stringImplEquals(mediaFeature, pointerMediaFeature)
49 || mediaFeature == MediaFeatureNames::scanMediaFeature; 59 || stringImplEquals(mediaFeature, scanMediaFeature);
50 } 60 }
51 61
52 static inline bool featureWithValidIdent(const AtomicString& mediaFeature, CSSVa lueID ident) 62 static inline bool featureWithValidIdent(const String& mediaFeature, CSSValueID ident)
53 { 63 {
54 if (mediaFeature == MediaFeatureNames::orientationMediaFeature) 64 if (stringImplEquals(mediaFeature, orientationMediaFeature))
55 return ident == CSSValuePortrait || ident == CSSValueLandscape; 65 return ident == CSSValuePortrait || ident == CSSValueLandscape;
56 66
57 if (mediaFeature == MediaFeatureNames::viewModeMediaFeature) { 67 if (stringImplEquals(mediaFeature, viewModeMediaFeature)) {
58 switch (ident) { 68 switch (ident) {
59 case CSSValueWindowed: 69 case CSSValueWindowed:
60 case CSSValueFloating: 70 case CSSValueFloating:
61 case CSSValueFullscreen: 71 case CSSValueFullscreen:
62 case CSSValueMaximized: 72 case CSSValueMaximized:
63 case CSSValueMinimized: 73 case CSSValueMinimized:
64 return true; 74 return true;
65 default: 75 default:
66 return false; 76 return false;
67 } 77 }
68 } 78 }
69 79
70 if (mediaFeature == MediaFeatureNames::pointerMediaFeature) 80 if (stringImplEquals(mediaFeature, pointerMediaFeature))
71 return ident == CSSValueNone || ident == CSSValueCoarse || ident == CSSV alueFine; 81 return ident == CSSValueNone || ident == CSSValueCoarse || ident == CSSV alueFine;
72 82
73 if (mediaFeature == MediaFeatureNames::scanMediaFeature) 83 if (stringImplEquals(mediaFeature, scanMediaFeature))
74 return ident == CSSValueInterlace || ident == CSSValueProgressive; 84 return ident == CSSValueInterlace || ident == CSSValueProgressive;
75 85
76 ASSERT_NOT_REACHED(); 86 ASSERT_NOT_REACHED();
77 return false; 87 return false;
78 } 88 }
79 89
80 static inline bool featureWithValidPositiveLength(const AtomicString& mediaFeatu re, const CSSParserValue* value) 90 static inline bool featureWithValidPositiveLength(const String& mediaFeature, co nst CSSParserValue* value)
81 { 91 {
82 if (!(((value->unit >= CSSPrimitiveValue::CSS_EMS && value->unit <= CSSPrimi tiveValue::CSS_PC) || value->unit == CSSPrimitiveValue::CSS_REMS) || (value->uni t == CSSPrimitiveValue::CSS_NUMBER && !(value->fValue))) || value->fValue < 0) 92 if (!(((value->unit >= CSSPrimitiveValue::CSS_EMS && value->unit <= CSSPrimi tiveValue::CSS_PC) || value->unit == CSSPrimitiveValue::CSS_REMS) || (value->uni t == CSSPrimitiveValue::CSS_NUMBER && !(value->fValue))) || value->fValue < 0)
83 return false; 93 return false;
84 94
85 return mediaFeature == MediaFeatureNames::heightMediaFeature 95
86 || mediaFeature == MediaFeatureNames::maxHeightMediaFeature 96 return stringImplEquals(mediaFeature, heightMediaFeature)
87 || mediaFeature == MediaFeatureNames::minHeightMediaFeature 97 || stringImplEquals(mediaFeature, maxHeightMediaFeature)
88 || mediaFeature == MediaFeatureNames::widthMediaFeature 98 || stringImplEquals(mediaFeature, minHeightMediaFeature)
89 || mediaFeature == MediaFeatureNames::maxWidthMediaFeature 99 || stringImplEquals(mediaFeature, widthMediaFeature)
90 || mediaFeature == MediaFeatureNames::minWidthMediaFeature 100 || stringImplEquals(mediaFeature, maxWidthMediaFeature)
91 || mediaFeature == MediaFeatureNames::deviceHeightMediaFeature 101 || stringImplEquals(mediaFeature, minWidthMediaFeature)
92 || mediaFeature == MediaFeatureNames::maxDeviceHeightMediaFeature 102 || stringImplEquals(mediaFeature, deviceHeightMediaFeature)
93 || mediaFeature == MediaFeatureNames::minDeviceHeightMediaFeature 103 || stringImplEquals(mediaFeature, maxDeviceHeightMediaFeature)
94 || mediaFeature == MediaFeatureNames::deviceWidthMediaFeature 104 || stringImplEquals(mediaFeature, minDeviceHeightMediaFeature)
95 || mediaFeature == MediaFeatureNames::maxDeviceWidthMediaFeature 105 || stringImplEquals(mediaFeature, deviceWidthMediaFeature)
96 || mediaFeature == MediaFeatureNames::minDeviceWidthMediaFeature; 106 || stringImplEquals(mediaFeature, minDeviceWidthMediaFeature)
107 || stringImplEquals(mediaFeature, maxDeviceWidthMediaFeature);
97 } 108 }
98 109
99 static inline bool featureWithValidDensity(const AtomicString& mediaFeature, con st CSSParserValue* value) 110 static inline bool featureWithValidDensity(const String& mediaFeature, const CSS ParserValue* value)
100 { 111 {
101 if ((value->unit != CSSPrimitiveValue::CSS_DPPX && value->unit != CSSPrimiti veValue::CSS_DPI && value->unit != CSSPrimitiveValue::CSS_DPCM) || value->fValue <= 0) 112 if ((value->unit != CSSPrimitiveValue::CSS_DPPX && value->unit != CSSPrimiti veValue::CSS_DPI && value->unit != CSSPrimitiveValue::CSS_DPCM) || value->fValue <= 0)
102 return false; 113 return false;
103 114
104 return mediaFeature == MediaFeatureNames::resolutionMediaFeature 115 return stringImplEquals(mediaFeature, resolutionMediaFeature)
105 || mediaFeature == MediaFeatureNames::maxResolutionMediaFeature 116 || stringImplEquals(mediaFeature, minResolutionMediaFeature)
106 || mediaFeature == MediaFeatureNames::minResolutionMediaFeature; 117 || stringImplEquals(mediaFeature, maxResolutionMediaFeature);
107 } 118 }
108 119
109 static inline bool featureWithPositiveInteger(const AtomicString& mediaFeature, const CSSParserValue* value) 120 static inline bool featureWithPositiveInteger(const String& mediaFeature, const CSSParserValue* value)
110 { 121 {
111 if (!value->isInt || value->fValue < 0) 122 if (!value->isInt || value->fValue < 0)
112 return false; 123 return false;
113 124
114 return mediaFeature == MediaFeatureNames::colorMediaFeature 125 return stringImplEquals(mediaFeature, colorMediaFeature)
115 || mediaFeature == MediaFeatureNames::maxColorMediaFeature 126 || stringImplEquals(mediaFeature, maxColorMediaFeature)
116 || mediaFeature == MediaFeatureNames::minColorMediaFeature 127 || stringImplEquals(mediaFeature, minColorMediaFeature)
117 || mediaFeature == MediaFeatureNames::colorIndexMediaFeature 128 || stringImplEquals(mediaFeature, colorIndexMediaFeature)
118 || mediaFeature == MediaFeatureNames::maxColorIndexMediaFeature 129 || stringImplEquals(mediaFeature, maxColorIndexMediaFeature)
119 || mediaFeature == MediaFeatureNames::minColorIndexMediaFeature 130 || stringImplEquals(mediaFeature, minColorIndexMediaFeature)
120 || mediaFeature == MediaFeatureNames::monochromeMediaFeature 131 || stringImplEquals(mediaFeature, monochromeMediaFeature)
121 || mediaFeature == MediaFeatureNames::minMonochromeMediaFeature 132 || stringImplEquals(mediaFeature, maxMonochromeMediaFeature)
122 || mediaFeature == MediaFeatureNames::maxMonochromeMediaFeature; 133 || stringImplEquals(mediaFeature, minMonochromeMediaFeature);
123 } 134 }
124 135
125 static inline bool featureWithPositiveNumber(const AtomicString& mediaFeature, c onst CSSParserValue* value) 136 static inline bool featureWithPositiveNumber(const String& mediaFeature, const C SSParserValue* value)
126 { 137 {
127 if (value->unit != CSSPrimitiveValue::CSS_NUMBER || value->fValue < 0) 138 if (value->unit != CSSPrimitiveValue::CSS_NUMBER || value->fValue < 0)
128 return false; 139 return false;
129 140
130 return mediaFeature == MediaFeatureNames::transform2dMediaFeature 141 return stringImplEquals(mediaFeature, transform2dMediaFeature)
131 || mediaFeature == MediaFeatureNames::transform3dMediaFeature 142 || stringImplEquals(mediaFeature, transform3dMediaFeature)
132 || mediaFeature == MediaFeatureNames::animationMediaFeature 143 || stringImplEquals(mediaFeature, animationMediaFeature)
133 || mediaFeature == MediaFeatureNames::devicePixelRatioMediaFeature 144 || stringImplEquals(mediaFeature, devicePixelRatioMediaFeature)
134 || mediaFeature == MediaFeatureNames::maxDevicePixelRatioMediaFeature 145 || stringImplEquals(mediaFeature, maxDevicePixelRatioMediaFeature)
135 || mediaFeature == MediaFeatureNames::minDevicePixelRatioMediaFeature; 146 || stringImplEquals(mediaFeature, minDevicePixelRatioMediaFeature);
136 } 147 }
137 148
138 static inline bool featureWithZeroOrOne(const AtomicString& mediaFeature, const CSSParserValue* value) 149 static inline bool featureWithZeroOrOne(const String& mediaFeature, const CSSPar serValue* value)
139 { 150 {
140 if (!value->isInt || !(value->fValue == 1 || !value->fValue)) 151 if (!value->isInt || !(value->fValue == 1 || !value->fValue))
141 return false; 152 return false;
142 153
143 return mediaFeature == MediaFeatureNames::gridMediaFeature 154 return stringImplEquals(mediaFeature, gridMediaFeature)
144 || mediaFeature == MediaFeatureNames::hoverMediaFeature; 155 || stringImplEquals(mediaFeature, hoverMediaFeature);
145 } 156 }
146 157
147 static inline bool featureWithAspectRatio(const AtomicString& mediaFeature) 158 static inline bool featureWithAspectRatio(const String& mediaFeature)
148 { 159 {
149 return mediaFeature == MediaFeatureNames::aspectRatioMediaFeature 160 return stringImplEquals(mediaFeature, aspectRatioMediaFeature)
150 || mediaFeature == MediaFeatureNames::deviceAspectRatioMediaFeature 161 || stringImplEquals(mediaFeature, deviceAspectRatioMediaFeature)
151 || mediaFeature == MediaFeatureNames::minAspectRatioMediaFeature 162 || stringImplEquals(mediaFeature, minAspectRatioMediaFeature)
152 || mediaFeature == MediaFeatureNames::maxAspectRatioMediaFeature 163 || stringImplEquals(mediaFeature, maxAspectRatioMediaFeature)
153 || mediaFeature == MediaFeatureNames::minDeviceAspectRatioMediaFeature 164 || stringImplEquals(mediaFeature, minDeviceAspectRatioMediaFeature)
154 || mediaFeature == MediaFeatureNames::maxDeviceAspectRatioMediaFeature; 165 || stringImplEquals(mediaFeature, maxDeviceAspectRatioMediaFeature);
155 } 166 }
156 167
157 static inline bool featureWithoutValue(const AtomicString& mediaFeature) 168 static inline bool featureWithoutValue(const String& mediaFeature)
158 { 169 {
159 // Media features that are prefixed by min/max cannot be used without a valu e. 170 // Media features that are prefixed by min/max cannot be used without a valu e.
160 return mediaFeature == MediaFeatureNames::monochromeMediaFeature 171 return stringImplEquals(mediaFeature, monochromeMediaFeature)
161 || mediaFeature == MediaFeatureNames::colorMediaFeature 172 || stringImplEquals(mediaFeature, colorMediaFeature)
162 || mediaFeature == MediaFeatureNames::colorIndexMediaFeature 173 || stringImplEquals(mediaFeature, colorIndexMediaFeature)
163 || mediaFeature == MediaFeatureNames::gridMediaFeature 174 || stringImplEquals(mediaFeature, gridMediaFeature)
164 || mediaFeature == MediaFeatureNames::heightMediaFeature 175 || stringImplEquals(mediaFeature, heightMediaFeature)
165 || mediaFeature == MediaFeatureNames::widthMediaFeature 176 || stringImplEquals(mediaFeature, widthMediaFeature)
166 || mediaFeature == MediaFeatureNames::deviceHeightMediaFeature 177 || stringImplEquals(mediaFeature, deviceHeightMediaFeature)
167 || mediaFeature == MediaFeatureNames::deviceWidthMediaFeature 178 || stringImplEquals(mediaFeature, deviceWidthMediaFeature)
168 || mediaFeature == MediaFeatureNames::orientationMediaFeature 179 || stringImplEquals(mediaFeature, orientationMediaFeature)
169 || mediaFeature == MediaFeatureNames::aspectRatioMediaFeature 180 || stringImplEquals(mediaFeature, aspectRatioMediaFeature)
170 || mediaFeature == MediaFeatureNames::deviceAspectRatioMediaFeature 181 || stringImplEquals(mediaFeature, deviceAspectRatioMediaFeature)
171 || mediaFeature == MediaFeatureNames::hoverMediaFeature 182 || stringImplEquals(mediaFeature, hoverMediaFeature)
172 || mediaFeature == MediaFeatureNames::transform2dMediaFeature 183 || stringImplEquals(mediaFeature, transform2dMediaFeature)
173 || mediaFeature == MediaFeatureNames::transform3dMediaFeature 184 || stringImplEquals(mediaFeature, transform3dMediaFeature)
174 || mediaFeature == MediaFeatureNames::animationMediaFeature 185 || stringImplEquals(mediaFeature, animationMediaFeature)
175 || mediaFeature == MediaFeatureNames::viewModeMediaFeature 186 || stringImplEquals(mediaFeature, viewModeMediaFeature)
176 || mediaFeature == MediaFeatureNames::pointerMediaFeature 187 || stringImplEquals(mediaFeature, pointerMediaFeature)
177 || mediaFeature == MediaFeatureNames::devicePixelRatioMediaFeature 188 || stringImplEquals(mediaFeature, devicePixelRatioMediaFeature)
178 || mediaFeature == MediaFeatureNames::resolutionMediaFeature 189 || stringImplEquals(mediaFeature, resolutionMediaFeature)
179 || mediaFeature == MediaFeatureNames::scanMediaFeature; 190 || stringImplEquals(mediaFeature, scanMediaFeature);
180 } 191 }
181 192
182 bool MediaQueryExp::isViewportDependent() const 193 bool MediaQueryExp::isViewportDependent() const
183 { 194 {
184 return m_mediaFeature == MediaFeatureNames::widthMediaFeature 195 return stringImplEquals(m_mediaFeature, widthMediaFeature)
185 || m_mediaFeature == MediaFeatureNames::heightMediaFeature 196 || stringImplEquals(m_mediaFeature, heightMediaFeature)
186 || m_mediaFeature == MediaFeatureNames::minWidthMediaFeature 197 || stringImplEquals(m_mediaFeature, minWidthMediaFeature)
187 || m_mediaFeature == MediaFeatureNames::minHeightMediaFeature 198 || stringImplEquals(m_mediaFeature, minHeightMediaFeature)
188 || m_mediaFeature == MediaFeatureNames::maxWidthMediaFeature 199 || stringImplEquals(m_mediaFeature, maxWidthMediaFeature)
189 || m_mediaFeature == MediaFeatureNames::maxHeightMediaFeature 200 || stringImplEquals(m_mediaFeature, maxHeightMediaFeature)
190 || m_mediaFeature == MediaFeatureNames::orientationMediaFeature 201 || stringImplEquals(m_mediaFeature, orientationMediaFeature)
191 || m_mediaFeature == MediaFeatureNames::aspectRatioMediaFeature 202 || stringImplEquals(m_mediaFeature, aspectRatioMediaFeature)
192 || m_mediaFeature == MediaFeatureNames::minAspectRatioMediaFeature 203 || stringImplEquals(m_mediaFeature, minAspectRatioMediaFeature)
193 || m_mediaFeature == MediaFeatureNames::devicePixelRatioMediaFeature 204 || stringImplEquals(m_mediaFeature, devicePixelRatioMediaFeature)
194 || m_mediaFeature == MediaFeatureNames::resolutionMediaFeature 205 || stringImplEquals(m_mediaFeature, resolutionMediaFeature)
195 || m_mediaFeature == MediaFeatureNames::maxAspectRatioMediaFeature; 206 || stringImplEquals(m_mediaFeature, maxAspectRatioMediaFeature);
196 } 207 }
197 208
198 MediaQueryExp::MediaQueryExp(const MediaQueryExp& other) 209 MediaQueryExp::MediaQueryExp(const MediaQueryExp& other)
199 : m_mediaFeature(other.mediaFeature()) 210 : m_mediaFeature(other.mediaFeature())
200 , m_value(other.value()) 211 , m_value(other.value())
201 { 212 {
202 } 213 }
203 214
204 MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, PassRefPtrWillBeR awPtr<CSSValue> value) 215 MediaQueryExp::MediaQueryExp(const String& mediaFeature, PassRefPtrWillBeRawPtr< CSSValue> value)
205 : m_mediaFeature(mediaFeature) 216 : m_mediaFeature(mediaFeature)
206 , m_value(value) 217 , m_value(value)
207 { 218 {
208 } 219 }
209 220
210 PassOwnPtrWillBeRawPtr<MediaQueryExp> MediaQueryExp::create(const AtomicString& mediaFeature, CSSParserValueList* valueList) 221 PassOwnPtrWillBeRawPtr<MediaQueryExp> MediaQueryExp::create(const String& mediaF eature, CSSParserValueList* valueList)
211 { 222 {
212 RefPtrWillBeRawPtr<CSSValue> cssValue; 223 RefPtrWillBeRawPtr<CSSValue> cssValue;
213 bool isValid = false; 224 bool isValid = false;
225 String lowerMediaFeature = attemptStaticStringCreation(mediaFeature.lower()) ;
214 226
215 // Create value for media query expression that must have 1 or more values. 227 // Create value for media query expression that must have 1 or more values.
216 if (valueList) { 228 if (valueList && valueList->size() > 0) {
217 if (valueList->size() == 1) { 229 if (valueList->size() == 1) {
218 CSSParserValue* value = valueList->current(); 230 CSSParserValue* value = valueList->current();
219 231
220 if (featureWithCSSValueID(mediaFeature, value)) { 232 if (featureWithCSSValueID(lowerMediaFeature, value)) {
221 // Media features that use CSSValueIDs. 233 // Media features that use CSSValueIDs.
222 cssValue = CSSPrimitiveValue::createIdentifier(value->id); 234 cssValue = CSSPrimitiveValue::createIdentifier(value->id);
223 if (!featureWithValidIdent(mediaFeature, toCSSPrimitiveValue(css Value.get())->getValueID())) 235 if (!featureWithValidIdent(lowerMediaFeature, toCSSPrimitiveValu e(cssValue.get())->getValueID()))
224 cssValue.clear(); 236 cssValue.clear();
225 } else if (featureWithValidDensity(mediaFeature, value)) { 237 } else if (featureWithValidDensity(lowerMediaFeature, value)) {
226 // Media features that must have non-negative <density>, ie. dpp x, dpi or dpcm. 238 // Media features that must have non-negative <density>, ie. dpp x, dpi or dpcm.
227 cssValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiv eValue::UnitTypes) value->unit); 239 cssValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiv eValue::UnitTypes) value->unit);
228 } else if (featureWithValidPositiveLength(mediaFeature, value)) { 240 } else if (featureWithValidPositiveLength(lowerMediaFeature, value)) {
229 // Media features that must have non-negative <lenght> or number value. 241 // Media features that must have non-negative <lenght> or number value.
230 cssValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiv eValue::UnitTypes) value->unit); 242 cssValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiv eValue::UnitTypes) value->unit);
231 } else if (featureWithPositiveInteger(mediaFeature, value)) { 243 } else if (featureWithPositiveInteger(lowerMediaFeature, value)) {
232 // Media features that must have non-negative integer value. 244 // Media features that must have non-negative integer value.
233 cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitive Value::CSS_NUMBER); 245 cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitive Value::CSS_NUMBER);
234 } else if (featureWithPositiveNumber(mediaFeature, value)) { 246 } else if (featureWithPositiveNumber(lowerMediaFeature, value)) {
235 // Media features that must have non-negative number value. 247 // Media features that must have non-negative number value.
236 cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitive Value::CSS_NUMBER); 248 cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitive Value::CSS_NUMBER);
237 } else if (featureWithZeroOrOne(mediaFeature, value)) { 249 } else if (featureWithZeroOrOne(lowerMediaFeature, value)) {
238 // Media features that must have (0|1) value. 250 // Media features that must have (0|1) value.
239 cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitive Value::CSS_NUMBER); 251 cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitive Value::CSS_NUMBER);
240 } 252 }
241 253
242 isValid = cssValue; 254 isValid = cssValue;
243 255
244 } else if (valueList->size() == 3 && featureWithAspectRatio(mediaFeature )) { 256 } else if (valueList->size() == 3 && featureWithAspectRatio(lowerMediaFe ature)) {
245 // Create list of values. 257 // Create list of values.
246 // Currently accepts only <integer>/<integer>. 258 // Currently accepts only <integer>/<integer>.
247 // Applicable to device-aspect-ratio and aspec-ratio. 259 // Applicable to device-aspect-ratio and aspec-ratio.
248 isValid = true; 260 isValid = true;
249 float numeratorValue = 0; 261 float numeratorValue = 0;
250 float denominatorValue = 0; 262 float denominatorValue = 0;
251 // The aspect-ratio must be <integer> (whitespace)? / (whitespace)? <integer>. 263 // The aspect-ratio must be <integer> (whitespace)? / (whitespace)? <integer>.
252 for (unsigned i = 0; i < 3; ++i, valueList->next()) { 264 for (unsigned i = 0; i < 3; ++i, valueList->next()) {
253 const CSSParserValue* value = valueList->current(); 265 const CSSParserValue* value = valueList->current();
254 if (i != 1 && value->unit == CSSPrimitiveValue::CSS_NUMBER && va lue->fValue > 0 && value->isInt) { 266 if (i != 1 && value->unit == CSSPrimitiveValue::CSS_NUMBER && va lue->fValue > 0 && value->isInt) {
255 if (!i) 267 if (!i)
256 numeratorValue = value->fValue; 268 numeratorValue = value->fValue;
257 else 269 else
258 denominatorValue = value->fValue; 270 denominatorValue = value->fValue;
259 } else if (i == 1 && value->unit == CSSParserValue::Operator && value->iValue == '/') { 271 } else if (i == 1 && value->unit == CSSParserValue::Operator && value->iValue == '/') {
260 continue; 272 continue;
261 } else { 273 } else {
262 isValid = false; 274 isValid = false;
263 break; 275 break;
264 } 276 }
265 } 277 }
266 278
267 if (isValid) 279 if (isValid)
268 cssValue = CSSAspectRatioValue::create(numeratorValue, denominat orValue); 280 cssValue = CSSAspectRatioValue::create(numeratorValue, denominat orValue);
269 } 281 }
270 } else if (featureWithoutValue(mediaFeature)) { 282 } else if (featureWithoutValue(lowerMediaFeature)) {
271 isValid = true; 283 isValid = true;
272 } 284 }
273 285
274 if (!isValid) 286 if (!isValid)
275 return nullptr; 287 return nullptr;
276 288
277 return adoptPtrWillBeNoop(new MediaQueryExp(mediaFeature, cssValue)); 289 return adoptPtrWillBeNoop(new MediaQueryExp(lowerMediaFeature, cssValue));
278 } 290 }
279 291
280 MediaQueryExp::~MediaQueryExp() 292 MediaQueryExp::~MediaQueryExp()
281 { 293 {
282 } 294 }
283 295
284 String MediaQueryExp::serialize() const 296 String MediaQueryExp::serialize() const
285 { 297 {
286 StringBuilder result; 298 StringBuilder result;
287 result.append("("); 299 result.append("(");
288 result.append(m_mediaFeature.lower()); 300 result.append(m_mediaFeature.lower());
289 if (m_value) { 301 if (m_value) {
290 result.append(": "); 302 result.append(": ");
291 result.append(m_value->cssText()); 303 result.append(m_value->cssText());
292 } 304 }
293 result.append(")"); 305 result.append(")");
294 306
295 return result.toString(); 307 return result.toString();
296 } 308 }
297 309
298 } // namespace 310 } // namespace
OLDNEW
« no previous file with comments | « Source/core/css/MediaQueryExp.h ('k') | Source/core/html/parser/HTMLParserIdioms.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698