Title: [209006] trunk/Source/WebCore
- Revision
- 209006
- Author
- hy...@apple.com
- Date
- 2016-11-28 12:28:15 -0800 (Mon, 28 Nov 2016)
Log Message
[CSS Parser] Filters and Reflections Fixes
https://bugs.webkit.org/show_bug.cgi?id=165103
Reviewed by Zalan Bujtas.
* css/parser/CSSPropertyParser.cpp:
(WebCore::consumeReflect):
Support the "none" keyword for box-reflect.
* css/parser/CSSPropertyParserHelpers.cpp:
(WebCore::CSSPropertyParserHelpers::isValidPrimitiveFilterFunction):
(WebCore::CSSPropertyParserHelpers::consumeFilterFunction):
Don't rely on range checking, since invert isn't grouped with the other
function values. Actually check every keyword.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (209005 => 209006)
--- trunk/Source/WebCore/ChangeLog 2016-11-28 20:27:39 UTC (rev 209005)
+++ trunk/Source/WebCore/ChangeLog 2016-11-28 20:28:15 UTC (rev 209006)
@@ -1,3 +1,20 @@
+2016-11-28 Dave Hyatt <hy...@apple.com>
+
+ [CSS Parser] Filters and Reflections Fixes
+ https://bugs.webkit.org/show_bug.cgi?id=165103
+
+ Reviewed by Zalan Bujtas.
+
+ * css/parser/CSSPropertyParser.cpp:
+ (WebCore::consumeReflect):
+ Support the "none" keyword for box-reflect.
+
+ * css/parser/CSSPropertyParserHelpers.cpp:
+ (WebCore::CSSPropertyParserHelpers::isValidPrimitiveFilterFunction):
+ (WebCore::CSSPropertyParserHelpers::consumeFilterFunction):
+ Don't rely on range checking, since invert isn't grouped with the other
+ function values. Actually check every keyword.
+
2016-11-28 Brent Fulgham <bfulg...@apple.com>
ImageData does not match specification
Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (209005 => 209006)
--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp 2016-11-28 20:27:39 UTC (rev 209005)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp 2016-11-28 20:28:15 UTC (rev 209006)
@@ -2620,6 +2620,9 @@
static RefPtr<CSSValue> consumeReflect(CSSParserTokenRange& range, const CSSParserContext& context)
{
+ if (range.peek().id() == CSSValueNone)
+ return consumeIdent(range);
+
RefPtr<CSSPrimitiveValue> direction = consumeIdent<CSSValueAbove, CSSValueBelow, CSSValueLeft, CSSValueRight>(range);
if (!direction)
return nullptr;
Modified: trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp (209005 => 209006)
--- trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp 2016-11-28 20:27:39 UTC (rev 209005)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp 2016-11-28 20:28:15 UTC (rev 209006)
@@ -1182,14 +1182,33 @@
|| id == CSSValueWebkitGradient || id == CSSValueWebkitCrossFade || id == CSSValueWebkitCanvas
|| id == CSSValueCrossFade || id == CSSValueWebkitNamedImage || id == CSSValueWebkitFilter || id == CSSValueFilter;
}
+
+static bool isValidPrimitiveFilterFunction(CSSValueID filterFunction)
+{
+ switch (filterFunction) {
+ case CSSValueBlur:
+ case CSSValueBrightness:
+ case CSSValueContrast:
+ case CSSValueDropShadow:
+ case CSSValueGrayscale:
+ case CSSValueHueRotate:
+ case CSSValueInvert:
+ case CSSValueOpacity:
+ case CSSValueSaturate:
+ case CSSValueSepia:
+ return true;
+ default:
+ return false;
+ }
+}
RefPtr<CSSFunctionValue> consumeFilterFunction(CSSParserTokenRange& range, const CSSParserContext& context)
{
CSSValueID filterType = range.peek().functionId();
- if (filterType < CSSValueInvert || filterType > CSSValueDropShadow)
+ if (!isValidPrimitiveFilterFunction(filterType))
return nullptr;
CSSParserTokenRange args = consumeFunction(range);
- auto filterValue = CSSFunctionValue::create(filterType);
+ RefPtr<CSSFunctionValue> filterValue = CSSFunctionValue::create(filterType);
RefPtr<CSSValue> parsedValue;
if (filterType == CSSValueDropShadow)
@@ -1196,7 +1215,7 @@
parsedValue = consumeSingleShadow(args, context.mode, false, false);
else {
if (args.atEnd())
- return filterValue.ptr();
+ return filterValue;
if (filterType == CSSValueBrightness) {
parsedValue = consumePercent(args, ValueRangeAll);
if (!parsedValue)
@@ -1219,8 +1238,8 @@
}
if (!parsedValue || !args.atEnd())
return nullptr;
- filterValue->append(*parsedValue);
- return filterValue.ptr();
+ filterValue->append(parsedValue.releaseNonNull());
+ return filterValue;
}
RefPtr<CSSValue> consumeFilter(CSSParserTokenRange& range, const CSSParserContext& context)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes