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

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

Issue 13896036: [CSSMQ] Implemented support for the scan media feature. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: another static_cast removed. Created 7 years, 7 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/MediaQueryEvaluator.cpp ('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 * 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
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::viewModeMediaFeature 49 || mediaFeature == MediaFeatureNames::viewModeMediaFeature
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::viewModeMediaFeature) {
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::maxHeightMediaFeature 88 || mediaFeature == MediaFeatureNames::maxHeightMediaFeature
59 || mediaFeature == MediaFeatureNames::minHeightMediaFeature 89 || mediaFeature == MediaFeatureNames::minHeightMediaFeature
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 || mediaFeature == MediaFeatureNames::aspectRatioMediaFeature 171 || mediaFeature == MediaFeatureNames::aspectRatioMediaFeature
142 || mediaFeature == MediaFeatureNames::deviceAspectRatioMediaFeature 172 || mediaFeature == MediaFeatureNames::deviceAspectRatioMediaFeature
143 || mediaFeature == MediaFeatureNames::hoverMediaFeature 173 || mediaFeature == MediaFeatureNames::hoverMediaFeature
144 || mediaFeature == MediaFeatureNames::transform2dMediaFeature 174 || mediaFeature == MediaFeatureNames::transform2dMediaFeature
145 || mediaFeature == MediaFeatureNames::transform3dMediaFeature 175 || mediaFeature == MediaFeatureNames::transform3dMediaFeature
146 || mediaFeature == MediaFeatureNames::transitionMediaFeature 176 || mediaFeature == MediaFeatureNames::transitionMediaFeature
147 || mediaFeature == MediaFeatureNames::animationMediaFeature 177 || mediaFeature == MediaFeatureNames::animationMediaFeature
148 || mediaFeature == MediaFeatureNames::viewModeMediaFeature 178 || mediaFeature == MediaFeatureNames::viewModeMediaFeature
149 || mediaFeature == MediaFeatureNames::pointerMediaFeature 179 || mediaFeature == MediaFeatureNames::pointerMediaFeature
150 || mediaFeature == MediaFeatureNames::devicePixelRatioMediaFeature 180 || mediaFeature == MediaFeatureNames::devicePixelRatioMediaFeature
151 || mediaFeature == MediaFeatureNames::resolutionMediaFeature; 181 || mediaFeature == MediaFeatureNames::resolutionMediaFeature
182 || mediaFeature == MediaFeatureNames::scanMediaFeature;
152 } 183 }
153 184
154 bool MediaQueryExp::isViewportDependent() const 185 bool MediaQueryExp::isViewportDependent() const
155 { 186 {
156 return m_mediaFeature == MediaFeatureNames::widthMediaFeature 187 return m_mediaFeature == MediaFeatureNames::widthMediaFeature
157 || m_mediaFeature == MediaFeatureNames::heightMediaFeature 188 || m_mediaFeature == MediaFeatureNames::heightMediaFeature
158 || m_mediaFeature == MediaFeatureNames::minWidthMediaFeature 189 || m_mediaFeature == MediaFeatureNames::minWidthMediaFeature
159 || m_mediaFeature == MediaFeatureNames::minHeightMediaFeature 190 || m_mediaFeature == MediaFeatureNames::minHeightMediaFeature
160 || m_mediaFeature == MediaFeatureNames::maxWidthMediaFeature 191 || m_mediaFeature == MediaFeatureNames::maxWidthMediaFeature
161 || m_mediaFeature == MediaFeatureNames::maxHeightMediaFeature 192 || m_mediaFeature == MediaFeatureNames::maxHeightMediaFeature
162 || m_mediaFeature == MediaFeatureNames::orientationMediaFeature 193 || m_mediaFeature == MediaFeatureNames::orientationMediaFeature
163 || m_mediaFeature == MediaFeatureNames::aspectRatioMediaFeature 194 || m_mediaFeature == MediaFeatureNames::aspectRatioMediaFeature
164 || m_mediaFeature == MediaFeatureNames::minAspectRatioMediaFeature 195 || m_mediaFeature == MediaFeatureNames::minAspectRatioMediaFeature
165 || m_mediaFeature == MediaFeatureNames::maxAspectRatioMediaFeature; 196 || m_mediaFeature == MediaFeatureNames::maxAspectRatioMediaFeature;
166 } 197 }
167 198
168 inline MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserV alueList* valueList) 199 inline MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserV alueList* valueList)
169 : m_mediaFeature(mediaFeature) 200 : m_mediaFeature(mediaFeature)
170 , m_value(0) 201 , m_value(0)
171 , m_isValid(false) 202 , m_isValid(false)
172 { 203 {
173 // Initialize media query expression that must have 1 or more values. 204 // Initialize media query expression that must have 1 or more values.
174 if (valueList) { 205 if (valueList) {
175 if (valueList->size() == 1) { 206 if (valueList->size() == 1) {
176 CSSParserValue* value = valueList->current(); 207 CSSParserValue* value = valueList->current();
177 208
178 // Media features that use CSSValueIDs. 209 // Media features that use CSSValueIDs.
179 if (featureWithCSSValueID(mediaFeature, value)) 210 if (featureWithCSSValueID(mediaFeature, value)) {
180 m_value = CSSPrimitiveValue::createIdentifier(value->id); 211 m_value = CSSPrimitiveValue::createIdentifier(value->id);
212 if (!featureWithValidIdent(mediaFeature, toCSSPrimitiveValue(m_v alue.get())->getIdent()))
213 m_value.clear();
214 }
181 215
182 // Media features that must have non-negative <density>, ie. dppx, d pi or dpcm. 216 // Media features that must have non-negative <density>, ie. dppx, d pi or dpcm.
183 else if (featureWithValidDensity(mediaFeature, value)) 217 else if (featureWithValidDensity(mediaFeature, value))
184 m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitive Value::UnitTypes) value->unit); 218 m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitive Value::UnitTypes) value->unit);
185 219
186 // Media features that must have non-negative <lenght> or number val ue. 220 // Media features that must have non-negative <lenght> or number val ue.
187 else if (featureWithValidPositiveLenghtOrNumber(mediaFeature, value) ) 221 else if (featureWithValidPositiveLenghtOrNumber(mediaFeature, value) )
188 m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitive Value::UnitTypes) value->unit); 222 m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitive Value::UnitTypes) value->unit);
189 223
190 // Media features that must have non-negative integer value. 224 // Media features that must have non-negative integer value.
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 296
263 void MediaQueryExp::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const 297 void MediaQueryExp::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
264 { 298 {
265 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); 299 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS);
266 info.addMember(m_mediaFeature, "mediaFeature"); 300 info.addMember(m_mediaFeature, "mediaFeature");
267 info.addMember(m_serializationCache, "serializationCache"); 301 info.addMember(m_serializationCache, "serializationCache");
268 info.addMember(m_value, "value"); 302 info.addMember(m_value, "value");
269 } 303 }
270 304
271 } // namespace 305 } // namespace
OLDNEW
« no previous file with comments | « Source/core/css/MediaQueryEvaluator.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698