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

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: 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
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::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
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
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
OLDNEW
« Source/core/css/MediaQueryEvaluator.cpp ('K') | « Source/core/css/MediaQueryEvaluator.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698