<!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>[172191] trunk/Source</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/172191">172191</a></dd>
<dt>Author</dt> <dd>aestes@apple.com</dd>
<dt>Date</dt> <dd>2014-08-06 17:16:36 -0700 (Wed, 06 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] Subresources referenced in converted QuickLook documents sometimes fail to load
https://bugs.webkit.org/show_bug.cgi?id=135676

Reviewed by David Kilzer.

Source/WebCore:

* loader/DocumentLoader.h:
(WebCore::DocumentLoader::setQuickLookHandle):
(WebCore::DocumentLoader::quickLookHandle):

Source/WebKit2:

QuickLookHandle needs to stay alive in order for its NSURLProtocol to service subresource loads originating
from the converted HTML document. Some of these loads happen dynamically after the main resource finishes
loading, so we cannot tie the lifetime of the QuickLookHandle to that of the main resource's ResourceLoader.
Instead, give ownership of the QuickLookHandle to DocumentLoader.

* WebProcess/Network/WebResourceLoader.cpp:
(WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo): Stored the created QuickLookHandle in DocumentLoader.
(WebKit::WebResourceLoader::didReceiveData): Accessed DocumentLoader's QuickLookHandle.
(WebKit::WebResourceLoader::didFinishResourceLoad): Ditto.
(WebKit::WebResourceLoader::didFailResourceLoad): Ditto.
(WebKit::WebResourceLoader::didReceiveResource): Ditto.
* WebProcess/Network/WebResourceLoader.h: Removed m_quickLookHandle.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoaderh">trunk/Source/WebCore/loader/DocumentLoader.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessNetworkWebResourceLoadercpp">trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessNetworkWebResourceLoaderh">trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (172190 => 172191)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-08-07 00:15:22 UTC (rev 172190)
+++ trunk/Source/WebCore/ChangeLog        2014-08-07 00:16:36 UTC (rev 172191)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2014-08-06  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [iOS] Subresources referenced in converted QuickLook documents sometimes fail to load
+        https://bugs.webkit.org/show_bug.cgi?id=135676
+
+        Reviewed by David Kilzer.
+
+        * loader/DocumentLoader.h:
+        (WebCore::DocumentLoader::setQuickLookHandle):
+        (WebCore::DocumentLoader::quickLookHandle):
+
</ins><span class="cx"> 2014-08-06  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r168119): Album flipping animation doesn’t work
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.h (172190 => 172191)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.h        2014-08-07 00:15:22 UTC (rev 172190)
+++ trunk/Source/WebCore/loader/DocumentLoader.h        2014-08-07 00:16:36 UTC (rev 172191)
</span><span class="lines">@@ -51,6 +51,10 @@
</span><span class="cx"> #include &lt;wtf/RunLoopTimer.h&gt;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if USE(QUICK_LOOK)
+#include &quot;QuickLook.h&quot;
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx">     class ApplicationCacheHost;
</span><span class="lines">@@ -259,6 +263,11 @@
</span><span class="cx">         // The URL of the document resulting from this DocumentLoader.
</span><span class="cx">         URL documentURL() const;
</span><span class="cx"> 
</span><ins>+#if USE(QUICK_LOOK)
+        void setQuickLookHandle(std::unique_ptr&lt;QuickLookHandle&gt; quickLookHandle) { m_quickLookHandle = WTF::move(quickLookHandle); }
+        QuickLookHandle* quickLookHandle() const { return m_quickLookHandle.get(); }
+#endif
+
</ins><span class="cx">     protected:
</span><span class="cx">         DocumentLoader(const ResourceRequest&amp;, const SubstituteData&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -412,6 +421,10 @@
</span><span class="cx"> #if ENABLE(CONTENT_FILTERING)
</span><span class="cx">         std::unique_ptr&lt;ContentFilter&gt; m_contentFilter;
</span><span class="cx"> #endif
</span><ins>+
+#if USE(QUICK_LOOK)
+        std::unique_ptr&lt;QuickLookHandle&gt; m_quickLookHandle;
+#endif
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     inline void DocumentLoader::recordMemoryCacheLoadForFutureClientNotification(const ResourceRequest&amp; request)
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (172190 => 172191)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-08-07 00:15:22 UTC (rev 172190)
+++ trunk/Source/WebKit2/ChangeLog        2014-08-07 00:16:36 UTC (rev 172191)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2014-08-06  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [iOS] Subresources referenced in converted QuickLook documents sometimes fail to load
+        https://bugs.webkit.org/show_bug.cgi?id=135676
+
+        Reviewed by David Kilzer.
+
+        QuickLookHandle needs to stay alive in order for its NSURLProtocol to service subresource loads originating
+        from the converted HTML document. Some of these loads happen dynamically after the main resource finishes
+        loading, so we cannot tie the lifetime of the QuickLookHandle to that of the main resource's ResourceLoader.
+        Instead, give ownership of the QuickLookHandle to DocumentLoader.
+
+        * WebProcess/Network/WebResourceLoader.cpp:
+        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo): Stored the created QuickLookHandle in DocumentLoader.
+        (WebKit::WebResourceLoader::didReceiveData): Accessed DocumentLoader's QuickLookHandle.
+        (WebKit::WebResourceLoader::didFinishResourceLoad): Ditto.
+        (WebKit::WebResourceLoader::didFailResourceLoad): Ditto.
+        (WebKit::WebResourceLoader::didReceiveResource): Ditto.
+        * WebProcess/Network/WebResourceLoader.h: Removed m_quickLookHandle.
+
</ins><span class="cx"> 2014-08-06  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Merge r171389, r171495, r171508, r171510, r171605, r171606, r171611, r171614, r171763 from ftlopt.
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessNetworkWebResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp (172190 => 172191)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp        2014-08-07 00:15:22 UTC (rev 172190)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp        2014-08-07 00:16:36 UTC (rev 172191)
</span><span class="lines">@@ -125,8 +125,8 @@
</span><span class="cx">     // Refrain from calling didReceiveResponse if QuickLook will convert this response, since the MIME type of the
</span><span class="cx">     // converted resource isn't yet known. WebResourceLoaderQuickLookDelegate will later call didReceiveResponse upon
</span><span class="cx">     // receiving the converted data.
</span><del>-    m_quickLookHandle = QuickLookHandle::create(resourceLoader(), responseCopy.nsURLResponse());
-    if (!m_quickLookHandle)
</del><ins>+    m_coreLoader-&gt;documentLoader()-&gt;setQuickLookHandle(QuickLookHandle::create(resourceLoader(), responseCopy.nsURLResponse()));
+    if (!m_coreLoader-&gt;documentLoader()-&gt;quickLookHandle())
</ins><span class="cx"> #endif
</span><span class="cx">         m_coreLoader-&gt;didReceiveResponse(responseCopy);
</span><span class="cx"> 
</span><span class="lines">@@ -143,8 +143,8 @@
</span><span class="cx">     LOG(Network, &quot;(WebProcess) WebResourceLoader::didReceiveData of size %i for '%s'&quot;, (int)data.size(), m_coreLoader-&gt;url().string().utf8().data());
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (m_quickLookHandle) {
-        if (m_quickLookHandle-&gt;didReceiveData(adoptCF(CFDataCreate(kCFAllocatorDefault, data.data(), data.size())).get()))
</del><ins>+    if (QuickLookHandle* quickLookHandle = m_coreLoader-&gt;documentLoader()-&gt;quickLookHandle()) {
+        if (quickLookHandle-&gt;didReceiveData(adoptCF(CFDataCreate(kCFAllocatorDefault, data.data(), data.size())).get()))
</ins><span class="cx">             return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -156,8 +156,10 @@
</span><span class="cx">     LOG(Network, &quot;(WebProcess) WebResourceLoader::didFinishResourceLoad for '%s'&quot;, m_coreLoader-&gt;url().string().utf8().data());
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (m_quickLookHandle &amp;&amp; m_quickLookHandle-&gt;didFinishLoading())
-        return;
</del><ins>+    if (QuickLookHandle* quickLookHandle = m_coreLoader-&gt;documentLoader()-&gt;quickLookHandle()) {
+        if (quickLookHandle-&gt;didFinishLoading())
+            return;
+    }
</ins><span class="cx"> #endif
</span><span class="cx">     m_coreLoader-&gt;didFinishLoading(finishTime);
</span><span class="cx"> }
</span><span class="lines">@@ -167,8 +169,8 @@
</span><span class="cx">     LOG(Network, &quot;(WebProcess) WebResourceLoader::didFailResourceLoad for '%s'&quot;, m_coreLoader-&gt;url().string().utf8().data());
</span><span class="cx">     
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (m_quickLookHandle)
-        m_quickLookHandle-&gt;didFail();
</del><ins>+    if (QuickLookHandle* quickLookHandle = m_coreLoader-&gt;documentLoader()-&gt;quickLookHandle())
+        quickLookHandle-&gt;didFail();
</ins><span class="cx"> #endif
</span><span class="cx">     if (m_coreLoader-&gt;documentLoader()-&gt;applicationCacheHost()-&gt;maybeLoadFallbackForError(m_coreLoader.get(), error))
</span><span class="cx">         return;
</span><span class="lines">@@ -181,15 +183,15 @@
</span><span class="cx">     LOG(Network, &quot;(WebProcess) WebResourceLoader::didReceiveResource for '%s'&quot;, m_coreLoader-&gt;url().string().utf8().data());
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (m_quickLookHandle) {
</del><ins>+    if (QuickLookHandle* quickLookHandle = m_coreLoader-&gt;documentLoader()-&gt;quickLookHandle()) {
</ins><span class="cx">         RetainPtr&lt;CFDataRef&gt; cfBuffer = handle.tryWrapInCFData();
</span><span class="cx">         if (cfBuffer) {
</span><del>-            if (m_quickLookHandle-&gt;didReceiveData(cfBuffer.get())) {
-                m_quickLookHandle-&gt;didFinishLoading();
</del><ins>+            if (quickLookHandle-&gt;didReceiveData(cfBuffer.get())) {
+                quickLookHandle-&gt;didFinishLoading();
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">         } else
</span><del>-            m_quickLookHandle-&gt;didFail();
</del><ins>+            quickLookHandle-&gt;didFail();
</ins><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessNetworkWebResourceLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h (172190 => 172191)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h        2014-08-07 00:15:22 UTC (rev 172190)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h        2014-08-07 00:16:36 UTC (rev 172191)
</span><span class="lines">@@ -92,10 +92,6 @@
</span><span class="cx">     void canAuthenticateAgainstProtectionSpace(const WebCore::ProtectionSpace&amp;);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if USE(QUICK_LOOK)
-    std::unique_ptr&lt;WebCore::QuickLookHandle&gt; m_quickLookHandle;
-#endif
-
</del><span class="cx">     RefPtr&lt;WebCore::ResourceLoader&gt; m_coreLoader;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>