OLD | NEW |
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 12 matching lines...) Expand all Loading... |
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
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 "core/css/CSSAspectRatioValue.h" | 34 #include "core/css/CSSAspectRatioValue.h" |
34 #include "core/css/CSSParser.h" | 35 #include "core/css/CSSParser.h" |
35 #include "core/css/CSSPrimitiveValue.h" | 36 #include "core/css/CSSPrimitiveValue.h" |
36 #include "core/css/CSSValueList.h" | 37 #include "core/css/CSSValueList.h" |
37 #include "core/dom/WebCoreMemoryInstrumentation.h" | 38 #include "core/dom/WebCoreMemoryInstrumentation.h" |
38 #include <wtf/text/StringBuilder.h> | 39 #include <wtf/text/StringBuilder.h> |
39 | 40 |
40 namespace WebCore { | 41 namespace WebCore { |
41 | 42 |
42 static inline bool featureWithCSSValueID(const AtomicString& mediaFeature, const
CSSParserValue* value) | 43 static inline bool featureWithCSSValueID(const AtomicString& mediaFeature, const
CSSParserValue* value) |
43 { | 44 { |
44 if (!value->id) | 45 if (!value->id) |
45 return false; | 46 return false; |
46 | 47 |
47 return mediaFeature == MediaFeatureNames::orientationMediaFeature | 48 return mediaFeature == MediaFeatureNames::orientationMediaFeature |
48 || mediaFeature == MediaFeatureNames::view_modeMediaFeature | 49 || mediaFeature == MediaFeatureNames::view_modeMediaFeature |
49 || mediaFeature == MediaFeatureNames::pointerMediaFeature; | 50 || mediaFeature == MediaFeatureNames::pointerMediaFeature |
| 51 || mediaFeature == MediaFeatureNames::scanMediaFeature; |
| 52 } |
| 53 |
| 54 static inline bool featureWithValidIdent(const AtomicString& mediaFeature, int i
dent) |
| 55 { |
| 56 if (mediaFeature == MediaFeatureNames::orientationMediaFeature) |
| 57 return ident == CSSValuePortrait || ident == CSSValueLandscape; |
| 58 |
| 59 if (mediaFeature == MediaFeatureNames::view_modeMediaFeature) { |
| 60 switch (ident) { |
| 61 case CSSValueWindowed: |
| 62 case CSSValueFloating: |
| 63 case CSSValueFullscreen: |
| 64 case CSSValueMaximized: |
| 65 case CSSValueMinimized: |
| 66 return true; |
| 67 default: |
| 68 return false; |
| 69 } |
| 70 } |
| 71 |
| 72 if (mediaFeature == MediaFeatureNames::pointerMediaFeature) |
| 73 return ident == CSSValueNone || ident == CSSValueCoarse || ident == CSSV
alueFine; |
| 74 |
| 75 if (mediaFeature == MediaFeatureNames::scanMediaFeature) |
| 76 return ident == CSSValueInterlace || ident == CSSValueProgressive; |
| 77 |
| 78 ASSERT_NOT_REACHED(); |
| 79 return false; |
50 } | 80 } |
51 | 81 |
52 static inline bool featureWithValidPositiveLenghtOrNumber(const AtomicString& me
diaFeature, const CSSParserValue* value) | 82 static inline bool featureWithValidPositiveLenghtOrNumber(const AtomicString& me
diaFeature, const CSSParserValue* value) |
53 { | 83 { |
54 if (!(((value->unit >= CSSPrimitiveValue::CSS_EMS && value->unit <= CSSPrimi
tiveValue::CSS_PC) || value->unit == CSSPrimitiveValue::CSS_REMS) || value->unit
== CSSPrimitiveValue::CSS_NUMBER) || value->fValue < 0) | 84 if (!(((value->unit >= CSSPrimitiveValue::CSS_EMS && value->unit <= CSSPrimi
tiveValue::CSS_PC) || value->unit == CSSPrimitiveValue::CSS_REMS) || value->unit
== CSSPrimitiveValue::CSS_NUMBER) || value->fValue < 0) |
55 return false; | 85 return false; |
56 | 86 |
57 return mediaFeature == MediaFeatureNames::heightMediaFeature | 87 return mediaFeature == MediaFeatureNames::heightMediaFeature |
58 || mediaFeature == MediaFeatureNames::max_heightMediaFeature | 88 || mediaFeature == MediaFeatureNames::max_heightMediaFeature |
59 || mediaFeature == MediaFeatureNames::min_heightMediaFeature | 89 || mediaFeature == MediaFeatureNames::min_heightMediaFeature |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 || mediaFeature == MediaFeatureNames::aspect_ratioMediaFeature | 167 || mediaFeature == MediaFeatureNames::aspect_ratioMediaFeature |
138 || mediaFeature == MediaFeatureNames::device_aspect_ratioMediaFeature | 168 || mediaFeature == MediaFeatureNames::device_aspect_ratioMediaFeature |
139 || mediaFeature == MediaFeatureNames::hoverMediaFeature | 169 || mediaFeature == MediaFeatureNames::hoverMediaFeature |
140 || mediaFeature == MediaFeatureNames::transform_2dMediaFeature | 170 || mediaFeature == MediaFeatureNames::transform_2dMediaFeature |
141 || mediaFeature == MediaFeatureNames::transform_3dMediaFeature | 171 || mediaFeature == MediaFeatureNames::transform_3dMediaFeature |
142 || mediaFeature == MediaFeatureNames::transitionMediaFeature | 172 || mediaFeature == MediaFeatureNames::transitionMediaFeature |
143 || mediaFeature == MediaFeatureNames::animationMediaFeature | 173 || mediaFeature == MediaFeatureNames::animationMediaFeature |
144 || mediaFeature == MediaFeatureNames::view_modeMediaFeature | 174 || mediaFeature == MediaFeatureNames::view_modeMediaFeature |
145 || mediaFeature == MediaFeatureNames::pointerMediaFeature | 175 || mediaFeature == MediaFeatureNames::pointerMediaFeature |
146 || mediaFeature == MediaFeatureNames::device_pixel_ratioMediaFeature | 176 || mediaFeature == MediaFeatureNames::device_pixel_ratioMediaFeature |
147 || mediaFeature == MediaFeatureNames::resolutionMediaFeature; | 177 || mediaFeature == MediaFeatureNames::resolutionMediaFeature |
| 178 || mediaFeature == MediaFeatureNames::scanMediaFeature; |
148 } | 179 } |
149 | 180 |
150 inline MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserV
alueList* valueList) | 181 inline MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserV
alueList* valueList) |
151 : m_mediaFeature(mediaFeature) | 182 : m_mediaFeature(mediaFeature) |
152 , m_value(0) | 183 , m_value(0) |
153 , m_isValid(false) | 184 , m_isValid(false) |
154 { | 185 { |
155 // Initialize media query expression that must have 1 or more values. | 186 // Initialize media query expression that must have 1 or more values. |
156 if (valueList) { | 187 if (valueList) { |
157 if (valueList->size() == 1) { | 188 if (valueList->size() == 1) { |
158 CSSParserValue* value = valueList->current(); | 189 CSSParserValue* value = valueList->current(); |
159 | 190 |
160 // Media features that use CSSValueIDs. | 191 // Media features that use CSSValueIDs. |
161 if (featureWithCSSValueID(mediaFeature, value)) | 192 if (featureWithCSSValueID(mediaFeature, value)) { |
162 m_value = CSSPrimitiveValue::createIdentifier(value->id); | 193 m_value = CSSPrimitiveValue::createIdentifier(value->id); |
| 194 if (!featureWithValidIdent(mediaFeature, static_cast<CSSPrimitiv
eValue*>(m_value.get())->getIdent())) |
| 195 m_value.clear(); |
| 196 } |
163 | 197 |
164 // Media features that must have non-negative <density>, ie. dppx, d
pi or dpcm. | 198 // Media features that must have non-negative <density>, ie. dppx, d
pi or dpcm. |
165 else if (featureWithValidDensity(mediaFeature, value)) | 199 else if (featureWithValidDensity(mediaFeature, value)) |
166 m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitive
Value::UnitTypes) value->unit); | 200 m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitive
Value::UnitTypes) value->unit); |
167 | 201 |
168 // Media features that must have non-negative <lenght> or number val
ue. | 202 // Media features that must have non-negative <lenght> or number val
ue. |
169 else if (featureWithValidPositiveLenghtOrNumber(mediaFeature, value)
) | 203 else if (featureWithValidPositiveLenghtOrNumber(mediaFeature, value)
) |
170 m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitive
Value::UnitTypes) value->unit); | 204 m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitive
Value::UnitTypes) value->unit); |
171 | 205 |
172 // Media features that must have non-negative integer value. | 206 // Media features that must have non-negative integer value. |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 | 278 |
245 void MediaQueryExp::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const | 279 void MediaQueryExp::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const |
246 { | 280 { |
247 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); | 281 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); |
248 info.addMember(m_mediaFeature, "mediaFeature"); | 282 info.addMember(m_mediaFeature, "mediaFeature"); |
249 info.addMember(m_serializationCache, "serializationCache"); | 283 info.addMember(m_serializationCache, "serializationCache"); |
250 info.addMember(m_value, "value"); | 284 info.addMember(m_value, "value"); |
251 } | 285 } |
252 | 286 |
253 } // namespace | 287 } // namespace |
OLD | NEW |