<!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>[211398] trunk/Source/WebCore</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/211398">211398</a></dd>
<dt>Author</dt> <dd>aestes@apple.com</dd>
<dt>Date</dt> <dd>2017-01-30 17:54:02 -0800 (Mon, 30 Jan 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[QuickLook] QLPreviewConverter and QuickLookHandle have different lifetime requirements
https://bugs.webkit.org/show_bug.cgi?id=167609

Reviewed by Andreas Kling.

Currently, QuickLookHandles are owned by DocumentLoader so that the underlying
QLPreviewConverter stays alive to service subresource requests. However, the QuickLookHandle
itself only needs to live long enough to handle the main resource load. And in a follow-on
patch we will need to create QLPreviewConverters independent of QuickLookHandle.

This patch moves ownership of QuickLookHandle from DocumentLoader to ResourceLoader. It also
creates a C++ wrapper around QLPreviewConverter and teaches QuickLookHandle to transfer
ownership of the wrapper to DocumentLoader once the main resource conversion is complete.

No change in behavior. Covered by existing tests.

* WebCore.xcodeproj/project.pbxproj: Added PreviewConverter.{h,mm}.
* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::setPreviewConverter): Renamed from setQuickLookHandle().
(WebCore::DocumentLoader::previewConverter): Renamed from quickLookHandle().
(WebCore::DocumentLoader::setQuickLookHandle): Renamed to setPreviewConverter().
* loader/DocumentLoader.h:
(WebCore::DocumentLoader::quickLookHandle): Renamed to quickLookHandle().
* loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::willSendRequestInternal): Changed to call PreviewConverter::safeRequest().
(WebCore::ResourceLoader::isQuickLookResource): Changed to check if m_quickLookHandle is null.
(WebCore::ResourceLoader::didCreateQuickLookHandle): Deleted.
* loader/ResourceLoader.h:
* loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::shouldCreateQuickLookHandleForResponse): Changed to access m_quickLookHandle.
(WebCore::SubresourceLoader::didReceiveResponse): Ditto.
(WebCore::SubresourceLoader::didReceiveData): Ditto.
(WebCore::SubresourceLoader::didReceiveBuffer): Ditto.
(WebCore::SubresourceLoader::didFinishLoading): Ditto.
(WebCore::SubresourceLoader::didFail): Ditto.
* loader/cache/CachedRawResource.cpp:
(WebCore::CachedRawResource::finishLoading): Wrapped the call to ResourceLoader::isQuickLookResource() in USE(QUICK_LOOK).
* loader/ios/QuickLook.h: Renamed m_converter to m_previewLoader.
* loader/ios/QuickLook.mm: Renamed WebPreviewConverter to WebPreviewLoader.
(WebCore::registerQLPreviewConverterIfNeeded): Created a PreviewConverter instead of a QLPreviewConverter.
(-[WebPreviewLoader initWithResourceLoader:resourceResponse:quickLookHandle:]): Ditto.
(-[WebPreviewLoader appendDataArray:]): Accessed the QLPreviewConverter from the PreviewConverter.
(-[WebPreviewLoader finishedAppending]): Ditto.
(-[WebPreviewLoader failed]): Ditto.
(-[WebPreviewLoader converter]): Renamed from platformConverter. Returns a pointer to the PreviewConverter.
(-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]): Moved _converter to DocumentLoader.
(-[WebPreviewLoader connection:didFailWithError:]): Created a PreviewConverter instead of a QLPreviewConverter.
(WebCore::QuickLookHandle::QuickLookHandle): Called FrameLoaderClient::didCreateQuickLookHandle() instead of going through FrameLoader.
(WebCore::QuickLookHandle::didReceiveData): Renamed m_converter to m_previewLoader.
(WebCore::QuickLookHandle::didReceiveBuffer): Ditto.
(WebCore::QuickLookHandle::didFinishLoading): Ditto.
(WebCore::QuickLookHandle::didFail): Ditto.
(WebCore::QuickLookHandle::setClient): Ditto.
(WebCore::QuickLookHandle::previewFileName): Ditto.
(WebCore::QuickLookHandle::previewUTI): Ditto.
(WebCore::QuickLookHandle::willSendRequest): Deleted.
* platform/ios/QuickLookSoftLink.h: Removed soft-linking of QLPreviewConverter and kQLPreviewOptionPasswordKey.
* platform/ios/QuickLookSoftLink.mm: Ditto.
* platform/network/ios/PreviewConverter.h: Added.
(WebCore::PreviewConverter::platformConverter): Added. Returns the underlying QLPreviewConverter.
* platform/network/ios/PreviewConverter.mm: Added.
(WebCore::optionsWithPassword): Creates a dictionary with the kQLPreviewOptionPasswordKey option set if password is non-null.
(WebCore::PreviewConverter::PreviewConverter): Added constructors for the delegate/response and data/uti cases.
(WebCore::PreviewConverter::safeRequest): Wraps -[QLPreviewConverter safeRequestForRequest:].
(WebCore::PreviewConverter::previewRequest): Wraps -[QLPreviewConverter previewRequest].
(WebCore::PreviewConverter::previewResponse): Wraps -[QLPreviewConverter previewResponse].
(WebCore::PreviewConverter::previewFileName): Wraps -[QLPreviewConverter previewFileName].
(WebCore::PreviewConverter::previewUTI): Wraps -[QLPreviewConverter previewUTI].</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoadercpp">trunk/Source/WebCore/loader/DocumentLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoaderh">trunk/Source/WebCore/loader/DocumentLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoadercpp">trunk/Source/WebCore/loader/ResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoaderh">trunk/Source/WebCore/loader/ResourceLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderSubresourceLoadercpp">trunk/Source/WebCore/loader/SubresourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedRawResourcecpp">trunk/Source/WebCore/loader/cache/CachedRawResource.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderiosQuickLookh">trunk/Source/WebCore/loader/ios/QuickLook.h</a></li>
<li><a href="#trunkSourceWebCoreloaderiosQuickLookmm">trunk/Source/WebCore/loader/ios/QuickLook.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformiosQuickLookSoftLinkh">trunk/Source/WebCore/platform/ios/QuickLookSoftLink.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosQuickLookSoftLinkmm">trunk/Source/WebCore/platform/ios/QuickLookSoftLink.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreplatformnetworkiosPreviewConverterh">trunk/Source/WebCore/platform/network/ios/PreviewConverter.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkiosPreviewConvertermm">trunk/Source/WebCore/platform/network/ios/PreviewConverter.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/ChangeLog        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -1,3 +1,74 @@
</span><ins>+2017-01-30  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [QuickLook] QLPreviewConverter and QuickLookHandle have different lifetime requirements
+        https://bugs.webkit.org/show_bug.cgi?id=167609
+
+        Reviewed by Andreas Kling.
+        
+        Currently, QuickLookHandles are owned by DocumentLoader so that the underlying
+        QLPreviewConverter stays alive to service subresource requests. However, the QuickLookHandle
+        itself only needs to live long enough to handle the main resource load. And in a follow-on
+        patch we will need to create QLPreviewConverters independent of QuickLookHandle.
+
+        This patch moves ownership of QuickLookHandle from DocumentLoader to ResourceLoader. It also
+        creates a C++ wrapper around QLPreviewConverter and teaches QuickLookHandle to transfer
+        ownership of the wrapper to DocumentLoader once the main resource conversion is complete.
+
+        No change in behavior. Covered by existing tests.
+
+        * WebCore.xcodeproj/project.pbxproj: Added PreviewConverter.{h,mm}.
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::setPreviewConverter): Renamed from setQuickLookHandle().
+        (WebCore::DocumentLoader::previewConverter): Renamed from quickLookHandle().
+        (WebCore::DocumentLoader::setQuickLookHandle): Renamed to setPreviewConverter().
+        * loader/DocumentLoader.h:
+        (WebCore::DocumentLoader::quickLookHandle): Renamed to quickLookHandle().
+        * loader/ResourceLoader.cpp:
+        (WebCore::ResourceLoader::willSendRequestInternal): Changed to call PreviewConverter::safeRequest().
+        (WebCore::ResourceLoader::isQuickLookResource): Changed to check if m_quickLookHandle is null.
+        (WebCore::ResourceLoader::didCreateQuickLookHandle): Deleted.
+        * loader/ResourceLoader.h:
+        * loader/SubresourceLoader.cpp:
+        (WebCore::SubresourceLoader::shouldCreateQuickLookHandleForResponse): Changed to access m_quickLookHandle.
+        (WebCore::SubresourceLoader::didReceiveResponse): Ditto.
+        (WebCore::SubresourceLoader::didReceiveData): Ditto.
+        (WebCore::SubresourceLoader::didReceiveBuffer): Ditto.
+        (WebCore::SubresourceLoader::didFinishLoading): Ditto.
+        (WebCore::SubresourceLoader::didFail): Ditto.
+        * loader/cache/CachedRawResource.cpp:
+        (WebCore::CachedRawResource::finishLoading): Wrapped the call to ResourceLoader::isQuickLookResource() in USE(QUICK_LOOK).
+        * loader/ios/QuickLook.h: Renamed m_converter to m_previewLoader.
+        * loader/ios/QuickLook.mm: Renamed WebPreviewConverter to WebPreviewLoader.
+        (WebCore::registerQLPreviewConverterIfNeeded): Created a PreviewConverter instead of a QLPreviewConverter.
+        (-[WebPreviewLoader initWithResourceLoader:resourceResponse:quickLookHandle:]): Ditto.
+        (-[WebPreviewLoader appendDataArray:]): Accessed the QLPreviewConverter from the PreviewConverter.
+        (-[WebPreviewLoader finishedAppending]): Ditto.
+        (-[WebPreviewLoader failed]): Ditto.
+        (-[WebPreviewLoader converter]): Renamed from platformConverter. Returns a pointer to the PreviewConverter.
+        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]): Moved _converter to DocumentLoader.
+        (-[WebPreviewLoader connection:didFailWithError:]): Created a PreviewConverter instead of a QLPreviewConverter.
+        (WebCore::QuickLookHandle::QuickLookHandle): Called FrameLoaderClient::didCreateQuickLookHandle() instead of going through FrameLoader.
+        (WebCore::QuickLookHandle::didReceiveData): Renamed m_converter to m_previewLoader.
+        (WebCore::QuickLookHandle::didReceiveBuffer): Ditto.
+        (WebCore::QuickLookHandle::didFinishLoading): Ditto.
+        (WebCore::QuickLookHandle::didFail): Ditto.
+        (WebCore::QuickLookHandle::setClient): Ditto.
+        (WebCore::QuickLookHandle::previewFileName): Ditto.
+        (WebCore::QuickLookHandle::previewUTI): Ditto.
+        (WebCore::QuickLookHandle::willSendRequest): Deleted.
+        * platform/ios/QuickLookSoftLink.h: Removed soft-linking of QLPreviewConverter and kQLPreviewOptionPasswordKey.
+        * platform/ios/QuickLookSoftLink.mm: Ditto.
+        * platform/network/ios/PreviewConverter.h: Added.
+        (WebCore::PreviewConverter::platformConverter): Added. Returns the underlying QLPreviewConverter.
+        * platform/network/ios/PreviewConverter.mm: Added.
+        (WebCore::optionsWithPassword): Creates a dictionary with the kQLPreviewOptionPasswordKey option set if password is non-null.
+        (WebCore::PreviewConverter::PreviewConverter): Added constructors for the delegate/response and data/uti cases.
+        (WebCore::PreviewConverter::safeRequest): Wraps -[QLPreviewConverter safeRequestForRequest:].
+        (WebCore::PreviewConverter::previewRequest): Wraps -[QLPreviewConverter previewRequest].
+        (WebCore::PreviewConverter::previewResponse): Wraps -[QLPreviewConverter previewResponse].
+        (WebCore::PreviewConverter::previewFileName): Wraps -[QLPreviewConverter previewFileName].
+        (WebCore::PreviewConverter::previewUTI): Wraps -[QLPreviewConverter previewUTI].
+
</ins><span class="cx"> 2017-01-30  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Drop legacy Attributes.isId attribute
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -3966,6 +3966,8 @@
</span><span class="cx">                 A1B5B29F1AAA846F008B6042 /* MockContentFilterSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = A1B5B29D1AAA846E008B6042 /* MockContentFilterSettings.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 A1BF6B821AA96C7D00AF4A8A /* MockContentFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1BF6B801AA96C7D00AF4A8A /* MockContentFilter.cpp */; };
</span><span class="cx">                 A1BF6B831AA96C7D00AF4A8A /* MockContentFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = A1BF6B811AA96C7D00AF4A8A /* MockContentFilter.h */; };
</span><ins>+                A1C150791E3F2B3E0032C98C /* PreviewConverter.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1C150771E3F2B3E0032C98C /* PreviewConverter.mm */; };
+                A1C1507A1E3F2B3E0032C98C /* PreviewConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C150781E3F2B3E0032C98C /* PreviewConverter.h */; };
</ins><span class="cx">                 A1C7FAA2133A5D3500D6732D /* JSXPathResultCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1C7FAA1133A5D3500D6732D /* JSXPathResultCustom.cpp */; };
</span><span class="cx">                 A1DE712D18612AC100734192 /* TouchEvents.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1DE712B18612AC100734192 /* TouchEvents.cpp */; };
</span><span class="cx">                 A1DE71321861322200734192 /* TouchConstructors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1DE71301861322200734192 /* TouchConstructors.cpp */; };
</span><span class="lines">@@ -11676,6 +11678,8 @@
</span><span class="cx">                 A1B5B29D1AAA846E008B6042 /* MockContentFilterSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockContentFilterSettings.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A1BF6B801AA96C7D00AF4A8A /* MockContentFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockContentFilter.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A1BF6B811AA96C7D00AF4A8A /* MockContentFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockContentFilter.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                A1C150771E3F2B3E0032C98C /* PreviewConverter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PreviewConverter.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
+                A1C150781E3F2B3E0032C98C /* PreviewConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreviewConverter.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 A1C7FAA1133A5D3500D6732D /* JSXPathResultCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSXPathResultCustom.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A1DE712B18612AC100734192 /* TouchEvents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TouchEvents.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A1DE71301861322200734192 /* TouchConstructors.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TouchConstructors.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -16936,6 +16940,8 @@
</span><span class="cx">                         children = (
</span><span class="cx">                                 443F04260E75C8FB007E5407 /* NetworkStateNotifierIOS.mm */,
</span><span class="cx">                                 A10DBF4618F92317000D70C6 /* QuickLookHandleClient.h */,
</span><ins>+                                A1C150781E3F2B3E0032C98C /* PreviewConverter.h */,
+                                A1C150771E3F2B3E0032C98C /* PreviewConverter.mm */,
</ins><span class="cx">                                 7E428CE413E3407F003B661C /* ResourceHandleIOS.mm */,
</span><span class="cx">                                 7E7DE201195CEFCD0035363B /* ResourceRequestIOS.mm */,
</span><span class="cx">                                 44A20DB80F84166C00B3E1FE /* WebCoreURLResponseIOS.h */,
</span><span class="lines">@@ -28554,6 +28560,7 @@
</span><span class="cx">                                 93F199EC08245E59001E9ABC /* XSLStyleSheet.h in Headers */,
</span><span class="cx">                                 E1F1E8300C3C2BB9006DB391 /* XSLTExtensions.h in Headers */,
</span><span class="cx">                                 93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */,
</span><ins>+                                A1C1507A1E3F2B3E0032C98C /* PreviewConverter.h in Headers */,
</ins><span class="cx">                                 E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */,
</span><span class="cx">                                 977E2E0F12F0FC9C00C13379 /* XSSAuditor.h in Headers */,
</span><span class="cx">                                 977E2E0F12F0FC9C00C13380 /* XSSAuditorDelegate.h in Headers */,
</span><span class="lines">@@ -29348,6 +29355,7 @@
</span><span class="cx">                                 0F6A12BD1A00923700C6DE72 /* DebugPageOverlays.cpp in Sources */,
</span><span class="cx">                                 45FEA5CF156DDE8C00654101 /* Decimal.cpp in Sources */,
</span><span class="cx">                                 A8C228A211D5722E00D5A7D3 /* DecodedDataDocumentParser.cpp in Sources */,
</span><ins>+                                A1C150791E3F2B3E0032C98C /* PreviewConverter.mm in Sources */,
</ins><span class="cx">                                 4162A450101145AE00DFF3ED /* DedicatedWorkerGlobalScope.cpp in Sources */,
</span><span class="cx">                                 41A3D58E101C152D00316D07 /* DedicatedWorkerThread.cpp in Sources */,
</span><span class="cx">                                 FD06DFA5134A4DEF006F5D7D /* DefaultAudioDestinationNode.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.cpp        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -86,6 +86,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><ins>+#include &quot;PreviewConverter.h&quot;
</ins><span class="cx"> #include &quot;QuickLook.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -1722,11 +1723,16 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><span class="cx"> 
</span><del>-void DocumentLoader::setQuickLookHandle(std::unique_ptr&lt;QuickLookHandle&gt; quickLookHandle)
</del><ins>+void DocumentLoader::setPreviewConverter(std::unique_ptr&lt;PreviewConverter&gt;&amp;&amp; previewConverter)
</ins><span class="cx"> {
</span><del>-    m_quickLookHandle = WTFMove(quickLookHandle);
</del><ins>+    m_previewConverter = WTFMove(previewConverter);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+PreviewConverter* DocumentLoader::previewConverter() const
+{
+    return m_previewConverter.get();
+}
+
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.h (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.h        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/loader/DocumentLoader.h        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> class FrameLoader;
</span><span class="cx"> class IconLoader;
</span><span class="cx"> class Page;
</span><del>-class QuickLookHandle;
</del><ins>+class PreviewConverter;
</ins><span class="cx"> class ResourceLoader;
</span><span class="cx"> class SharedBuffer;
</span><span class="cx"> class SubresourceLoader;
</span><span class="lines">@@ -271,8 +271,8 @@
</span><span class="cx">     URL documentURL() const;
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    WEBCORE_EXPORT void setQuickLookHandle(std::unique_ptr&lt;QuickLookHandle&gt;);
-    QuickLookHandle* quickLookHandle() const { return m_quickLookHandle.get(); }
</del><ins>+    void setPreviewConverter(std::unique_ptr&lt;PreviewConverter&gt;&amp;&amp;);
+    PreviewConverter* previewConverter() const;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><span class="lines">@@ -463,7 +463,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    std::unique_ptr&lt;QuickLookHandle&gt; m_quickLookHandle;
</del><ins>+    std::unique_ptr&lt;PreviewConverter&gt; m_previewConverter;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoader.cpp (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoader.cpp        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/loader/ResourceLoader.cpp        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -56,6 +56,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><ins>+#include &quot;PreviewConverter.h&quot;
</ins><span class="cx"> #include &quot;QuickLook.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -376,8 +377,8 @@
</span><span class="cx">         InspectorInstrumentation::willSendRequest(m_frame.get(), m_identifier, m_frame-&gt;loader().documentLoader(), request, redirectResponse);
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (auto quickLookHandle = m_documentLoader-&gt;quickLookHandle())
-        quickLookHandle-&gt;willSendRequest(request);
</del><ins>+    if (auto previewConverter = m_documentLoader-&gt;previewConverter())
+        request = previewConverter-&gt;safeRequest(request);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     bool isRedirect = !redirectResponse.isNull();
</span><span class="lines">@@ -741,10 +742,9 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-void ResourceLoader::didCreateQuickLookHandle(QuickLookHandle&amp; handle)
</del><ins>+bool ResourceLoader::isQuickLookResource() const
</ins><span class="cx"> {
</span><del>-    m_isQuickLookResource = true;
-    frameLoader()-&gt;client().didCreateQuickLookHandle(handle);
</del><ins>+    return !!m_quickLookHandle;
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoader.h (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoader.h        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/loader/ResourceLoader.h        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -117,9 +117,8 @@
</span><span class="cx">     virtual void receivedCancellation(const AuthenticationChallenge&amp;);
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    void didCreateQuickLookHandle(QuickLookHandle&amp;);
</del><ins>+    bool isQuickLookResource() const;
</ins><span class="cx"> #endif
</span><del>-    bool isQuickLookResource() { return m_isQuickLookResource; }
</del><span class="cx"> 
</span><span class="cx">     const URL&amp; url() const { return m_request.url(); }
</span><span class="cx">     ResourceHandle* handle() const { return m_handle.get(); }
</span><span class="lines">@@ -174,6 +173,9 @@
</span><span class="cx">     RefPtr&lt;DocumentLoader&gt; m_documentLoader;
</span><span class="cx">     ResourceResponse m_response;
</span><span class="cx">     LoadTiming m_loadTiming;
</span><ins>+#if USE(QUICK_LOOK)
+    std::unique_ptr&lt;QuickLookHandle&gt; m_quickLookHandle;
+#endif
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     virtual void willCancel(const ResourceError&amp;) = 0;
</span><span class="lines">@@ -230,7 +232,6 @@
</span><span class="cx">     bool m_defersLoading;
</span><span class="cx">     ResourceRequest m_deferredRequest;
</span><span class="cx">     ResourceLoaderOptions m_options;
</span><del>-    bool m_isQuickLookResource { false };
</del><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderSubresourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/SubresourceLoader.cpp        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -262,7 +262,7 @@
</span><span class="cx">     if (m_resource-&gt;type() != CachedResource::MainResource)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    if (m_documentLoader-&gt;quickLookHandle())
</del><ins>+    if (m_quickLookHandle)
</ins><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     return QuickLookHandle::shouldCreateForMIMEType(response.mimeType());
</span><span class="lines">@@ -277,7 +277,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><span class="cx">     if (shouldCreateQuickLookHandleForResponse(response)) {
</span><del>-        m_documentLoader-&gt;setQuickLookHandle(QuickLookHandle::create(*this, response));
</del><ins>+        m_quickLookHandle = QuickLookHandle::create(*this, response);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -356,7 +356,7 @@
</span><span class="cx"> void SubresourceLoader::didReceiveData(const char* data, unsigned length, long long encodedDataLength, DataPayloadType dataPayloadType)
</span><span class="cx"> {
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (auto quickLookHandle = m_documentLoader-&gt;quickLookHandle()) {
</del><ins>+    if (auto quickLookHandle = m_quickLookHandle.get()) {
</ins><span class="cx">         if (quickLookHandle-&gt;didReceiveData(data, length))
</span><span class="cx">             return;
</span><span class="cx">     }
</span><span class="lines">@@ -368,7 +368,7 @@
</span><span class="cx"> void SubresourceLoader::didReceiveBuffer(Ref&lt;SharedBuffer&gt;&amp;&amp; buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
</span><span class="cx"> {
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (auto quickLookHandle = m_documentLoader-&gt;quickLookHandle()) {
</del><ins>+    if (auto quickLookHandle = m_quickLookHandle.get()) {
</ins><span class="cx">         if (quickLookHandle-&gt;didReceiveBuffer(buffer.get()))
</span><span class="cx">             return;
</span><span class="cx">     }
</span><span class="lines">@@ -513,7 +513,7 @@
</span><span class="cx"> void SubresourceLoader::didFinishLoading(double finishTime)
</span><span class="cx"> {
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (auto quickLookHandle = m_documentLoader-&gt;quickLookHandle()) {
</del><ins>+    if (auto quickLookHandle = m_quickLookHandle.get()) {
</ins><span class="cx">         if (quickLookHandle-&gt;didFinishLoading())
</span><span class="cx">             return;
</span><span class="cx">     }
</span><span class="lines">@@ -564,7 +564,7 @@
</span><span class="cx"> void SubresourceLoader::didFail(const ResourceError&amp; error)
</span><span class="cx"> {
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><del>-    if (auto quickLookHandle = m_documentLoader-&gt;quickLookHandle())
</del><ins>+    if (auto quickLookHandle = m_quickLookHandle.get())
</ins><span class="cx">         quickLookHandle-&gt;didFail();
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedRawResourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedRawResource.cpp (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedRawResource.cpp        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/loader/cache/CachedRawResource.cpp        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -97,7 +97,9 @@
</span><span class="cx">         notifyClientsDataWasReceived(incrementalData, incrementalDataLength);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+#if USE(QUICK_LOOK)
</ins><span class="cx">     m_allowEncodedDataReplacement = !m_loader-&gt;isQuickLookResource();
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx">     CachedResource::finishLoading(data);
</span><span class="cx">     if (dataBufferingPolicy == BufferData &amp;&amp; this-&gt;dataBufferingPolicy() == DoNotBufferData) {
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderiosQuickLookh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ios/QuickLook.h (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ios/QuickLook.h        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/loader/ios/QuickLook.h        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -27,7 +27,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><span class="cx"> 
</span><del>-#include &lt;objc/objc.h&gt;
</del><span class="cx"> #include &lt;wtf/Forward.h&gt;
</span><span class="cx"> #include &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -36,7 +35,7 @@
</span><span class="cx"> OBJC_CLASS NSString;
</span><span class="cx"> OBJC_CLASS NSURL;
</span><span class="cx"> OBJC_CLASS NSURLRequest;
</span><del>-OBJC_CLASS WebPreviewConverter;
</del><ins>+OBJC_CLASS WebPreviewLoader;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -59,7 +58,6 @@
</span><span class="cx">     static std::unique_ptr&lt;QuickLookHandle&gt; create(ResourceLoader&amp;, const ResourceResponse&amp;);
</span><span class="cx">     ~QuickLookHandle();
</span><span class="cx"> 
</span><del>-    void willSendRequest(ResourceRequest&amp;);
</del><span class="cx">     bool didReceiveData(const char* data, unsigned length);
</span><span class="cx">     bool didReceiveBuffer(const SharedBuffer&amp;);
</span><span class="cx">     bool didFinishLoading();
</span><span class="lines">@@ -75,7 +73,7 @@
</span><span class="cx">     friend std::unique_ptr&lt;QuickLookHandle&gt; std::make_unique&lt;QuickLookHandle&gt;(ResourceLoader&amp;, const ResourceResponse&amp;);
</span><span class="cx">     QuickLookHandle(ResourceLoader&amp;, const ResourceResponse&amp;);
</span><span class="cx"> 
</span><del>-    RetainPtr&lt;WebPreviewConverter&gt; m_converter;
</del><ins>+    RetainPtr&lt;WebPreviewLoader&gt; m_previewLoader;
</ins><span class="cx">     bool m_finishedLoadingDataIntoConverter { false };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderiosQuickLookmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ios/QuickLook.mm (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ios/QuickLook.mm        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/loader/ios/QuickLook.mm        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -28,9 +28,13 @@
</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><ins>+#import &quot;FrameLoader.h&quot;
+#import &quot;FrameLoaderClient.h&quot;
</ins><span class="cx"> #import &quot;Logging.h&quot;
</span><span class="cx"> #import &quot;NSFileManagerSPI.h&quot;
</span><ins>+#import &quot;PreviewConverter.h&quot;
</ins><span class="cx"> #import &quot;QuickLookHandleClient.h&quot;
</span><span class="cx"> #import &quot;ResourceError.h&quot;
</span><span class="cx"> #import &quot;ResourceLoader.h&quot;
</span><span class="lines">@@ -91,14 +95,14 @@
</span><span class="cx">     if ([QLPreviewGetSupportedMIMETypesSet() containsObject:updatedMIMEType.get()]) {
</span><span class="cx">         RetainPtr&lt;NSString&gt; uti = adoptNS(QLTypeCopyUTIForURLAndMimeType(url, updatedMIMEType.get()));
</span><span class="cx"> 
</span><del>-        RetainPtr&lt;QLPreviewConverter&gt; converter = adoptNS([allocQLPreviewConverterInstance() initWithData:data name:nil uti:uti.get() options:nil]);
-        NSURLRequest *request = [converter previewRequest];
</del><ins>+        auto converter = std::make_unique&lt;PreviewConverter&gt;(data, uti.get());
+        ResourceRequest previewRequest = converter-&gt;previewRequest();
</ins><span class="cx"> 
</span><span class="cx">         // We use [request URL] here instead of url since it will be
</span><span class="cx">         // the URL that the WebDataSource will see during -dealloc.
</span><del>-        addQLPreviewConverterWithFileForURL([request URL], converter.get(), nil);
</del><ins>+        addQLPreviewConverterWithFileForURL(previewRequest.url(), converter-&gt;platformConverter(), nil);
</ins><span class="cx"> 
</span><del>-        return request;
</del><ins>+        return previewRequest.nsURLRequest(DoNotUpdateHTTPBody);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return nil;
</span><span class="lines">@@ -137,12 +141,12 @@
</span><span class="cx">     return emptyClient();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-@interface WebPreviewConverter : NSObject {
</del><ins>+@interface WebPreviewLoader : NSObject {
</ins><span class="cx">     RefPtr&lt;ResourceLoader&gt; _resourceLoader;
</span><ins>+    ResourceResponse _response;
</ins><span class="cx">     QuickLookHandle* _handle;
</span><span class="cx">     RefPtr&lt;QuickLookHandleClient&gt; _client;
</span><del>-    RetainPtr&lt;NSURLResponse&gt; _originalResponse;
-    RetainPtr&lt;QLPreviewConverter&gt; _platformConverter;
</del><ins>+    std::unique_ptr&lt;PreviewConverter&gt; _converter;
</ins><span class="cx">     RetainPtr&lt;NSMutableArray&gt; _bufferedDataArray;
</span><span class="cx">     BOOL _hasSentDidReceiveResponse;
</span><span class="cx"> }
</span><span class="lines">@@ -153,11 +157,11 @@
</span><span class="cx"> - (void)finishedAppending;
</span><span class="cx"> - (void)failed;
</span><span class="cx"> 
</span><del>-@property (nonatomic, readonly) QLPreviewConverter *platformConverter;
</del><ins>+@property (nonatomic, readonly) PreviewConverter* converter;
</ins><span class="cx"> 
</span><span class="cx"> @end
</span><span class="cx"> 
</span><del>-@implementation WebPreviewConverter
</del><ins>+@implementation WebPreviewLoader
</ins><span class="cx"> 
</span><span class="cx"> - (instancetype)initWithResourceLoader:(ResourceLoader&amp;)resourceLoader resourceResponse:(const ResourceResponse&amp;)resourceResponse quickLookHandle:(QuickLookHandle&amp;)quickLookHandle
</span><span class="cx"> {
</span><span class="lines">@@ -166,13 +170,13 @@
</span><span class="cx">         return nil;
</span><span class="cx"> 
</span><span class="cx">     _resourceLoader = &amp;resourceLoader;
</span><ins>+    _response = resourceResponse;
</ins><span class="cx">     _handle = &amp;quickLookHandle;
</span><span class="cx">     _client = &amp;testingOrEmptyClient();
</span><del>-    _originalResponse = resourceResponse.nsURLResponse();
-    _platformConverter = adoptNS([allocQLPreviewConverterInstance() initWithConnection:nil delegate:self response:_originalResponse.get() options:nil]);
</del><ins>+    _converter = std::make_unique&lt;PreviewConverter&gt;(self, _response);
</ins><span class="cx">     _bufferedDataArray = adoptNS([[NSMutableArray alloc] init]);
</span><span class="cx"> 
</span><del>-    LOG(Network, &quot;WebPreviewConverter created with preview file name \&quot;%s\&quot;.&quot;, [_platformConverter previewFileName]);
</del><ins>+    LOG(Network, &quot;WebPreviewConverter created with preview file name \&quot;%s\&quot;.&quot;, _converter-&gt;previewFileName().utf8().data());
</ins><span class="cx">     return self;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -185,7 +189,7 @@
</span><span class="cx"> - (void)appendDataArray:(NSArray&lt;NSData *&gt; *)dataArray
</span><span class="cx"> {
</span><span class="cx">     LOG(Network, &quot;WebPreviewConverter appending data array with count %ld.&quot;, dataArray.count);
</span><del>-    [_platformConverter appendDataArray:dataArray];
</del><ins>+    [_converter-&gt;platformConverter() appendDataArray:dataArray];
</ins><span class="cx">     [_bufferedDataArray addObjectsFromArray:dataArray];
</span><span class="cx">     _client-&gt;didReceiveDataArray((CFArrayRef)dataArray);
</span><span class="cx"> }
</span><span class="lines">@@ -193,7 +197,7 @@
</span><span class="cx"> - (void)finishedAppending
</span><span class="cx"> {
</span><span class="cx">     LOG(Network, &quot;WebPreviewConverter finished appending data.&quot;);
</span><del>-    [_platformConverter finishedAppendingData];
</del><ins>+    [_converter-&gt;platformConverter() finishedAppendingData];
</ins><span class="cx">     _client-&gt;didFinishLoading();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -200,13 +204,13 @@
</span><span class="cx"> - (void)failed
</span><span class="cx"> {
</span><span class="cx">     LOG(Network, &quot;WebPreviewConverter failed.&quot;);
</span><del>-    [_platformConverter finishConverting];
</del><ins>+    [_converter-&gt;platformConverter() finishConverting];
</ins><span class="cx">     _client-&gt;didFail();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (QLPreviewConverter *)platformConverter
</del><ins>+- (PreviewConverter*)converter
</ins><span class="cx"> {
</span><del>-    return _platformConverter.get();
</del><ins>+    return _converter.get();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)_sendDidReceiveResponseIfNecessary
</span><span class="lines">@@ -216,10 +220,12 @@
</span><span class="cx"> 
</span><span class="cx">     [_bufferedDataArray removeAllObjects];
</span><span class="cx"> 
</span><del>-    ResourceResponse response { [_platformConverter previewResponse] };
</del><ins>+    ResourceResponse response { _converter-&gt;previewResponse() };
</ins><span class="cx">     response.setIsQuickLook(true);
</span><span class="cx">     ASSERT(response.mimeType().length());
</span><span class="cx"> 
</span><ins>+    _resourceLoader-&gt;documentLoader()-&gt;setPreviewConverter(WTFMove(_converter));
+
</ins><span class="cx">     _hasSentDidReceiveResponse = YES;
</span><span class="cx">     _resourceLoader-&gt;didReceiveResponse(response);
</span><span class="cx"> }
</span><span class="lines">@@ -263,11 +269,11 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _client-&gt;didRequestPassword([retainedSelf = retainPtr(self)] (const String&amp; password) {
</span><del>-        NSDictionary *passwordOption = @{ (NSString *)kQLPreviewOptionPasswordKey : password };
-        auto converterWithPassword = adoptNS([allocQLPreviewConverterInstance() initWithConnection:nil delegate:retainedSelf.get() response:retainedSelf-&gt;_originalResponse.get() options:passwordOption]);
-        [converterWithPassword appendDataArray:retainedSelf-&gt;_bufferedDataArray.get()];
-        [converterWithPassword finishedAppendingData];
-        retainedSelf-&gt;_platformConverter = WTFMove(converterWithPassword);
</del><ins>+        auto converter = std::make_unique&lt;PreviewConverter&gt;(retainedSelf.get(), retainedSelf-&gt;_response, password);
+        QLPreviewConverter *platformConverter = converter-&gt;platformConverter();
+        [platformConverter appendDataArray:retainedSelf-&gt;_bufferedDataArray.get()];
+        [platformConverter finishedAppendingData];
+        retainedSelf-&gt;_converter = WTFMove(converter);
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -318,9 +324,9 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> QuickLookHandle::QuickLookHandle(ResourceLoader&amp; loader, const ResourceResponse&amp; response)
</span><del>-    : m_converter { adoptNS([[WebPreviewConverter alloc] initWithResourceLoader:loader resourceResponse:response quickLookHandle:*this]) }
</del><ins>+    : m_previewLoader { adoptNS([[WebPreviewLoader alloc] initWithResourceLoader:loader resourceResponse:response quickLookHandle:*this]) }
</ins><span class="cx"> {
</span><del>-    loader.didCreateQuickLookHandle(*this);
</del><ins>+    loader.frameLoader()-&gt;client().didCreateQuickLookHandle(*this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> QuickLookHandle::~QuickLookHandle()
</span><span class="lines">@@ -338,18 +344,12 @@
</span><span class="cx">     return std::make_unique&lt;QuickLookHandle&gt;(loader, response);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void QuickLookHandle::willSendRequest(ResourceRequest&amp; request)
-{
-    if (request.url().protocolIs(QLPreviewProtocol()))
-        request = [[m_converter platformConverter] safeRequestForRequest:request.nsURLRequest(DoNotUpdateHTTPBody)];
-}
-
</del><span class="cx"> bool QuickLookHandle::didReceiveData(const char* data, unsigned length)
</span><span class="cx"> {
</span><span class="cx">     if (m_finishedLoadingDataIntoConverter)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    [m_converter appendDataArray:@[ [NSData dataWithBytes:data length:length] ]];
</del><ins>+    [m_previewLoader appendDataArray:@[ [NSData dataWithBytes:data length:length] ]];
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -358,7 +358,7 @@
</span><span class="cx">     if (m_finishedLoadingDataIntoConverter)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    [m_converter appendDataArray:buffer.createNSDataArray().get()];
</del><ins>+    [m_previewLoader appendDataArray:buffer.createNSDataArray().get()];
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -368,19 +368,19 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     m_finishedLoadingDataIntoConverter = true;
</span><del>-    [m_converter finishedAppending];
</del><ins>+    [m_previewLoader finishedAppending];
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void QuickLookHandle::didFail()
</span><span class="cx"> {
</span><del>-    [m_converter failed];
-    m_converter = nullptr;
</del><ins>+    [m_previewLoader failed];
+    m_previewLoader = nullptr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void QuickLookHandle::setClient(Ref&lt;QuickLookHandleClient&gt;&amp;&amp; client)
</span><span class="cx"> {
</span><del>-    [m_converter setClient:WTFMove(client)];
</del><ins>+    [m_previewLoader setClient:WTFMove(client)];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void QuickLookHandle::setClientForTesting(RefPtr&lt;QuickLookHandleClient&gt;&amp;&amp; client)
</span><span class="lines">@@ -390,12 +390,12 @@
</span><span class="cx"> 
</span><span class="cx"> String QuickLookHandle::previewFileName() const
</span><span class="cx"> {
</span><del>-    return [m_converter platformConverter].previewFileName;
</del><ins>+    return [m_previewLoader converter]-&gt;previewFileName();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> String QuickLookHandle::previewUTI() const
</span><span class="cx"> {
</span><del>-    return [m_converter platformConverter].previewUTI;
</del><ins>+    return [m_previewLoader converter]-&gt;previewUTI();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosQuickLookSoftLinkh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/QuickLookSoftLink.h (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/QuickLookSoftLink.h        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/platform/ios/QuickLookSoftLink.h        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -29,8 +29,6 @@
</span><span class="cx"> 
</span><span class="cx"> SOFT_LINK_FRAMEWORK_FOR_HEADER(WebCore, QuickLook)
</span><span class="cx"> 
</span><del>-SOFT_LINK_CLASS_FOR_HEADER(WebCore, QuickLook, QLPreviewConverter)
-
</del><span class="cx"> SOFT_LINK_FUNCTION_FOR_HEADER(WebCore, QuickLook, QLPreviewGetSupportedMIMETypes, NSSet *, (), ())
</span><span class="cx"> #define QLPreviewGetSupportedMIMETypes softLink_QuickLook_QLPreviewGetSupportedMIMETypes
</span><span class="cx"> SOFT_LINK_FUNCTION_FOR_HEADER(WebCore, QuickLook, QLTypeCopyBestMimeTypeForFileNameAndMimeType, NSString *, (NSString *fileName, NSString *mimeType), (fileName, mimeType))
</span><span class="lines">@@ -43,7 +41,4 @@
</span><span class="cx"> SOFT_LINK_POINTER_FOR_HEADER(WebCore, QuickLook, QLPreviewScheme, NSString *)
</span><span class="cx"> #define QLPreviewScheme get_QuickLook_QLPreviewScheme()
</span><span class="cx"> 
</span><del>-SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, QuickLook, kQLPreviewOptionPasswordKey, CFStringRef)
-#define kQLPreviewOptionPasswordKey get_QuickLook_kQLPreviewOptionPasswordKey()
-
</del><span class="cx"> #endif // USE(QUICK_LOOK)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosQuickLookSoftLinkmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/QuickLookSoftLink.mm (211397 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/QuickLookSoftLink.mm        2017-01-31 01:20:24 UTC (rev 211397)
+++ trunk/Source/WebCore/platform/ios/QuickLookSoftLink.mm        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -31,8 +31,6 @@
</span><span class="cx"> 
</span><span class="cx"> SOFT_LINK_FRAMEWORK_FOR_SOURCE(WebCore, QuickLook)
</span><span class="cx"> 
</span><del>-SOFT_LINK_CLASS_FOR_SOURCE(WebCore, QuickLook, QLPreviewConverter)
-
</del><span class="cx"> SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, QuickLook, QLPreviewGetSupportedMIMETypes, NSSet *, (), ())
</span><span class="cx"> SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, QuickLook, QLTypeCopyBestMimeTypeForFileNameAndMimeType, NSString *, (NSString *fileName, NSString *mimeType), (fileName, mimeType))
</span><span class="cx"> SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, QuickLook, QLTypeCopyBestMimeTypeForURLAndMimeType, NSString *, (NSURL *url, NSString *mimeType), (url, mimeType))
</span><span class="lines">@@ -40,6 +38,4 @@
</span><span class="cx"> 
</span><span class="cx"> SOFT_LINK_POINTER_FOR_SOURCE(WebCore, QuickLook, QLPreviewScheme, NSString *)
</span><span class="cx"> 
</span><del>-SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, QuickLook, kQLPreviewOptionPasswordKey, CFStringRef)
-
</del><span class="cx"> #endif // USE(QUICK_LOOK)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkiosPreviewConverterh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/network/ios/PreviewConverter.h (0 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/ios/PreviewConverter.h                                (rev 0)
+++ trunk/Source/WebCore/platform/network/ios/PreviewConverter.h        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &lt;objc/objc.h&gt;
+#include &lt;wtf/RetainPtr.h&gt;
+#include &lt;wtf/text/WTFString.h&gt;
+
+OBJC_CLASS NSData;
+OBJC_CLASS QLPreviewConverter;
+
+namespace WebCore {
+
+class ResourceRequest;
+class ResourceResponse;
+
+class PreviewConverter {
+    WTF_MAKE_NONCOPYABLE(PreviewConverter);
+public:
+    PreviewConverter(id delegate, const ResourceResponse&amp;, const String&amp; password = { });
+    PreviewConverter(NSData *, const String&amp; uti, const String&amp; password = { });
+
+    QLPreviewConverter *platformConverter() const { return m_platformConverter.get(); }
+    ResourceRequest safeRequest(const ResourceRequest&amp;) const;
+    ResourceRequest previewRequest() const;
+    ResourceResponse previewResponse() const;
+    String previewFileName() const;
+    String previewUTI() const;
+
+private:
+    RetainPtr&lt;QLPreviewConverter&gt; m_platformConverter;
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkiosPreviewConvertermm"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/network/ios/PreviewConverter.mm (0 => 211398)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/ios/PreviewConverter.mm                                (rev 0)
+++ trunk/Source/WebCore/platform/network/ios/PreviewConverter.mm        2017-01-31 01:54:02 UTC (rev 211398)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;config.h&quot;
+#import &quot;PreviewConverter.h&quot;
+
+#if USE(QUICK_LOOK)
+
+#import &quot;QuickLookSPI.h&quot;
+#import &quot;ResourceRequest.h&quot;
+#import &quot;ResourceResponse.h&quot;
+#import &quot;SoftLinking.h&quot;
+
+SOFT_LINK_FRAMEWORK(QuickLook);
+SOFT_LINK_CLASS(QuickLook, QLPreviewConverter);
+SOFT_LINK_CONSTANT(QuickLook, kQLPreviewOptionPasswordKey, CFStringRef);
+
+namespace WebCore {
+
+static NSDictionary *optionsWithPassword(const String&amp; password)
+{
+    if (password.isNull())
+        return nil;
+
+    return @{ (NSString *)getkQLPreviewOptionPasswordKey() : password };
+}
+
+PreviewConverter::PreviewConverter(id delegate, const ResourceResponse&amp; response, const String&amp; password)
+    : m_platformConverter { adoptNS([[getQLPreviewConverterClass() alloc] initWithConnection:nil delegate:delegate response:response.nsURLResponse() options:optionsWithPassword(password)]) }
+{
+}
+
+PreviewConverter::PreviewConverter(NSData *data, const String&amp; uti, const String&amp; password)
+    : m_platformConverter { adoptNS([[getQLPreviewConverterClass() alloc] initWithData:data name:nil uti:uti options:optionsWithPassword(password)]) }
+{
+}
+
+ResourceRequest PreviewConverter::safeRequest(const ResourceRequest&amp; request) const
+{
+    return [m_platformConverter safeRequestForRequest:request.nsURLRequest(DoNotUpdateHTTPBody)];
+}
+
+ResourceRequest PreviewConverter::previewRequest() const
+{
+    return [m_platformConverter previewRequest];
+}
+
+ResourceResponse PreviewConverter::previewResponse() const
+{
+    return [m_platformConverter previewResponse];
+}
+
+String PreviewConverter::previewFileName() const
+{
+    return [m_platformConverter previewFileName];
+}
+
+String PreviewConverter::previewUTI() const
+{
+    return [m_platformConverter previewUTI];
+}
+
+} // namespace WebCore
+
+#endif // USE(QUICK_LOOK)
</ins></span></pre>
</div>
</div>

</body>
</html>