<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[175716] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/175716">175716</a></dd>
<dt>Author</dt> <dd>dino@apple.com</dd>
<dt>Date</dt> <dd>2014-11-06 14:23:16 -0800 (Thu, 06 Nov 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>[filters2] Support for backdrop-filter
https://bugs.webkit.org/show_bug.cgi?id=138384
<rdar://problem/18874494>
Reviewed by Simon Fraser.
Take 2!! Previous patch was rolled out.
Source/WebCore:
Add prototype support for backdrop-filter
http://dev.w3.org/fxtf/filters-2/#BackdropFilterProperty
This adds support for parsing the new CSS property, adding
the value to RenderStyle, noticing that on the layer tree,
and the platform code in GraphicsLayer to render a backdrop
and apply an effect to the result.
Some things are missing:
- animation of the backdrop-filter is not yet supported
- backdrops will not work in cloned layers yet (e.g. reflections)
Tests: css3/filters/backdrop/backdropfilter-property-computed-style.html
css3/filters/backdrop/backdropfilter-property-parsing-invalid.html
css3/filters/backdrop/backdropfilter-property-parsing.html
css3/filters/backdrop/backdropfilter-property.html
css3/filters/backdrop/effect-hw.html
* WebCore.exp.in: Export the setBackdropFilters method so it can
be used from WebKit.
* css/CSSComputedStyleDeclaration.cpp: New property name.
(WebCore::isLayoutDependent):
(WebCore::ComputedStyleExtractor::propertyValue): Use the existing valueForFilter method.
* css/CSSParser.cpp:
(WebCore::CSSParser::parseValue): Piggyback on the filter parser.
* css/CSSPropertyNames.in: Add -webkit-backdrop-filter.
* css/StyleResolver.cpp:
(WebCore::StyleResolver::adjustRenderStyle): Add test for backdrop.
(WebCore::StyleResolver::applyProperty): Support new property.
* platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::needsBackdrop): New method to test for existence of values.
(WebCore::GraphicsLayer::backdropFilters): Keeps the list of filters.
(WebCore::GraphicsLayer::setBackdropFilters):
(WebCore::GraphicsLayer::clearBackdropFilters):
* platform/graphics/ca/GraphicsLayerCA.cpp: This adds a new m_backdropLayer CALayer
that will sit behind the contents layer and provide the element's backdrop.
(WebCore::GraphicsLayerCA::willBeDestroyed):
(WebCore::GraphicsLayerCA::moveOrCopyAnimations):
(WebCore::GraphicsLayerCA::setBackdropFilters): Set a custom appearance so
remote layer hosts will notice the special layer. Also set the actual
layer properties.
(WebCore::GraphicsLayerCA::addAnimation): Remove whitespace.
(WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Update backdrop if necessary.
(WebCore::GraphicsLayerCA::updateLayerNames): Give the new layer a name.
(WebCore::GraphicsLayerCA::updateSublayerList):
(WebCore::GraphicsLayerCA::updateGeometry): Make the backdrop layer match the contents
layer geometry.
(WebCore::GraphicsLayerCA::updateBackdropFilters): Create the backdrop layer if necessary,
and copy the filter values to any clones.
(WebCore::GraphicsLayerCA::ensureStructuralLayer): We need a structural layer if we
have backdrop filters.
(WebCore::GraphicsLayerCA::structuralLayerPurpose):
(WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
(WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
* platform/graphics/ca/GraphicsLayerCA.h: New StructuralLayerPurpose, new LayerChangeFlag.
* platform/graphics/ca/PlatformCALayer.h: New LayerType.
* platform/graphics/ca/mac/PlatformCALayerMac.mm: Define CABackdropLayer.
(PlatformCALayerMac::PlatformCALayerMac): Create the correct CALayer type.
* rendering/RenderElement.h:
(WebCore::RenderElement::createsGroup):
(WebCore::RenderElement::hasBackdropFilter): This method is always around, but
only can return true when FILTERS_LEVEL_2 is enabled.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::paintsWithFilters): Remove an unnecessary comment.
(WebCore::RenderLayer::calculateClipRects):
* rendering/RenderLayer.h: Add hasBackdropFilter.
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::RenderLayerBacking):
(WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Update the backdrop filters.
(WebCore::RenderLayerBacking::updateBackdropFilters): Set the filters on the GraphicsLayer.
(WebCore::RenderLayerBacking::updateGeometry):
* rendering/RenderLayerBacking.h:
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::requiresOwnBackingStore): Needs backingstore if it has a backdrop filter.
(WebCore::RenderLayerCompositor::reasonsForCompositing):
(WebCore::RenderLayerCompositor::requiresCompositingForFilters): Return early if we have
a backdrop filter, because currently we absolutely require compositing.
* rendering/RenderLayerModelObject.cpp:
(WebCore::RenderLayerModelObject::styleWillChange): Add hasBackdropFilter().
* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::changeRequiresLayout): Check backdrops for change.
* rendering/style/RenderStyle.h: Add the backdropFilter style stuff.
* rendering/style/StyleRareNonInheritedData.cpp:
(WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
(WebCore::StyleRareNonInheritedData::operator==):
(WebCore::StyleRareNonInheritedData::hasBackdropFilters):
* rendering/style/StyleRareNonInheritedData.h:
Source/WebKit2:
* Shared/mac/RemoteLayerBackingStore.mm:
(WebKit::RemoteLayerBackingStore::drawInContext): Handle LayerTypeBackdropLayer in the switch.
* Shared/mac/RemoteLayerTreeTransaction.mm:
(WebKit::RemoteLayerTreeTransaction::description): Describe a backdrop layer.
* UIProcess/ios/RemoteLayerTreeHostIOS.mm:
(+[WKBackdropView layerClass]): Define CABackdropLayer and use it as the class.
(WebKit::RemoteLayerTreeHost::createLayer):
* UIProcess/mac/RemoteLayerTreeHost.mm: Ditto.
(WebKit::RemoteLayerTreeHost::createLayer):
LayoutTests:
Tests for backdrop-filter. These are skipped on non-Apple platforms.
* platform/win/TestExpections: Skip these tests.
* platform/efl/TestExpections:
* platform/gtk/TestExpections:
* platform/mac-mavericks/TestExpectations: Yosemite only.
* css3/filters/backdrop/backdropfilter-property-computed-style-expected.txt: Added.
* css3/filters/backdrop/backdropfilter-property-computed-style.html: Added.
* css3/filters/backdrop/backdropfilter-property-expected.txt: Added.
* css3/filters/backdrop/backdropfilter-property-parsing-expected.txt: Added.
* css3/filters/backdrop/backdropfilter-property-parsing-invalid-expected.txt: Added.
* css3/filters/backdrop/backdropfilter-property-parsing-invalid.html: Added.
* css3/filters/backdrop/backdropfilter-property-parsing.html: Added.
* css3/filters/backdrop/backdropfilter-property.html: Added.
* css3/filters/backdrop/effect-hw-expected.html: Added.
* css3/filters/backdrop/effect-hw.html: Added.
* css3/filters/backdrop/script-tests/backdropfilter-property-computed-style.js: Added.
(testComputedFilterRule):
* css3/filters/backdrop/script-tests/backdropfilter-property-parsing-invalid.js: Added.
(testInvalidFilterRule):
* css3/filters/backdrop/script-tests/backdropfilter-property-parsing.js: Added.
(jsWrapperClass):
(shouldBeType):
(testFilterRule):
* css3/filters/backdrop/script-tests/backdropfilter-property.js: Added.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformeflTestExpectations">trunk/LayoutTests/platform/efl/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformgtkTestExpectations">trunk/LayoutTests/platform/gtk/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacmavericksTestExpectations">trunk/LayoutTests/platform/mac-mavericks/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformwinTestExpectations">trunk/LayoutTests/platform/win/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCorecssCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSParsercpp">trunk/Source/WebCore/css/CSSParser.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSPropertyNamesin">trunk/Source/WebCore/css/CSSPropertyNames.in</a></li>
<li><a href="#trunkSourceWebCorecssStyleResolvercpp">trunk/Source/WebCore/css/StyleResolver.cpp</a></li>
<li><a href="#trunkSourceWebCorepageanimationKeyframeAnimationcpp">trunk/Source/WebCore/page/animation/KeyframeAnimation.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayerh">trunk/Source/WebCore/platform/graphics/GraphicsLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaPlatformCALayerh">trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscamacPlatformCALayerMacmm">trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementh">trunk/Source/WebCore/rendering/RenderElement.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayercpp">trunk/Source/WebCore/rendering/RenderLayer.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerh">trunk/Source/WebCore/rendering/RenderLayer.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingh">trunk/Source/WebCore/rendering/RenderLayerBacking.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorcpp">trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerModelObjectcpp">trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStylecpp">trunk/Source/WebCore/rendering/style/RenderStyle.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStyleh">trunk/Source/WebCore/rendering/style/RenderStyle.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleRareNonInheritedDatacpp">trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleRareNonInheritedDatah">trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerBackingStoremm">trunk/Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosRemoteLayerTreeHostIOSmm">trunk/Source/WebKit2/UIProcess/ios/RemoteLayerTreeHostIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacRemoteLayerTreeHostmm">trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClienth">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li>trunk/LayoutTests/css3/filters/backdrop/</li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterpropertycomputedstyleexpectedtxt">trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterpropertycomputedstylehtml">trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style.html</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyexpectedtxt">trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyparsingexpectedtxt">trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyparsinginvalidexpectedtxt">trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyparsinginvalidhtml">trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid.html</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyparsinghtml">trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing.html</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyhtml">trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property.html</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropeffecthwexpectedhtml">trunk/LayoutTests/css3/filters/backdrop/effect-hw-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropeffecthwhtml">trunk/LayoutTests/css3/filters/backdrop/effect-hw.html</a></li>
<li>trunk/LayoutTests/css3/filters/backdrop/script-tests/</li>
<li><a href="#trunkLayoutTestscss3filtersbackdropscripttestsbackdropfilterpropertycomputedstylejs">trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-computed-style.js</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropscripttestsbackdropfilterpropertyparsinginvalidjs">trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing-invalid.js</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropscripttestsbackdropfilterpropertyparsingjs">trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing.js</a></li>
<li><a href="#trunkLayoutTestscss3filtersbackdropscripttestsbackdropfilterpropertyjs">trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/LayoutTests/ChangeLog        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -1,3 +1,40 @@
</span><ins>+2014-11-06 Dean Jackson <dino@apple.com>
+
+ [filters2] Support for backdrop-filter
+ https://bugs.webkit.org/show_bug.cgi?id=138384
+ <rdar://problem/18874494>
+
+ Reviewed by Simon Fraser.
+
+ Take 2!! Previous patch was rolled out.
+
+ Tests for backdrop-filter. These are skipped on non-Apple platforms.
+
+ * platform/win/TestExpections: Skip these tests.
+ * platform/efl/TestExpections:
+ * platform/gtk/TestExpections:
+ * platform/mac-mavericks/TestExpectations: Yosemite only.
+
+ * css3/filters/backdrop/backdropfilter-property-computed-style-expected.txt: Added.
+ * css3/filters/backdrop/backdropfilter-property-computed-style.html: Added.
+ * css3/filters/backdrop/backdropfilter-property-expected.txt: Added.
+ * css3/filters/backdrop/backdropfilter-property-parsing-expected.txt: Added.
+ * css3/filters/backdrop/backdropfilter-property-parsing-invalid-expected.txt: Added.
+ * css3/filters/backdrop/backdropfilter-property-parsing-invalid.html: Added.
+ * css3/filters/backdrop/backdropfilter-property-parsing.html: Added.
+ * css3/filters/backdrop/backdropfilter-property.html: Added.
+ * css3/filters/backdrop/effect-hw-expected.html: Added.
+ * css3/filters/backdrop/effect-hw.html: Added.
+ * css3/filters/backdrop/script-tests/backdropfilter-property-computed-style.js: Added.
+ (testComputedFilterRule):
+ * css3/filters/backdrop/script-tests/backdropfilter-property-parsing-invalid.js: Added.
+ (testInvalidFilterRule):
+ * css3/filters/backdrop/script-tests/backdropfilter-property-parsing.js: Added.
+ (jsWrapperClass):
+ (shouldBeType):
+ (testFilterRule):
+ * css3/filters/backdrop/script-tests/backdropfilter-property.js: Added.
+
</ins><span class="cx"> 2014-11-06 Benjamin Poulain <bpoulain@apple.com>
</span><span class="cx">
</span><span class="cx"> Give pseudo elements the correct specificity
</span></span></pre></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterpropertycomputedstyleexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style-expected.txt (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style-expected.txt         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style-expected.txt        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,390 @@
</span><ins>+Test the computed style of the -webkit-backdrop-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Basic reference : url('#a')
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#a)'
+
+Bare unquoted reference converting to quoted form : url(#a)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#a)'
+
+Multiple references : url('#a') url('#b')
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#a)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#b)'
+
+Reference as 2nd value : grayscale(1) url('#a')
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#a)'
+
+Integer value : grayscale(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+
+Float value converts to integer : grayscale(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+
+Zero value : grayscale(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0)'
+
+No values : grayscale()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+
+Multiple values : grayscale(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : sepia(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(1)'
+
+Float value converts to integer : sepia(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(1)'
+
+Zero value : sepia(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0)'
+
+No values : sepia()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(1)'
+
+Multiple values : sepia(0.5) sepia(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.25)'
+
+Rule combinations : sepia(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : saturate(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(1)'
+
+Float value converts to integer : saturate(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(1)'
+
+Zero value : saturate(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0)'
+
+No values : saturate()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(1)'
+
+Multiple values : saturate(0.5) saturate(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.25)'
+
+Rule combinations : saturate(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Degrees value as integer : hue-rotate(10deg)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+
+Degrees float value converts to integer : hue-rotate(10.0deg)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+
+Radians value : hue-rotate(10rad)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(572.9577951308232deg)'
+
+Gradians value : hue-rotate(10grad)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(9deg)'
+
+Turns value : hue-rotate(0.5turn)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(180deg)'
+
+Zero value : hue-rotate(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(0deg)'
+
+No values : hue-rotate()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(0deg)'
+
+Rule combinations : hue-rotate(10deg) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : invert(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(1)'
+
+Float value converts to integer : invert(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(1)'
+
+Zero value : invert(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0)'
+
+No values : invert()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(1)'
+
+Multiple values : invert(0.5) invert(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.25)'
+
+Rule combinations : invert(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : opacity(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(1)'
+
+Float value converts to integer : opacity(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(1)'
+
+Zero value : opacity(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0)'
+
+No values : opacity()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(1)'
+
+Multiple values : opacity(0.5) opacity(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.25)'
+
+Rule combinations : opacity(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : brightness(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(1)'
+
+Float value converts to integer : brightness(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(1)'
+
+Zero value : brightness(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0)'
+
+No values : brightness()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0)'
+
+Multiple values : brightness(0.5) brightness(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0.25)'
+
+Rule combinations : brightness(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : contrast(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(1)'
+
+Value greater than 1 : contrast(2)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(2)'
+
+Float value converts to integer : contrast(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(1)'
+
+Zero value : contrast(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0)'
+
+No values : contrast()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(1)'
+
+Multiple values : contrast(0.5) contrast(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0.25)'
+
+Rule combinations : contrast(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+One zero to px : blur(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(0px)'
+
+One length : blur(2em)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(32px)'
+
+One length : blur(5px)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(5px)'
+
+No values : blur()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(0px)'
+
+Color then three values : drop-shadow(red 1px 2px 3px)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(rgb(255, 0, 0) 1px 2px 3px)'
+
+Three values then color : drop-shadow(1px 2px 3px red)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(rgb(255, 0, 0) 1px 2px 3px)'
+
+Color then three values with zero length : drop-shadow(#abc 0 0 0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(rgb(170, 187, 204) 0px 0px 0px)'
+
+Three values with zero length : drop-shadow(0 0 0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(rgba(0, 0, 0, 0) 0px 0px 0px)'
+
+Two values no color : drop-shadow(1px 2px)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(rgba(0, 0, 0, 0) 1px 2px 0px)'
+
+Multiple operations : grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px)
+PASS filterStyle.length is 7
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.25)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.75)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(35deg)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.2)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.9)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(5px)'
+
+Percentage values : grayscale(50%) sepia(25%) saturate(75%) invert(20%) opacity(90%) brightness(60%) contrast(30%)
+PASS filterStyle.length is 7
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.25)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.75)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.2)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.9)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0.6)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0.3)'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterpropertycomputedstylehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style.html (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style.html         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style.html        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<!DOCTYPE>
+<html>
+<head>
+<script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/backdropfilter-property-computed-style.js"></script>
+<script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-computed-style.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-expected.txt (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-expected.txt         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-expected.txt        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+Test the parsing of the -webkit-backdrop-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate(120deg)'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyparsingexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-expected.txt (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-expected.txt         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-expected.txt        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,906 @@
</span><ins>+Test the parsing of the -webkit-backdrop-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Basic reference : url('#a')
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'url(#a)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#a)'
+
+Bare unquoted reference converting to quoted form : url(#a)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'url(#a)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#a)'
+
+Multiple references : url('#a') url('#b')
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'url(#a) url(#b)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#a)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#b)'
+
+Reference as 2nd value : grayscale(1) url('#a')
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(1) url(#a)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(#a)'
+
+Integer value : grayscale(1)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+
+Percentage value : grayscale(50%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(50%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(50%)'
+
+Float value converts to integer : grayscale(1.0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+
+Zero value : grayscale(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(0)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0)'
+
+No values : grayscale()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale()'
+
+Multiple values : grayscale(0.5) grayscale(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(0.5) grayscale(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : sepia(1)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'sepia(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(1)'
+
+Percentage value : sepia(50%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'sepia(50%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(50%)'
+
+Float value converts to integer : sepia(1.0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'sepia(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(1)'
+
+Zero value : sepia(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'sepia(0)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0)'
+
+No values : sepia()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'sepia()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia()'
+
+Multiple values : sepia(0.5) sepia(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'sepia(0.5) sepia(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.25)'
+
+Rule combinations : sepia(0.5) grayscale(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'sepia(0.5) grayscale(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : saturate(1)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(1)'
+
+Percentage value : saturate(50%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate(50%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(50%)'
+
+Percentage value > 1 : saturate(250%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate(250%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(250%)'
+
+Float value converts to integer : saturate(1.0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(1)'
+
+Input value > 1 : saturate(5.5)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate(5.5)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(5.5)'
+
+Zero value : saturate(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate(0)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0)'
+
+No values : saturate()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate()'
+
+Multiple values : saturate(0.5) saturate(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate(0.5) saturate(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.25)'
+
+Rule combinations : saturate(0.5) grayscale(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'saturate(0.5) grayscale(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Degrees value as integer : hue-rotate(10deg)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate(10deg)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+
+Degrees float value converts to integer : hue-rotate(10.0deg)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate(10deg)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+
+Radians value : hue-rotate(10rad)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate(10rad)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10rad)'
+
+Gradians value : hue-rotate(10grad)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate(10grad)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10grad)'
+
+Turns value : hue-rotate(0.5turn)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate(0.5turn)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(0.5turn)'
+
+Zero value : hue-rotate(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate(0deg)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(0deg)'
+
+No values : hue-rotate()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate()'
+
+Rule combinations : hue-rotate(10deg) grayscale(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'hue-rotate(10deg) grayscale(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : invert(1)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'invert(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(1)'
+
+Percentage value : invert(50%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'invert(50%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(50%)'
+
+Float value converts to integer : invert(1.0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'invert(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(1)'
+
+Zero value : invert(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'invert(0)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0)'
+
+No values : invert()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'invert()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert()'
+
+Multiple values : invert(0.5) invert(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'invert(0.5) invert(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.25)'
+
+Rule combinations : invert(0.5) grayscale(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'invert(0.5) grayscale(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : opacity(1)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'opacity(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(1)'
+
+Percentage value : opacity(50%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'opacity(50%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(50%)'
+
+Float value converts to integer : opacity(1.0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'opacity(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(1)'
+
+Zero value : opacity(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'opacity(0)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0)'
+
+No values : opacity()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'opacity()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity()'
+
+Multiple values : opacity(0.5) opacity(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'opacity(0.5) opacity(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.25)'
+
+Rule combinations : opacity(0.5) grayscale(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'opacity(0.5) grayscale(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : brightness(1)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(1)'
+
+Percentage value : brightness(50%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness(50%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(50%)'
+
+Float value converts to integer : brightness(1.0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(1)'
+
+Zero value : brightness(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness(0)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0)'
+
+No values : brightness()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness()'
+
+Multiple values : brightness(0.5) brightness(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness(0.5) brightness(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0.25)'
+
+Rule combinations : brightness(0.5) grayscale(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness(0.5) grayscale(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Parameter less than -100% : brightness(-1.1)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness(-1.1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(-1.1)'
+
+Parameter more than 100% : brightness(101%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'brightness(101%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(101%)'
+
+Rule combinations : grayscale(0.25) brightness(0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(0.25) brightness(0.5)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS
+PASS subRule.cssText is 'brightness(0.5)'
+
+Integer value : contrast(1)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(1)'
+
+Percentage value : contrast(50%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast(50%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(50%)'
+
+Percentage value > 1 : contrast(250%)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast(250%)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(250%)'
+
+Float value converts to integer : contrast(1.0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast(1)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(1)'
+
+Zero value : contrast(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast(0)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0)'
+
+No values : contrast()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast()'
+
+Value greater than one : contrast(2)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast(2)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(2)'
+
+Multiple values : contrast(0.5) contrast(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast(0.5) contrast(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0.25)'
+
+Rule combinations : contrast(0.5) grayscale(0.25)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'contrast(0.5) grayscale(0.25)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Rule combinations : grayscale(0.25) contrast(0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(0.25) contrast(0.5)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_CONTRAST
+PASS subRule.cssText is 'contrast(0.5)'
+
+One zero to px : blur(0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'blur(0px)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(0px)'
+
+One length : blur(10px)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'blur(10px)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(10px)'
+
+No values : blur()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'blur()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur()'
+
+Color then three values : drop-shadow(red 1px 2px 3px)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'drop-shadow(red 1px 2px 3px)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(red 1px 2px 3px)'
+
+Three values then color : drop-shadow(1px 2px 3px red)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'drop-shadow(red 1px 2px 3px)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(red 1px 2px 3px)'
+
+Color then three values with zero length : drop-shadow(#abc 0 0 0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'drop-shadow(rgb(170, 187, 204) 0px 0px 0px)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(rgb(170, 187, 204) 0px 0px 0px)'
+
+Three values with zero length : drop-shadow(0 0 0)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'drop-shadow(0px 0px 0px)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(0px 0px 0px)'
+
+Two values no color : drop-shadow(1px 2px)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'drop-shadow(1px 2px)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(1px 2px)'
+
+Multiple operations : grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px) drop-shadow(green 1px 2px 3px)
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is 'grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px) drop-shadow(green 1px 2px 3px)'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 8
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.25)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.75)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(35deg)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.2)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.9)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(5px)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW
+PASS subRule.cssText is 'drop-shadow(green 1px 2px 3px)'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyparsinginvalidexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid-expected.txt (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid-expected.txt         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid-expected.txt        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,324 @@
</span><ins>+Test the parsing of the -webkit-backdrop-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Too many parameters : url(#a #b)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Length instead of number : grayscale(10px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : grayscale(0.5 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : grayscale(0.5, 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : grayscale(0.5,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative parameter : grayscale(-0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative percent : grayscale(-10%)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Parameter out of bounds : grayscale(1.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : sepia(0.5 0.5 3.0)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : sepia(0.1, 0.1)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : sepia(0.5,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative parameter : sepia(-0.01)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative percent : sepia(-10%)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Parameter out of bounds : sepia(10000)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Length instead of number : saturate(10px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : saturate(0.5 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : saturate(0.5, 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : saturate(0.5,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative parameter : saturate(-0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative percent : saturate(-10%)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Bare number : hue-rotate(10)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Length : hue-rotate(10px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : hue-rotate(10deg 4)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : hue-rotate(10deg, 5deg)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : hue-rotate(10deg,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Length instead of number : invert(10px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : invert(0.5 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : invert(0.5, 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : invert(0.5,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative parameter : invert(-0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Parameter out of bounds : invert(1.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Length instead of number : opacity(10px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : opacity(0.5 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : opacity(0.5, 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : opacity(0.5,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative parameter : opacity(-0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative percent : opacity(-10%)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Parameter out of bounds : opacity(1.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Length instead of number : brightness(10px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : brightness(0.5 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : brightness(0.5, 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : brightness(0.5,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Length instead of number : contrast(10px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : contrast(0.5 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : contrast(0.5, 0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : contrast(0.5,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative parameter : contrast(-0.5)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative percent : contrast(-10%)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Bare number : blur(1)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative number : blur(-1px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Percentage : blur(10%)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : blur(1px 1px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters and commas : blur(1em, 1em)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Commas : blur(10px, 10px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Trailing comma : blur(1em,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+No values : drop-shadow()
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Missing lengths : drop-shadow(red)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Not enough lengths : drop-shadow(red 1px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Missing units : drop-shadow(red 1 2 3)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Inset : drop-shadow(red 1px 2px 3px inset)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Too many parameters : drop-shadow(red 1px 2px 3px 4px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Commas : drop-shadow(red, 1px, 2px, 3px)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+
+Negative radius : drop-shadow(10px 10px -1px red)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-backdrop-filter') is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyparsinginvalidhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid.html (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid.html         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid.html        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<!DOCTYPE>
+<html>
+<head>
+<script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/backdropfilter-property-parsing-invalid.js"></script>
+<script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing-invalid.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyparsinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing.html (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing.html         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing.html        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<!DOCTYPE>
+<html>
+<head>
+<script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/backdropfilter-property-parsing.js"></script>
+<script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property-parsing.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropbackdropfilterpropertyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property.html (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property.html         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property.html        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+<!DOCTYPE>
+<html>
+<head>
+<script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/backdropfilter-property.js"></script>
+<script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/backdropfilter-property.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropeffecthwexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/effect-hw-expected.html (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/effect-hw-expected.html         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/effect-hw-expected.html        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+<style>
+div {
+ display: inline-block;
+ position: relative;
+ margin: 10px;
+ width: 160px;
+ height: 80px;
+}
+
+img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+}
+
+p {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 80px;
+ height: 40px;
+ margin: 0;
+ padding: 0;
+ background: transparent url(../resources/reference.png) top left no-repeat;
+ -webkit-transform: translate3d(0, 0, 0); /* need to force compositing here */
+}
+
+</style>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-filter: invert()"></p>
+</div>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-filter: contrast(20%)"></p>
+</div>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-filter: grayscale()"></p>
+</div>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-filter: sepia()"></p>
+</div>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-filter: sepia() hue-rotate(90deg)"></p>
+</div>
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/effect-hw-expected.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropeffecthwhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/effect-hw.html (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/effect-hw.html         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/effect-hw.html        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+<style>
+div {
+ display: inline-block;
+ position: relative;
+ margin: 10px;
+ width: 160px;
+ height: 80px;
+}
+
+img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+}
+
+p {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 80px;
+ height: 40px;
+ margin: 0;
+ padding: 0;
+}
+
+</style>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-backdrop-filter: invert()"></p>
+</div>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-backdrop-filter: contrast(20%)"></p>
+</div>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-backdrop-filter: grayscale()"></p>
+</div>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-backdrop-filter: sepia()"></p>
+</div>
+<div>
+ <img src="../resources/reference.png">
+ <p style="-webkit-backdrop-filter: sepia() hue-rotate(90deg)"></p>
+</div>
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/effect-hw.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropscripttestsbackdropfilterpropertycomputedstylejs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-computed-style.js (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-computed-style.js         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-computed-style.js        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,383 @@
</span><ins>+description("Test the computed style of the -webkit-backdrop-filter property.");
+
+// These have to be global for the test helpers to see them.
+var stylesheet, filterStyle, subRule;
+var styleElement = document.createElement("style");
+document.head.appendChild(styleElement);
+stylesheet = styleElement.sheet;
+
+function testComputedFilterRule(description, rule, expectedLength, expectedTypes, expectedTexts)
+{
+ debug("");
+ debug(description + " : " + rule);
+
+ stylesheet.insertRule("body { -webkit-backdrop-filter: " + rule + "; }", 0);
+
+ filterStyle = window.getComputedStyle(document.body).getPropertyCSSValue('-webkit-backdrop-filter');
+ shouldBe("filterStyle.length", "" + expectedLength);
+ for (var i = 0; i < expectedLength; i++) {
+ subRule = filterStyle[i];
+ shouldBe("subRule.operationType", expectedTypes[i]);
+ shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
+ }
+ stylesheet.deleteRule(0);
+}
+
+testComputedFilterRule("Basic reference",
+ "url('#a')", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+ ["url(#a)"]);
+
+testComputedFilterRule("Bare unquoted reference converting to quoted form",
+ "url(#a)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+ ["url(#a)"]);
+
+testComputedFilterRule("Multiple references",
+ "url('#a') url('#b')", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE", "WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+ ["url(#a)", "url(#b)"]);
+
+testComputedFilterRule("Reference as 2nd value",
+ "grayscale(1) url('#a')", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+ ["grayscale(1)", "url(#a)"]);
+
+testComputedFilterRule("Integer value",
+ "grayscale(1)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+ "grayscale(1.0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(1)"]);
+
+testComputedFilterRule("Zero value",
+ "grayscale(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(0)"]);
+
+testComputedFilterRule("No values",
+ "grayscale()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(1)"]);
+
+testComputedFilterRule("Multiple values",
+ "grayscale(0.5) grayscale(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+ "sepia(1)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+ "sepia(1.0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(1)"]);
+
+testComputedFilterRule("Zero value",
+ "sepia(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(0)"]);
+
+testComputedFilterRule("No values",
+ "sepia()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(1)"]);
+
+testComputedFilterRule("Multiple values",
+ "sepia(0.5) sepia(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA", "WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(0.5)", "sepia(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+ "sepia(0.5) grayscale(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["sepia(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+ "saturate(1)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+ "saturate(1.0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(1)"]);
+
+testComputedFilterRule("Zero value",
+ "saturate(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(0)"]);
+
+testComputedFilterRule("No values",
+ "saturate()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(1)"]);
+
+testComputedFilterRule("Multiple values",
+ "saturate(0.5) saturate(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE", "WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(0.5)", "saturate(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+ "saturate(0.5) grayscale(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["saturate(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Degrees value as integer",
+ "hue-rotate(10deg)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(10deg)"]);
+
+testComputedFilterRule("Degrees float value converts to integer",
+ "hue-rotate(10.0deg)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(10deg)"]);
+
+testComputedFilterRule("Radians value",
+ "hue-rotate(10rad)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(572.9577951308232deg)"]);
+
+testComputedFilterRule("Gradians value",
+ "hue-rotate(10grad)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(9deg)"]);
+
+testComputedFilterRule("Turns value",
+ "hue-rotate(0.5turn)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(180deg)"]);
+
+testComputedFilterRule("Zero value",
+ "hue-rotate(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(0deg)"]);
+
+testComputedFilterRule("No values",
+ "hue-rotate()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(0deg)"]);
+
+testComputedFilterRule("Rule combinations",
+ "hue-rotate(10deg) grayscale(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["hue-rotate(10deg)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+ "invert(1)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+ "invert(1.0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(1)"]);
+
+testComputedFilterRule("Zero value",
+ "invert(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(0)"]);
+
+testComputedFilterRule("No values",
+ "invert()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(1)"]);
+
+testComputedFilterRule("Multiple values",
+ "invert(0.5) invert(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT", "WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(0.5)", "invert(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+ "invert(0.5) grayscale(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["invert(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+ "opacity(1)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+ "opacity(1.0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(1)"]);
+
+testComputedFilterRule("Zero value",
+ "opacity(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(0)"]);
+
+testComputedFilterRule("No values",
+ "opacity()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(1)"]);
+
+testComputedFilterRule("Multiple values",
+ "opacity(0.5) opacity(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY", "WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(0.5)", "opacity(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+ "opacity(0.5) grayscale(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["opacity(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+ "brightness(1)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+ "brightness(1.0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(1)"]);
+
+testComputedFilterRule("Zero value",
+ "brightness(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(0)"]);
+
+testComputedFilterRule("No values",
+ "brightness()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(0)"]);
+
+testComputedFilterRule("Multiple values",
+ "brightness(0.5) brightness(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS", "WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(0.5)", "brightness(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+ "brightness(0.5) grayscale(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["brightness(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+ "contrast(1)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(1)"]);
+
+testComputedFilterRule("Value greater than 1",
+ "contrast(2)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(2)"]);
+
+testComputedFilterRule("Float value converts to integer",
+ "contrast(1.0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(1)"]);
+
+testComputedFilterRule("Zero value",
+ "contrast(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(0)"]);
+
+testComputedFilterRule("No values",
+ "contrast()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(1)"]);
+
+testComputedFilterRule("Multiple values",
+ "contrast(0.5) contrast(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST", "WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(0.5)", "contrast(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+ "contrast(0.5) grayscale(0.25)", 2,
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["contrast(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("One zero to px",
+ "blur(0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur(0px)"]);
+
+testComputedFilterRule("One length",
+ "blur(2em)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur(32px)"]);
+
+testComputedFilterRule("One length",
+ "blur(5px)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur(5px)"]);
+
+testComputedFilterRule("No values",
+ "blur()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur(0px)"]);
+
+testComputedFilterRule("Color then three values",
+ "drop-shadow(red 1px 2px 3px)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(rgb(255, 0, 0) 1px 2px 3px)"]);
+
+testComputedFilterRule("Three values then color",
+ "drop-shadow(1px 2px 3px red)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(rgb(255, 0, 0) 1px 2px 3px)"]);
+
+testComputedFilterRule("Color then three values with zero length",
+ "drop-shadow(#abc 0 0 0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(rgb(170, 187, 204) 0px 0px 0px)"]);
+
+testComputedFilterRule("Three values with zero length",
+ "drop-shadow(0 0 0)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(rgba(0, 0, 0, 0) 0px 0px 0px)"]);
+
+testComputedFilterRule("Two values no color",
+ "drop-shadow(1px 2px)", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(rgba(0, 0, 0, 0) 1px 2px 0px)"]);
+
+testComputedFilterRule("Multiple operations",
+ "grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px)", 7,
+ [
+ "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE",
+ "WebKitCSSFilterValue.CSS_FILTER_SEPIA",
+ "WebKitCSSFilterValue.CSS_FILTER_SATURATE",
+ "WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE",
+ "WebKitCSSFilterValue.CSS_FILTER_INVERT",
+ "WebKitCSSFilterValue.CSS_FILTER_OPACITY",
+ "WebKitCSSFilterValue.CSS_FILTER_BLUR",
+ ],
+ [
+ "grayscale(0.5)",
+ "sepia(0.25)",
+ "saturate(0.75)",
+ "hue-rotate(35deg)",
+ "invert(0.2)",
+ "opacity(0.9)",
+ "blur(5px)"
+ ]);
+
+testComputedFilterRule("Percentage values",
+ "grayscale(50%) sepia(25%) saturate(75%) invert(20%) opacity(90%) brightness(60%) contrast(30%)", 7,
+ [
+ "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE",
+ "WebKitCSSFilterValue.CSS_FILTER_SEPIA",
+ "WebKitCSSFilterValue.CSS_FILTER_SATURATE",
+ "WebKitCSSFilterValue.CSS_FILTER_INVERT",
+ "WebKitCSSFilterValue.CSS_FILTER_OPACITY",
+ "WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS",
+ "WebKitCSSFilterValue.CSS_FILTER_CONTRAST"
+ ],
+ [
+ "grayscale(0.5)",
+ "sepia(0.25)",
+ "saturate(0.75)",
+ "invert(0.2)",
+ "opacity(0.9)",
+ "brightness(0.6)",
+ "contrast(0.3)"
+ ]);
+
+successfullyParsed = true;
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-computed-style.js
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropscripttestsbackdropfilterpropertyparsinginvalidjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing-invalid.js (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing-invalid.js         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing-invalid.js        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,98 @@
</span><ins>+description("Test the parsing of the -webkit-backdrop-filter property.");
+
+// These have to be global for the test helpers to see them.
+var stylesheet, cssRule, declaration;
+var styleElement = document.createElement("style");
+document.head.appendChild(styleElement);
+stylesheet = styleElement.sheet;
+
+function testInvalidFilterRule(description, rule)
+{
+ debug("");
+ debug(description + " : " + rule);
+
+ stylesheet.insertRule("body { -webkit-backdrop-filter: " + rule + "; }", 0);
+ cssRule = stylesheet.cssRules.item(0);
+
+ shouldBe("cssRule.type", "1");
+
+ declaration = cssRule.style;
+ shouldBe("declaration.length", "0");
+ shouldBe("declaration.getPropertyValue('-webkit-backdrop-filter')", "null");
+}
+
+testInvalidFilterRule("Too many parameters", "url(#a #b)");
+
+testInvalidFilterRule("Length instead of number", "grayscale(10px)");
+testInvalidFilterRule("Too many parameters", "grayscale(0.5 0.5)");
+testInvalidFilterRule("Too many parameters and commas", "grayscale(0.5, 0.5)");
+testInvalidFilterRule("Trailing comma", "grayscale(0.5,)");
+testInvalidFilterRule("Negative parameter", "grayscale(-0.5)");
+testInvalidFilterRule("Negative percent", "grayscale(-10%)");
+testInvalidFilterRule("Parameter out of bounds", "grayscale(1.5)");
+
+testInvalidFilterRule("Too many parameters", "sepia(0.5 0.5 3.0)");
+testInvalidFilterRule("Too many parameters and commas", "sepia(0.1, 0.1)");
+testInvalidFilterRule("Trailing comma", "sepia(0.5,)");
+testInvalidFilterRule("Negative parameter", "sepia(-0.01)");
+testInvalidFilterRule("Negative percent", "sepia(-10%)");
+testInvalidFilterRule("Parameter out of bounds", "sepia(10000)");
+
+testInvalidFilterRule("Length instead of number", "saturate(10px)");
+testInvalidFilterRule("Too many parameters", "saturate(0.5 0.5)");
+testInvalidFilterRule("Too many parameters and commas", "saturate(0.5, 0.5)");
+testInvalidFilterRule("Trailing comma", "saturate(0.5,)");
+testInvalidFilterRule("Negative parameter", "saturate(-0.5)");
+testInvalidFilterRule("Negative percent", "saturate(-10%)");
+
+testInvalidFilterRule("Bare number", "hue-rotate(10)");
+testInvalidFilterRule("Length", "hue-rotate(10px)");
+testInvalidFilterRule("Too many parameters", "hue-rotate(10deg 4)");
+testInvalidFilterRule("Too many parameters and commas", "hue-rotate(10deg, 5deg)");
+testInvalidFilterRule("Trailing comma", "hue-rotate(10deg,)");
+
+testInvalidFilterRule("Length instead of number", "invert(10px)");
+testInvalidFilterRule("Too many parameters", "invert(0.5 0.5)");
+testInvalidFilterRule("Too many parameters and commas", "invert(0.5, 0.5)");
+testInvalidFilterRule("Trailing comma", "invert(0.5,)");
+testInvalidFilterRule("Negative parameter", "invert(-0.5)");
+testInvalidFilterRule("Parameter out of bounds", "invert(1.5)");
+
+testInvalidFilterRule("Length instead of number", "opacity(10px)");
+testInvalidFilterRule("Too many parameters", "opacity(0.5 0.5)");
+testInvalidFilterRule("Too many parameters and commas", "opacity(0.5, 0.5)");
+testInvalidFilterRule("Trailing comma", "opacity(0.5,)");
+testInvalidFilterRule("Negative parameter", "opacity(-0.5)");
+testInvalidFilterRule("Negative percent", "opacity(-10%)");
+testInvalidFilterRule("Parameter out of bounds", "opacity(1.5)");
+
+testInvalidFilterRule("Length instead of number", "brightness(10px)");
+testInvalidFilterRule("Too many parameters", "brightness(0.5 0.5)");
+testInvalidFilterRule("Too many parameters and commas", "brightness(0.5, 0.5)");
+testInvalidFilterRule("Trailing comma", "brightness(0.5,)");
+
+testInvalidFilterRule("Length instead of number", "contrast(10px)");
+testInvalidFilterRule("Too many parameters", "contrast(0.5 0.5)");
+testInvalidFilterRule("Too many parameters and commas", "contrast(0.5, 0.5)");
+testInvalidFilterRule("Trailing comma", "contrast(0.5,)");
+testInvalidFilterRule("Negative parameter", "contrast(-0.5)");
+testInvalidFilterRule("Negative percent", "contrast(-10%)");
+
+testInvalidFilterRule("Bare number", "blur(1)");
+testInvalidFilterRule("Negative number", "blur(-1px)");
+testInvalidFilterRule("Percentage", "blur(10%)");
+testInvalidFilterRule("Too many parameters", "blur(1px 1px)");
+testInvalidFilterRule("Too many parameters and commas", "blur(1em, 1em)");
+testInvalidFilterRule("Commas", "blur(10px, 10px)");
+testInvalidFilterRule("Trailing comma", "blur(1em,)");
+
+testInvalidFilterRule("No values", "drop-shadow()");
+testInvalidFilterRule("Missing lengths", "drop-shadow(red)");
+testInvalidFilterRule("Not enough lengths", "drop-shadow(red 1px)");
+testInvalidFilterRule("Missing units", "drop-shadow(red 1 2 3)");
+testInvalidFilterRule("Inset", "drop-shadow(red 1px 2px 3px inset)");
+testInvalidFilterRule("Too many parameters", "drop-shadow(red 1px 2px 3px 4px)");
+testInvalidFilterRule("Commas", "drop-shadow(red, 1px, 2px, 3px)");
+testInvalidFilterRule("Negative radius", "drop-shadow(10px 10px -1px red)");
+
+successfullyParsed = true;
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing-invalid.js
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropscripttestsbackdropfilterpropertyparsingjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing.js (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing.js         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing.js        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,460 @@
</span><ins>+description("Test the parsing of the -webkit-backdrop-filter property.");
+
+function jsWrapperClass(node)
+{
+ if (!node)
+ return "[null]";
+ var string = Object.prototype.toString.apply(node);
+ return string.substr(8, string.length - 9);
+}
+
+function shouldBeType(expression, className, prototypeName, constructorName)
+{
+ if (!prototypeName)
+ prototypeName = className + "Prototype";
+ if (!constructorName)
+ constructorName = className + "Constructor";
+ shouldBe("jsWrapperClass(" + expression + ")", "'" + className + "'");
+ shouldBe("jsWrapperClass(" + expression + ".__proto__)", "'" + prototypeName + "'");
+ shouldBe("jsWrapperClass(" + expression + ".constructor)", "'" + constructorName + "'");
+}
+
+// These have to be global for the test helpers to see them.
+var stylesheet, cssRule, declaration, filterRule, subRule;
+var styleElement = document.createElement("style");
+document.head.appendChild(styleElement);
+stylesheet = styleElement.sheet;
+
+function testFilterRule(description, rule, expectedLength, expectedValue, expectedTypes, expectedTexts)
+{
+ debug("");
+ debug(description + " : " + rule);
+
+ stylesheet.insertRule("body { -webkit-backdrop-filter: " + rule + "; }", 0);
+ cssRule = stylesheet.cssRules.item(0);
+
+ shouldBe("cssRule.type", "1");
+
+ declaration = cssRule.style;
+ shouldBe("declaration.length", "1");
+ shouldBe("declaration.getPropertyValue('-webkit-backdrop-filter')", "'" + expectedValue + "'");
+
+ filterRule = declaration.getPropertyCSSValue('-webkit-backdrop-filter');
+ shouldBeType("filterRule", "CSSValueList");
+
+ shouldBe("filterRule.length", "" + expectedLength); // shouldBe expects string arguments
+
+ if (filterRule) {
+ for (var i = 0; i < expectedLength; i++) {
+ subRule = filterRule[i];
+ shouldBe("subRule.operationType", expectedTypes[i]);
+ shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
+ }
+ }
+}
+
+testFilterRule("Basic reference",
+ "url('#a')", 1, "url(#a)",
+ ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+ ["url(#a)"]);
+
+testFilterRule("Bare unquoted reference converting to quoted form",
+ "url(#a)", 1, "url(#a)",
+ ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+ ["url(#a)"]);
+
+testFilterRule("Multiple references",
+ "url('#a') url('#b')", 2, "url(#a) url(#b)",
+ ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE", "WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+ ["url(#a)", "url(#b)"]);
+
+testFilterRule("Reference as 2nd value",
+ "grayscale(1) url('#a')", 2, "grayscale(1) url(#a)",
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+ ["grayscale(1)", "url(#a)"]);
+
+testFilterRule("Integer value",
+ "grayscale(1)", 1, "grayscale(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(1)"]);
+
+testFilterRule("Percentage value",
+ "grayscale(50%)", 1, "grayscale(50%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(50%)"]);
+
+testFilterRule("Float value converts to integer",
+ "grayscale(1.0)", 1, "grayscale(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(1)"]);
+
+testFilterRule("Zero value",
+ "grayscale(0)", 1, "grayscale(0)",
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(0)"]);
+
+testFilterRule("No values",
+ "grayscale()", 1, "grayscale()",
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale()"]);
+
+testFilterRule("Multiple values",
+ "grayscale(0.5) grayscale(0.25)", 2, "grayscale(0.5) grayscale(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(0.5)", "grayscale(0.25)"]);
+
+testFilterRule("Integer value",
+ "sepia(1)", 1, "sepia(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(1)"]);
+
+testFilterRule("Percentage value",
+ "sepia(50%)", 1, "sepia(50%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(50%)"]);
+
+testFilterRule("Float value converts to integer",
+ "sepia(1.0)", 1, "sepia(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(1)"]);
+
+testFilterRule("Zero value",
+ "sepia(0)", 1, "sepia(0)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(0)"]);
+
+testFilterRule("No values",
+ "sepia()", 1, "sepia()",
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia()"]);
+
+testFilterRule("Multiple values",
+ "sepia(0.5) sepia(0.25)", 2, "sepia(0.5) sepia(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA", "WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(0.5)", "sepia(0.25)"]);
+
+testFilterRule("Rule combinations",
+ "sepia(0.5) grayscale(0.25)", 2, "sepia(0.5) grayscale(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["sepia(0.5)", "grayscale(0.25)"]);
+
+testFilterRule("Integer value",
+ "saturate(1)", 1, "saturate(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(1)"]);
+
+testFilterRule("Percentage value",
+ "saturate(50%)", 1, "saturate(50%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(50%)"]);
+
+testFilterRule("Percentage value > 1",
+ "saturate(250%)", 1, "saturate(250%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(250%)"]);
+
+testFilterRule("Float value converts to integer",
+ "saturate(1.0)", 1, "saturate(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(1)"]);
+
+testFilterRule("Input value > 1",
+ "saturate(5.5)", 1, "saturate(5.5)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(5.5)"]);
+
+testFilterRule("Zero value",
+ "saturate(0)", 1, "saturate(0)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(0)"]);
+
+testFilterRule("No values",
+ "saturate()", 1, "saturate()",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate()"]);
+
+testFilterRule("Multiple values",
+ "saturate(0.5) saturate(0.25)", 2, "saturate(0.5) saturate(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE", "WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(0.5)", "saturate(0.25)"]);
+
+testFilterRule("Rule combinations",
+ "saturate(0.5) grayscale(0.25)", 2, "saturate(0.5) grayscale(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["saturate(0.5)", "grayscale(0.25)"]);
+
+testFilterRule("Degrees value as integer",
+ "hue-rotate(10deg)", 1, "hue-rotate(10deg)",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(10deg)"]);
+
+testFilterRule("Degrees float value converts to integer",
+ "hue-rotate(10.0deg)", 1, "hue-rotate(10deg)",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(10deg)"]);
+
+testFilterRule("Radians value",
+ "hue-rotate(10rad)", 1, "hue-rotate(10rad)",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(10rad)"]);
+
+testFilterRule("Gradians value",
+ "hue-rotate(10grad)", 1, "hue-rotate(10grad)",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(10grad)"]);
+
+testFilterRule("Turns value",
+ "hue-rotate(0.5turn)", 1, "hue-rotate(0.5turn)",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(0.5turn)"]);
+
+testFilterRule("Zero value",
+ "hue-rotate(0)", 1, "hue-rotate(0deg)",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(0deg)"]);
+
+testFilterRule("No values",
+ "hue-rotate()", 1, "hue-rotate()",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate()"]);
+
+testFilterRule("Rule combinations",
+ "hue-rotate(10deg) grayscale(0.25)", 2, "hue-rotate(10deg) grayscale(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["hue-rotate(10deg)", "grayscale(0.25)"]);
+
+testFilterRule("Integer value",
+ "invert(1)", 1, "invert(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(1)"]);
+
+testFilterRule("Percentage value",
+ "invert(50%)", 1, "invert(50%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(50%)"]);
+
+testFilterRule("Float value converts to integer",
+ "invert(1.0)", 1, "invert(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(1)"]);
+
+testFilterRule("Zero value",
+ "invert(0)", 1, "invert(0)",
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(0)"]);
+
+testFilterRule("No values",
+ "invert()", 1, "invert()",
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert()"]);
+
+testFilterRule("Multiple values",
+ "invert(0.5) invert(0.25)", 2, "invert(0.5) invert(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT", "WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(0.5)", "invert(0.25)"]);
+
+testFilterRule("Rule combinations",
+ "invert(0.5) grayscale(0.25)", 2, "invert(0.5) grayscale(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["invert(0.5)", "grayscale(0.25)"]);
+
+testFilterRule("Integer value",
+ "opacity(1)", 1, "opacity(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(1)"]);
+
+testFilterRule("Percentage value",
+ "opacity(50%)", 1, "opacity(50%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(50%)"]);
+
+testFilterRule("Float value converts to integer",
+ "opacity(1.0)", 1, "opacity(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(1)"]);
+
+testFilterRule("Zero value",
+ "opacity(0)", 1, "opacity(0)",
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(0)"]);
+
+testFilterRule("No values",
+ "opacity()", 1, "opacity()",
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity()"]);
+
+testFilterRule("Multiple values",
+ "opacity(0.5) opacity(0.25)", 2, "opacity(0.5) opacity(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY", "WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(0.5)", "opacity(0.25)"]);
+
+testFilterRule("Rule combinations",
+ "opacity(0.5) grayscale(0.25)", 2, "opacity(0.5) grayscale(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["opacity(0.5)", "grayscale(0.25)"]);
+
+testFilterRule("Integer value",
+ "brightness(1)", 1, "brightness(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(1)"]);
+
+testFilterRule("Percentage value",
+ "brightness(50%)", 1, "brightness(50%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(50%)"]);
+
+testFilterRule("Float value converts to integer",
+ "brightness(1.0)", 1, "brightness(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(1)"]);
+
+testFilterRule("Zero value",
+ "brightness(0)", 1, "brightness(0)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(0)"]);
+
+testFilterRule("No values",
+ "brightness()", 1, "brightness()",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness()"]);
+
+testFilterRule("Multiple values",
+ "brightness(0.5) brightness(0.25)", 2, "brightness(0.5) brightness(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS", "WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(0.5)", "brightness(0.25)"]);
+
+testFilterRule("Rule combinations",
+ "brightness(0.5) grayscale(0.25)", 2, "brightness(0.5) grayscale(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["brightness(0.5)", "grayscale(0.25)"]);
+
+testFilterRule("Parameter less than -100%",
+ "brightness(-1.1)", 1, "brightness(-1.1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(-1.1)"]);
+
+testFilterRule("Parameter more than 100%",
+ "brightness(101%)", 1, "brightness(101%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["brightness(101%)"]);
+
+testFilterRule("Rule combinations",
+ "grayscale(0.25) brightness(0.5)", 2, "grayscale(0.25) brightness(0.5)",
+ [ "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS"],
+ ["grayscale(0.25)", "brightness(0.5)"]);
+
+testFilterRule("Integer value",
+ "contrast(1)", 1, "contrast(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(1)"]);
+
+testFilterRule("Percentage value",
+ "contrast(50%)", 1, "contrast(50%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(50%)"]);
+
+testFilterRule("Percentage value > 1",
+ "contrast(250%)", 1, "contrast(250%)",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(250%)"]);
+
+testFilterRule("Float value converts to integer",
+ "contrast(1.0)", 1, "contrast(1)",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(1)"]);
+
+testFilterRule("Zero value",
+ "contrast(0)", 1, "contrast(0)",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(0)"]);
+
+testFilterRule("No values",
+ "contrast()", 1, "contrast()",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast()"]);
+
+testFilterRule("Value greater than one",
+ "contrast(2)", 1, "contrast(2)",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(2)"]);
+
+testFilterRule("Multiple values",
+ "contrast(0.5) contrast(0.25)", 2, "contrast(0.5) contrast(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST", "WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["contrast(0.5)", "contrast(0.25)"]);
+
+testFilterRule("Rule combinations",
+ "contrast(0.5) grayscale(0.25)", 2, "contrast(0.5) grayscale(0.25)",
+ ["WebKitCSSFilterValue.CSS_FILTER_CONTRAST", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["contrast(0.5)", "grayscale(0.25)"]);
+
+testFilterRule("Rule combinations",
+ "grayscale(0.25) contrast(0.5)", 2, "grayscale(0.25) contrast(0.5)",
+ [ "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_CONTRAST"],
+ ["grayscale(0.25)", "contrast(0.5)"]);
+
+testFilterRule("One zero to px",
+ "blur(0)", 1, "blur(0px)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur(0px)"]);
+
+testFilterRule("One length",
+ "blur(10px)", 1, "blur(10px)",
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur(10px)"]);
+
+testFilterRule("No values",
+ "blur()", 1, "blur()",
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur()"]);
+
+testFilterRule("Color then three values",
+ "drop-shadow(red 1px 2px 3px)", 1, "drop-shadow(red 1px 2px 3px)",
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(red 1px 2px 3px)"]);
+
+testFilterRule("Three values then color",
+ "drop-shadow(1px 2px 3px red)", 1, "drop-shadow(red 1px 2px 3px)",
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(red 1px 2px 3px)"]);
+
+testFilterRule("Color then three values with zero length",
+ "drop-shadow(#abc 0 0 0)", 1, "drop-shadow(rgb(170, 187, 204) 0px 0px 0px)",
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(rgb(170, 187, 204) 0px 0px 0px)"]);
+
+testFilterRule("Three values with zero length",
+ "drop-shadow(0 0 0)", 1, "drop-shadow(0px 0px 0px)",
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(0px 0px 0px)"]);
+
+testFilterRule("Two values no color",
+ "drop-shadow(1px 2px)", 1, "drop-shadow(1px 2px)",
+ ["WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"],
+ ["drop-shadow(1px 2px)"]);
+
+testFilterRule("Multiple operations",
+ "grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px) drop-shadow(green 1px 2px 3px)", 8,
+ "grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px) drop-shadow(green 1px 2px 3px)",
+ [
+ "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE",
+ "WebKitCSSFilterValue.CSS_FILTER_SEPIA",
+ "WebKitCSSFilterValue.CSS_FILTER_SATURATE",
+ "WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE",
+ "WebKitCSSFilterValue.CSS_FILTER_INVERT",
+ "WebKitCSSFilterValue.CSS_FILTER_OPACITY",
+ "WebKitCSSFilterValue.CSS_FILTER_BLUR",
+ "WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW"
+ ],
+ [
+ "grayscale(0.5)",
+ "sepia(0.25)",
+ "saturate(0.75)",
+ "hue-rotate(35deg)",
+ "invert(0.2)",
+ "opacity(0.9)",
+ "blur(5px)",
+ "drop-shadow(green 1px 2px 3px)"
+ ]);
+
+successfullyParsed = true;
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property-parsing.js
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestscss3filtersbackdropscripttestsbackdropfilterpropertyjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property.js (0 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property.js         (rev 0)
+++ trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property.js        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+description("Test the parsing of the -webkit-backdrop-filter property.");
+
+var styleElement = document.createElement("style");
+document.head.appendChild(styleElement);
+var stylesheet = styleElement.sheet;
+
+// add a -webkit-filter property to the start of the stylesheet
+stylesheet.addRule("body", "-webkit-backdrop-filter: hue-rotate(120deg)", 0);
+
+var cssRule = stylesheet.cssRules.item(0);
+
+shouldBe("cssRule.type", "1");
+
+var declaration = cssRule.style;
+shouldBe("declaration.length", "1");
+shouldBe("declaration.getPropertyValue('-webkit-backdrop-filter')", "'hue-rotate(120deg)'");
+
+successfullyParsed = true;
</ins><span class="cx">Property changes on: trunk/LayoutTests/css3/filters/backdrop/script-tests/backdropfilter-property.js
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svnkeywords"></a>
<div class="addfile"><h4>Added: svn:keywords</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsplatformeflTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/efl/TestExpectations (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/efl/TestExpectations        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/LayoutTests/platform/efl/TestExpectations        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -446,6 +446,9 @@
</span><span class="cx"> media/encrypted-media/encrypted-media-not-loaded.html [ WontFix ]
</span><span class="cx"> media/encrypted-media/encrypted-media-syntax.html [ WontFix ]
</span><span class="cx">
</span><ins>+# No support for Filters Level 2 on EFL yet
+Bug(EFL) css3/filters/backdrop [ Skip ]
+
</ins><span class="cx"> #////////////////////////////////////////////////////////////////////////////////////////
</span><span class="cx"> # CRASHES
</span><span class="cx"> #////////////////////////////////////////////////////////////////////////////////////////
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/gtk/TestExpectations (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/TestExpectations        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/LayoutTests/platform/gtk/TestExpectations        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -443,6 +443,9 @@
</span><span class="cx">
</span><span class="cx"> webkit.org/b/133806 svg/masking/mask-transformed-text-missing.svg [ ImageOnlyFailure ]
</span><span class="cx">
</span><ins>+# No support for Filters Level 2 on GTK yet
+Bug(GTK) css3/filters/backdrop [ Skip ]
+
</ins><span class="cx"> #////////////////////////////////////////////////////////////////////////////////////////
</span><span class="cx"> # End of Expected failures
</span><span class="cx"> #////////////////////////////////////////////////////////////////////////////////////////
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacmavericksTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-mavericks/TestExpectations (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-mavericks/TestExpectations        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/LayoutTests/platform/mac-mavericks/TestExpectations        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -1,2 +1,5 @@
</span><span class="cx"> # This test should only be run on Yosemite or later.
</span><span class="cx"> platform/mac/editing/input/undo-grouping-on-text-insertion.html [ Skip ]
</span><ins>+
+# Backdrop filters are not supported on Mavericks
+css3/filters/backdrop [ Skip ]
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformwinTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/win/TestExpectations (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/TestExpectations        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/LayoutTests/platform/win/TestExpectations        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -44,6 +44,7 @@
</span><span class="cx"> css3/filters/animation-from-initial-values-with-color-matrix.html
</span><span class="cx"> css3/filters/filter-is-on-subpixel-position.html
</span><span class="cx"> css3/masking/clip-path-filter.html
</span><ins>+css3/filters/backdrop
</ins><span class="cx">
</span><span class="cx"> # Remove from list after enabling CANVAS_PATH
</span><span class="cx"> fast/canvas/canvas-path-constructors.html
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/ChangeLog        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -1,3 +1,117 @@
</span><ins>+2014-11-06 Dean Jackson <dino@apple.com>
+
+ [filters2] Support for backdrop-filter
+ https://bugs.webkit.org/show_bug.cgi?id=138384
+ <rdar://problem/18874494>
+
+ Reviewed by Simon Fraser.
+
+ Take 2!! Previous patch was rolled out.
+
+ Add prototype support for backdrop-filter
+ http://dev.w3.org/fxtf/filters-2/#BackdropFilterProperty
+
+ This adds support for parsing the new CSS property, adding
+ the value to RenderStyle, noticing that on the layer tree,
+ and the platform code in GraphicsLayer to render a backdrop
+ and apply an effect to the result.
+
+ Some things are missing:
+ - animation of the backdrop-filter is not yet supported
+ - backdrops will not work in cloned layers yet (e.g. reflections)
+
+ Tests: css3/filters/backdrop/backdropfilter-property-computed-style.html
+ css3/filters/backdrop/backdropfilter-property-parsing-invalid.html
+ css3/filters/backdrop/backdropfilter-property-parsing.html
+ css3/filters/backdrop/backdropfilter-property.html
+ css3/filters/backdrop/effect-hw.html
+
+ * WebCore.exp.in: Export the setBackdropFilters method so it can
+ be used from WebKit.
+
+ * css/CSSComputedStyleDeclaration.cpp: New property name.
+ (WebCore::isLayoutDependent):
+ (WebCore::ComputedStyleExtractor::propertyValue): Use the existing valueForFilter method.
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseValue): Piggyback on the filter parser.
+
+ * css/CSSPropertyNames.in: Add -webkit-backdrop-filter.
+
+ * css/StyleResolver.cpp:
+ (WebCore::StyleResolver::adjustRenderStyle): Add test for backdrop.
+ (WebCore::StyleResolver::applyProperty): Support new property.
+
+ * platform/graphics/GraphicsLayer.h:
+ (WebCore::GraphicsLayer::needsBackdrop): New method to test for existence of values.
+ (WebCore::GraphicsLayer::backdropFilters): Keeps the list of filters.
+ (WebCore::GraphicsLayer::setBackdropFilters):
+ (WebCore::GraphicsLayer::clearBackdropFilters):
+
+ * platform/graphics/ca/GraphicsLayerCA.cpp: This adds a new m_backdropLayer CALayer
+ that will sit behind the contents layer and provide the element's backdrop.
+ (WebCore::GraphicsLayerCA::willBeDestroyed):
+ (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
+ (WebCore::GraphicsLayerCA::setBackdropFilters): Set a custom appearance so
+ remote layer hosts will notice the special layer. Also set the actual
+ layer properties.
+ (WebCore::GraphicsLayerCA::addAnimation): Remove whitespace.
+ (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Update backdrop if necessary.
+ (WebCore::GraphicsLayerCA::updateLayerNames): Give the new layer a name.
+ (WebCore::GraphicsLayerCA::updateSublayerList):
+ (WebCore::GraphicsLayerCA::updateGeometry): Make the backdrop layer match the contents
+ layer geometry.
+ (WebCore::GraphicsLayerCA::updateBackdropFilters): Create the backdrop layer if necessary,
+ and copy the filter values to any clones.
+ (WebCore::GraphicsLayerCA::ensureStructuralLayer): We need a structural layer if we
+ have backdrop filters.
+ (WebCore::GraphicsLayerCA::structuralLayerPurpose):
+ (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
+ (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
+ * platform/graphics/ca/GraphicsLayerCA.h: New StructuralLayerPurpose, new LayerChangeFlag.
+
+ * platform/graphics/ca/PlatformCALayer.h: New LayerType.
+
+ * platform/graphics/ca/mac/PlatformCALayerMac.mm: Define CABackdropLayer.
+ (PlatformCALayerMac::PlatformCALayerMac): Create the correct CALayer type.
+
+ * rendering/RenderElement.h:
+ (WebCore::RenderElement::createsGroup):
+ (WebCore::RenderElement::hasBackdropFilter): This method is always around, but
+ only can return true when FILTERS_LEVEL_2 is enabled.
+
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::paintsWithFilters): Remove an unnecessary comment.
+ (WebCore::RenderLayer::calculateClipRects):
+
+ * rendering/RenderLayer.h: Add hasBackdropFilter.
+
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::RenderLayerBacking):
+ (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Update the backdrop filters.
+ (WebCore::RenderLayerBacking::updateBackdropFilters): Set the filters on the GraphicsLayer.
+ (WebCore::RenderLayerBacking::updateGeometry):
+ * rendering/RenderLayerBacking.h:
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::requiresOwnBackingStore): Needs backingstore if it has a backdrop filter.
+ (WebCore::RenderLayerCompositor::reasonsForCompositing):
+ (WebCore::RenderLayerCompositor::requiresCompositingForFilters): Return early if we have
+ a backdrop filter, because currently we absolutely require compositing.
+
+ * rendering/RenderLayerModelObject.cpp:
+ (WebCore::RenderLayerModelObject::styleWillChange): Add hasBackdropFilter().
+
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::changeRequiresLayout): Check backdrops for change.
+
+ * rendering/style/RenderStyle.h: Add the backdropFilter style stuff.
+ * rendering/style/StyleRareNonInheritedData.cpp:
+ (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
+ (WebCore::StyleRareNonInheritedData::operator==):
+ (WebCore::StyleRareNonInheritedData::hasBackdropFilters):
+ * rendering/style/StyleRareNonInheritedData.h:
+
</ins><span class="cx"> 2014-11-06 Benjamin Poulain <bpoulain@apple.com>
</span><span class="cx">
</span><span class="cx"> Give pseudo elements the correct specificity
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -549,6 +549,7 @@
</span><span class="cx"> __ZN7WebCore15GraphicsContextC1EP9CGContext
</span><span class="cx"> __ZN7WebCore15GraphicsContextD1Ev
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA10initializeEv
</span><ins>+__ZN7WebCore15GraphicsLayerCA18setBackdropFiltersERKNS_16FilterOperationsE
</ins><span class="cx"> __ZN7WebCore15GraphicsLayerCA10setFiltersERKNS_16FilterOperationsE
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA10setOpacityEf
</span><span class="cx"> __ZN7WebCore15GraphicsLayerCA11setChildrenERKN3WTF6VectorIPNS_13GraphicsLayerELm0ENS1_15CrashOnOverflowEEE
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -291,6 +291,9 @@
</span><span class="cx"> CSSPropertyJustifyContent,
</span><span class="cx"> CSSPropertyWebkitJustifySelf,
</span><span class="cx"> CSSPropertyWebkitFilter,
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ CSSPropertyWebkitBackdropFilter,
+#endif
</ins><span class="cx"> CSSPropertyWebkitFontKerning,
</span><span class="cx"> CSSPropertyWebkitFontSmoothing,
</span><span class="cx"> CSSPropertyWebkitFontVariantLigatures,
</span><span class="lines">@@ -1599,6 +1602,9 @@
</span><span class="cx"> case CSSPropertyWebkitTransformOrigin:
</span><span class="cx"> case CSSPropertyWebkitTransform:
</span><span class="cx"> case CSSPropertyWebkitFilter:
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ case CSSPropertyWebkitBackdropFilter:
+#endif
</ins><span class="cx"> return true;
</span><span class="cx"> case CSSPropertyMargin: {
</span><span class="cx"> if (!renderer || !renderer->isBox())
</span><span class="lines">@@ -2891,6 +2897,10 @@
</span><span class="cx"> #endif
</span><span class="cx"> case CSSPropertyWebkitFilter:
</span><span class="cx"> return valueForFilter(style.get(), style->filter());
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ case CSSPropertyWebkitBackdropFilter:
+ return valueForFilter(style.get(), style->backdropFilter());
+#endif
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> case CSSPropertyMixBlendMode:
</span><span class="cx"> return cssValuePool().createValue(style->blendMode());
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSParser.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSParser.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/css/CSSParser.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -2455,6 +2455,9 @@
</span><span class="cx"> validPrimitive = validUnit(value, FInteger | FNonNeg, CSSStrictMode) && value->fValue;
</span><span class="cx"> break;
</span><span class="cx"> case CSSPropertyWebkitFilter:
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ case CSSPropertyWebkitBackdropFilter:
+#endif
</ins><span class="cx"> if (id == CSSValueNone)
</span><span class="cx"> validPrimitive = true;
</span><span class="cx"> else {
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPropertyNamesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPropertyNames.in        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -371,6 +371,9 @@
</span><span class="cx"> -webkit-flex-wrap = flex-wrap
</span><span class="cx"> justify-content [NewStyleBuilder]
</span><span class="cx"> -webkit-justify-content = justify-content
</span><ins>+#if defined(ENABLE_FILTERS_LEVEL_2) && ENABLE_FILTERS_LEVEL_2
+-webkit-backdrop-filter
+#endif
</ins><span class="cx"> -webkit-justify-self
</span><span class="cx"> -webkit-font-size-delta
</span><span class="cx"> #if defined(ENABLE_CSS_GRID_LAYOUT) && ENABLE_CSS_GRID_LAYOUT
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleResolvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleResolver.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleResolver.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/css/StyleResolver.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -1259,6 +1259,9 @@
</span><span class="cx"> || style.clipPath()
</span><span class="cx"> || style.boxReflect()
</span><span class="cx"> || style.hasFilter()
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ || style.hasBackdropFilter()
+#endif
</ins><span class="cx"> || style.hasBlendMode()
</span><span class="cx"> || style.hasIsolation()
</span><span class="cx"> || style.position() == StickyPosition
</span><span class="lines">@@ -1352,6 +1355,9 @@
</span><span class="cx"> if (style.preserves3D() && (style.overflowX() != OVISIBLE
</span><span class="cx"> || style.overflowY() != OVISIBLE
</span><span class="cx"> || style.hasFilter()
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ || style.hasBackdropFilter()
+#endif
</ins><span class="cx"> || style.hasBlendMode()))
</span><span class="cx"> style.setTransformStyle3D(TransformStyle3DFlat);
</span><span class="cx">
</span><span class="lines">@@ -2702,6 +2708,16 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ case CSSPropertyWebkitBackdropFilter: {
+ HANDLE_INHERIT_AND_INITIAL(backdropFilter, BackdropFilter);
+ FilterOperations operations;
+ if (createFilterOperations(value, operations))
+ state.style()->setBackdropFilter(operations);
+ return;
+ }
+#endif
+
</ins><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx"> case CSSPropertyWebkitGridAutoColumns: {
</span><span class="cx"> HANDLE_INHERIT_AND_INITIAL(gridAutoColumns, GridAutoColumns);
</span></span></pre></div>
<a id="trunkSourceWebCorepageanimationKeyframeAnimationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/animation/KeyframeAnimation.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/animation/KeyframeAnimation.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/page/animation/KeyframeAnimation.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -362,7 +362,11 @@
</span><span class="cx"> {
</span><span class="cx"> m_filterFunctionListsMatch = false;
</span><span class="cx">
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ if (m_keyframes.size() < 2 || (!m_keyframes.containsProperty(CSSPropertyWebkitFilter) && !m_keyframes.containsProperty(CSSPropertyWebkitBackdropFilter)))
+#else
</ins><span class="cx"> if (m_keyframes.size() < 2 || !m_keyframes.containsProperty(CSSPropertyWebkitFilter))
</span><ins>+#endif
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> // Empty filters match anything, so find the first non-empty entry as the reference
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -325,6 +325,8 @@
</span><span class="cx"> bool acceleratesDrawing() const { return m_acceleratesDrawing; }
</span><span class="cx"> virtual void setAcceleratesDrawing(bool b) { m_acceleratesDrawing = b; }
</span><span class="cx">
</span><ins>+ bool needsBackdrop() const { return !m_backdropFilters.isEmpty(); }
+
</ins><span class="cx"> // The color used to paint the layer background. Pass an invalid color to remove it.
</span><span class="cx"> // Note that this covers the entire layer. Use setContentsToSolidColor() if the color should
</span><span class="cx"> // only cover the contentsRect.
</span><span class="lines">@@ -342,10 +344,12 @@
</span><span class="cx"> virtual void setOpacity(float opacity) { m_opacity = opacity; }
</span><span class="cx">
</span><span class="cx"> const FilterOperations& filters() const { return m_filters; }
</span><del>-
- // Returns true if filter can be rendered by the compositor
</del><ins>+ // Returns true if filter can be rendered by the compositor.
</ins><span class="cx"> virtual bool setFilters(const FilterOperations& filters) { m_filters = filters; return true; }
</span><span class="cx">
</span><ins>+ const FilterOperations& backdropFilters() const { return m_backdropFilters; }
+ virtual bool setBackdropFilters(const FilterOperations& filters) { m_backdropFilters = filters; return true; }
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> BlendMode blendMode() const { return m_blendMode; }
</span><span class="cx"> virtual void setBlendMode(BlendMode blendMode) { m_blendMode = blendMode; }
</span><span class="lines">@@ -518,6 +522,7 @@
</span><span class="cx"> // when compositing is not done in hardware. It is not virtual, so the caller
</span><span class="cx"> // needs to notifiy the change to the platform layer as needed.
</span><span class="cx"> void clearFilters() { m_filters.clear(); }
</span><ins>+ void clearBackdropFilters() { m_backdropFilters.clear(); }
</ins><span class="cx">
</span><span class="cx"> // Given a KeyframeValueList containing filterOperations, return true if the operations are valid.
</span><span class="cx"> static int validateFilterOperations(const KeyframeValueList&);
</span><span class="lines">@@ -564,6 +569,7 @@
</span><span class="cx"> float m_zPosition;
</span><span class="cx">
</span><span class="cx"> FilterOperations m_filters;
</span><ins>+ FilterOperations m_backdropFilters;
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> BlendMode m_blendMode;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -302,7 +302,7 @@
</span><span class="cx"> return PlatformCALayerWin::filtersCanBeComposited(filters);
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><del>-
</del><ins>+
</ins><span class="cx"> PassRefPtr<PlatformCALayer> GraphicsLayerCA::createPlatformCALayer(PlatformCALayer::LayerType layerType, PlatformCALayerClient* owner)
</span><span class="cx"> {
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="lines">@@ -376,7 +376,10 @@
</span><span class="cx">
</span><span class="cx"> if (m_structuralLayer)
</span><span class="cx"> m_structuralLayer->setOwner(nullptr);
</span><del>-
</del><ins>+
+ if (m_backdropLayer)
+ m_backdropLayer->setOwner(nullptr);
+
</ins><span class="cx"> removeCloneLayers();
</span><span class="cx">
</span><span class="cx"> GraphicsLayer::willBeDestroyed();
</span><span class="lines">@@ -567,7 +570,7 @@
</span><span class="cx"> size_t numAnimations = propertyAnimations.size();
</span><span class="cx"> for (size_t i = 0; i < numAnimations; ++i) {
</span><span class="cx"> const LayerPropertyAnimation& currAnimation = propertyAnimations[i];
</span><del>-
</del><ins>+
</ins><span class="cx"> if (currAnimation.m_property == AnimatedPropertyWebkitTransform || currAnimation.m_property == AnimatedPropertyOpacity
</span><span class="cx"> || currAnimation.m_property == AnimatedPropertyBackgroundColor
</span><span class="cx"> || currAnimation.m_property == AnimatedPropertyWebkitFilter
</span><span class="lines">@@ -685,6 +688,26 @@
</span><span class="cx"> return canCompositeFilters;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+bool GraphicsLayerCA::setBackdropFilters(const FilterOperations& filterOperations)
+{
+ bool canCompositeFilters = filtersCanBeComposited(filterOperations);
+
+ if (m_backdropFilters == filterOperations)
+ return canCompositeFilters;
+
+ // Filters cause flattening, so we should never have filters on a layer with preserves3D().
+ ASSERT(!filterOperations.size() || !preserves3D());
+
+ if (canCompositeFilters)
+ GraphicsLayer::setBackdropFilters(filterOperations);
+ else {
+ // FIXME: This would clear the backdrop filters if we had a software implementation.
+ clearBackdropFilters();
+ }
+ noteLayerPropertyChanged(BackdropFiltersChanged);
+ return canCompositeFilters;
+}
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> void GraphicsLayerCA::setBlendMode(BlendMode blendMode)
</span><span class="cx"> {
</span><span class="lines">@@ -799,7 +822,7 @@
</span><span class="cx">
</span><span class="cx"> if (createdAnimations)
</span><span class="cx"> noteLayerPropertyChanged(AnimationChanged);
</span><del>-
</del><ins>+
</ins><span class="cx"> return createdAnimations;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1265,7 +1288,7 @@
</span><span class="cx"> swapFromOrToTiledLayer(needTiledLayer);
</span><span class="cx">
</span><span class="cx"> // Need to handle Preserves3DChanged first, because it affects which layers subsequent properties are applied to
</span><del>- if (m_uncommittedChanges & (Preserves3DChanged | ReplicatedLayerChanged))
</del><ins>+ if (m_uncommittedChanges & (Preserves3DChanged | ReplicatedLayerChanged | BackdropFiltersChanged))
</ins><span class="cx"> updateStructuralLayer();
</span><span class="cx">
</span><span class="cx"> if (m_uncommittedChanges & GeometryChanged)
</span><span class="lines">@@ -1314,6 +1337,9 @@
</span><span class="cx"> if (m_uncommittedChanges & FiltersChanged)
</span><span class="cx"> updateFilters();
</span><span class="cx">
</span><ins>+ if (m_uncommittedChanges & BackdropFiltersChanged)
+ updateBackdropFilters();
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> if (m_uncommittedChanges & BlendModeChanged)
</span><span class="cx"> updateBlendMode();
</span><span class="lines">@@ -1400,6 +1426,9 @@
</span><span class="cx"> case StructuralLayerForReplicaFlattening:
</span><span class="cx"> m_structuralLayer->setName("Replica flattening layer " + name());
</span><span class="cx"> break;
</span><ins>+ case StructuralLayerForBackdrop:
+ m_structuralLayer->setName("Backdrop hosting layer " + name());
+ break;
</ins><span class="cx"> case NoStructuralLayer:
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="lines">@@ -1424,6 +1453,9 @@
</span><span class="cx"> primaryLayerChildren.appendVector(*customSublayers);
</span><span class="cx">
</span><span class="cx"> if (m_structuralLayer) {
</span><ins>+ if (m_backdropLayer)
+ structuralLayerChildren.append(m_backdropLayer);
+
</ins><span class="cx"> if (m_replicaLayer)
</span><span class="cx"> structuralLayerChildren.append(downcast<GraphicsLayerCA>(*m_replicaLayer).primaryLayer());
</span><span class="cx">
</span><span class="lines">@@ -1510,6 +1542,12 @@
</span><span class="cx"> m_layer->setBounds(adjustedBounds);
</span><span class="cx"> m_layer->setAnchorPoint(scaledAnchorPoint);
</span><span class="cx">
</span><ins>+ if (m_backdropLayer) {
+ m_backdropLayer->setPosition(adjustedPosition);
+ m_backdropLayer->setBounds(adjustedBounds);
+ m_backdropLayer->setAnchorPoint(scaledAnchorPoint);
+ }
+
</ins><span class="cx"> if (LayerMap* layerCloneMap = m_layerClones.get()) {
</span><span class="cx"> LayerMap::const_iterator end = layerCloneMap->end();
</span><span class="cx"> for (LayerMap::const_iterator it = layerCloneMap->begin(); it != end; ++it) {
</span><span class="lines">@@ -1640,6 +1678,27 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void GraphicsLayerCA::updateBackdropFilters()
+{
+ if (m_backdropFilters.isEmpty()) {
+ if (m_backdropLayer) {
+ m_backdropLayer->removeFromSuperlayer();
+ m_backdropLayer->setOwner(nullptr);
+ m_backdropLayer = nullptr;
+ }
+ return;
+ }
+
+ if (!m_backdropLayer) {
+ m_backdropLayer = createPlatformCALayer(PlatformCALayer::LayerTypeBackdropLayer, this);
+ m_backdropLayer->setPosition(m_layer->position());
+ m_backdropLayer->setBounds(m_layer->bounds());
+ m_backdropLayer->setAnchorPoint(m_layer->anchorPoint());
+ m_backdropLayer->setMasksToBounds(true);
+ }
+ m_backdropLayer->setFilters(m_backdropFilters);
+}
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> void GraphicsLayerCA::updateBlendMode()
</span><span class="cx"> {
</span><span class="lines">@@ -1670,6 +1729,7 @@
</span><span class="cx"> | ChildrenChanged
</span><span class="cx"> | BackfaceVisibilityChanged
</span><span class="cx"> | FiltersChanged
</span><ins>+ | BackdropFiltersChanged
</ins><span class="cx"> | OpacityChanged;
</span><span class="cx">
</span><span class="cx"> if (purpose == NoStructuralLayer) {
</span><span class="lines">@@ -1685,7 +1745,7 @@
</span><span class="cx"> moveOrCopyAnimations(Move, m_structuralLayer.get(), m_layer.get());
</span><span class="cx">
</span><span class="cx"> // Release the structural layer.
</span><del>- m_structuralLayer = 0;
</del><ins>+ m_structuralLayer = nullptr;
</ins><span class="cx">
</span><span class="cx"> m_uncommittedChanges |= structuralLayerChangeFlags;
</span><span class="cx"> }
</span><span class="lines">@@ -1749,7 +1809,10 @@
</span><span class="cx">
</span><span class="cx"> if (isReplicated())
</span><span class="cx"> return StructuralLayerForReplicaFlattening;
</span><del>-
</del><ins>+
+ if (needsBackdrop())
+ return StructuralLayerForBackdrop;
+
</ins><span class="cx"> return NoStructuralLayer;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2262,7 +2325,7 @@
</span><span class="cx"> bool GraphicsLayerCA::createAnimationFromKeyframes(const KeyframeValueList& valueList, const Animation* animation, const String& animationName, double timeOffset)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(valueList.property() != AnimatedPropertyWebkitTransform && (!supportsAcceleratedFilterAnimations() || valueList.property() != AnimatedPropertyWebkitFilter));
</span><del>-
</del><ins>+
</ins><span class="cx"> bool isKeyframe = valueList.size() > 2;
</span><span class="cx"> bool valuesOK;
</span><span class="cx">
</span><span class="lines">@@ -2999,6 +3062,7 @@
</span><span class="cx"> | ContentsScaleChanged
</span><span class="cx"> | AcceleratesDrawingChanged
</span><span class="cx"> | FiltersChanged
</span><ins>+ | BackdropFiltersChanged
</ins><span class="cx"> | MaskLayerChanged
</span><span class="cx"> | OpacityChanged
</span><span class="cx"> | DebugIndicatorsChanged;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -105,6 +105,8 @@
</span><span class="cx"> WEBCORE_EXPORT virtual bool setFilters(const FilterOperations&) override;
</span><span class="cx"> virtual bool filtersCanBeComposited(const FilterOperations&);
</span><span class="cx">
</span><ins>+ WEBCORE_EXPORT virtual bool setBackdropFilters(const FilterOperations&) override;
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> WEBCORE_EXPORT virtual void setBlendMode(BlendMode) override;
</span><span class="cx"> #endif
</span><span class="lines">@@ -202,6 +204,7 @@
</span><span class="cx"> WEBCORE_EXPORT void layerDidDisplay(PlatformCALayer*);
</span><span class="cx"> void updateOpacityOnLayer();
</span><span class="cx"> void updateFilters();
</span><ins>+ void updateBackdropFilters();
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> void updateBlendMode();
</span><span class="lines">@@ -383,7 +386,8 @@
</span><span class="cx"> enum StructuralLayerPurpose {
</span><span class="cx"> NoStructuralLayer = 0,
</span><span class="cx"> StructuralLayerForPreserves3D,
</span><del>- StructuralLayerForReplicaFlattening
</del><ins>+ StructuralLayerForReplicaFlattening,
+ StructuralLayerForBackdrop
</ins><span class="cx"> };
</span><span class="cx"> void ensureStructuralLayer(StructuralLayerPurpose);
</span><span class="cx"> StructuralLayerPurpose structuralLayerPurpose() const;
</span><span class="lines">@@ -427,12 +431,13 @@
</span><span class="cx"> ContentsVisibilityChanged = 1LLU << 24,
</span><span class="cx"> VisibleRectChanged = 1LLU << 25,
</span><span class="cx"> FiltersChanged = 1LLU << 26,
</span><del>- TilingAreaChanged = 1LLU << 27,
- TilesAdded = 1LLU < 28,
- DebugIndicatorsChanged = 1LLU << 29,
- CustomAppearanceChanged = 1LLU << 30,
- CustomBehaviorChanged = 1LLU << 31,
- BlendModeChanged = 1LLU << 32
</del><ins>+ BackdropFiltersChanged = 1LLU << 27,
+ TilingAreaChanged = 1LLU << 28,
+ TilesAdded = 1LLU < 29,
+ DebugIndicatorsChanged = 1LLU << 30,
+ CustomAppearanceChanged = 1LLU << 31,
+ CustomBehaviorChanged = 1LLU << 32,
+ BlendModeChanged = 1LLU << 33
</ins><span class="cx"> };
</span><span class="cx"> typedef uint64_t LayerChangeFlags;
</span><span class="cx"> enum ScheduleFlushOrNot { ScheduleFlush, DontScheduleFlush };
</span><span class="lines">@@ -446,6 +451,7 @@
</span><span class="cx"> RefPtr<PlatformCALayer> m_structuralLayer; // A layer used for structural reasons, like preserves-3d or replica-flattening. Is the parent of m_layer.
</span><span class="cx"> RefPtr<PlatformCALayer> m_contentsClippingLayer; // A layer used to clip inner content
</span><span class="cx"> RefPtr<PlatformCALayer> m_contentsLayer; // A layer used for inner content, like image and video
</span><ins>+ RefPtr<PlatformCALayer> m_backdropLayer; // The layer used for backdrop rendering, if necessary.
</ins><span class="cx">
</span><span class="cx"> // References to clones of our layers, for replicated layers.
</span><span class="cx"> OwnPtr<LayerMap> m_layerClones;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaPlatformCALayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -77,6 +77,7 @@
</span><span class="cx"> LayerTypeRootLayer,
</span><span class="cx"> LayerTypeAVPlayerLayer,
</span><span class="cx"> LayerTypeWebGLLayer,
</span><ins>+ LayerTypeBackdropLayer,
</ins><span class="cx"> LayerTypeCustom
</span><span class="cx"> };
</span><span class="cx"> enum FilterType { Linear, Nearest, Trilinear };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacPlatformCALayerMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -62,6 +62,10 @@
</span><span class="cx"> #import "ThemeMac.h"
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+@interface CABackdropLayer : CALayer
+@end
+#endif
</ins><span class="cx">
</span><span class="cx"> SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation)
</span><span class="cx"> SOFT_LINK_CLASS(AVFoundation, AVPlayerLayer)
</span><span class="lines">@@ -233,6 +237,14 @@
</span><span class="cx"> case LayerTypeTransformLayer:
</span><span class="cx"> layerClass = [CATransformLayer class];
</span><span class="cx"> break;
</span><ins>+ case LayerTypeBackdropLayer:
+#if ENABLE(FILTERS_LEVEL_2)
+ layerClass = [CABackdropLayer class];
+#else
+ ASSERT_NOT_REACHED();
+ layerClass = [CALayer class];
+#endif
+ break;
</ins><span class="cx"> case LayerTypeWebTiledLayer:
</span><span class="cx"> ASSERT_NOT_REACHED();
</span><span class="cx"> break;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/RenderElement.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx"> bool borderImageIsLoadedAndCanBeRendered() const;
</span><span class="cx">
</span><span class="cx"> // Returns true if this renderer requires a new stacking context.
</span><del>- bool createsGroup() const { return isTransparent() || hasMask() || hasFilter() || hasBlendMode(); }
</del><ins>+ bool createsGroup() const { return isTransparent() || hasMask() || hasFilter() || hasBackdropFilter() || hasBlendMode(); }
</ins><span class="cx">
</span><span class="cx"> bool isTransparent() const { return style().opacity() < 1.0f; }
</span><span class="cx"> float opacity() const { return style().opacity(); }
</span><span class="lines">@@ -137,6 +137,14 @@
</span><span class="cx"> bool hasHiddenBackface() const { return style().backfaceVisibility() == BackfaceVisibilityHidden; }
</span><span class="cx">
</span><span class="cx"> bool hasFilter() const { return style().hasFilter(); }
</span><ins>+ bool hasBackdropFilter() const
+ {
+#if ENABLE(FILTERS_LEVEL_2)
+ return style().hasBackdropFilter();
+#else
+ return false;
+#endif
+ }
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> bool hasBlendMode() const { return style().hasBlendMode(); }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -315,9 +315,6 @@
</span><span class="cx">
</span><span class="cx"> bool RenderLayer::paintsWithFilters() const
</span><span class="cx"> {
</span><del>- // FIXME: Eventually there will be cases where we paint with filters even without accelerated compositing,
- // and this whole function won't be inside the #if below.
-
</del><span class="cx"> if (!renderer().hasFilter())
</span><span class="cx"> return false;
</span><span class="cx">
</span><span class="lines">@@ -6218,6 +6215,7 @@
</span><span class="cx"> && !renderer().hasTransform()
</span><span class="cx"> && !renderer().hasClipPath()
</span><span class="cx"> && !renderer().hasFilter()
</span><ins>+ && !renderer().hasBackdropFilter()
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> && !hasAcceleratedTouchScrolling()
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/RenderLayer.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -791,6 +791,14 @@
</span><span class="cx">
</span><span class="cx"> void filterNeedsRepaint();
</span><span class="cx"> bool hasFilter() const { return renderer().hasFilter(); }
</span><ins>+ bool hasBackdropFilter() const
+ {
+#if ENABLE(FILTERS_LEVEL_2)
+ return renderer().hasBackdropFilter();
+#else
+ return false;
+#endif
+ }
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> bool hasBlendMode() const { return renderer().hasBlendMode(); }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -112,6 +112,9 @@
</span><span class="cx"> , m_usingTiledCacheLayer(false)
</span><span class="cx"> , m_requiresOwnBackingStore(true)
</span><span class="cx"> , m_canCompositeFilters(false)
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ , m_canCompositeBackdropFilters(false)
+#endif
</ins><span class="cx"> , m_backgroundLayerPaintsFixedRootBackground(false)
</span><span class="cx"> {
</span><span class="cx"> Page* page = renderer().frame().page();
</span><span class="lines">@@ -311,6 +314,9 @@
</span><span class="cx"> updateOpacity(renderer().style());
</span><span class="cx"> updateTransform(renderer().style());
</span><span class="cx"> updateFilters(renderer().style());
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ updateBackdropFilters(renderer().style());
+#endif
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> updateBlendMode(renderer().style());
</span><span class="cx"> #endif
</span><span class="lines">@@ -375,6 +381,13 @@
</span><span class="cx"> m_canCompositeFilters = m_graphicsLayer->setFilters(style.filter());
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+void RenderLayerBacking::updateBackdropFilters(const RenderStyle& style)
+{
+ m_canCompositeBackdropFilters = m_graphicsLayer->setBackdropFilters(style.backdropFilter());
+}
+#endif
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> void RenderLayerBacking::updateBlendMode(const RenderStyle& style)
</span><span class="cx"> {
</span><span class="lines">@@ -652,7 +665,9 @@
</span><span class="cx"> updateOpacity(style);
</span><span class="cx">
</span><span class="cx"> updateFilters(style);
</span><del>-
</del><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ updateBackdropFilters(style);
+#endif
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> updateBlendMode(style);
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -232,6 +232,9 @@
</span><span class="cx"> GraphicsLayer* layerForScrollCorner() const { return m_layerForScrollCorner.get(); }
</span><span class="cx">
</span><span class="cx"> bool canCompositeFilters() const { return m_canCompositeFilters; }
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ bool canCompositeBackdropFilters() const { return m_canCompositeBackdropFilters; }
+#endif
</ins><span class="cx">
</span><span class="cx"> // Return an estimate of the backing store area (in pixels) allocated by this object's GraphicsLayers.
</span><span class="cx"> double backingStoreMemoryEstimate() const;
</span><span class="lines">@@ -279,6 +282,9 @@
</span><span class="cx"> void updateOpacity(const RenderStyle&);
</span><span class="cx"> void updateTransform(const RenderStyle&);
</span><span class="cx"> void updateFilters(const RenderStyle&);
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ void updateBackdropFilters(const RenderStyle&);
+#endif
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> void updateBlendMode(const RenderStyle&);
</span><span class="cx"> #endif
</span><span class="lines">@@ -348,6 +354,9 @@
</span><span class="cx"> bool m_usingTiledCacheLayer;
</span><span class="cx"> bool m_requiresOwnBackingStore;
</span><span class="cx"> bool m_canCompositeFilters;
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ bool m_canCompositeBackdropFilters;
+#endif
</ins><span class="cx"> bool m_backgroundLayerPaintsFixedRootBackground;
</span><span class="cx">
</span><span class="cx"> static bool m_creatingPrimaryGraphicsLayer;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -2180,13 +2180,13 @@
</span><span class="cx"> || renderer.hasMask()
</span><span class="cx"> || renderer.hasReflection()
</span><span class="cx"> || renderer.hasFilter()
</span><ins>+ || renderer.hasBackdropFilter()
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> || requiresCompositingForScrolling(layer)
</span><span class="cx"> #endif
</span><span class="cx"> )
</span><span class="cx"> return true;
</span><del>-
-
</del><ins>+
</ins><span class="cx"> if (layer.mustCompositeForIndirectReasons()) {
</span><span class="cx"> RenderLayer::IndirectCompositingReason reason = layer.indirectCompositingReason();
</span><span class="cx"> return reason == RenderLayer::IndirectCompositingReason::Overlap
</span><span class="lines">@@ -2273,7 +2273,7 @@
</span><span class="cx"> if (renderer->hasReflection())
</span><span class="cx"> reasons |= CompositingReasonReflectionWithCompositedDescendants;
</span><span class="cx">
</span><del>- if (renderer->hasFilter())
</del><ins>+ if (renderer->hasFilter() || renderer->hasBackdropFilter())
</ins><span class="cx"> reasons |= CompositingReasonFilterWithCompositedDescendants;
</span><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="lines">@@ -2594,6 +2594,11 @@
</span><span class="cx">
</span><span class="cx"> bool RenderLayerCompositor::requiresCompositingForFilters(RenderLayerModelObject& renderer) const
</span><span class="cx"> {
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ if (renderer.hasBackdropFilter())
+ return true;
+#endif
+
</ins><span class="cx"> if (!(m_compositingTriggers & ChromeClient::FilterTrigger))
</span><span class="cx"> return false;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerModelObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx"> || oldStyle->filter() != newStyle.filter()
</span><span class="cx"> )
</span><span class="cx"> layer()->repaintIncludingDescendants();
</span><del>- } else if (newStyle.hasTransform() || newStyle.opacity() < 1 || newStyle.hasFilter()) {
</del><ins>+ } else if (newStyle.hasTransform() || newStyle.opacity() < 1 || newStyle.hasFilter() || newStyle.hasBackdropFilter()) {
</ins><span class="cx"> // If we don't have a layer yet, but we are going to get one because of transform or opacity,
</span><span class="cx"> // then we need to repaint the old position of the object.
</span><span class="cx"> repaint();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStylecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -638,6 +638,11 @@
</span><span class="cx"> if (rareNonInheritedData->hasFilters() != other.rareNonInheritedData->hasFilters())
</span><span class="cx"> return true;
</span><span class="cx">
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ if (rareNonInheritedData->hasBackdropFilters() != other.rareNonInheritedData->hasBackdropFilters())
+ return true;
+#endif
+
</ins><span class="cx"> const QuotesData* quotesDataA = rareInheritedData->quotes.get();
</span><span class="cx"> const QuotesData* quotesDataB = other.rareInheritedData->quotes.get();
</span><span class="cx"> if (!(quotesDataA == quotesDataB || (quotesDataA && quotesDataB && *quotesDataA == *quotesDataB)))
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStyleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyle.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -1117,6 +1117,14 @@
</span><span class="cx"> const FilterOperations& filter() const { return rareNonInheritedData->m_filter->m_operations; }
</span><span class="cx"> bool hasFilter() const { return !rareNonInheritedData->m_filter->m_operations.operations().isEmpty(); }
</span><span class="cx">
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ FilterOperations& mutableBackdropFilter() { return rareNonInheritedData.access()->m_backdropFilter.access()->m_operations; }
+ const FilterOperations& backdropFilter() const { return rareNonInheritedData->m_backdropFilter->m_operations; }
+ bool hasBackdropFilter() const { return !rareNonInheritedData->m_backdropFilter->m_operations.operations().isEmpty(); }
+#else
+ bool hasBackdropFilter() const { return false; }
+#endif
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> BlendMode blendMode() const { return static_cast<BlendMode>(rareNonInheritedData->m_effectiveBlendMode); }
</span><span class="cx"> void setBlendMode(BlendMode blendMode) { SET_VAR(rareNonInheritedData, m_effectiveBlendMode, blendMode); }
</span><span class="lines">@@ -1547,6 +1555,9 @@
</span><span class="cx"> void setRubyPosition(RubyPosition position) { SET_VAR(rareInheritedData, m_rubyPosition, position); }
</span><span class="cx">
</span><span class="cx"> void setFilter(const FilterOperations& ops) { SET_VAR(rareNonInheritedData.access()->m_filter, m_operations, ops); }
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ void setBackdropFilter(const FilterOperations& ops) { SET_VAR(rareNonInheritedData.access()->m_backdropFilter, m_operations, ops); }
+#endif
</ins><span class="cx">
</span><span class="cx"> void setTabSize(unsigned size) { SET_VAR(rareInheritedData, m_tabSize, size); }
</span><span class="cx">
</span><span class="lines">@@ -1995,6 +2006,9 @@
</span><span class="cx"> static const Vector<StyleDashboardRegion>& noneDashboardRegions();
</span><span class="cx"> #endif
</span><span class="cx"> static const FilterOperations& initialFilter() { DEPRECATED_DEFINE_STATIC_LOCAL(FilterOperations, ops, ()); return ops; }
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ static const FilterOperations& initialBackdropFilter() { DEPRECATED_DEFINE_STATIC_LOCAL(FilterOperations, ops, ()); return ops; }
+#endif
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> static BlendMode initialBlendMode() { return BlendModeNormal; }
</span><span class="cx"> static Isolation initialIsolation() { return IsolationAuto; }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleRareNonInheritedDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -49,6 +49,9 @@
</span><span class="cx"> , m_multiCol(StyleMultiColData::create())
</span><span class="cx"> , m_transform(StyleTransformData::create())
</span><span class="cx"> , m_filter(StyleFilterData::create())
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ , m_backdropFilter(StyleFilterData::create())
+#endif
</ins><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx"> , m_grid(StyleGridData::create())
</span><span class="cx"> , m_gridItem(StyleGridItemData::create())
</span><span class="lines">@@ -119,6 +122,9 @@
</span><span class="cx"> , m_multiCol(o.m_multiCol)
</span><span class="cx"> , m_transform(o.m_transform)
</span><span class="cx"> , m_filter(o.m_filter)
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ , m_backdropFilter(o.m_backdropFilter)
+#endif
</ins><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx"> , m_grid(o.m_grid)
</span><span class="cx"> , m_gridItem(o.m_gridItem)
</span><span class="lines">@@ -214,6 +220,9 @@
</span><span class="cx"> && m_multiCol == o.m_multiCol
</span><span class="cx"> && m_transform == o.m_transform
</span><span class="cx"> && m_filter == o.m_filter
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ && m_backdropFilter == o.m_backdropFilter
+#endif
</ins><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx"> && m_grid == o.m_grid
</span><span class="cx"> && m_gridItem == o.m_gridItem
</span><span class="lines">@@ -346,4 +355,11 @@
</span><span class="cx"> return m_filter.get() && !m_filter->m_operations.isEmpty();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+bool StyleRareNonInheritedData::hasBackdropFilters() const
+{
+ return m_backdropFilter.get() && !m_backdropFilter->m_operations.isEmpty();
+}
+#endif
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleRareNonInheritedDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -94,6 +94,9 @@
</span><span class="cx"> bool animationDataEquivalent(const StyleRareNonInheritedData&) const;
</span><span class="cx"> bool transitionDataEquivalent(const StyleRareNonInheritedData&) const;
</span><span class="cx"> bool hasFilters() const;
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ bool hasBackdropFilters() const;
+#endif
</ins><span class="cx"> bool hasOpacity() const { return opacity < 1; }
</span><span class="cx">
</span><span class="cx"> float opacity;
</span><span class="lines">@@ -119,6 +122,9 @@
</span><span class="cx"> DataRef<StyleMultiColData> m_multiCol; // CSS3 multicol properties
</span><span class="cx"> DataRef<StyleTransformData> m_transform; // Transform properties (rotate, scale, skew, etc.)
</span><span class="cx"> DataRef<StyleFilterData> m_filter; // Filter operations (url, sepia, blur, etc.)
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+ DataRef<StyleFilterData> m_backdropFilter; // Filter operations (url, sepia, blur, etc.)
+#endif
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx"> DataRef<StyleGridData> m_grid;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebKit2/ChangeLog        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2014-11-06 Dean Jackson <dino@apple.com>
+
+ [filters2] Support for backdrop-filter
+ https://bugs.webkit.org/show_bug.cgi?id=138384
+ <rdar://problem/18874494>
+
+ Reviewed by Simon Fraser.
+
+ Take 2!! Previous patch was rolled out.
+
+ * Shared/mac/RemoteLayerBackingStore.mm:
+ (WebKit::RemoteLayerBackingStore::drawInContext): Handle LayerTypeBackdropLayer in the switch.
+ * Shared/mac/RemoteLayerTreeTransaction.mm:
+ (WebKit::RemoteLayerTreeTransaction::description): Describe a backdrop layer.
+ * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
+ (+[WKBackdropView layerClass]): Define CABackdropLayer and use it as the class.
+ (WebKit::RemoteLayerTreeHost::createLayer):
+ * UIProcess/mac/RemoteLayerTreeHost.mm: Ditto.
+ (WebKit::RemoteLayerTreeHost::createLayer):
+
</ins><span class="cx"> 2014-11-06 Tim Horton <timothy_horton@apple.com>
</span><span class="cx">
</span><span class="cx"> Data detectors popover points at the first line of the detected item
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerBackingStoremm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -348,6 +348,7 @@
</span><span class="cx"> case PlatformCALayer::LayerTypeRootLayer:
</span><span class="cx"> case PlatformCALayer::LayerTypeAVPlayerLayer:
</span><span class="cx"> case PlatformCALayer::LayerTypeWebGLLayer:
</span><ins>+ case PlatformCALayer::LayerTypeBackdropLayer:
</ins><span class="cx"> case PlatformCALayer::LayerTypeCustom:
</span><span class="cx"> ASSERT_NOT_REACHED();
</span><span class="cx"> break;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -1180,6 +1180,9 @@
</span><span class="cx"> case PlatformCALayer::LayerTypeRootLayer:
</span><span class="cx"> ts << "root-layer";
</span><span class="cx"> break;
</span><ins>+ case PlatformCALayer::LayerTypeBackdropLayer:
+ ts << "backdrop-layer";
+ break;
</ins><span class="cx"> case PlatformCALayer::LayerTypeAVPlayerLayer:
</span><span class="cx"> ts << "av-player-layer (context-id " << createdLayer.hostingContextID << ")";
</span><span class="cx"> break;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosRemoteLayerTreeHostIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/RemoteLayerTreeHostIOS.mm (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/RemoteLayerTreeHostIOS.mm        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebKit2/UIProcess/ios/RemoteLayerTreeHostIOS.mm        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -38,6 +38,9 @@
</span><span class="cx"> - (void)setContextId:(uint32_t)contextID;
</span><span class="cx"> @end
</span><span class="cx">
</span><ins>+@interface CABackdropLayer : CALayer
+@end
+
</ins><span class="cx"> @interface UIView (WKHitTesting)
</span><span class="cx"> - (UIView *)_findDescendantViewAtPoint:(CGPoint)point withEvent:(UIEvent *)event;
</span><span class="cx"> @end
</span><span class="lines">@@ -104,6 +107,17 @@
</span><span class="cx">
</span><span class="cx"> @end
</span><span class="cx">
</span><ins>+@interface WKBackdropView : WKCompositingView
+@end
+
+@implementation WKBackdropView
++ (Class)layerClass
+{
+ return [CABackdropLayer self];
+}
+
+@end
+
</ins><span class="cx"> @interface WKRemoteView : WKCompositingView
</span><span class="cx"> @end
</span><span class="cx">
</span><span class="lines">@@ -151,6 +165,9 @@
</span><span class="cx"> } else
</span><span class="cx"> view = adoptNS([[WKCompositingView alloc] init]);
</span><span class="cx"> break;
</span><ins>+ case PlatformCALayer::LayerTypeBackdropLayer:
+ view = adoptNS([[WKBackdropView alloc] init]);
+ break;
</ins><span class="cx"> case PlatformCALayer::LayerTypeTransformLayer:
</span><span class="cx"> view = adoptNS([[WKTransformView alloc] init]);
</span><span class="cx"> break;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacRemoteLayerTreeHostmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -41,6 +41,11 @@
</span><span class="cx"> #import <UIKit/UIView.h>
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+@interface CABackdropLayer : CALayer
+@end
+#endif
+
</ins><span class="cx"> using namespace WebCore;
</span><span class="cx">
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -222,6 +227,14 @@
</span><span class="cx"> case PlatformCALayer::LayerTypeTransformLayer:
</span><span class="cx"> layer = adoptNS([[CATransformLayer alloc] init]);
</span><span class="cx"> break;
</span><ins>+ case PlatformCALayer::LayerTypeBackdropLayer:
+#if ENABLE(FILTERS_LEVEL_2)
+ layer = adoptNS([[CABackdropLayer alloc] init]);
+#else
+ ASSERT_NOT_REACHED();
+ layer = adoptNS([[CALayer alloc] init]);
+#endif
+ break;
</ins><span class="cx"> case PlatformCALayer::LayerTypeCustom:
</span><span class="cx"> case PlatformCALayer::LayerTypeAVPlayerLayer:
</span><span class="cx"> case PlatformCALayer::LayerTypeWebGLLayer:
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h (175715 => 175716)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h        2014-11-06 22:07:19 UTC (rev 175715)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h        2014-11-06 22:23:16 UTC (rev 175716)
</span><span class="lines">@@ -229,7 +229,7 @@
</span><span class="cx"> return static_cast<CompositingTriggerFlags>(
</span><span class="cx"> ThreeDTransformTrigger |
</span><span class="cx"> VideoTrigger |
</span><del>- PluginTrigger|
</del><ins>+ PluginTrigger|
</ins><span class="cx"> CanvasTrigger |
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> AnimatedOpacityTrigger | // Allow opacity animations to trigger compositing mode for iPhone: <rdar://problem/7830677>
</span></span></pre>
</div>
</div>
</body>
</html>