<!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>[204793] releases/WebKitGTK/webkit-2.12</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/204793">204793</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-08-23 03:09:25 -0700 (Tue, 23 Aug 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/202712">r202712</a> - Drawing an SVG image into a &lt;canvas&gt; that is not in the DOM draws the wrong region
https://bugs.webkit.org/show_bug.cgi?id=159276

Patch by Antoine Quint &lt;graouts@apple.com&gt; on 2016-06-30
Reviewed by Dean Jackson.

Source/WebCore:

In the event where the &lt;img&gt; element that we are passing to CanvasRenderingContext2D.drawImage()
points to an SVG resource, we ensure that the container for the SVG image is sized to match the
HTML element. The necessity for setting this container size, explained in webkit.org/b/148845,
is that we must ensure a cached image does not have an outdated container size.

Tests: svg/as-image/img-with-svg-resource-in-dom-and-drawImage.html
       svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage.html
       svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage.html
       svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage.html

* html/canvas/CanvasRenderingContext2D.cpp:
(WebCore::CanvasRenderingContext2D::drawImage):

LayoutTests:

Adding a series of new tests to check we correctly respect mismatching source and
destination rectangles with SVG images as sources, both with the source &lt;img&gt; element
being present and absent from the DOM, and explicit sizes being set or not set.

