<!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>[209961] 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/209961">209961</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-12-17 02:33:12 -0800 (Sat, 17 Dec 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Cloned CachedResource should not have an empty response
https://bugs.webkit.org/show_bug.cgi?id=165947
Patch by Youenn Fablet <youenn@apple.com> on 2016-12-17
Reviewed by Sam Weinig.
Source/WebCore:
Test: http/tests/loading/reusing-cached-stylesheet-from-different-domain.html
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::setBodyDataFrom): Copying the response to the cloned resource.
Even though the issue is appearing for stylesheets only, it is safer to do that for all cloned ressources.
LayoutTests:
This new test is working as follow:
- A first frame is loaded. As part of it, it will load an absolute URL CSS stylesheet that contains a relative URL to import a CSS stylesheet.
This second stylesheet will make the background as green.
- Once done, a second frame is loaded (same HTML but from a different domain) with the same absolute URL CSS stylesheet.
The relative URL stylesheet should use the absolute URL of the CSS stylesheet as base.
If it is using the frame as base, the loaded CSS will change background to red.
* http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.css.php: Added.
* http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.html: Added.
* http/tests/loading/resources/imported-stylesheet-varying-according-domain.css.php: Added.
* http/tests/loading/reusing-cached-stylesheet-from-different-domain-expected.html: Added.
* http/tests/loading/reusing-cached-stylesheet-from-different-domain.html: Added.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedResourcecpp">trunk/Source/WebCore/loader/cache/CachedResource.cpp</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestsloadingresourcescachedstylesheetfromdifferentdomainframecssphp">trunk/LayoutTests/http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.css.php</a></li>
<li><a href="#trunkLayoutTestshttptestsloadingresourcescachedstylesheetfromdifferentdomainframehtml">trunk/LayoutTests/http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.html</a></li>
<li><a href="#trunkLayoutTestshttptestsloadingresourcesimportedstylesheetvaryingaccordingdomaincssphp">trunk/LayoutTests/http/tests/loading/resources/imported-stylesheet-varying-according-domain.css.php</a></li>
<li><a href="#trunkLayoutTestshttptestsloadingreusingcachedstylesheetfromdifferentdomainexpectedhtml">trunk/LayoutTests/http/tests/loading/reusing-cached-stylesheet-from-different-domain-expected.html</a></li>
<li><a href="#trunkLayoutTestshttptestsloadingreusingcachedstylesheetfromdifferentdomainhtml">trunk/LayoutTests/http/tests/loading/reusing-cached-stylesheet-from-different-domain.html</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (209960 => 209961)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-12-17 07:29:17 UTC (rev 209960)
+++ trunk/LayoutTests/ChangeLog        2016-12-17 10:33:12 UTC (rev 209961)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2016-12-17 Youenn Fablet <youenn@apple.com>
+
+ Cloned CachedResource should not have an empty response
+ https://bugs.webkit.org/show_bug.cgi?id=165947
+
+ Reviewed by Sam Weinig.
+
+ This new test is working as follow:
+ - A first frame is loaded. As part of it, it will load an absolute URL CSS stylesheet that contains a relative URL to import a CSS stylesheet.
+ This second stylesheet will make the background as green.
+ - Once done, a second frame is loaded (same HTML but from a different domain) with the same absolute URL CSS stylesheet.
+ The relative URL stylesheet should use the absolute URL of the CSS stylesheet as base.
+ If it is using the frame as base, the loaded CSS will change background to red.
+
+ * http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.css.php: Added.
+ * http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.html: Added.
+ * http/tests/loading/resources/imported-stylesheet-varying-according-domain.css.php: Added.
+ * http/tests/loading/reusing-cached-stylesheet-from-different-domain-expected.html: Added.
+ * http/tests/loading/reusing-cached-stylesheet-from-different-domain.html: Added.
+
</ins><span class="cx"> 2016-12-16 Darin Adler <darin@apple.com>
</span><span class="cx">
</span><span class="cx"> Remove all custom bindings from media streams, using dictionaries instead
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsloadingresourcescachedstylesheetfromdifferentdomainframecssphp"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.css.php (0 => 209961)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.css.php         (rev 0)
+++ trunk/LayoutTests/http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.css.php        2016-12-17 10:33:12 UTC (rev 209961)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+<?php
+
+header("Content-Type: text/css");
+header("Cache-Control: public, max-age=264");
+
+echo ("@import \"imported-stylesheet-varying-according-domain.css.php?domain=127.0.0.1:8000\"");
+exit;
+?>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsloadingresourcescachedstylesheetfromdifferentdomainframehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.html (0 => 209961)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.html         (rev 0)
+++ trunk/LayoutTests/http/tests/loading/resources/cached-stylesheet-from-different-domain-frame.html        2016-12-17 10:33:12 UTC (rev 209961)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="http://127.0.0.1:8000/loading/resources/cached-stylesheet-from-different-domain-frame.css.php"/>
+ </head>
+ <body>
+ <p>
+ Background should be green.
+ </p>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsloadingresourcesimportedstylesheetvaryingaccordingdomaincssphp"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/loading/resources/imported-stylesheet-varying-according-domain.css.php (0 => 209961)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/loading/resources/imported-stylesheet-varying-according-domain.css.php         (rev 0)
+++ trunk/LayoutTests/http/tests/loading/resources/imported-stylesheet-varying-according-domain.css.php        2016-12-17 10:33:12 UTC (rev 209961)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+<?php
+header("Access-Control-Allow-Origin: *");
+
+$color = $_SERVER['HTTP_HOST'] === $_GET['domain'] ? "green" : "red";
+header("Content-Type: text/css");
+echo("body { background-color: " . $color . ";}");
+?>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsloadingreusingcachedstylesheetfromdifferentdomainexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/loading/reusing-cached-stylesheet-from-different-domain-expected.html (0 => 209961)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/loading/reusing-cached-stylesheet-from-different-domain-expected.html         (rev 0)
+++ trunk/LayoutTests/http/tests/loading/reusing-cached-stylesheet-from-different-domain-expected.html        2016-12-17 10:33:12 UTC (rev 209961)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <body>
+ <p>
+ <iframe src="resources/cached-stylesheet-from-different-domain-frame.html"></iframe>
+ </p>
+ <p>
+ <iframe src="resources/cached-stylesheet-from-different-domain-frame.html"></iframe>
+ </p>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsloadingreusingcachedstylesheetfromdifferentdomainhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/loading/reusing-cached-stylesheet-from-different-domain.html (0 => 209961)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/loading/reusing-cached-stylesheet-from-different-domain.html         (rev 0)
+++ trunk/LayoutTests/http/tests/loading/reusing-cached-stylesheet-from-different-domain.html        2016-12-17 10:33:12 UTC (rev 209961)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <body>
+ <script>
+if (window.testRunner)
+ testRunner.waitUntilDone();
+
+const timeToLoadFrame = 200;
+function loadSecondFrame()
+{
+ // We only load the second frame after the first one is fully loaded so that frame 1 CSS stylesheet is loaded and will be cloned for frame2
+ setTimeout(() => {
+ let frame2 = document.getElementById('frame2');
+ frame2.src = 'http://localhost:8000/loading/resources/cached-stylesheet-from-different-domain-frame.html';
+ frame2.onload = () => {
+ if (window.testRunner)
+ setTimeout(() => { testRunner.notifyDone(); }, timeToLoadFrame);
+ };
+ }, timeToLoadFrame);
+}
+ </script>
+
+ <p>
+ <iframe src="resources/cached-stylesheet-from-different-domain-frame.html" onload="loadSecondFrame()"></iframe>
+ </p>
+ <p>
+ <iframe id="frame2"></iframe>
+ </p>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (209960 => 209961)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-17 07:29:17 UTC (rev 209960)
+++ trunk/Source/WebCore/ChangeLog        2016-12-17 10:33:12 UTC (rev 209961)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-12-17 Youenn Fablet <youenn@apple.com>
+
+ Cloned CachedResource should not have an empty response
+ https://bugs.webkit.org/show_bug.cgi?id=165947
+
+ Reviewed by Sam Weinig.
+
+ Test: http/tests/loading/reusing-cached-stylesheet-from-different-domain.html
+
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::setBodyDataFrom): Copying the response to the cloned resource.
+ Even though the issue is appearing for stylesheets only, it is safer to do that for all cloned ressources.
+
</ins><span class="cx"> 2016-12-16 Brady Eidson <beidson@apple.com>
</span><span class="cx">
</span><span class="cx"> IndexedDB: Refactor SQLiteIDBCursor to prepare for cursor prefetching.
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedResourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (209960 => 209961)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedResource.cpp        2016-12-17 07:29:17 UTC (rev 209960)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp        2016-12-17 10:33:12 UTC (rev 209961)
</span><span class="lines">@@ -297,6 +297,7 @@
</span><span class="cx"> void CachedResource::setBodyDataFrom(const CachedResource& resource)
</span><span class="cx"> {
</span><span class="cx"> m_data = resource.m_data;
</span><ins>+ m_response = resource.m_response;
</ins><span class="cx"> setDecodedSize(resource.decodedSize());
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre>
</div>
</div>
</body>
</html>