<!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
&lt;rdar://problem/18874494&gt;

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  &lt;dino@apple.com&gt;
+
+        [filters2] Support for backdrop-filter
+        https://bugs.webkit.org/show_bug.cgi?id=138384
+        &lt;rdar://problem/18874494&gt;
+
+        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  &lt;bpoulain@apple.com&gt;
</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 &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+
+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>+&lt;!DOCTYPE&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+&lt;script src=&quot;script-tests/backdropfilter-property-computed-style.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</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 &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+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 &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+
+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 &gt; 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 &gt; 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 &gt; 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 &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+
+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>+&lt;!DOCTYPE&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+&lt;script src=&quot;script-tests/backdropfilter-property-parsing-invalid.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</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>+&lt;!DOCTYPE&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+&lt;script src=&quot;script-tests/backdropfilter-property-parsing.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</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>+&lt;!DOCTYPE&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+&lt;script src=&quot;script-tests/backdropfilter-property.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</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>+&lt;style&gt;
+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 */
+}
+
+&lt;/style&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-filter: invert()&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-filter: contrast(20%)&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-filter: grayscale()&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-filter: sepia()&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-filter: sepia() hue-rotate(90deg)&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
</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>+&lt;style&gt;
+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;
+}
+
+&lt;/style&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-backdrop-filter: invert()&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-backdrop-filter: contrast(20%)&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-backdrop-filter: grayscale()&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-backdrop-filter: sepia()&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;div&gt;
+    &lt;img src=&quot;../resources/reference.png&quot;&gt;
+    &lt;p style=&quot;-webkit-backdrop-filter: sepia() hue-rotate(90deg)&quot;&gt;&lt;/p&gt;
+&lt;/div&gt;
</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(&quot;Test the computed style of the -webkit-backdrop-filter property.&quot;);
+
+// These have to be global for the test helpers to see them.
+var stylesheet, filterStyle, subRule;
+var styleElement = document.createElement(&quot;style&quot;);
+document.head.appendChild(styleElement);
+stylesheet = styleElement.sheet;
+
+function testComputedFilterRule(description, rule, expectedLength, expectedTypes, expectedTexts)
+{
+    debug(&quot;&quot;);
+    debug(description + &quot; : &quot; + rule);
+
+    stylesheet.insertRule(&quot;body { -webkit-backdrop-filter: &quot; + rule + &quot;; }&quot;, 0);
+
+    filterStyle = window.getComputedStyle(document.body).getPropertyCSSValue('-webkit-backdrop-filter');
+    shouldBe(&quot;filterStyle.length&quot;, &quot;&quot; + expectedLength);
+    for (var i = 0; i &lt; expectedLength; i++) {
+        subRule = filterStyle[i];
+        shouldBe(&quot;subRule.operationType&quot;, expectedTypes[i]);
+        shouldBe(&quot;subRule.cssText&quot;, &quot;'&quot; + expectedTexts[i] + &quot;'&quot;);
+    }
+    stylesheet.deleteRule(0);
+}
+
+testComputedFilterRule(&quot;Basic reference&quot;,
+                       &quot;url('#a')&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;],
+                       [&quot;url(#a)&quot;]);
+
+testComputedFilterRule(&quot;Bare unquoted reference converting to quoted form&quot;,
+                       &quot;url(#a)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;],
+                       [&quot;url(#a)&quot;]);
+
+testComputedFilterRule(&quot;Multiple references&quot;,
+                       &quot;url('#a') url('#b')&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;],
+                       [&quot;url(#a)&quot;, &quot;url(#b)&quot;]);
+
+testComputedFilterRule(&quot;Reference as 2nd value&quot;,
+                       &quot;grayscale(1) url('#a')&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;],
+                       [&quot;grayscale(1)&quot;, &quot;url(#a)&quot;]);
+
+testComputedFilterRule(&quot;Integer value&quot;,
+                       &quot;grayscale(1)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;grayscale(1)&quot;]);
+
+testComputedFilterRule(&quot;Float value converts to integer&quot;,
+                       &quot;grayscale(1.0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;grayscale(1)&quot;]);
+
+testComputedFilterRule(&quot;Zero value&quot;,
+                       &quot;grayscale(0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;grayscale(0)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                       &quot;grayscale()&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;grayscale(1)&quot;]);
+
+testComputedFilterRule(&quot;Multiple values&quot;,
+                       &quot;grayscale(0.5) grayscale(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;grayscale(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Integer value&quot;,
+                       &quot;sepia(1)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+                       [&quot;sepia(1)&quot;]);
+
+testComputedFilterRule(&quot;Float value converts to integer&quot;,
+                       &quot;sepia(1.0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+                       [&quot;sepia(1)&quot;]);
+
+testComputedFilterRule(&quot;Zero value&quot;,
+                       &quot;sepia(0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+                       [&quot;sepia(0)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                       &quot;sepia()&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+                       [&quot;sepia(1)&quot;]);
+
+testComputedFilterRule(&quot;Multiple values&quot;,
+                       &quot;sepia(0.5) sepia(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+                       [&quot;sepia(0.5)&quot;, &quot;sepia(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Rule combinations&quot;,
+                       &quot;sepia(0.5) grayscale(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;sepia(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Integer value&quot;,
+                       &quot;saturate(1)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+                       [&quot;saturate(1)&quot;]);
+
+testComputedFilterRule(&quot;Float value converts to integer&quot;,
+                       &quot;saturate(1.0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+                       [&quot;saturate(1)&quot;]);
+
+testComputedFilterRule(&quot;Zero value&quot;,
+                       &quot;saturate(0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+                       [&quot;saturate(0)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                       &quot;saturate()&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+                       [&quot;saturate(1)&quot;]);
+
+testComputedFilterRule(&quot;Multiple values&quot;,
+                       &quot;saturate(0.5) saturate(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+                       [&quot;saturate(0.5)&quot;, &quot;saturate(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Rule combinations&quot;,
+                       &quot;saturate(0.5) grayscale(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;saturate(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Degrees value as integer&quot;,
+                       &quot;hue-rotate(10deg)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+                       [&quot;hue-rotate(10deg)&quot;]);
+
+testComputedFilterRule(&quot;Degrees float value converts to integer&quot;,
+                       &quot;hue-rotate(10.0deg)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+                       [&quot;hue-rotate(10deg)&quot;]);
+
+testComputedFilterRule(&quot;Radians value&quot;,
+                       &quot;hue-rotate(10rad)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+                       [&quot;hue-rotate(572.9577951308232deg)&quot;]);
+
+testComputedFilterRule(&quot;Gradians value&quot;,
+                       &quot;hue-rotate(10grad)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+                       [&quot;hue-rotate(9deg)&quot;]);
+
+testComputedFilterRule(&quot;Turns value&quot;,
+                       &quot;hue-rotate(0.5turn)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+                       [&quot;hue-rotate(180deg)&quot;]);
+
+testComputedFilterRule(&quot;Zero value&quot;,
+                       &quot;hue-rotate(0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+                       [&quot;hue-rotate(0deg)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                       &quot;hue-rotate()&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+                       [&quot;hue-rotate(0deg)&quot;]);
+
+testComputedFilterRule(&quot;Rule combinations&quot;,
+                       &quot;hue-rotate(10deg) grayscale(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;hue-rotate(10deg)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Integer value&quot;,
+                       &quot;invert(1)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+                       [&quot;invert(1)&quot;]);
+
+testComputedFilterRule(&quot;Float value converts to integer&quot;,
+                       &quot;invert(1.0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+                       [&quot;invert(1)&quot;]);
+
+testComputedFilterRule(&quot;Zero value&quot;,
+                       &quot;invert(0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+                       [&quot;invert(0)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                       &quot;invert()&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+                       [&quot;invert(1)&quot;]);
+
+testComputedFilterRule(&quot;Multiple values&quot;,
+                       &quot;invert(0.5) invert(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+                       [&quot;invert(0.5)&quot;, &quot;invert(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Rule combinations&quot;,
+                       &quot;invert(0.5) grayscale(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;invert(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Integer value&quot;,
+                       &quot;opacity(1)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+                       [&quot;opacity(1)&quot;]);
+
+testComputedFilterRule(&quot;Float value converts to integer&quot;,
+                       &quot;opacity(1.0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+                       [&quot;opacity(1)&quot;]);
+
+testComputedFilterRule(&quot;Zero value&quot;,
+                       &quot;opacity(0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+                       [&quot;opacity(0)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                       &quot;opacity()&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+                       [&quot;opacity(1)&quot;]);
+
+testComputedFilterRule(&quot;Multiple values&quot;,
+                       &quot;opacity(0.5) opacity(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+                       [&quot;opacity(0.5)&quot;, &quot;opacity(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Rule combinations&quot;,
+                       &quot;opacity(0.5) grayscale(0.25)&quot;, 2,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                       [&quot;opacity(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Integer value&quot;,
+                      &quot;brightness(1)&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+                      [&quot;brightness(1)&quot;]);
+
+testComputedFilterRule(&quot;Float value converts to integer&quot;,
+                      &quot;brightness(1.0)&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+                      [&quot;brightness(1)&quot;]);
+
+testComputedFilterRule(&quot;Zero value&quot;,
+                      &quot;brightness(0)&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+                      [&quot;brightness(0)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                      &quot;brightness()&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+                      [&quot;brightness(0)&quot;]);
+
+testComputedFilterRule(&quot;Multiple values&quot;,
+                      &quot;brightness(0.5) brightness(0.25)&quot;, 2,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+                      [&quot;brightness(0.5)&quot;, &quot;brightness(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Rule combinations&quot;,
+                      &quot;brightness(0.5) grayscale(0.25)&quot;, 2,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                      [&quot;brightness(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Integer value&quot;,
+                      &quot;contrast(1)&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+                      [&quot;contrast(1)&quot;]);
+
+testComputedFilterRule(&quot;Value greater than 1&quot;,
+                      &quot;contrast(2)&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+                      [&quot;contrast(2)&quot;]);
+
+testComputedFilterRule(&quot;Float value converts to integer&quot;,
+                      &quot;contrast(1.0)&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+                      [&quot;contrast(1)&quot;]);
+
+testComputedFilterRule(&quot;Zero value&quot;,
+                      &quot;contrast(0)&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+                      [&quot;contrast(0)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                      &quot;contrast()&quot;, 1,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+                      [&quot;contrast(1)&quot;]);
+
+testComputedFilterRule(&quot;Multiple values&quot;,
+                      &quot;contrast(0.5) contrast(0.25)&quot;, 2,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+                      [&quot;contrast(0.5)&quot;, &quot;contrast(0.25)&quot;]);
+
+testComputedFilterRule(&quot;Rule combinations&quot;,
+                      &quot;contrast(0.5) grayscale(0.25)&quot;, 2,
+                      [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+                      [&quot;contrast(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testComputedFilterRule(&quot;One zero to px&quot;,
+                       &quot;blur(0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;],
+                       [&quot;blur(0px)&quot;]);
+
+testComputedFilterRule(&quot;One length&quot;,
+                       &quot;blur(2em)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;],
+                       [&quot;blur(32px)&quot;]);
+
+testComputedFilterRule(&quot;One length&quot;,
+                       &quot;blur(5px)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;],
+                       [&quot;blur(5px)&quot;]);
+
+testComputedFilterRule(&quot;No values&quot;,
+                       &quot;blur()&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;],
+                       [&quot;blur(0px)&quot;]);
+
+testComputedFilterRule(&quot;Color then three values&quot;,
+                       &quot;drop-shadow(red 1px 2px 3px)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+                       [&quot;drop-shadow(rgb(255, 0, 0) 1px 2px 3px)&quot;]);
+
+testComputedFilterRule(&quot;Three values then color&quot;,
+                       &quot;drop-shadow(1px 2px 3px red)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+                       [&quot;drop-shadow(rgb(255, 0, 0) 1px 2px 3px)&quot;]);
+
+testComputedFilterRule(&quot;Color then three values with zero length&quot;,
+                       &quot;drop-shadow(#abc 0 0 0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+                       [&quot;drop-shadow(rgb(170, 187, 204) 0px 0px 0px)&quot;]);
+
+testComputedFilterRule(&quot;Three values with zero length&quot;,
+                       &quot;drop-shadow(0 0 0)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+                       [&quot;drop-shadow(rgba(0, 0, 0, 0) 0px 0px 0px)&quot;]);
+
+testComputedFilterRule(&quot;Two values no color&quot;,
+                       &quot;drop-shadow(1px 2px)&quot;, 1,
+                       [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+                       [&quot;drop-shadow(rgba(0, 0, 0, 0) 1px 2px 0px)&quot;]);
+
+testComputedFilterRule(&quot;Multiple operations&quot;,
+                       &quot;grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px)&quot;, 7,
+                       [
+                           &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;,
+                           &quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;,
+                           &quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;,
+                           &quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;,
+                           &quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;,
+                           &quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;,
+                           &quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;,
+               ],
+                       [
+                           &quot;grayscale(0.5)&quot;,
+                           &quot;sepia(0.25)&quot;,
+                           &quot;saturate(0.75)&quot;,
+                           &quot;hue-rotate(35deg)&quot;,
+                           &quot;invert(0.2)&quot;,
+                           &quot;opacity(0.9)&quot;,
+                           &quot;blur(5px)&quot;
+               ]);
+
+testComputedFilterRule(&quot;Percentage values&quot;,
+                      &quot;grayscale(50%) sepia(25%) saturate(75%) invert(20%) opacity(90%) brightness(60%) contrast(30%)&quot;, 7,
+                      [
+                          &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;,
+                          &quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;,
+                          &quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;,
+                          &quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;,
+                          &quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;,
+                          &quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;,
+                          &quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;
+              ],
+                      [
+                          &quot;grayscale(0.5)&quot;,
+                          &quot;sepia(0.25)&quot;,
+                          &quot;saturate(0.75)&quot;,
+                          &quot;invert(0.2)&quot;,
+                          &quot;opacity(0.9)&quot;,
+                          &quot;brightness(0.6)&quot;,
+                          &quot;contrast(0.3)&quot;
+              ]);
+
+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(&quot;Test the parsing of the -webkit-backdrop-filter property.&quot;);
+
+// These have to be global for the test helpers to see them.
+var stylesheet, cssRule, declaration;
+var styleElement = document.createElement(&quot;style&quot;);
+document.head.appendChild(styleElement);
+stylesheet = styleElement.sheet;
+
+function testInvalidFilterRule(description, rule)
+{
+    debug(&quot;&quot;);
+    debug(description + &quot; : &quot; + rule);
+
+    stylesheet.insertRule(&quot;body { -webkit-backdrop-filter: &quot; + rule + &quot;; }&quot;, 0);
+    cssRule = stylesheet.cssRules.item(0);
+  
+    shouldBe(&quot;cssRule.type&quot;, &quot;1&quot;);
+
+    declaration = cssRule.style;
+    shouldBe(&quot;declaration.length&quot;, &quot;0&quot;);
+    shouldBe(&quot;declaration.getPropertyValue('-webkit-backdrop-filter')&quot;, &quot;null&quot;);
+}
+
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;url(#a #b)&quot;);
+
+testInvalidFilterRule(&quot;Length instead of number&quot;, &quot;grayscale(10px)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;grayscale(0.5 0.5)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;grayscale(0.5, 0.5)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;grayscale(0.5,)&quot;);
+testInvalidFilterRule(&quot;Negative parameter&quot;, &quot;grayscale(-0.5)&quot;);
+testInvalidFilterRule(&quot;Negative percent&quot;, &quot;grayscale(-10%)&quot;);
+testInvalidFilterRule(&quot;Parameter out of bounds&quot;, &quot;grayscale(1.5)&quot;);
+
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;sepia(0.5 0.5 3.0)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;sepia(0.1, 0.1)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;sepia(0.5,)&quot;);
+testInvalidFilterRule(&quot;Negative parameter&quot;, &quot;sepia(-0.01)&quot;);
+testInvalidFilterRule(&quot;Negative percent&quot;, &quot;sepia(-10%)&quot;);
+testInvalidFilterRule(&quot;Parameter out of bounds&quot;, &quot;sepia(10000)&quot;);
+
+testInvalidFilterRule(&quot;Length instead of number&quot;, &quot;saturate(10px)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;saturate(0.5 0.5)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;saturate(0.5, 0.5)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;saturate(0.5,)&quot;);
+testInvalidFilterRule(&quot;Negative parameter&quot;, &quot;saturate(-0.5)&quot;);
+testInvalidFilterRule(&quot;Negative percent&quot;, &quot;saturate(-10%)&quot;);
+
+testInvalidFilterRule(&quot;Bare number&quot;, &quot;hue-rotate(10)&quot;);
+testInvalidFilterRule(&quot;Length&quot;, &quot;hue-rotate(10px)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;hue-rotate(10deg 4)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;hue-rotate(10deg, 5deg)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;hue-rotate(10deg,)&quot;);
+
+testInvalidFilterRule(&quot;Length instead of number&quot;, &quot;invert(10px)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;invert(0.5 0.5)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;invert(0.5, 0.5)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;invert(0.5,)&quot;);
+testInvalidFilterRule(&quot;Negative parameter&quot;, &quot;invert(-0.5)&quot;);
+testInvalidFilterRule(&quot;Parameter out of bounds&quot;, &quot;invert(1.5)&quot;);
+
+testInvalidFilterRule(&quot;Length instead of number&quot;, &quot;opacity(10px)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;opacity(0.5 0.5)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;opacity(0.5, 0.5)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;opacity(0.5,)&quot;);
+testInvalidFilterRule(&quot;Negative parameter&quot;, &quot;opacity(-0.5)&quot;);
+testInvalidFilterRule(&quot;Negative percent&quot;, &quot;opacity(-10%)&quot;);
+testInvalidFilterRule(&quot;Parameter out of bounds&quot;, &quot;opacity(1.5)&quot;);
+
+testInvalidFilterRule(&quot;Length instead of number&quot;, &quot;brightness(10px)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;brightness(0.5 0.5)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;brightness(0.5, 0.5)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;brightness(0.5,)&quot;);
+
+testInvalidFilterRule(&quot;Length instead of number&quot;, &quot;contrast(10px)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;contrast(0.5 0.5)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;contrast(0.5, 0.5)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;contrast(0.5,)&quot;);
+testInvalidFilterRule(&quot;Negative parameter&quot;, &quot;contrast(-0.5)&quot;);
+testInvalidFilterRule(&quot;Negative percent&quot;, &quot;contrast(-10%)&quot;);
+
+testInvalidFilterRule(&quot;Bare number&quot;, &quot;blur(1)&quot;);
+testInvalidFilterRule(&quot;Negative number&quot;, &quot;blur(-1px)&quot;);
+testInvalidFilterRule(&quot;Percentage&quot;, &quot;blur(10%)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;blur(1px 1px)&quot;);
+testInvalidFilterRule(&quot;Too many parameters and commas&quot;, &quot;blur(1em, 1em)&quot;);
+testInvalidFilterRule(&quot;Commas&quot;, &quot;blur(10px, 10px)&quot;);
+testInvalidFilterRule(&quot;Trailing comma&quot;, &quot;blur(1em,)&quot;);
+
+testInvalidFilterRule(&quot;No values&quot;, &quot;drop-shadow()&quot;);
+testInvalidFilterRule(&quot;Missing lengths&quot;, &quot;drop-shadow(red)&quot;);
+testInvalidFilterRule(&quot;Not enough lengths&quot;, &quot;drop-shadow(red 1px)&quot;);
+testInvalidFilterRule(&quot;Missing units&quot;, &quot;drop-shadow(red 1 2 3)&quot;);
+testInvalidFilterRule(&quot;Inset&quot;, &quot;drop-shadow(red 1px 2px 3px inset)&quot;);
+testInvalidFilterRule(&quot;Too many parameters&quot;, &quot;drop-shadow(red 1px 2px 3px 4px)&quot;);
+testInvalidFilterRule(&quot;Commas&quot;, &quot;drop-shadow(red, 1px, 2px, 3px)&quot;);
+testInvalidFilterRule(&quot;Negative radius&quot;, &quot;drop-shadow(10px 10px -1px red)&quot;);
+
+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(&quot;Test the parsing of the -webkit-backdrop-filter property.&quot;);
+
+function jsWrapperClass(node)
+{
+    if (!node)
+        return &quot;[null]&quot;;
+    var string = Object.prototype.toString.apply(node);
+    return string.substr(8, string.length - 9);
+}
+
+function shouldBeType(expression, className, prototypeName, constructorName)
+{
+    if (!prototypeName)
+        prototypeName = className + &quot;Prototype&quot;;
+    if (!constructorName)
+        constructorName = className + &quot;Constructor&quot;;
+    shouldBe(&quot;jsWrapperClass(&quot; + expression + &quot;)&quot;, &quot;'&quot; + className + &quot;'&quot;);
+    shouldBe(&quot;jsWrapperClass(&quot; + expression + &quot;.__proto__)&quot;, &quot;'&quot; + prototypeName + &quot;'&quot;);
+    shouldBe(&quot;jsWrapperClass(&quot; + expression + &quot;.constructor)&quot;, &quot;'&quot; + constructorName + &quot;'&quot;);
+}
+
+// These have to be global for the test helpers to see them.
+var stylesheet, cssRule, declaration, filterRule, subRule;
+var styleElement = document.createElement(&quot;style&quot;);
+document.head.appendChild(styleElement);
+stylesheet = styleElement.sheet;
+
+function testFilterRule(description, rule, expectedLength, expectedValue, expectedTypes, expectedTexts)
+{
+    debug(&quot;&quot;);
+    debug(description + &quot; : &quot; + rule);
+
+    stylesheet.insertRule(&quot;body { -webkit-backdrop-filter: &quot; + rule + &quot;; }&quot;, 0);
+    cssRule = stylesheet.cssRules.item(0);
+
+    shouldBe(&quot;cssRule.type&quot;, &quot;1&quot;);
+
+    declaration = cssRule.style;
+    shouldBe(&quot;declaration.length&quot;, &quot;1&quot;);
+    shouldBe(&quot;declaration.getPropertyValue('-webkit-backdrop-filter')&quot;, &quot;'&quot; + expectedValue + &quot;'&quot;);
+
+    filterRule = declaration.getPropertyCSSValue('-webkit-backdrop-filter');
+    shouldBeType(&quot;filterRule&quot;, &quot;CSSValueList&quot;);
+
+    shouldBe(&quot;filterRule.length&quot;, &quot;&quot; + expectedLength); // shouldBe expects string arguments
+
+    if (filterRule) {
+        for (var i = 0; i &lt; expectedLength; i++) {
+            subRule = filterRule[i];
+            shouldBe(&quot;subRule.operationType&quot;, expectedTypes[i]);
+            shouldBe(&quot;subRule.cssText&quot;, &quot;'&quot; + expectedTexts[i] + &quot;'&quot;);
+        }
+    }
+}
+
+testFilterRule(&quot;Basic reference&quot;,
+               &quot;url('#a')&quot;, 1, &quot;url(#a)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;],
+               [&quot;url(#a)&quot;]);
+
+testFilterRule(&quot;Bare unquoted reference converting to quoted form&quot;,
+               &quot;url(#a)&quot;, 1, &quot;url(#a)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;],
+               [&quot;url(#a)&quot;]);
+
+testFilterRule(&quot;Multiple references&quot;,
+               &quot;url('#a') url('#b')&quot;, 2, &quot;url(#a) url(#b)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;],
+               [&quot;url(#a)&quot;, &quot;url(#b)&quot;]);
+
+testFilterRule(&quot;Reference as 2nd value&quot;,
+               &quot;grayscale(1) url('#a')&quot;, 2, &quot;grayscale(1) url(#a)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_REFERENCE&quot;],
+               [&quot;grayscale(1)&quot;, &quot;url(#a)&quot;]);
+
+testFilterRule(&quot;Integer value&quot;,
+               &quot;grayscale(1)&quot;, 1, &quot;grayscale(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;grayscale(1)&quot;]);
+
+testFilterRule(&quot;Percentage value&quot;,
+               &quot;grayscale(50%)&quot;, 1, &quot;grayscale(50%)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;grayscale(50%)&quot;]);
+
+testFilterRule(&quot;Float value converts to integer&quot;,
+               &quot;grayscale(1.0)&quot;, 1, &quot;grayscale(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;grayscale(1)&quot;]);
+
+testFilterRule(&quot;Zero value&quot;,
+               &quot;grayscale(0)&quot;, 1, &quot;grayscale(0)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;grayscale(0)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+               &quot;grayscale()&quot;, 1, &quot;grayscale()&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;grayscale()&quot;]);
+
+testFilterRule(&quot;Multiple values&quot;,
+               &quot;grayscale(0.5) grayscale(0.25)&quot;, 2, &quot;grayscale(0.5) grayscale(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;grayscale(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testFilterRule(&quot;Integer value&quot;,
+               &quot;sepia(1)&quot;, 1, &quot;sepia(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+               [&quot;sepia(1)&quot;]);
+
+testFilterRule(&quot;Percentage value&quot;,
+               &quot;sepia(50%)&quot;, 1, &quot;sepia(50%)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+               [&quot;sepia(50%)&quot;]);
+
+testFilterRule(&quot;Float value converts to integer&quot;,
+               &quot;sepia(1.0)&quot;, 1, &quot;sepia(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+               [&quot;sepia(1)&quot;]);
+
+testFilterRule(&quot;Zero value&quot;,
+               &quot;sepia(0)&quot;, 1, &quot;sepia(0)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+               [&quot;sepia(0)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+               &quot;sepia()&quot;, 1, &quot;sepia()&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+               [&quot;sepia()&quot;]);
+
+testFilterRule(&quot;Multiple values&quot;,
+               &quot;sepia(0.5) sepia(0.25)&quot;, 2, &quot;sepia(0.5) sepia(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;],
+               [&quot;sepia(0.5)&quot;, &quot;sepia(0.25)&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+               &quot;sepia(0.5) grayscale(0.25)&quot;, 2, &quot;sepia(0.5) grayscale(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;sepia(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testFilterRule(&quot;Integer value&quot;,
+               &quot;saturate(1)&quot;, 1, &quot;saturate(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+               [&quot;saturate(1)&quot;]);
+
+testFilterRule(&quot;Percentage value&quot;,
+               &quot;saturate(50%)&quot;, 1, &quot;saturate(50%)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+               [&quot;saturate(50%)&quot;]);
+
+testFilterRule(&quot;Percentage value &gt; 1&quot;,
+               &quot;saturate(250%)&quot;, 1, &quot;saturate(250%)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+               [&quot;saturate(250%)&quot;]);
+
+testFilterRule(&quot;Float value converts to integer&quot;,
+               &quot;saturate(1.0)&quot;, 1, &quot;saturate(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+               [&quot;saturate(1)&quot;]);
+
+testFilterRule(&quot;Input value &gt; 1&quot;,
+               &quot;saturate(5.5)&quot;, 1, &quot;saturate(5.5)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+               [&quot;saturate(5.5)&quot;]);
+
+testFilterRule(&quot;Zero value&quot;,
+               &quot;saturate(0)&quot;, 1, &quot;saturate(0)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+               [&quot;saturate(0)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+               &quot;saturate()&quot;, 1, &quot;saturate()&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+               [&quot;saturate()&quot;]);
+
+testFilterRule(&quot;Multiple values&quot;,
+               &quot;saturate(0.5) saturate(0.25)&quot;, 2, &quot;saturate(0.5) saturate(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;],
+               [&quot;saturate(0.5)&quot;, &quot;saturate(0.25)&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+               &quot;saturate(0.5) grayscale(0.25)&quot;, 2, &quot;saturate(0.5) grayscale(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;saturate(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testFilterRule(&quot;Degrees value as integer&quot;,
+               &quot;hue-rotate(10deg)&quot;, 1, &quot;hue-rotate(10deg)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+               [&quot;hue-rotate(10deg)&quot;]);
+
+testFilterRule(&quot;Degrees float value converts to integer&quot;,
+               &quot;hue-rotate(10.0deg)&quot;, 1, &quot;hue-rotate(10deg)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+               [&quot;hue-rotate(10deg)&quot;]);
+
+testFilterRule(&quot;Radians value&quot;,
+               &quot;hue-rotate(10rad)&quot;, 1, &quot;hue-rotate(10rad)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+               [&quot;hue-rotate(10rad)&quot;]);
+
+testFilterRule(&quot;Gradians value&quot;,
+               &quot;hue-rotate(10grad)&quot;, 1, &quot;hue-rotate(10grad)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+               [&quot;hue-rotate(10grad)&quot;]);
+
+testFilterRule(&quot;Turns value&quot;,
+               &quot;hue-rotate(0.5turn)&quot;, 1, &quot;hue-rotate(0.5turn)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+               [&quot;hue-rotate(0.5turn)&quot;]);
+
+testFilterRule(&quot;Zero value&quot;,
+               &quot;hue-rotate(0)&quot;, 1, &quot;hue-rotate(0deg)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+               [&quot;hue-rotate(0deg)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+               &quot;hue-rotate()&quot;, 1, &quot;hue-rotate()&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;],
+               [&quot;hue-rotate()&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+               &quot;hue-rotate(10deg) grayscale(0.25)&quot;, 2, &quot;hue-rotate(10deg) grayscale(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;hue-rotate(10deg)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testFilterRule(&quot;Integer value&quot;,
+               &quot;invert(1)&quot;, 1, &quot;invert(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+               [&quot;invert(1)&quot;]);
+
+testFilterRule(&quot;Percentage value&quot;,
+               &quot;invert(50%)&quot;, 1, &quot;invert(50%)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+               [&quot;invert(50%)&quot;]);
+
+testFilterRule(&quot;Float value converts to integer&quot;,
+               &quot;invert(1.0)&quot;, 1, &quot;invert(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+               [&quot;invert(1)&quot;]);
+
+testFilterRule(&quot;Zero value&quot;,
+               &quot;invert(0)&quot;, 1, &quot;invert(0)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+               [&quot;invert(0)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+               &quot;invert()&quot;, 1, &quot;invert()&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+               [&quot;invert()&quot;]);
+
+testFilterRule(&quot;Multiple values&quot;,
+               &quot;invert(0.5) invert(0.25)&quot;, 2, &quot;invert(0.5) invert(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;],
+               [&quot;invert(0.5)&quot;, &quot;invert(0.25)&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+               &quot;invert(0.5) grayscale(0.25)&quot;, 2, &quot;invert(0.5) grayscale(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;invert(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testFilterRule(&quot;Integer value&quot;,
+               &quot;opacity(1)&quot;, 1, &quot;opacity(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+               [&quot;opacity(1)&quot;]);
+
+testFilterRule(&quot;Percentage value&quot;,
+               &quot;opacity(50%)&quot;, 1, &quot;opacity(50%)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+               [&quot;opacity(50%)&quot;]);
+
+testFilterRule(&quot;Float value converts to integer&quot;,
+               &quot;opacity(1.0)&quot;, 1, &quot;opacity(1)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+               [&quot;opacity(1)&quot;]);
+
+testFilterRule(&quot;Zero value&quot;,
+               &quot;opacity(0)&quot;, 1, &quot;opacity(0)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+               [&quot;opacity(0)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+               &quot;opacity()&quot;, 1, &quot;opacity()&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+               [&quot;opacity()&quot;]);
+
+testFilterRule(&quot;Multiple values&quot;,
+               &quot;opacity(0.5) opacity(0.25)&quot;, 2, &quot;opacity(0.5) opacity(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;],
+               [&quot;opacity(0.5)&quot;, &quot;opacity(0.25)&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+               &quot;opacity(0.5) grayscale(0.25)&quot;, 2, &quot;opacity(0.5) grayscale(0.25)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+               [&quot;opacity(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testFilterRule(&quot;Integer value&quot;,
+              &quot;brightness(1)&quot;, 1, &quot;brightness(1)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;brightness(1)&quot;]);
+
+testFilterRule(&quot;Percentage value&quot;,
+              &quot;brightness(50%)&quot;, 1, &quot;brightness(50%)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;brightness(50%)&quot;]);
+
+testFilterRule(&quot;Float value converts to integer&quot;,
+              &quot;brightness(1.0)&quot;, 1, &quot;brightness(1)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;brightness(1)&quot;]);
+
+testFilterRule(&quot;Zero value&quot;,
+              &quot;brightness(0)&quot;, 1, &quot;brightness(0)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;brightness(0)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+              &quot;brightness()&quot;, 1, &quot;brightness()&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;brightness()&quot;]);
+
+testFilterRule(&quot;Multiple values&quot;,
+              &quot;brightness(0.5) brightness(0.25)&quot;, 2, &quot;brightness(0.5) brightness(0.25)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;brightness(0.5)&quot;, &quot;brightness(0.25)&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+              &quot;brightness(0.5) grayscale(0.25)&quot;, 2, &quot;brightness(0.5) grayscale(0.25)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+              [&quot;brightness(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testFilterRule(&quot;Parameter less than -100%&quot;,
+              &quot;brightness(-1.1)&quot;, 1, &quot;brightness(-1.1)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;brightness(-1.1)&quot;]);
+
+testFilterRule(&quot;Parameter more than 100%&quot;,
+              &quot;brightness(101%)&quot;, 1, &quot;brightness(101%)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;brightness(101%)&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+              &quot;grayscale(0.25) brightness(0.5)&quot;, 2, &quot;grayscale(0.25) brightness(0.5)&quot;,
+              [ &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_BRIGHTNESS&quot;],
+              [&quot;grayscale(0.25)&quot;, &quot;brightness(0.5)&quot;]);
+
+testFilterRule(&quot;Integer value&quot;,
+              &quot;contrast(1)&quot;, 1, &quot;contrast(1)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;contrast(1)&quot;]);
+
+testFilterRule(&quot;Percentage value&quot;,
+              &quot;contrast(50%)&quot;, 1, &quot;contrast(50%)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;contrast(50%)&quot;]);
+
+testFilterRule(&quot;Percentage value &gt; 1&quot;,
+              &quot;contrast(250%)&quot;, 1, &quot;contrast(250%)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;contrast(250%)&quot;]);
+
+testFilterRule(&quot;Float value converts to integer&quot;,
+              &quot;contrast(1.0)&quot;, 1, &quot;contrast(1)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;contrast(1)&quot;]);
+
+testFilterRule(&quot;Zero value&quot;,
+              &quot;contrast(0)&quot;, 1, &quot;contrast(0)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;contrast(0)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+              &quot;contrast()&quot;, 1, &quot;contrast()&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;contrast()&quot;]);
+
+testFilterRule(&quot;Value greater than one&quot;,
+              &quot;contrast(2)&quot;, 1, &quot;contrast(2)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;contrast(2)&quot;]);
+
+testFilterRule(&quot;Multiple values&quot;,
+              &quot;contrast(0.5) contrast(0.25)&quot;, 2, &quot;contrast(0.5) contrast(0.25)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;contrast(0.5)&quot;, &quot;contrast(0.25)&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+              &quot;contrast(0.5) grayscale(0.25)&quot;, 2, &quot;contrast(0.5) grayscale(0.25)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;],
+              [&quot;contrast(0.5)&quot;, &quot;grayscale(0.25)&quot;]);
+
+testFilterRule(&quot;Rule combinations&quot;,
+              &quot;grayscale(0.25) contrast(0.5)&quot;, 2, &quot;grayscale(0.25) contrast(0.5)&quot;,
+              [ &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;, &quot;WebKitCSSFilterValue.CSS_FILTER_CONTRAST&quot;],
+              [&quot;grayscale(0.25)&quot;, &quot;contrast(0.5)&quot;]);
+
+testFilterRule(&quot;One zero to px&quot;,
+               &quot;blur(0)&quot;, 1, &quot;blur(0px)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;],
+               [&quot;blur(0px)&quot;]);
+
+testFilterRule(&quot;One length&quot;,
+               &quot;blur(10px)&quot;, 1, &quot;blur(10px)&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;],
+               [&quot;blur(10px)&quot;]);
+
+testFilterRule(&quot;No values&quot;,
+               &quot;blur()&quot;, 1, &quot;blur()&quot;,
+               [&quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;],
+               [&quot;blur()&quot;]);
+
+testFilterRule(&quot;Color then three values&quot;,
+              &quot;drop-shadow(red 1px 2px 3px)&quot;, 1, &quot;drop-shadow(red 1px 2px 3px)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+              [&quot;drop-shadow(red 1px 2px 3px)&quot;]);
+
+testFilterRule(&quot;Three values then color&quot;,
+              &quot;drop-shadow(1px 2px 3px red)&quot;, 1, &quot;drop-shadow(red 1px 2px 3px)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+              [&quot;drop-shadow(red 1px 2px 3px)&quot;]);
+
+testFilterRule(&quot;Color then three values with zero length&quot;,
+              &quot;drop-shadow(#abc 0 0 0)&quot;, 1, &quot;drop-shadow(rgb(170, 187, 204) 0px 0px 0px)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+              [&quot;drop-shadow(rgb(170, 187, 204) 0px 0px 0px)&quot;]);
+
+testFilterRule(&quot;Three values with zero length&quot;,
+              &quot;drop-shadow(0 0 0)&quot;, 1, &quot;drop-shadow(0px 0px 0px)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+              [&quot;drop-shadow(0px 0px 0px)&quot;]);
+
+testFilterRule(&quot;Two values no color&quot;,
+              &quot;drop-shadow(1px 2px)&quot;, 1, &quot;drop-shadow(1px 2px)&quot;,
+              [&quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;],
+              [&quot;drop-shadow(1px 2px)&quot;]);
+
+testFilterRule(&quot;Multiple operations&quot;,
+               &quot;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)&quot;, 8,
+               &quot;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)&quot;,
+               [
+                   &quot;WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE&quot;,
+                   &quot;WebKitCSSFilterValue.CSS_FILTER_SEPIA&quot;,
+                   &quot;WebKitCSSFilterValue.CSS_FILTER_SATURATE&quot;,
+                   &quot;WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE&quot;,
+                   &quot;WebKitCSSFilterValue.CSS_FILTER_INVERT&quot;,
+                   &quot;WebKitCSSFilterValue.CSS_FILTER_OPACITY&quot;,
+                   &quot;WebKitCSSFilterValue.CSS_FILTER_BLUR&quot;,
+                   &quot;WebKitCSSFilterValue.CSS_FILTER_DROP_SHADOW&quot;
+               ],
+               [
+                   &quot;grayscale(0.5)&quot;,
+                   &quot;sepia(0.25)&quot;,
+                   &quot;saturate(0.75)&quot;,
+                   &quot;hue-rotate(35deg)&quot;,
+                   &quot;invert(0.2)&quot;,
+                   &quot;opacity(0.9)&quot;,
+                   &quot;blur(5px)&quot;,
+                   &quot;drop-shadow(green 1px 2px 3px)&quot;
+               ]);
+
+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(&quot;Test the parsing of the -webkit-backdrop-filter property.&quot;);
+
+var styleElement = document.createElement(&quot;style&quot;);
+document.head.appendChild(styleElement);
+var stylesheet = styleElement.sheet;
+
+// add a -webkit-filter property to the start of the stylesheet
+stylesheet.addRule(&quot;body&quot;, &quot;-webkit-backdrop-filter: hue-rotate(120deg)&quot;, 0);
+
+var cssRule = stylesheet.cssRules.item(0);
+
+shouldBe(&quot;cssRule.type&quot;, &quot;1&quot;);
+
+var declaration = cssRule.style;
+shouldBe(&quot;declaration.length&quot;, &quot;1&quot;);
+shouldBe(&quot;declaration.getPropertyValue('-webkit-backdrop-filter')&quot;, &quot;'hue-rotate(120deg)'&quot;);
+
+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  &lt;dino@apple.com&gt;
+
+        [filters2] Support for backdrop-filter
+        https://bugs.webkit.org/show_bug.cgi?id=138384
+        &lt;rdar://problem/18874494&gt;
+
+        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  &lt;bpoulain@apple.com&gt;
</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-&gt;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-&gt;filter());
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+        case CSSPropertyWebkitBackdropFilter:
+            return valueForFilter(style.get(), style-&gt;backdropFilter());
+#endif
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">         case CSSPropertyMixBlendMode:
</span><span class="cx">             return cssValuePool().createValue(style-&gt;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) &amp;&amp; value-&gt;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) &amp;&amp; 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) &amp;&amp; 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() &amp;&amp; (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()-&gt;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() &lt; 2 || (!m_keyframes.containsProperty(CSSPropertyWebkitFilter) &amp;&amp; !m_keyframes.containsProperty(CSSPropertyWebkitBackdropFilter)))
+#else
</ins><span class="cx">     if (m_keyframes.size() &lt; 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&amp; 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&amp; filters) { m_filters = filters; return true; }
</span><span class="cx"> 
</span><ins>+    const FilterOperations&amp; backdropFilters() const { return m_backdropFilters; }
+    virtual bool setBackdropFilters(const FilterOperations&amp; 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&amp;);
</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&lt;PlatformCALayer&gt; 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-&gt;setOwner(nullptr);
</span><del>-    
</del><ins>+
+    if (m_backdropLayer)
+        m_backdropLayer-&gt;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 &lt; numAnimations; ++i) {
</span><span class="cx">             const LayerPropertyAnimation&amp; 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&amp; 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 &amp; (Preserves3DChanged | ReplicatedLayerChanged))
</del><ins>+    if (m_uncommittedChanges &amp; (Preserves3DChanged | ReplicatedLayerChanged | BackdropFiltersChanged))
</ins><span class="cx">         updateStructuralLayer();
</span><span class="cx"> 
</span><span class="cx">     if (m_uncommittedChanges &amp; GeometryChanged)
</span><span class="lines">@@ -1314,6 +1337,9 @@
</span><span class="cx">     if (m_uncommittedChanges &amp; FiltersChanged)
</span><span class="cx">         updateFilters();
</span><span class="cx"> 
</span><ins>+    if (m_uncommittedChanges &amp; BackdropFiltersChanged)
+        updateBackdropFilters();
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">     if (m_uncommittedChanges &amp; 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-&gt;setName(&quot;Replica flattening layer &quot; + name());
</span><span class="cx">         break;
</span><ins>+    case StructuralLayerForBackdrop:
+        m_structuralLayer-&gt;setName(&quot;Backdrop hosting layer &quot; + 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&lt;GraphicsLayerCA&gt;(*m_replicaLayer).primaryLayer());
</span><span class="cx">     
</span><span class="lines">@@ -1510,6 +1542,12 @@
</span><span class="cx">     m_layer-&gt;setBounds(adjustedBounds);
</span><span class="cx">     m_layer-&gt;setAnchorPoint(scaledAnchorPoint);
</span><span class="cx"> 
</span><ins>+    if (m_backdropLayer) {
+        m_backdropLayer-&gt;setPosition(adjustedPosition);
+        m_backdropLayer-&gt;setBounds(adjustedBounds);
+        m_backdropLayer-&gt;setAnchorPoint(scaledAnchorPoint);
+    }
+
</ins><span class="cx">     if (LayerMap* layerCloneMap = m_layerClones.get()) {
</span><span class="cx">         LayerMap::const_iterator end = layerCloneMap-&gt;end();
</span><span class="cx">         for (LayerMap::const_iterator it = layerCloneMap-&gt;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-&gt;removeFromSuperlayer();
+            m_backdropLayer-&gt;setOwner(nullptr);
+            m_backdropLayer = nullptr;
+        }
+        return;
+    }
+
+    if (!m_backdropLayer) {
+        m_backdropLayer = createPlatformCALayer(PlatformCALayer::LayerTypeBackdropLayer, this);
+        m_backdropLayer-&gt;setPosition(m_layer-&gt;position());
+        m_backdropLayer-&gt;setBounds(m_layer-&gt;bounds());
+        m_backdropLayer-&gt;setAnchorPoint(m_layer-&gt;anchorPoint());
+        m_backdropLayer-&gt;setMasksToBounds(true);
+    }
+    m_backdropLayer-&gt;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&amp; valueList, const Animation* animation, const String&amp; animationName, double timeOffset)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(valueList.property() != AnimatedPropertyWebkitTransform &amp;&amp; (!supportsAcceleratedFilterAnimations() || valueList.property() != AnimatedPropertyWebkitFilter));
</span><del>-    
</del><ins>+
</ins><span class="cx">     bool isKeyframe = valueList.size() &gt; 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&amp;) override;
</span><span class="cx">     virtual bool filtersCanBeComposited(const FilterOperations&amp;);
</span><span class="cx"> 
</span><ins>+    WEBCORE_EXPORT virtual bool setBackdropFilters(const FilterOperations&amp;) 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 &lt;&lt; 24,
</span><span class="cx">         VisibleRectChanged = 1LLU &lt;&lt; 25,
</span><span class="cx">         FiltersChanged = 1LLU &lt;&lt; 26,
</span><del>-        TilingAreaChanged = 1LLU &lt;&lt; 27,
-        TilesAdded = 1LLU &lt; 28,
-        DebugIndicatorsChanged = 1LLU &lt;&lt; 29,
-        CustomAppearanceChanged = 1LLU &lt;&lt; 30,
-        CustomBehaviorChanged = 1LLU &lt;&lt; 31,
-        BlendModeChanged = 1LLU &lt;&lt; 32
</del><ins>+        BackdropFiltersChanged = 1LLU &lt;&lt; 27,
+        TilingAreaChanged = 1LLU &lt;&lt; 28,
+        TilesAdded = 1LLU &lt; 29,
+        DebugIndicatorsChanged = 1LLU &lt;&lt; 30,
+        CustomAppearanceChanged = 1LLU &lt;&lt; 31,
+        CustomBehaviorChanged = 1LLU &lt;&lt; 32,
+        BlendModeChanged = 1LLU &lt;&lt; 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&lt;PlatformCALayer&gt; 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&lt;PlatformCALayer&gt; m_contentsClippingLayer; // A layer used to clip inner content
</span><span class="cx">     RefPtr&lt;PlatformCALayer&gt; m_contentsLayer; // A layer used for inner content, like image and video
</span><ins>+    RefPtr&lt;PlatformCALayer&gt; 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&lt;LayerMap&gt; 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 &quot;ThemeMac.h&quot;
</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() &lt; 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">         &amp;&amp; !renderer().hasTransform()
</span><span class="cx">         &amp;&amp; !renderer().hasClipPath()
</span><span class="cx">         &amp;&amp; !renderer().hasFilter()
</span><ins>+        &amp;&amp; !renderer().hasBackdropFilter()
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">         &amp;&amp; !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-&gt;setFilters(style.filter());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+void RenderLayerBacking::updateBackdropFilters(const RenderStyle&amp; style)
+{
+    m_canCompositeBackdropFilters = m_graphicsLayer-&gt;setBackdropFilters(style.backdropFilter());
+}
+#endif
+
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx"> void RenderLayerBacking::updateBlendMode(const RenderStyle&amp; 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&amp;);
</span><span class="cx">     void updateTransform(const RenderStyle&amp;);
</span><span class="cx">     void updateFilters(const RenderStyle&amp;);
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+    void updateBackdropFilters(const RenderStyle&amp;);
+#endif
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">     void updateBlendMode(const RenderStyle&amp;);
</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-&gt;hasReflection())
</span><span class="cx">             reasons |= CompositingReasonReflectionWithCompositedDescendants;
</span><span class="cx"> 
</span><del>-        if (renderer-&gt;hasFilter())
</del><ins>+        if (renderer-&gt;hasFilter() || renderer-&gt;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&amp; 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 &amp; 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-&gt;filter() != newStyle.filter()
</span><span class="cx">                     )
</span><span class="cx">                 layer()-&gt;repaintIncludingDescendants();
</span><del>-            } else if (newStyle.hasTransform() || newStyle.opacity() &lt; 1 || newStyle.hasFilter()) {
</del><ins>+            } else if (newStyle.hasTransform() || newStyle.opacity() &lt; 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-&gt;hasFilters() != other.rareNonInheritedData-&gt;hasFilters())
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+    if (rareNonInheritedData-&gt;hasBackdropFilters() != other.rareNonInheritedData-&gt;hasBackdropFilters())
+        return true;
+#endif
+
</ins><span class="cx">     const QuotesData* quotesDataA = rareInheritedData-&gt;quotes.get();
</span><span class="cx">     const QuotesData* quotesDataB = other.rareInheritedData-&gt;quotes.get();
</span><span class="cx">     if (!(quotesDataA == quotesDataB || (quotesDataA &amp;&amp; quotesDataB &amp;&amp; *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&amp; filter() const { return rareNonInheritedData-&gt;m_filter-&gt;m_operations; }
</span><span class="cx">     bool hasFilter() const { return !rareNonInheritedData-&gt;m_filter-&gt;m_operations.operations().isEmpty(); }
</span><span class="cx"> 
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+    FilterOperations&amp; mutableBackdropFilter() { return rareNonInheritedData.access()-&gt;m_backdropFilter.access()-&gt;m_operations; }
+    const FilterOperations&amp; backdropFilter() const { return rareNonInheritedData-&gt;m_backdropFilter-&gt;m_operations; }
+    bool hasBackdropFilter() const { return !rareNonInheritedData-&gt;m_backdropFilter-&gt;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&lt;BlendMode&gt;(rareNonInheritedData-&gt;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&amp; ops) { SET_VAR(rareNonInheritedData.access()-&gt;m_filter, m_operations, ops); }
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+    void setBackdropFilter(const FilterOperations&amp; ops) { SET_VAR(rareNonInheritedData.access()-&gt;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&lt;StyleDashboardRegion&gt;&amp; noneDashboardRegions();
</span><span class="cx"> #endif
</span><span class="cx">     static const FilterOperations&amp; initialFilter() { DEPRECATED_DEFINE_STATIC_LOCAL(FilterOperations, ops, ()); return ops; }
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+    static const FilterOperations&amp; 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">         &amp;&amp; m_multiCol == o.m_multiCol
</span><span class="cx">         &amp;&amp; m_transform == o.m_transform
</span><span class="cx">         &amp;&amp; m_filter == o.m_filter
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+        &amp;&amp; m_backdropFilter == o.m_backdropFilter
+#endif
</ins><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx">         &amp;&amp; m_grid == o.m_grid
</span><span class="cx">         &amp;&amp; m_gridItem == o.m_gridItem
</span><span class="lines">@@ -346,4 +355,11 @@
</span><span class="cx">     return m_filter.get() &amp;&amp; !m_filter-&gt;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() &amp;&amp; !m_backdropFilter-&gt;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&amp;) const;
</span><span class="cx">     bool transitionDataEquivalent(const StyleRareNonInheritedData&amp;) 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 &lt; 1; }
</span><span class="cx"> 
</span><span class="cx">     float opacity;
</span><span class="lines">@@ -119,6 +122,9 @@
</span><span class="cx">     DataRef&lt;StyleMultiColData&gt; m_multiCol; //  CSS3 multicol properties
</span><span class="cx">     DataRef&lt;StyleTransformData&gt; m_transform; // Transform properties (rotate, scale, skew, etc.)
</span><span class="cx">     DataRef&lt;StyleFilterData&gt; m_filter; // Filter operations (url, sepia, blur, etc.)
</span><ins>+#if ENABLE(FILTERS_LEVEL_2)
+    DataRef&lt;StyleFilterData&gt; 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&lt;StyleGridData&gt; 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  &lt;dino@apple.com&gt;
+
+        [filters2] Support for backdrop-filter
+        https://bugs.webkit.org/show_bug.cgi?id=138384
+        &lt;rdar://problem/18874494&gt;
+
+        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  &lt;timothy_horton@apple.com&gt;
</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 &lt;&lt; &quot;root-layer&quot;;
</span><span class="cx">                 break;
</span><ins>+            case PlatformCALayer::LayerTypeBackdropLayer:
+                ts &lt;&lt; &quot;backdrop-layer&quot;;
+                break;
</ins><span class="cx">             case PlatformCALayer::LayerTypeAVPlayerLayer:
</span><span class="cx">                 ts &lt;&lt; &quot;av-player-layer (context-id &quot; &lt;&lt; createdLayer.hostingContextID &lt;&lt; &quot;)&quot;;
</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 &lt;UIKit/UIView.h&gt;
</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&lt;CompositingTriggerFlags&gt;(
</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: &lt;rdar://problem/7830677&gt;
</span></span></pre>
</div>
</div>

</body>
</html>