* svg/as-image/img-with-svg-resource-in-dom-and-drawImage-expected.html: Added.
* svg/as-image/img-with-svg-resource-in-dom-and-drawImage.html: Added.
* svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage-expected.html: Added.
* svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage.html: Added.
* svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage-expected.html: Added.
* svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage.html: Added.
* svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage-expected.html: Added.
* svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourceWebCorehtmlcanvasCanvasRenderingContext2Dcpp">releases/WebKitGTK/webkit-2.12/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourceindomanddrawImageexpectedhtml">releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-and-drawImage-expected.html</a></li>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourceindomanddrawImagehtml">releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-and-drawImage.html</a></li>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourceindomnosizeanddrawImageexpectedhtml">releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage-expected.html</a></li>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourceindomnosizeanddrawImagehtml">releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage.html</a></li>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourcenotindomanddrawImageexpectedhtml">releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage-expected.html</a></li>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourcenotindomanddrawImagehtml">releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage.html</a></li>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourcenotindomnosizeanddrawImageexpectedhtml">releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage-expected.html</a></li>
<li><a href="#releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourcenotindomnosizeanddrawImagehtml">releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit212LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog (204792 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog        2016-08-23 10:05:25 UTC (rev 204792)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2016-06-30  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        Drawing an SVG image into a &lt;canvas&gt; that is not in the DOM draws the wrong region
+        https://bugs.webkit.org/show_bug.cgi?id=159276
+
+        Reviewed by Dean Jackson.
+
+        Adding a series of new tests to check we correctly respect mismatching source and
+        destination rectangles with SVG images as sources, both with the source &lt;img&gt; element
+        being present and absent from the DOM, and explicit sizes being set or not set.
+
+        * svg/as-image/img-with-svg-resource-in-dom-and-drawImage-expected.html: Added.
+        * svg/as-image/img-with-svg-resource-in-dom-and-drawImage.html: Added.
+        * svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage-expected.html: Added.
+        * svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage.html: Added.
+        * svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage-expected.html: Added.
+        * svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage.html: Added.
+        * svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage-expected.html: Added.
+        * svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage.html: Added.
+
</ins><span class="cx"> 2016-06-15  Antti Koivisto  &lt;antti@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         GoogleMaps transit schedule explorer comes up blank initially
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourceindomanddrawImageexpectedhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-and-drawImage-expected.html (0 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-and-drawImage-expected.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-and-drawImage-expected.html        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;body&gt;
+&lt;p&gt;This test shows a &lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt; element in which we draw the SVG image with the source rectangle set to fit the green rectangle from the SVG image and the destination rectangle as the bounds of the canvas element. In this example, the source &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; is in the DOM and is explicitly sized.&lt;/p&gt;
+&lt;div style=&quot;background-color: green; width: 200px; height: 200px;&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourceindomanddrawImagehtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-and-drawImage.html (0 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-and-drawImage.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-and-drawImage.html        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+&lt;body&gt;
+&lt;p&gt;This test shows a &lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt; element in which we draw the SVG image with the source rectangle set to fit the green rectangle from the SVG image and the destination rectangle as the bounds of the canvas element. In this example, the source &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; is in the DOM and is explicitly sized.&lt;/p&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+if (window.testRunner)
+    testRunner.waitUntilDone();
+
+var width = 200;
+var height = 200;
+var svgData = 'data:image/svg+xml,&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 200 200&quot;&gt;&lt;rect width=&quot;200&quot; height=&quot;200&quot; fill=&quot;red&quot; /&gt;&lt;rect x=&quot;20&quot; y=&quot;20&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;green&quot; /&gt;&lt;/svg&gt;';
+
+var canvas = document.body.appendChild(document.createElement(&quot;canvas&quot;));
+canvas.width = width;
+canvas.height = height;
+
+var image = document.body.appendChild(new Image(width, height));
+image.src = svgData;
+image.style.visibility = &quot;hidden&quot;;
+
+if (image.complete)
+    draw();
+else
+    image.addEventListener(&quot;load&quot;, draw);
+
+function draw() {
+    canvas.getContext(&quot;2d&quot;).drawImage(image, 20, 20, 40, 40, 0, 0, width, height);
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+&lt;/script&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourceindomnosizeanddrawImageexpectedhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage-expected.html (0 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage-expected.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage-expected.html        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;body&gt;
+&lt;p&gt;This test shows a &lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt; element in which we draw the SVG image with the source rectangle set to fit the green rectangle from the SVG image and the destination rectangle as the bounds of the canvas element. In this example, the source &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; is in the DOM and is not explicitly sized.&lt;/p&gt;
+&lt;div style=&quot;background-color: green; width: 200px; height: 200px;&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourceindomnosizeanddrawImagehtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage.html (0 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage.html        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+&lt;body&gt;
+&lt;p&gt;This test shows a &lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt; element in which we draw the SVG image with the source rectangle set to fit the green rectangle from the SVG image and the destination rectangle as the bounds of the canvas element. In this example, the source &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; is in the DOM and is not explicitly sized.&lt;/p&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+if (window.testRunner)
+    testRunner.waitUntilDone();
+
+var width = 200;
+var height = 200;
+var svgData = 'data:image/svg+xml,&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 200 200&quot;&gt;&lt;rect width=&quot;200&quot; height=&quot;200&quot; fill=&quot;red&quot; /&gt;&lt;rect x=&quot;20&quot; y=&quot;20&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;green&quot; /&gt;&lt;/svg&gt;';
+
+var canvas = document.body.appendChild(document.createElement(&quot;canvas&quot;));
+canvas.width = width;
+canvas.height = height;
+
+var image = document.body.appendChild(new Image());
+image.src = svgData;
+image.style.width = `${width}px`;
+image.style.height = `${height}px`;
+image.style.visibility = &quot;hidden&quot;;
+
+if (image.complete)
+    draw();
+else
+    image.addEventListener(&quot;load&quot;, draw);
+
+function draw() {
+    canvas.getContext(&quot;2d&quot;).drawImage(image, 20, 20, 40, 40, 0, 0, width, height);
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+&lt;/script&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourcenotindomanddrawImageexpectedhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage-expected.html (0 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage-expected.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage-expected.html        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;body&gt;
+&lt;p&gt;This test shows a &lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt; element in which we draw the SVG image with the source rectangle set to fit the green rectangle from the SVG image and the destination rectangle as the bounds of the canvas element. In this example, the source &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; is not in the DOM and is explicitly sized.&lt;/p&gt;
+&lt;div style=&quot;background-color: green; width: 200px; height: 200px;&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourcenotindomanddrawImagehtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage.html (0 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage.html        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+&lt;body&gt;
+&lt;p&gt;This test shows a &lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt; element in which we draw the SVG image with the source rectangle set to fit the green rectangle from the SVG image and the destination rectangle as the bounds of the canvas element. In this example, the source &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; is not in the DOM and is explicitly sized.&lt;/p&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+if (window.testRunner)
+    testRunner.waitUntilDone();
+
+var width = 200;
+var height = 200;
+var svgData = 'data:image/svg+xml,&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 200 200&quot;&gt;&lt;rect width=&quot;200&quot; height=&quot;200&quot; fill=&quot;red&quot; /&gt;&lt;rect x=&quot;20&quot; y=&quot;20&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;green&quot; /&gt;&lt;/svg&gt;';
+
+var canvas = document.body.appendChild(document.createElement(&quot;canvas&quot;));
+canvas.width = width;
+canvas.height = height;
+
+var image = new Image(width, height);
+image.src = svgData;
+
+if (image.complete)
+    draw();
+else
+    image.addEventListener(&quot;load&quot;, draw);
+
+function draw() {
+    var ctx = canvas.getContext(&quot;2d&quot;);
+    ctx.imageSmoothingEnabled = false;
+    ctx.drawImage(image, 20, 20, 40, 40, 0, 0, width, height);
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+&lt;/script&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourcenotindomnosizeanddrawImageexpectedhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage-expected.html (0 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage-expected.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage-expected.html        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;body&gt;
+&lt;p&gt;This test shows a &lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt; element in which we draw the SVG image with the source rectangle set to fit the green rectangle from the SVG image and the destination rectangle as the bounds of the canvas element. In this example, the source &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; is not in the DOM and is not explicitly sized.&lt;/p&gt;
+&lt;div style=&quot;background-color: green; width: 200px; height: 200px;&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212LayoutTestssvgasimageimgwithsvgresourcenotindomnosizeanddrawImagehtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage.html (0 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage.html        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+&lt;body&gt;
+&lt;p&gt;This test shows a &lt;code&gt;&amp;lt;canvas&gt;&lt;/code&gt; element in which we draw the SVG image with the source rectangle set to fit the green rectangle from the SVG image and the destination rectangle as the bounds of the canvas element. In this example, the source &lt;code&gt;&amp;lt;img&gt;&lt;/code&gt; is not in the DOM and is not explicitly sized.&lt;/p&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+
+if (window.testRunner)
+    testRunner.waitUntilDone();
+
+var width = 200;
+var height = 200;
+var svgData = 'data:image/svg+xml,&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 200 200&quot;&gt;&lt;rect width=&quot;200&quot; height=&quot;200&quot; fill=&quot;red&quot; /&gt;&lt;rect x=&quot;20&quot; y=&quot;20&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;green&quot; /&gt;&lt;/svg&gt;';
+
+var canvas = document.body.appendChild(document.createElement(&quot;canvas&quot;));
+canvas.width = width;
+canvas.height = height;
+
+var image = new Image();
+image.src = svgData;
+
+if (image.complete)
+    draw();
+else
+    image.addEventListener(&quot;load&quot;, draw);
+
+function draw() {
+    canvas.getContext(&quot;2d&quot;).drawImage(image, 20, 20, 40, 40, 0, 0, width, height);
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+&lt;/script&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog (204792 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog        2016-08-23 10:05:25 UTC (rev 204792)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2016-06-30  Antoine Quint  &lt;graouts@apple.com&gt;
+
+        Drawing an SVG image into a &lt;canvas&gt; that is not in the DOM draws the wrong region
+        https://bugs.webkit.org/show_bug.cgi?id=159276
+
+        Reviewed by Dean Jackson.
+
+        In the event where the &lt;img&gt; element that we are passing to CanvasRenderingContext2D.drawImage()
+        points to an SVG resource, we ensure that the container for the SVG image is sized to match the
+        HTML element. The necessity for setting this container size, explained in webkit.org/b/148845,
+        is that we must ensure a cached image does not have an outdated container size.
+
+        Tests: svg/as-image/img-with-svg-resource-in-dom-and-drawImage.html
+               svg/as-image/img-with-svg-resource-in-dom-no-size-and-drawImage.html
+               svg/as-image/img-with-svg-resource-not-in-dom-and-drawImage.html
+               svg/as-image/img-with-svg-resource-not-in-dom-no-size-and-drawImage.html
+
+        * html/canvas/CanvasRenderingContext2D.cpp:
+        (WebCore::CanvasRenderingContext2D::drawImage):
+
</ins><span class="cx"> 2016-06-15  Antti Koivisto  &lt;antti@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         GoogleMaps transit schedule explorer comes up blank initially
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourceWebCorehtmlcanvasCanvasRenderingContext2Dcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp (204792 => 204793)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp        2016-08-23 10:05:25 UTC (rev 204792)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp        2016-08-23 10:09:25 UTC (rev 204793)
</span><span class="lines">@@ -1458,7 +1458,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (image-&gt;isSVGImage()) {
</span><span class="cx">         image-&gt;setImageObserver(nullptr);
</span><del>-        image-&gt;setContainerSize(normalizedSrcRect.size());
</del><ins>+        image-&gt;setContainerSize(imageRect.size());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (rectContainsCanvas(normalizedDstRect)) {
</span></span></pre>
</div>
</div>

</body>
</html>