<!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>[170984] 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/170984">170984</a></dd>
<dt>Author</dt> <dd>aestes@apple.com</dd>
<dt>Date</dt> <dd>2014-07-10 17:02:51 -0700 (Thu, 10 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] Some QuickLook documents are not displayed as previews
https://bugs.webkit.org/show_bug.cgi?id=134788

Reviewed by Pratik Solanki.

ResourceRequest::isMainResourceRequest() is not reliable (e.g. ResourceRequests reconstituted from an
NSURLRequest have no way to set this bit properly) and should probably be removed. Instead of using
isMainResourceRequest() to check if a QuickLookHandle should be created when the Network Process is in use,
just check if the current ResourceLoader is the same as the DocumentLoader's ResourceLoader.

No new tests. QuickLook is not testable from WebKit.

* platform/network/ios/QuickLook.mm:
(WebCore::QuickLookHandle::create):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoadercpp">trunk/Source/WebCore/loader/DocumentLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcfResourceRequesth">trunk/Source/WebCore/platform/network/cf/ResourceRequest.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkiosQuickLookmm">trunk/Source/WebCore/platform/network/ios/QuickLook.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportWebFrameLoaderClientmm">trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (170983 => 170984)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-07-10 23:57:50 UTC (rev 170983)
+++ trunk/Source/WebCore/ChangeLog        2014-07-11 00:02:51 UTC (rev 170984)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2014-07-09  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [iOS] Some QuickLook documents are not displayed as previews
+        https://bugs.webkit.org/show_bug.cgi?id=134788
+
+        Reviewed by Pratik Solanki.
+        
+        ResourceRequest::isMainResourceRequest() is not reliable (e.g. ResourceRequests reconstituted from an
+        NSURLRequest have no way to set this bit properly) and should probably be removed. Instead of using
+        isMainResourceRequest() to check if a QuickLookHandle should be created when the Network Process is in use,
+        just check if the current ResourceLoader is the same as the DocumentLoader's ResourceLoader.
+
+        No new tests. QuickLook is not testable from WebKit.
+
+        * platform/network/ios/QuickLook.mm:
+        (WebCore::QuickLookHandle::create):
+
</ins><span class="cx"> 2014-07-10  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS WebKit2] Don't uninstall the memory pressure listener after first signal.
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (170983 => 170984)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.cpp        2014-07-10 23:57:50 UTC (rev 170983)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp        2014-07-11 00:02:51 UTC (rev 170984)
</span><span class="lines">@@ -958,7 +958,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     // FIXME: Remove PLATFORM(IOS)-guard once we upstream the iOS changes to ResourceRequest.h.
</span><del>-    m_request.setMainResourceRequest(false);
</del><ins>+    m_request.deprecatedSetMainResourceRequest(false);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (this == frameLoader()-&gt;activeDocumentLoader())
</span><span class="lines">@@ -1433,7 +1433,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     // FIXME: Remove PLATFORM(IOS)-guard once we upstream the iOS changes to ResourceRequest.h.
</span><del>-    m_request.setMainResourceRequest(true);
</del><ins>+    m_request.deprecatedSetMainResourceRequest(true);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     ResourceRequest request(m_request);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcfResourceRequesth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/cf/ResourceRequest.h (170983 => 170984)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/cf/ResourceRequest.h        2014-07-10 23:57:50 UTC (rev 170983)
+++ trunk/Source/WebCore/platform/network/cf/ResourceRequest.h        2014-07-11 00:02:51 UTC (rev 170984)
</span><span class="lines">@@ -117,8 +117,11 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-        void setMainResourceRequest(bool isMainResourceRequest) const { m_mainResourceRequest = isMainResourceRequest; }
-        bool isMainResourceRequest() const { return m_mainResourceRequest; }
</del><ins>+        // FIXME: deprecatedIsMainResourceRequest() does not return the correct value if the ResourceRequest has been
+        // deserialized from an IPC message. As a result this function can only be relied on when networking is not in a
+        // separate process.
+        void deprecatedSetMainResourceRequest(bool isMainResourceRequest) const { m_mainResourceRequest = isMainResourceRequest; }
+        bool deprecatedIsMainResourceRequest() const { return m_mainResourceRequest; }
</ins><span class="cx"> 
</span><span class="cx">     private:
</span><span class="cx">         mutable bool m_mainResourceRequest = false;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkiosQuickLookmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/ios/QuickLook.mm (170983 => 170984)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/ios/QuickLook.mm        2014-07-10 23:57:50 UTC (rev 170983)
+++ trunk/Source/WebCore/platform/network/ios/QuickLook.mm        2014-07-11 00:02:51 UTC (rev 170984)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><span class="cx"> 
</span><ins>+#import &quot;DocumentLoader.h&quot;
</ins><span class="cx"> #import &quot;FileSystemIOS.h&quot;
</span><span class="cx"> #import &quot;Logging.h&quot;
</span><span class="cx"> #import &quot;ResourceError.h&quot;
</span><span class="lines">@@ -423,7 +424,7 @@
</span><span class="cx"> std::unique_ptr&lt;QuickLookHandle&gt; QuickLookHandle::create(ResourceHandle* handle, NSURLConnection *connection, NSURLResponse *nsResponse, id delegate)
</span><span class="cx"> {
</span><span class="cx">     ASSERT_ARG(handle, handle);
</span><del>-    if (!handle-&gt;firstRequest().isMainResourceRequest() || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[nsResponse MIMEType]])
</del><ins>+    if (!handle-&gt;firstRequest().deprecatedIsMainResourceRequest() || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[nsResponse MIMEType]])
</ins><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;QuickLookHandle&gt; quickLookHandle(new QuickLookHandle([handle-&gt;firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], connection, nsResponse, delegate));
</span><span class="lines">@@ -435,7 +436,7 @@
</span><span class="cx"> std::unique_ptr&lt;QuickLookHandle&gt; QuickLookHandle::create(ResourceHandle* handle, SynchronousResourceHandleCFURLConnectionDelegate* connectionDelegate, CFURLResponseRef cfResponse)
</span><span class="cx"> {
</span><span class="cx">     ASSERT_ARG(handle, handle);
</span><del>-    if (!handle-&gt;firstRequest().isMainResourceRequest() || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:(NSString *)CFURLResponseGetMIMEType(cfResponse)])
</del><ins>+    if (!handle-&gt;firstRequest().deprecatedIsMainResourceRequest() || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:(NSString *)CFURLResponseGetMIMEType(cfResponse)])
</ins><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     NSURLResponse *nsResponse = [NSURLResponse _responseWithCFURLResponse:cfResponse];
</span><span class="lines">@@ -451,10 +452,15 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline bool isMainResourceLoader(ResourceLoader* loader)
+{
+    return loader-&gt;documentLoader()-&gt;mainResourceLoader() == loader;
+}
+
</ins><span class="cx"> std::unique_ptr&lt;QuickLookHandle&gt; QuickLookHandle::create(ResourceLoader* loader, NSURLResponse *response)
</span><span class="cx"> {
</span><span class="cx">     ASSERT_ARG(loader, loader);
</span><del>-    if (!loader-&gt;request().isMainResourceRequest() || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[response MIMEType]])
</del><ins>+    if (!isMainResourceLoader(loader) || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[response MIMEType]])
</ins><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;WebResourceLoaderQuickLookDelegate&gt; delegate = adoptNS([[WebResourceLoaderQuickLookDelegate alloc] initWithResourceLoader:loader]);
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportWebFrameLoaderClientmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm (170983 => 170984)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm        2014-07-10 23:57:50 UTC (rev 170983)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm        2014-07-11 00:02:51 UTC (rev 170984)
</span><span class="lines">@@ -349,7 +349,7 @@
</span><span class="cx">     bool isHiddenFromInspector = request.hiddenFromInspector();
</span><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-    bool isMainResourceRequest = request.isMainResourceRequest();
</del><ins>+    bool isMainResourceRequest = request.deprecatedIsMainResourceRequest();
</ins><span class="cx">     if (implementations-&gt;webThreadWillSendRequestFunc) {
</span><span class="cx">         newURLRequest = (NSURLRequest *)CallResourceLoadDelegateInWebThread(implementations-&gt;webThreadWillSendRequestFunc, webView, @selector(webThreadWebView:resource:willSendRequest:redirectResponse:fromDataSource:), [webView _objectForIdentifier:identifier], currentURLRequest, redirectResponse.nsURLResponse(), dataSource(loader));
</span><span class="cx">     } else
</span><span class="lines">@@ -363,7 +363,7 @@
</span><span class="cx">     request.setHiddenFromInspector(isHiddenFromInspector);
</span><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-    request.setMainResourceRequest(isMainResourceRequest);
</del><ins>+    request.deprecatedSetMainResourceRequest(isMainResourceRequest);
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>