<!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>[200888] 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/200888">200888</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2016-05-13 15:40:52 -0700 (Fri, 13 May 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Unprefix -webkit-cross-fade()
https://bugs.webkit.org/show_bug.cgi?id=157632
Reviewed by Darin Adler.
Source/WebCore:
Support unprefixed cross-fade() in addition to the prefixed value when parsing,
and have computed style round-trip the correct one.
If computed style is queried during an image transition, return an unprefixed
cross-fade(). If blending cross-fade values, only return the prefixed function if
both inputs are prefixed.
Tested by modified and existing tests.
* css/CSSCrossfadeValue.cpp:
(WebCore::CSSCrossfadeValue::customCSSText):
(WebCore::CSSCrossfadeValue::blend):
* css/CSSCrossfadeValue.h:
(WebCore::CSSCrossfadeValue::create):
(WebCore::CSSCrossfadeValue::isPrefixed):
(WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
* css/CSSParser.cpp:
(WebCore::CSSParser::isGeneratedImageValue):
(WebCore::CSSParser::parseGeneratedImage):
(WebCore::CSSParser::parseCrossfade):
* css/CSSParser.h:
Source/WebInspectorUI:
* UserInterface/Models/CSSKeywordCompletions.js:
LayoutTests:
* animations/cross-fade-background-image-expected.html:
* animations/cross-fade-background-image.html:
* animations/cross-fade-border-image-source.html:
* animations/cross-fade-list-style-image.html:
* animations/cross-fade-webkit-mask-box-image.html:
* animations/cross-fade-webkit-mask-image.html:
* animations/resources/animation-test-helpers.js:
(parseCSSImage):
(parseCrossFade):
(compareCSSImages):
* fast/css/getComputedStyle/computed-style-cross-fade-expected.txt:
* fast/css/getComputedStyle/computed-style-cross-fade.html:
* transitions/resources/transition-test-helpers.js:
(parseCrossFade):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsanimationscrossfadebackgroundimageexpectedhtml">trunk/LayoutTests/animations/cross-fade-background-image-expected.html</a></li>
<li><a href="#trunkLayoutTestsanimationscrossfadebackgroundimagehtml">trunk/LayoutTests/animations/cross-fade-background-image.html</a></li>
<li><a href="#trunkLayoutTestsanimationscrossfadeborderimagesourcehtml">trunk/LayoutTests/animations/cross-fade-border-image-source.html</a></li>
<li><a href="#trunkLayoutTestsanimationscrossfadeliststyleimagehtml">trunk/LayoutTests/animations/cross-fade-list-style-image.html</a></li>
<li><a href="#trunkLayoutTestsanimationscrossfadewebkitmaskboximagehtml">trunk/LayoutTests/animations/cross-fade-webkit-mask-box-image.html</a></li>
<li><a href="#trunkLayoutTestsanimationscrossfadewebkitmaskimagehtml">trunk/LayoutTests/animations/cross-fade-webkit-mask-image.html</a></li>
<li><a href="#trunkLayoutTestsanimationsresourcesanimationtesthelpersjs">trunk/LayoutTests/animations/resources/animation-test-helpers.js</a></li>
<li><a href="#trunkLayoutTestsfastcssgetComputedStylecomputedstylecrossfadeexpectedtxt">trunk/LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssgetComputedStylecomputedstylecrossfadehtml">trunk/LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade.html</a></li>
<li><a href="#trunkLayoutTeststransitionsresourcestransitiontesthelpersjs">trunk/LayoutTests/transitions/resources/transition-test-helpers.js</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssCSSCrossfadeValuecpp">trunk/Source/WebCore/css/CSSCrossfadeValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSCrossfadeValueh">trunk/Source/WebCore/css/CSSCrossfadeValue.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSParsercpp">trunk/Source/WebCore/css/CSSParser.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSParserh">trunk/Source/WebCore/css/CSSParser.h</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsCSSKeywordCompletionsjs">trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/ChangeLog        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2016-05-13 Simon Fraser <simon.fraser@apple.com>
+
+ Unprefix -webkit-cross-fade()
+ https://bugs.webkit.org/show_bug.cgi?id=157632
+
+ Reviewed by Darin Adler.
+
+ * animations/cross-fade-background-image-expected.html:
+ * animations/cross-fade-background-image.html:
+ * animations/cross-fade-border-image-source.html:
+ * animations/cross-fade-list-style-image.html:
+ * animations/cross-fade-webkit-mask-box-image.html:
+ * animations/cross-fade-webkit-mask-image.html:
+ * animations/resources/animation-test-helpers.js:
+ (parseCSSImage):
+ (parseCrossFade):
+ (compareCSSImages):
+ * fast/css/getComputedStyle/computed-style-cross-fade-expected.txt:
+ * fast/css/getComputedStyle/computed-style-cross-fade.html:
+ * transitions/resources/transition-test-helpers.js:
+ (parseCrossFade):
+
</ins><span class="cx"> 2016-05-13 Yoav Weiss <yoav@yoav.ws>
</span><span class="cx">
</span><span class="cx"> ResourceTiming entries for cached resources and XHR
</span></span></pre></div>
<a id="trunkLayoutTestsanimationscrossfadebackgroundimageexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/animations/cross-fade-background-image-expected.html (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/animations/cross-fade-background-image-expected.html        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/animations/cross-fade-background-image-expected.html        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -14,12 +14,12 @@
</span><span class="cx"> <body>
</span><span class="cx"> <div id="rect"></div>
</span><span class="cx"> <div id="result">
</span><del>-PASS - "backgroundImage" property for "box" element at 2.5s saw something close to: -webkit-cross-fade(url(blue-100.png), url(green-100.png), 50%)<br>
</del><ins>+PASS - "backgroundImage" property for "box" element at 2.5s saw something close to: cross-fade(url(blue-100.png), url(green-100.png), 50%)<br>
</ins><span class="cx"> PASS - "backgroundImage" property for "box" and "boxStatic" elements at 2.5s are close enough to each other<br>
</span><span class="cx"> PASS - "backgroundImage" property for "boxShorthand" and "boxStatic" elements at 2.5s are close enough to each other<br>
</span><del>-PASS - "backgroundImage" property for "boxAnim1" element at 2.5s saw something close to: -webkit-cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 0.5)<br>
-PASS - "backgroundImage" property for "boxAnim2" element at 2.5s saw something close to: -webkit-cross-fade(url(resources/green-100.png), url(resources/blue-100.png), 50%)<br>
-PASS - "backgroundImage" property for "boxAnim3" element at 2.5s saw something close to: -webkit-cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 50%)<br>
</del><ins>+PASS - "backgroundImage" property for "boxAnim1" element at 2.5s saw something close to: cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 0.5)<br>
+PASS - "backgroundImage" property for "boxAnim2" element at 2.5s saw something close to: cross-fade(url(resources/green-100.png), url(resources/blue-100.png), 50%)<br>
+PASS - "backgroundImage" property for "boxAnim3" element at 2.5s saw something close to: cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 50%)<br>
</ins><span class="cx"> </div>
</span><span class="cx"> </body>
</span><del>-</html>
</del><span class="cx">\ No newline at end of file
</span><ins>+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsanimationscrossfadebackgroundimagehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/animations/cross-fade-background-image.html (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/animations/cross-fade-background-image.html        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/animations/cross-fade-background-image.html        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> @-webkit-keyframes animCross2 {
</span><span class="cx"> /* Image inputs are not identical - no animation.*/
</span><span class="cx"> from { background-image: -webkit-cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 20%); }
</span><del>- to { background-image: -webkit-cross-fade(url(resources/green-100.png), url(resources/blue-100.png), 50%); }
</del><ins>+ to { background-image: cross-fade(url(resources/green-100.png), url(resources/blue-100.png), 50%); }
</ins><span class="cx"> }
</span><span class="cx"> @-webkit-keyframes animCross3 {
</span><span class="cx"> /* Direct image inputs are not identical - no animation.*/
</span><span class="lines">@@ -82,12 +82,12 @@
</span><span class="cx"> <script type="text/javascript" charset="utf-8">
</span><span class="cx"> const expectedValues = [
</span><span class="cx"> // [animation-name, time, element-id, property, expected-value, tolerance]
</span><del>- ["anim", 2.5, "box", "backgroundImage", "-webkit-cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
- ["anim", 2.5, ["box", "static:boxStatic"], "backgroundImage", "-webkit-cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
- ["animShorthand", 2.5, ["boxShorthand", "static:boxStatic"], "backgroundImage", "-webkit-cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
- ["animCross1", 2.5, "boxAnim1", "backgroundImage", "-webkit-cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 0.5)", 0.05],
- ["animCross2", 2.5, "boxAnim2", "backgroundImage", "-webkit-cross-fade(url(resources/green-100.png), url(resources/blue-100.png), 50%)", 0],
- ["animCross3", 2.5, "boxAnim3", "backgroundImage", "-webkit-cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 50%)", 0],
</del><ins>+ ["anim", 2.5, "box", "backgroundImage", "cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
+ ["anim", 2.5, ["box", "static:boxStatic"], "backgroundImage", "cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
+ ["animShorthand", 2.5, ["boxShorthand", "static:boxStatic"], "backgroundImage", "cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
+ ["animCross1", 2.5, "boxAnim1", "backgroundImage", "cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 0.5)", 0.05],
+ ["animCross2", 2.5, "boxAnim2", "backgroundImage", "cross-fade(url(resources/green-100.png), url(resources/blue-100.png), 50%)", 0],
+ ["animCross3", 2.5, "boxAnim3", "backgroundImage", "cross-fade(url(resources/blue-100.png), url(resources/green-100.png), 50%)", 0],
</ins><span class="cx"> ];
</span><span class="cx">
</span><span class="cx"> var doPixelTest = true;
</span></span></pre></div>
<a id="trunkLayoutTestsanimationscrossfadeborderimagesourcehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/animations/cross-fade-border-image-source.html (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/animations/cross-fade-border-image-source.html        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/animations/cross-fade-border-image-source.html        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -44,8 +44,8 @@
</span><span class="cx"> // [animation-name, time, element-id, property, expected-value, tolerance]
</span><span class="cx"> // FIXME: We can't test reading the borderImage shorthand because of bug #13658.
</span><span class="cx"> ["anim", 2.5, "box", "borderImageSource", "-webkit-cross-fade(url(stripes-100.png), url(green-100.png), 0.5)", 0.05],
</span><del>- ["anim", 2.5, ["box", "static:boxStatic"], "borderImageSource", "-webkit-cross-fade(url(stripes-100.png), url(green-100.png), 50%)", 0.05],
- ["animShorthand", 2.5, ["boxShorthand", "static:boxStatic"], "borderImageSource", "-webkit-cross-fade(url(stripes-100), url(green-100.png), 50%)", 0.05],
</del><ins>+ ["anim", 2.5, ["box", "static:boxStatic"], "borderImageSource", "cross-fade(url(stripes-100.png), url(green-100.png), 50%)", 0.05],
+ ["animShorthand", 2.5, ["boxShorthand", "static:boxStatic"], "borderImageSource", "cross-fade(url(stripes-100), url(green-100.png), 50%)", 0.05],
</ins><span class="cx"> ];
</span><span class="cx">
</span><span class="cx"> var doPixelTest = true;
</span></span></pre></div>
<a id="trunkLayoutTestsanimationscrossfadeliststyleimagehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/animations/cross-fade-list-style-image.html (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/animations/cross-fade-list-style-image.html        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/animations/cross-fade-list-style-image.html        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -39,8 +39,8 @@
</span><span class="cx"> const expectedValues = [
</span><span class="cx"> // [animation-name, time, element-id, property, expected-value, tolerance]
</span><span class="cx"> ["anim", 2.5, "box", "listStyleImage", "-webkit-cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
</span><del>- ["anim", 2.5, ["box", "static:boxStatic"], "listStyleImage", "-webkit-cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
- ["animShorthand", 2.5, ["boxShorthand", "static:boxStatic"], "listStyleImage", "-webkit-cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
</del><ins>+ ["anim", 2.5, ["box", "static:boxStatic"], "listStyleImage", "cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
+ ["animShorthand", 2.5, ["boxShorthand", "static:boxStatic"], "listStyleImage", "cross-fade(url(blue-100.png), url(green-100.png), 50%)", 0.05],
</ins><span class="cx"> ];
</span><span class="cx">
</span><span class="cx"> var doPixelTest = true;
</span></span></pre></div>
<a id="trunkLayoutTestsanimationscrossfadewebkitmaskboximagehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/animations/cross-fade-webkit-mask-box-image.html (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/animations/cross-fade-webkit-mask-box-image.html        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/animations/cross-fade-webkit-mask-box-image.html        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> const expectedValues = [
</span><span class="cx"> // [animation-name, time, element-id, property, expected-value, tolerance]
</span><span class="cx"> ["anim", 2.25, "box", "webkitMaskBoxImage", "-webkit-cross-fade(url(stripes-100.png), url(green-100.png), 25%)", 0.05],
</span><del>- ["anim", 2.25, ["box", "static:boxStatic"], "webkitMaskBoxImage", "-webkit-cross-fade(url(stripes-100.png), url(green-100.png), 25%)", 0.05]
</del><ins>+ ["anim", 2.25, ["box", "static:boxStatic"], "webkitMaskBoxImage", "cross-fade(url(stripes-100.png), url(green-100.png), 25%)", 0.05]
</ins><span class="cx"> ];
</span><span class="cx">
</span><span class="cx"> var doPixelTest = true;
</span></span></pre></div>
<a id="trunkLayoutTestsanimationscrossfadewebkitmaskimagehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/animations/cross-fade-webkit-mask-image.html (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/animations/cross-fade-webkit-mask-image.html        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/animations/cross-fade-webkit-mask-image.html        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx"> <script type="text/javascript" charset="utf-8">
</span><span class="cx"> const expectedValues = [
</span><span class="cx"> // [animation-name, time, element-id, property, expected-value, tolerance]
</span><del>- ["anim", 2.25, "box", "webkitMaskImage", "-webkit-cross-fade(url(stripes-100.png), url(green-100.png), 25%)", 0.05],
</del><ins>+ ["anim", 2.25, "box", "webkitMaskImage", "cross-fade(url(stripes-100.png), url(green-100.png), 25%)", 0.05],
</ins><span class="cx"> ["anim", 2.25, ["box", "static:boxStatic"], "webkitMaskImage", "-webkit-cross-fade(url(stripes-100.png), url(green-100.png), 25%)", 0.05]
</span><span class="cx"> ];
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsanimationsresourcesanimationtesthelpersjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/animations/resources/animation-test-helpers.js (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/animations/resources/animation-test-helpers.js        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/animations/resources/animation-test-helpers.js        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -72,6 +72,7 @@
</span><span class="cx"> switch (functionName) {
</span><span class="cx"> case "filter":
</span><span class="cx"> return parseFilterImage(functionValue);
</span><ins>+ case "cross-fade":
</ins><span class="cx"> case "-webkit-cross-fade":
</span><span class="cx"> return parseCrossFade(functionValue);
</span><span class="cx"> case "url":
</span><span class="lines">@@ -88,14 +89,14 @@
</span><span class="cx"> {
</span><span class="cx"> var matches = s.match("(.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\s*");
</span><span class="cx"> if (!matches) {
</span><del>- console.error("Parsing error on '-webkit-cross-fade()'.");
</del><ins>+ console.error("Parsing error on 'cross-fade()'.");
</ins><span class="cx"> return null;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> var from = parseCSSImage(matches[1]);
</span><span class="cx"> var to = parseCSSImage(matches[2]);
</span><span class="cx"> if (!from || !to) {
</span><del>- console.error("Parsing error on images passed to '-webkit-cross-fade()' ", s);
</del><ins>+ console.error("Parsing error on images passed to 'cross-fade()' ", s);
</ins><span class="cx"> return null;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -105,19 +106,19 @@
</span><span class="cx"> // Check if last char is '%' and rip it off.
</span><span class="cx"> // Normalize it to number.
</span><span class="cx"> if (fadeValue.search('%') != fadeValue.length - 1) {
</span><del>- console.error("Passed value to '-webkit-cross-fade()' is not a number or percentage ", fadeValue);
</del><ins>+ console.error("Passed value to 'cross-fade()' is not a number or percentage ", fadeValue);
</ins><span class="cx"> return null;
</span><span class="cx"> }
</span><span class="cx"> fadeValue = fadeValue.slice(0, fadeValue.length - 1);
</span><span class="cx"> if (isNaN(fadeValue)) {
</span><del>- console.error("Passed value to '-webkit-cross-fade()' is not a number or percentage ", fadeValue);
</del><ins>+ console.error("Passed value to 'cross-fade()' is not a number or percentage ", fadeValue);
</ins><span class="cx"> return null;
</span><span class="cx"> }
</span><span class="cx"> percent = parseFloat(fadeValue) / 100;
</span><span class="cx"> } else
</span><span class="cx"> percent = parseFloat(fadeValue);
</span><span class="cx">
</span><del>- return ["-webkit-cross-fade", from, to, percent];
</del><ins>+ return ["cross-fade", from, to, percent];
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // This should just be called by parseCSSImage.
</span><span class="lines">@@ -244,6 +245,7 @@
</span><span class="cx"> case "-webkit-filter":
</span><span class="cx"> return compareCSSImages(actual[1], expected[1], tolerance)
</span><span class="cx"> && compareFilterFunctions(actual[2], expected[2], tolerance);
</span><ins>+ case "cross-fade":
</ins><span class="cx"> case "-webkit-cross-fade":
</span><span class="cx"> return compareCSSImages(actual[1], expected[1], tolerance)
</span><span class="cx"> && compareCSSImages(actual[2], expected[2], tolerance)
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgetComputedStylecomputedstylecrossfadeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade-expected.txt (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade-expected.txt        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade-expected.txt        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -1,7 +1,8 @@
</span><del>--webkit-cross-fade
</del><ins>+cross-fade
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> PASS testCrossfade("opacity: 500%", "opacity") is "1"
</span><ins>+Prefixed
</ins><span class="cx"> PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 50%)", "background-image") is "-webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 0.5)"
</span><span class="cx"> PASS testCrossfade("background-image: -webkit-cross-fade(-webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), url(dummy://example.png), 50%)", "background-image") is "-webkit-cross-fade(-webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), url(dummy://example.png), 0.5)"
</span><span class="cx"> PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://c.png), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), 50%)", "background-image") is "-webkit-cross-fade(url(dummy://c.png), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), 0.5)"
</span><span class="lines">@@ -11,18 +12,34 @@
</span><span class="cx"> PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 5.0)", "background-image") is "-webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 1)"
</span><span class="cx"> PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 700%)", "background-image") is "-webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 1)"
</span><span class="cx"> PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), -20)", "background-image") is "-webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 0)"
</span><ins>+Unprefixed
+
+
+PASS testCrossfade("background-image: cross-fade(url(dummy://example.png), url(dummy://example.png), 50%)", "background-image") is "cross-fade(url(dummy://example.png), url(dummy://example.png), 0.5)"
+PASS testCrossfade("background-image: cross-fade(url(dummy://example.png), url(dummy://example.png), 1.0)", "background-image") is "cross-fade(url(dummy://example.png), url(dummy://example.png), 1)"
+Mixed
+
+
+PASS testCrossfade("background-image: -webkit-cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), url(dummy://example.png), 50%)", "background-image") is "-webkit-cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), url(dummy://example.png), 0.5)"
+PASS testCrossfade("background-image: -webkit-cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), 50%)", "background-image") is "-webkit-cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), 0.5)"
+PASS testCrossfade("background-image: cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), 50%)", "background-image") is "cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), 0.5)"
+Invalid values
+
+
</ins><span class="cx"> PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png))", "background-image") is "none"
</span><span class="cx"> PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png),)", "background-image") is "none"
</span><del>-PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png))", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(), url(dummy://example.png))", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(url(", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(10px 20% 5px #bbb)", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(-webkit-cross-fade(-webkit-cross-fade()))", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(20%, url(dummy://a.png), url(dummy://b.png))", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(url(dummy://a.png),)", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(,)", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(,url(dummy://a.png))", "background-image") is "none"
-PASS testCrossfade("background-image: -webkit-cross-fade(,,,,,)", "background-image") is "none"
</del><ins>+PASS testCrossfade("background-image: cross-fade(url(dummy://example.png), url(dummy://example.png))", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(url(dummy://example.png), url(dummy://example.png),)", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(url(dummy://example.png))", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(), url(dummy://example.png))", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(url(", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(10px 20% 5px #bbb)", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(cross-fade(cross-fade()))", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(20%, url(dummy://a.png), url(dummy://b.png))", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(url(dummy://a.png),)", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(,)", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(,url(dummy://a.png))", "background-image") is "none"
+PASS testCrossfade("background-image: cross-fade(,,,,,)", "background-image") is "none"
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgetComputedStylecomputedstylecrossfadehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade.html (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade.html        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade.html        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -17,14 +17,18 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-debug('<p>-webkit-cross-fade</p>');
</del><ins>+debug('<h2>cross-fade</h2>');
</ins><span class="cx">
</span><span class="cx"> // Valid
</span><span class="cx">
</span><span class="cx"> shouldBe('testCrossfade("opacity: 500%", "opacity")', '"1"');
</span><ins>+
+debug('Prefixed');
+
</ins><span class="cx"> shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 50%)", "background-image")', '"-webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 0.5)"');
</span><span class="cx"> shouldBe('testCrossfade("background-image: -webkit-cross-fade(-webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), url(dummy://example.png), 50%)", "background-image")', '"-webkit-cross-fade(-webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), url(dummy://example.png), 0.5)"');
</span><del>-shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://c.png), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), 50%)", "background-image")', '"-webkit-cross-fade(url(dummy://c.png), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), 0.5)"');
</del><ins>+shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://c.png), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), 50%)", "background-image")',
+ '"-webkit-cross-fade(url(dummy://c.png), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), 0.5)"');
</ins><span class="cx"> shouldBe('testCrossfade("background-image: -webkit-cross-fade(-webkit-linear-gradient(black, white), url(dummy://example.png), 10%)", "background-image")', '"-webkit-cross-fade(-webkit-linear-gradient(top, black, white), url(dummy://example.png), 0.1)"');
</span><span class="cx"> shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 1.0)", "background-image")', '"-webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 1)"');
</span><span class="cx"> shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 0.5)", "background-image")', '"-webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 0.5)"');
</span><span class="lines">@@ -34,22 +38,39 @@
</span><span class="cx">
</span><span class="cx"> shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), -20)", "background-image")', '"-webkit-cross-fade(url(dummy://example.png), url(dummy://example.png), 0)"');
</span><span class="cx">
</span><del>-// Invalid
</del><ins>+debug('<h2>Unprefixed</h2>');
</ins><span class="cx">
</span><ins>+shouldBe('testCrossfade("background-image: cross-fade(url(dummy://example.png), url(dummy://example.png), 50%)", "background-image")', '"cross-fade(url(dummy://example.png), url(dummy://example.png), 0.5)"');
+shouldBe('testCrossfade("background-image: cross-fade(url(dummy://example.png), url(dummy://example.png), 1.0)", "background-image")', '"cross-fade(url(dummy://example.png), url(dummy://example.png), 1)"');
+
+debug('<h2>Mixed</h2>');
+
+shouldBe('testCrossfade("background-image: -webkit-cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), url(dummy://example.png), 50%)", "background-image")',
+ '"-webkit-cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), url(dummy://example.png), 0.5)"');
+shouldBe('testCrossfade("background-image: -webkit-cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), 50%)", "background-image")',
+ '"-webkit-cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), 0.5)"');
+shouldBe('testCrossfade("background-image: cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 25%), 50%)", "background-image")',
+ '"cross-fade(cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), -webkit-cross-fade(url(dummy://a.png), url(dummy://b.png), 0.25), 0.5)"');
+
+debug('<h2>Invalid values</h2>');
+
</ins><span class="cx"> shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png))", "background-image")', '"none"');
</span><span class="cx"> shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png), url(dummy://example.png),)", "background-image")', '"none"');
</span><del>-shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://example.png))", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(), url(dummy://example.png))", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(10px 20% 5px #bbb)", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(-webkit-cross-fade(-webkit-cross-fade()))", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(20%, url(dummy://a.png), url(dummy://b.png))", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(url(dummy://a.png),)", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(,)", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(,url(dummy://a.png))", "background-image")', '"none"');
-shouldBe('testCrossfade("background-image: -webkit-cross-fade(,,,,,)", "background-image")', '"none"');
</del><span class="cx">
</span><ins>+shouldBe('testCrossfade("background-image: cross-fade(url(dummy://example.png), url(dummy://example.png))", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(url(dummy://example.png), url(dummy://example.png),)", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(url(dummy://example.png))", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(), url(dummy://example.png))", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(url(", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(10px 20% 5px #bbb)", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(cross-fade(cross-fade()))", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(20%, url(dummy://a.png), url(dummy://b.png))", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(url(dummy://a.png),)", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(,)", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(,url(dummy://a.png))", "background-image")', '"none"');
+shouldBe('testCrossfade("background-image: cross-fade(,,,,,)", "background-image")', '"none"');
</ins><span class="cx">
</span><ins>+
</ins><span class="cx"> </script>
</span><span class="cx">
</span><span class="cx"> <script src="../../../resources/js-test-post.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTeststransitionsresourcestransitiontesthelpersjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/transitions/resources/transition-test-helpers.js (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/transitions/resources/transition-test-helpers.js        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/LayoutTests/transitions/resources/transition-test-helpers.js        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">
</span><span class="cx"> function parseCrossFade(s)
</span><span class="cx"> {
</span><del>- var matches = s.match("-webkit-cross-fade\\((.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\)");
</del><ins>+ var matches = s.match("(?:-webkit-)?cross-fade\\((.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\)");
</ins><span class="cx">
</span><span class="cx"> if (!matches)
</span><span class="cx"> return null;
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/Source/WebCore/ChangeLog        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -1,3 +1,32 @@
</span><ins>+2016-05-13 Simon Fraser <simon.fraser@apple.com>
+
+ Unprefix -webkit-cross-fade()
+ https://bugs.webkit.org/show_bug.cgi?id=157632
+
+ Reviewed by Darin Adler.
+
+ Support unprefixed cross-fade() in addition to the prefixed value when parsing,
+ and have computed style round-trip the correct one.
+
+ If computed style is queried during an image transition, return an unprefixed
+ cross-fade(). If blending cross-fade values, only return the prefixed function if
+ both inputs are prefixed.
+
+ Tested by modified and existing tests.
+
+ * css/CSSCrossfadeValue.cpp:
+ (WebCore::CSSCrossfadeValue::customCSSText):
+ (WebCore::CSSCrossfadeValue::blend):
+ * css/CSSCrossfadeValue.h:
+ (WebCore::CSSCrossfadeValue::create):
+ (WebCore::CSSCrossfadeValue::isPrefixed):
+ (WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::isGeneratedImageValue):
+ (WebCore::CSSParser::parseGeneratedImage):
+ (WebCore::CSSParser::parseCrossfade):
+ * css/CSSParser.h:
+
</ins><span class="cx"> 2016-05-13 Yoav Weiss <yoav@yoav.ws>
</span><span class="cx">
</span><span class="cx"> ResourceTiming entries for cached resources and XHR
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSCrossfadeValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSCrossfadeValue.cpp (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSCrossfadeValue.cpp        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/Source/WebCore/css/CSSCrossfadeValue.cpp        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -69,7 +69,10 @@
</span><span class="cx"> String CSSCrossfadeValue::customCSSText() const
</span><span class="cx"> {
</span><span class="cx"> StringBuilder result;
</span><del>- result.appendLiteral("-webkit-cross-fade(");
</del><ins>+ if (m_isPrefixed)
+ result.appendLiteral("-webkit-cross-fade(");
+ else
+ result.appendLiteral("cross-fade(");
</ins><span class="cx"> result.append(m_fromValue->cssText());
</span><span class="cx"> result.appendLiteral(", ");
</span><span class="cx"> result.append(m_toValue->cssText());
</span><span class="lines">@@ -202,7 +205,7 @@
</span><span class="cx"> auto fromImageValue = CSSImageValue::create(m_cachedFromImage->url(), fromStyledImage.get());
</span><span class="cx"> auto toImageValue = CSSImageValue::create(m_cachedToImage->url(), toStyledImage.get());
</span><span class="cx">
</span><del>- RefPtr<CSSCrossfadeValue> crossfadeValue = CSSCrossfadeValue::create(WTFMove(fromImageValue), WTFMove(toImageValue));
</del><ins>+ RefPtr<CSSCrossfadeValue> crossfadeValue = CSSCrossfadeValue::create(WTFMove(fromImageValue), WTFMove(toImageValue), from.isPrefixed() && isPrefixed());
</ins><span class="cx">
</span><span class="cx"> double fromPercentage = from.m_percentageValue->getDoubleValue();
</span><span class="cx"> if (from.m_percentageValue->isPercentage())
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSCrossfadeValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSCrossfadeValue.h (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSCrossfadeValue.h        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/Source/WebCore/css/CSSCrossfadeValue.h        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -43,9 +43,9 @@
</span><span class="cx"> class CSSCrossfadeValue : public CSSImageGeneratorValue {
</span><span class="cx"> friend class CrossfadeSubimageObserverProxy;
</span><span class="cx"> public:
</span><del>- static Ref<CSSCrossfadeValue> create(PassRefPtr<CSSValue> fromValue, PassRefPtr<CSSValue> toValue)
</del><ins>+ static Ref<CSSCrossfadeValue> create(PassRefPtr<CSSValue> fromValue, PassRefPtr<CSSValue> toValue, bool prefixed = false)
</ins><span class="cx"> {
</span><del>- return adoptRef(*new CSSCrossfadeValue(fromValue, toValue));
</del><ins>+ return adoptRef(*new CSSCrossfadeValue(fromValue, toValue, prefixed));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ~CSSCrossfadeValue();
</span><span class="lines">@@ -56,6 +56,7 @@
</span><span class="cx"> bool isFixedSize() const { return true; }
</span><span class="cx"> FloatSize fixedSize(const RenderElement*);
</span><span class="cx">
</span><ins>+ bool isPrefixed() const { return m_isPrefixed; }
</ins><span class="cx"> bool isPending() const;
</span><span class="cx"> bool knownToBeOpaque(const RenderElement*) const;
</span><span class="cx">
</span><span class="lines">@@ -72,11 +73,12 @@
</span><span class="cx"> bool equalInputImages(const CSSCrossfadeValue&) const;
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- CSSCrossfadeValue(PassRefPtr<CSSValue> fromValue, PassRefPtr<CSSValue> toValue)
</del><ins>+ CSSCrossfadeValue(PassRefPtr<CSSValue> fromValue, PassRefPtr<CSSValue> toValue, bool prefixed)
</ins><span class="cx"> : CSSImageGeneratorValue(CrossfadeClass)
</span><span class="cx"> , m_fromValue(fromValue)
</span><span class="cx"> , m_toValue(toValue)
</span><span class="cx"> , m_crossfadeSubimageObserver(this)
</span><ins>+ , m_isPrefixed(prefixed)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -108,6 +110,7 @@
</span><span class="cx"> RefPtr<Image> m_generatedImage;
</span><span class="cx">
</span><span class="cx"> CrossfadeSubimageObserverProxy m_crossfadeSubimageObserver;
</span><ins>+ bool m_isPrefixed { false };
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSParser.cpp (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSParser.cpp        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/Source/WebCore/css/CSSParser.cpp        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -4538,6 +4538,7 @@
</span><span class="cx">
</span><span class="cx"> valueList.next();
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> void CSSParser::parse3ValuesFillPosition(CSSParserValueList& valueList, RefPtr<CSSPrimitiveValue>& value1, RefPtr<CSSPrimitiveValue>& value2, RefPtr<CSSPrimitiveValue>&& parsedValue1, RefPtr<CSSPrimitiveValue>&& parsedValue2)
</span><span class="cx"> {
</span><span class="cx"> unsigned cumulativeFlags = 0;
</span><span class="lines">@@ -9451,6 +9452,7 @@
</span><span class="cx"> || equalLettersIgnoringASCIICase(value.function->name, "-webkit-repeating-radial-gradient(")
</span><span class="cx"> || equalLettersIgnoringASCIICase(value.function->name, "repeating-radial-gradient(")
</span><span class="cx"> || equalLettersIgnoringASCIICase(value.function->name, "-webkit-canvas(")
</span><ins>+ || equalLettersIgnoringASCIICase(value.function->name, "cross-fade(")
</ins><span class="cx"> || equalLettersIgnoringASCIICase(value.function->name, "-webkit-cross-fade(")
</span><span class="cx"> || equalLettersIgnoringASCIICase(value.function->name, "filter(")
</span><span class="cx"> || equalLettersIgnoringASCIICase(value.function->name, "-webkit-filter(")
</span><span class="lines">@@ -9495,8 +9497,11 @@
</span><span class="cx"> return parseCanvas(valueList, value);
</span><span class="cx">
</span><span class="cx"> if (equalLettersIgnoringASCIICase(parserValue.function->name, "-webkit-cross-fade("))
</span><del>- return parseCrossfade(valueList, value);
</del><ins>+ return parseCrossfade(valueList, value, true);
</ins><span class="cx">
</span><ins>+ if (equalLettersIgnoringASCIICase(parserValue.function->name, "cross-fade("))
+ return parseCrossfade(valueList, value, false);
+
</ins><span class="cx"> if (equalLettersIgnoringASCIICase(parserValue.function->name, "filter(") || equalLettersIgnoringASCIICase(parserValue.function->name, "-webkit-filter("))
</span><span class="cx"> return parseFilterImage(valueList, value);
</span><span class="cx">
</span><span class="lines">@@ -9547,7 +9552,7 @@
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool CSSParser::parseCrossfade(CSSParserValueList& valueList, RefPtr<CSSValue>& crossfade)
</del><ins>+bool CSSParser::parseCrossfade(CSSParserValueList& valueList, RefPtr<CSSValue>& crossfade, bool prefixed)
</ins><span class="cx"> {
</span><span class="cx"> RefPtr<CSSCrossfadeValue> result;
</span><span class="cx">
</span><span class="lines">@@ -9591,7 +9596,7 @@
</span><span class="cx"> else
</span><span class="cx"> return false;
</span><span class="cx">
</span><del>- result = CSSCrossfadeValue::create(fromImageValue, toImageValue);
</del><ins>+ result = CSSCrossfadeValue::create(fromImageValue, toImageValue, prefixed);
</ins><span class="cx"> result->setPercentage(percentage);
</span><span class="cx">
</span><span class="cx"> crossfade = result;
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSParser.h (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSParser.h        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/Source/WebCore/css/CSSParser.h        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -304,7 +304,7 @@
</span><span class="cx"> bool parseRadialGradient(CSSParserValueList&, RefPtr<CSSValue>&, CSSGradientRepeat repeating);
</span><span class="cx"> bool parseGradientColorStops(CSSParserValueList&, CSSGradientValue&, bool expectComma);
</span><span class="cx">
</span><del>- bool parseCrossfade(CSSParserValueList&, RefPtr<CSSValue>&);
</del><ins>+ bool parseCrossfade(CSSParserValueList&, RefPtr<CSSValue>&, bool prefixed);
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(CSS_IMAGE_RESOLUTION)
</span><span class="cx"> RefPtr<CSSValue> parseImageResolution();
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/Source/WebInspectorUI/ChangeLog        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-05-13 Simon Fraser <simon.fraser@apple.com>
+
+ Unprefix -webkit-cross-fade()
+ https://bugs.webkit.org/show_bug.cgi?id=157632
+
+ Reviewed by Darin Adler.
+
+ * UserInterface/Models/CSSKeywordCompletions.js:
+
</ins><span class="cx"> 2016-05-13 Matt Baker <mattbaker@apple.com>
</span><span class="cx">
</span><span class="cx"> Web Inspector: Typing "layout" in filter for Layout and Rendering Timeline matches everything
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsCSSKeywordCompletionsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js (200887 => 200888)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js        2016-05-13 22:34:29 UTC (rev 200887)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js        2016-05-13 22:40:52 UTC (rev 200888)
</span><span class="lines">@@ -162,10 +162,10 @@
</span><span class="cx"> "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
</span><span class="cx"> ],
</span><span class="cx"> "content": [
</span><del>- "list-item", "close-quote", "no-close-quote", "no-open-quote", "open-quote", "attr()", "counter()", "counters()", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "-webkit-cross-fade()", "-webkit-image-set()"
</del><ins>+ "list-item", "close-quote", "no-close-quote", "no-open-quote", "open-quote", "attr()", "counter()", "counters()", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "-webkit-image-set()"
</ins><span class="cx"> ],
</span><span class="cx"> "list-style-image": [
</span><del>- "none", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "-webkit-cross-fade()", "-webkit-image-set()"
</del><ins>+ "none", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "-webkit-image-set()"
</ins><span class="cx"> ],
</span><span class="cx"> "clear": [
</span><span class="cx"> "none", "left", "right", "both"
</span><span class="lines">@@ -243,7 +243,7 @@
</span><span class="cx"> "a3", "a4", "a5", "b4", "b5", "landscape", "ledger", "legal", "letter", "portrait"
</span><span class="cx"> ],
</span><span class="cx"> "background": [
</span><del>- "none", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "-webkit-cross-fade()", "-webkit-image-set()",
</del><ins>+ "none", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "-webkit-image-set()",
</ins><span class="cx"> "repeat", "repeat-x", "repeat-y", "no-repeat", "space", "round",
</span><span class="cx"> "scroll", "fixed", "local",
</span><span class="cx"> "auto", "contain", "cover",
</span><span class="lines">@@ -251,7 +251,7 @@
</span><span class="cx"> "border-box", "padding-box", "content-box"
</span><span class="cx"> ],
</span><span class="cx"> "background-image": [
</span><del>- "none", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "-webkit-cross-fade()", "-webkit-image-set()"
</del><ins>+ "none", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "-webkit-image-set()"
</ins><span class="cx"> ],
</span><span class="cx"> "background-size": [
</span><span class="cx"> "auto", "contain", "cover"
</span><span class="lines">@@ -474,7 +474,7 @@
</span><span class="cx"> "none", "auto", "manual"
</span><span class="cx"> ],
</span><span class="cx"> "border-image": [
</span><del>- "repeat", "stretch", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "-webkit-cross-fade()", "-webkit-image-set()"
</del><ins>+ "repeat", "stretch", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "-webkit-image-set()"
</ins><span class="cx"> ],
</span><span class="cx"> "border-image-repeat": [
</span><span class="cx"> "repeat", "stretch", "space", "round"
</span></span></pre>
</div>
</div>
</body>
</html>