Changeset 205368 in webkit
- Timestamp:
- Sep 2, 2016 1:49:27 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r205291 r205368 1410 1410 css/parser/CSSParser.cpp 1411 1411 css/parser/CSSParserFastPaths.cpp 1412 css/parser/CSSParserIdioms.cpp 1412 1413 css/parser/CSSParserObserverWrapper.cpp 1413 1414 css/parser/CSSParserToken.cpp … … 1418 1419 css/parser/CSSTokenizer.cpp 1419 1420 css/parser/CSSTokenizerInputStream.cpp 1421 css/parser/MediaQueryBlockWatcher.cpp 1422 css/parser/MediaQueryParser.cpp 1420 1423 css/parser/SVGCSSParser.cpp 1421 1424 -
trunk/Source/WebCore/ChangeLog
r205365 r205368 1 2016-09-02 Dave Hyatt <hyatt@apple.com> 2 3 Add support for media query parsing using new CSS Parser 4 https://bugs.webkit.org/show_bug.cgi?id=161537 5 6 Reviewed by Dean Jackson. 7 8 * CMakeLists.txt: 9 * WebCore.xcodeproj/project.pbxproj: 10 * css/MediaQueryExp.cpp: 11 (WebCore::featureWithValidIdent): 12 (WebCore::featureWithValidDensity): 13 (WebCore::featureWithValidPositiveLength): 14 (WebCore::featureWithPositiveInteger): 15 (WebCore::featureWithPositiveNumber): 16 (WebCore::featureWithZeroOrOne): 17 (WebCore::isFeatureValidWithIdentifier): 18 (WebCore::MediaQueryExpression::MediaQueryExpression): 19 * css/MediaQueryExp.h: 20 * css/parser/CSSParserIdioms.cpp: Added. 21 (WebCore::convertToASCIILowercaseInPlace): 22 * css/parser/CSSParserIdioms.h: 23 * css/parser/CSSParserToken.cpp: 24 (WebCore::convertToASCIILowercaseInPlace): 25 * css/parser/MediaQueryBlockWatcher.cpp: Added. 26 (WebCore::MediaQueryBlockWatcher::MediaQueryBlockWatcher): 27 (WebCore::MediaQueryBlockWatcher::handleToken): 28 * css/parser/MediaQueryBlockWatcher.h: Added. 29 (WebCore::MediaQueryBlockWatcher::blockLevel): 30 * css/parser/MediaQueryParser.cpp: Added. 31 (WebCore::MediaQueryParser::parseMediaQuerySet): 32 (WebCore::MediaQueryParser::parseMediaCondition): 33 (WebCore::MediaQueryParser::MediaQueryParser): 34 (WebCore::MediaQueryParser::~MediaQueryParser): 35 (WebCore::MediaQueryParser::setStateAndRestrict): 36 (WebCore::MediaQueryParser::readRestrictor): 37 (WebCore::MediaQueryParser::readMediaNot): 38 (WebCore::isRestrictorOrLogicalOperator): 39 (WebCore::MediaQueryParser::readMediaType): 40 (WebCore::MediaQueryParser::commitMediaQuery): 41 (WebCore::MediaQueryParser::readAnd): 42 (WebCore::MediaQueryParser::readFeatureStart): 43 (WebCore::MediaQueryParser::readFeature): 44 (WebCore::MediaQueryParser::readFeatureColon): 45 (WebCore::MediaQueryParser::readFeatureValue): 46 (WebCore::MediaQueryParser::readFeatureEnd): 47 (WebCore::MediaQueryParser::skipUntilComma): 48 (WebCore::MediaQueryParser::skipUntilBlockEnd): 49 (WebCore::MediaQueryParser::done): 50 (WebCore::MediaQueryParser::handleBlocks): 51 (WebCore::MediaQueryParser::processToken): 52 (WebCore::MediaQueryParser::parseInternal): 53 (WebCore::MediaQueryData::MediaQueryData): 54 (WebCore::MediaQueryData::clear): 55 (WebCore::MediaQueryData::addExpression): 56 (WebCore::MediaQueryData::tryAddParserToken): 57 (WebCore::MediaQueryData::setMediaType): 58 * css/parser/MediaQueryParser.h: Added. 59 (WebCore::MediaQueryData::restrictor): 60 (WebCore::MediaQueryData::expressions): 61 (WebCore::MediaQueryData::mediaType): 62 (WebCore::MediaQueryData::currentMediaQueryChanged): 63 (WebCore::MediaQueryData::setRestrictor): 64 (WebCore::MediaQueryData::setMediaFeature): 65 1 66 2016-07-08 Jer Noble <jer.noble@apple.com> 2 67 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r205360 r205368 3351 3351 946D373C1D6CDFC00077084F /* CSSTokenizerInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 946D37381D6CDF980077084F /* CSSTokenizerInputStream.h */; }; 3352 3352 946D373F1D6CE3C20077084F /* CSSParserToken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 946D373E1D6CE31A0077084F /* CSSParserToken.cpp */; }; 3353 946D37401D6CE3C20077084F /* CSSParserToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 946D373D1D6CE31A0077084F /* CSSParserToken.h */; };3353 946D37401D6CE3C20077084F /* CSSParserToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 946D373D1D6CE31A0077084F /* CSSParserToken.h */; settings = {ATTRIBUTES = (Private, ); }; }; 3354 3354 946D37441D6CF7B20077084F /* CSSParserIdioms.h in Headers */ = {isa = PBXBuildFile; fileRef = 946D37431D6CF7880077084F /* CSSParserIdioms.h */; }; 3355 3355 946D37451D6D01D40077084F /* CSSPropertyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 946D37411D6CF6320077084F /* CSSPropertyParser.cpp */; }; … … 3359 3359 946D374D1D6D08A60077084F /* CSSParserTokenRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 946D374B1D6D07F50077084F /* CSSParserTokenRange.cpp */; }; 3360 3360 946D374E1D6D08AA0077084F /* CSSParserTokenRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 946D374C1D6D07F50077084F /* CSSParserTokenRange.h */; }; 3361 9493B6BE1D74B4120088E780 /* MediaQueryBlockWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9493B6B61D74B3950088E780 /* MediaQueryBlockWatcher.cpp */; }; 3362 9493B6BF1D74B4120088E780 /* MediaQueryBlockWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 9493B6B71D74B3950088E780 /* MediaQueryBlockWatcher.h */; }; 3363 9493B6C01D74B4120088E780 /* MediaQueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9493B6B81D74B3950088E780 /* MediaQueryParser.cpp */; }; 3364 9493B6C11D74B4120088E780 /* MediaQueryParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 9493B6B91D74B3950088E780 /* MediaQueryParser.h */; }; 3361 3365 949C77001D6E1D9800C0DE4F /* CSSParserFastPaths.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 949C76FE1D6E1D8C00C0DE4F /* CSSParserFastPaths.cpp */; }; 3362 3366 949C77011D6E1D9800C0DE4F /* CSSParserFastPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = 949C76FF1D6E1D8C00C0DE4F /* CSSParserFastPaths.h */; }; … … 3366 3370 949C77091D6E498700C0DE4F /* CSSParserObserverWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 949C77071D6E48ED00C0DE4F /* CSSParserObserverWrapper.h */; }; 3367 3371 949C770B1D6E49ED00C0DE4F /* CSSParserObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 949C770A1D6E49C300C0DE4F /* CSSParserObserver.h */; }; 3372 94DE5C7E1D78CB2E00164F2A /* CSSParserIdioms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94DE5C7D1D78CB2500164F2A /* CSSParserIdioms.cpp */; }; 3368 3373 96ABA42314BCB80E00D56204 /* GraphicsContext3DOpenGLCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 96ABA42214BCB80E00D56204 /* GraphicsContext3DOpenGLCommon.cpp */; }; 3369 3374 9703E1BF15DC4E37001F24C8 /* JSVoidCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97E9EC8B15DC492F004F2E71 /* JSVoidCallback.cpp */; }; … … 10496 10501 946D374B1D6D07F50077084F /* CSSParserTokenRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSSParserTokenRange.cpp; path = parser/CSSParserTokenRange.cpp; sourceTree = "<group>"; }; 10497 10502 946D374C1D6D07F50077084F /* CSSParserTokenRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSSParserTokenRange.h; path = parser/CSSParserTokenRange.h; sourceTree = "<group>"; }; 10503 9493B6B61D74B3950088E780 /* MediaQueryBlockWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MediaQueryBlockWatcher.cpp; path = parser/MediaQueryBlockWatcher.cpp; sourceTree = "<group>"; }; 10504 9493B6B71D74B3950088E780 /* MediaQueryBlockWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MediaQueryBlockWatcher.h; path = parser/MediaQueryBlockWatcher.h; sourceTree = "<group>"; }; 10505 9493B6B81D74B3950088E780 /* MediaQueryParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MediaQueryParser.cpp; path = parser/MediaQueryParser.cpp; sourceTree = "<group>"; }; 10506 9493B6B91D74B3950088E780 /* MediaQueryParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MediaQueryParser.h; path = parser/MediaQueryParser.h; sourceTree = "<group>"; }; 10498 10507 949C76FE1D6E1D8C00C0DE4F /* CSSParserFastPaths.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSSParserFastPaths.cpp; path = parser/CSSParserFastPaths.cpp; sourceTree = "<group>"; }; 10499 10508 949C76FF1D6E1D8C00C0DE4F /* CSSParserFastPaths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSSParserFastPaths.h; path = parser/CSSParserFastPaths.h; sourceTree = "<group>"; }; … … 10503 10512 949C77071D6E48ED00C0DE4F /* CSSParserObserverWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSSParserObserverWrapper.h; path = parser/CSSParserObserverWrapper.h; sourceTree = "<group>"; }; 10504 10513 949C770A1D6E49C300C0DE4F /* CSSParserObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSSParserObserver.h; path = parser/CSSParserObserver.h; sourceTree = "<group>"; }; 10514 94DE5C7D1D78CB2500164F2A /* CSSParserIdioms.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSSParserIdioms.cpp; path = parser/CSSParserIdioms.cpp; sourceTree = "<group>"; }; 10505 10515 950C4C02BED8936F818E2F99 /* JSSVGGraphicsElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGGraphicsElement.h; sourceTree = "<group>"; }; 10506 10516 96ABA42214BCB80E00D56204 /* GraphicsContext3DOpenGLCommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContext3DOpenGLCommon.cpp; sourceTree = "<group>"; }; … … 18139 18149 949C76FE1D6E1D8C00C0DE4F /* CSSParserFastPaths.cpp */, 18140 18150 949C76FF1D6E1D8C00C0DE4F /* CSSParserFastPaths.h */, 18151 94DE5C7D1D78CB2500164F2A /* CSSParserIdioms.cpp */, 18141 18152 946D37431D6CF7880077084F /* CSSParserIdioms.h */, 18142 18153 946D372A1D6CB28B0077084F /* CSSParserMode.h */, … … 18158 18169 946D37351D6CDF980077084F /* CSSTokenizerInputStream.cpp */, 18159 18170 946D37381D6CDF980077084F /* CSSTokenizerInputStream.h */, 18171 9493B6B61D74B3950088E780 /* MediaQueryBlockWatcher.cpp */, 18172 9493B6B71D74B3950088E780 /* MediaQueryBlockWatcher.h */, 18173 9493B6B81D74B3950088E780 /* MediaQueryParser.cpp */, 18174 9493B6B91D74B3950088E780 /* MediaQueryParser.h */, 18160 18175 946D37321D6CC3720077084F /* SVGCSSParser.cpp */, 18161 18176 ); … … 25997 26012 A454424F119B3687009BE912 /* RenderMeter.h in Headers */, 25998 26013 1A3586E015264C450022A659 /* RenderMultiColumnFlowThread.h in Headers */, 26014 9493B6C11D74B4120088E780 /* MediaQueryParser.h in Headers */, 25999 26015 BCE32B9C1517C0B200F542EC /* RenderMultiColumnSet.h in Headers */, 26000 26016 BC1A7D9818FCB5B000421879 /* RenderMultiColumnSpannerPlaceholder.h in Headers */, … … 26906 26922 A14832CD187F682E00DA63A6 /* WebCoreThreadSafe.h in Headers */, 26907 26923 A14832CF187F684700DA63A6 /* WebCoreThreadSystemInterface.h in Headers */, 26924 9493B6BF1D74B4120088E780 /* MediaQueryBlockWatcher.h in Headers */, 26908 26925 0F099D0917B968A100FF84B9 /* WebCoreTypedArrayController.h in Headers */, 26909 26926 37F818FD0D657606005E1F05 /* WebCoreURLResponse.h in Headers */, … … 27448 27465 1A8A645F1D19FCFC00D0E00F /* ApplePayShippingMethodSelectedEvent.cpp in Sources */, 27449 27466 1A8A64621D19FCFC00D0E00F /* ApplePayValidateMerchantEvent.cpp in Sources */, 27467 9493B6BE1D74B4120088E780 /* MediaQueryBlockWatcher.cpp in Sources */, 27450 27468 1A8F6BBC0DB55CDC001DB794 /* ApplicationCache.cpp in Sources */, 27451 27469 1A8F6BBE0DB55CDC001DB794 /* ApplicationCacheGroup.cpp in Sources */, … … 28131 28149 0FA24D79162DF91900A3F4C0 /* GraphicsLayerUpdater.cpp in Sources */, 28132 28150 B2A015AA0AF6CD53006BCE0E /* GraphicsTypes.cpp in Sources */, 28151 9493B6C01D74B4120088E780 /* MediaQueryParser.cpp in Sources */, 28133 28152 CDF7483E18FEBCEC0006ECC0 /* GridPositionsResolver.cpp in Sources */, 28134 28153 F55B3DBF1251F12D003EF269 /* HiddenInputType.cpp in Sources */, … … 29448 29467 86512EDE154A2AEF00A90426 /* PerformanceResourceTiming.cpp in Sources */, 29449 29468 0F43C85D189E10CF00019AE2 /* PerformanceTiming.cpp in Sources */, 29469 94DE5C7E1D78CB2E00164F2A /* CSSParserIdioms.cpp in Sources */, 29450 29470 FD581FB41520F93B003A7A75 /* PeriodicWave.cpp in Sources */, 29451 29471 49D5DC2D0F423A73008F20FD /* PerspectiveTransformOperation.cpp in Sources */, -
trunk/Source/WebCore/css/MediaQueryExp.cpp
r201441 r205368 31 31 #include "CSSAspectRatioValue.h" 32 32 #include "CSSParser.h" 33 #include "CSSParserIdioms.h" 34 #include "CSSParserToken.h" 33 35 #include "CSSPrimitiveValue.h" 34 36 #include "CSSValueList.h" … … 38 40 namespace WebCore { 39 41 40 static inline bool isFeatureValidWithIdentifier(const AtomicString& mediaFeature, const CSSParserValue& value) 41 { 42 if (!value.id) 43 return false; 44 42 static inline bool featureWithValidIdent(const AtomicString& mediaFeature) 43 { 45 44 return mediaFeature == MediaFeatureNames::orientation 46 45 #if ENABLE(VIEW_MODE_CSS_MEDIA) 47 46 || mediaFeature == MediaFeatureNames::viewMode 48 47 #endif 49 || mediaFeature == MediaFeatureNames::colorGamut 50 || mediaFeature == MediaFeatureNames::anyHover 51 || mediaFeature == MediaFeatureNames::anyPointer 52 || mediaFeature == MediaFeatureNames::hover 53 || mediaFeature == MediaFeatureNames::invertedColors 54 || mediaFeature == MediaFeatureNames::pointer; 48 || mediaFeature == MediaFeatureNames::colorGamut 49 || mediaFeature == MediaFeatureNames::anyHover 50 || mediaFeature == MediaFeatureNames::anyPointer 51 || mediaFeature == MediaFeatureNames::hover 52 || mediaFeature == MediaFeatureNames::invertedColors 53 || mediaFeature == MediaFeatureNames::pointer; 54 } 55 56 static inline bool featureWithValidDensity(const String& mediaFeature, const CSSParserToken& token) 57 { 58 if ((token.unitType() != CSSPrimitiveValue::UnitTypes::CSS_DPPX && token.unitType() != CSSPrimitiveValue::UnitTypes::CSS_DPI && token.unitType() != CSSPrimitiveValue::UnitTypes::CSS_DPCM) || token.numericValue() <= 0) 59 return false; 60 61 return mediaFeature == MediaFeatureNames::resolution 62 || mediaFeature == MediaFeatureNames::minResolution 63 || mediaFeature == MediaFeatureNames::maxResolution; 64 } 65 66 static inline bool featureWithValidPositiveLength(const String& mediaFeature, const CSSParserToken& token) 67 { 68 if (!(CSSPrimitiveValue::isLength(token.unitType()) || (token.type() == NumberToken && !token.numericValue())) || token.numericValue() < 0) 69 return false; 70 71 72 return mediaFeature == MediaFeatureNames::height 73 || mediaFeature == MediaFeatureNames::maxHeight 74 || mediaFeature == MediaFeatureNames::minHeight 75 || mediaFeature == MediaFeatureNames::width 76 || mediaFeature == MediaFeatureNames::maxWidth 77 || mediaFeature == MediaFeatureNames::minWidth 78 || mediaFeature == MediaFeatureNames::deviceHeight 79 || mediaFeature == MediaFeatureNames::maxDeviceHeight 80 || mediaFeature == MediaFeatureNames::minDeviceHeight 81 || mediaFeature == MediaFeatureNames::deviceWidth 82 || mediaFeature == MediaFeatureNames::minDeviceWidth 83 || mediaFeature == MediaFeatureNames::maxDeviceWidth; 84 } 85 86 static inline bool featureWithPositiveInteger(const String& mediaFeature, const CSSParserToken& token) 87 { 88 if (token.numericValueType() != IntegerValueType || token.numericValue() < 0) 89 return false; 90 91 return mediaFeature == MediaFeatureNames::color 92 || mediaFeature == MediaFeatureNames:: maxColor 93 || mediaFeature == MediaFeatureNames:: minColor 94 || mediaFeature == MediaFeatureNames::colorIndex 95 || mediaFeature == MediaFeatureNames::maxColorIndex 96 || mediaFeature == MediaFeatureNames::minColorIndex 97 || mediaFeature == MediaFeatureNames::monochrome 98 || mediaFeature == MediaFeatureNames::maxMonochrome 99 || mediaFeature == MediaFeatureNames::minMonochrome; 100 } 101 102 static inline bool featureWithPositiveNumber(const String& mediaFeature, const CSSParserToken& token) 103 { 104 if (token.type() != NumberToken || token.numericValue() < 0) 105 return false; 106 107 return mediaFeature == MediaFeatureNames::transform3d 108 || mediaFeature == MediaFeatureNames::devicePixelRatio 109 || mediaFeature == MediaFeatureNames::maxDevicePixelRatio 110 || mediaFeature == MediaFeatureNames::minDevicePixelRatio; 111 } 112 113 static inline bool featureWithZeroOrOne(const String& mediaFeature, const CSSParserToken& token) 114 { 115 if (token.numericValueType() != IntegerValueType || !(token.numericValue() == 1 || !token.numericValue())) 116 return false; 117 118 return mediaFeature == MediaFeatureNames::grid; 119 } 120 121 static inline bool isFeatureValidWithIdentifier(const AtomicString& mediaFeature, CSSValueID id) 122 { 123 if (!id) 124 return false; 125 126 return featureWithValidIdent(mediaFeature); 55 127 } 56 128 … … 190 262 } else if (valueList->size() == 1) { 191 263 auto& value = *valueList->valueAt(0); 192 if (isFeatureValidWithIdentifier(mediaFeature, value )) {264 if (isFeatureValidWithIdentifier(mediaFeature, value.id)) { 193 265 m_value = CSSPrimitiveValue::createIdentifier(value.id); 194 266 m_isValid = true; … … 209 281 m_isValid = true; 210 282 } 283 } 284 } 285 286 MediaQueryExpression::MediaQueryExpression(const String& feature, const Vector<CSSParserToken, 4>& tokenList) 287 : m_mediaFeature(feature) 288 , m_isValid(false) 289 { 290 // Create value for media query expression that must have 1 or more values. 291 if (!tokenList.size() && isFeatureValidWithoutValue(m_mediaFeature)) { 292 // Valid, creates a MediaQueryExp with an 'invalid' MediaQueryExpValue 293 m_isValid = true; 294 } else if (tokenList.size() == 1) { 295 CSSParserToken token = tokenList.first(); 296 if (token.type() == IdentToken) { 297 CSSValueID ident = token.id(); 298 if (!featureWithValidIdent(m_mediaFeature)) 299 return; 300 m_value = CSSPrimitiveValue::createIdentifier(ident); 301 m_isValid = true; 302 } else if (token.type() == NumberToken || token.type() == PercentageToken || token.type() == DimensionToken) { 303 // Check for numeric token types since it is only safe for these types to call numericValue. 304 if (featureWithValidDensity(m_mediaFeature, token) 305 || featureWithValidPositiveLength(m_mediaFeature, token)) { 306 // Media features that must have non-negative <density>, ie. dppx, dpi or dpcm, 307 // or Media features that must have non-negative <length> or number value. 308 m_value = CSSPrimitiveValue::create(token.numericValue(), (CSSPrimitiveValue::UnitTypes) token.unitType()); 309 m_isValid = true; 310 } else if (featureWithPositiveInteger(m_mediaFeature, token) 311 || featureWithPositiveNumber(m_mediaFeature, token) 312 || featureWithZeroOrOne(m_mediaFeature, token)) { 313 // Media features that must have non-negative integer value, 314 // or media features that must have non-negative number value, 315 // or media features that must have (0|1) value. 316 m_value = CSSPrimitiveValue::create(token.numericValue(), CSSPrimitiveValue::UnitTypes::CSS_NUMBER); 317 m_isValid = true; 318 } 319 } 320 } else if (tokenList.size() == 3 && isAspectRatioFeature(m_mediaFeature)) { 321 // FIXME: <ratio> is supposed to allow whitespace around the '/' 322 // Applicable to device-aspect-ratio and aspect-ratio. 323 const CSSParserToken& numerator = tokenList[0]; 324 const CSSParserToken& delimiter = tokenList[1]; 325 const CSSParserToken& denominator = tokenList[2]; 326 if (delimiter.type() != DelimiterToken || delimiter.delimiter() != '/') 327 return; 328 if (numerator.type() != NumberToken || numerator.numericValue() <= 0 || numerator.numericValueType() != IntegerValueType) 329 return; 330 if (denominator.type() != NumberToken || denominator.numericValue() <= 0 || denominator.numericValueType() != IntegerValueType) 331 return; 332 333 m_value = CSSAspectRatioValue::create(numerator.numericValue(), denominator.numericValue()); 334 m_isValid = true; 335 211 336 } 212 337 } -
trunk/Source/WebCore/css/MediaQueryExp.h
r201441 r205368 28 28 #pragma once 29 29 30 #include "CSSParserToken.h" 30 31 #include "CSSValue.h" 31 32 #include <memory> … … 40 41 public: 41 42 explicit MediaQueryExpression(const AtomicString& mediaFeature = emptyAtom, CSSParserValueList* values = nullptr); 43 explicit MediaQueryExpression(const String& mediaFeature, const Vector<CSSParserToken, 4>& tokenList); 42 44 43 45 const AtomicString& mediaFeature() const; -
trunk/Source/WebCore/css/parser/CSSParserIdioms.h
r205103 r205368 34 34 35 35 #include <wtf/ASCIICType.h> 36 #include <wtf/text/StringView.h> 36 37 37 38 namespace WebCore { … … 58 59 } 59 60 61 void convertToASCIILowercaseInPlace(StringView&); 62 60 63 } 61 64
Note: See TracChangeset
for help on using the changeset viewer.