<!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>[206397] 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/206397">206397</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-09-26 15:20:27 -0700 (Mon, 26 Sep 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WK2] BlobDownloadClient should use asynchronous IPC to decide destination path
https://bugs.webkit.org/show_bug.cgi?id=162568

Reviewed by Alex Christensen.

Source/WebCore:

Update BlobResourceHandle to wait for continueDidReceiveResponse() to be
called after it calls the client's didReceiveResponseAsync(), before
actually reading the Blob Data.

No new tests, covered by existing tests.

* platform/network/BlobResourceHandle.cpp:
(WebCore::BlobResourceHandle::continueDidReceiveResponse):
(WebCore::BlobResourceHandle::getSizeForNext):
(WebCore::BlobResourceHandle::notifyResponseOnSuccess):
(WebCore::BlobResourceHandle::notifyResponseOnError):

Source/WebKit2:

Use DecideDestinationWithSuggestedFilenameAsync IPC to decide the destination
path in the case of Blob downloads, instead of the synchronous alternative.
To achieve this, BlobResourceHandle was updated in WebCore to properly support
asynchronous callback and BlobDownloadClient was updated to use asynchronous
callbacks. When BlobDownloadClient::didReceiveResponseAsync() is called, we
now ask the WebContent process asynchronously to decide what the destination
path should be. Then, when we later get the destination path back from the
WebContent process, we create the file on disk and call
continueDidReceiveResponse() on the BlobResourceHandle so we start getting the
blob data to write.

* NetworkProcess/Downloads/BlobDownloadClient.cpp:
(WebKit::BlobDownloadClient::didReceiveResponseAsync):
(WebKit::BlobDownloadClient::didDecideDownloadDestination):
* NetworkProcess/Downloads/BlobDownloadClient.h:
* NetworkProcess/Downloads/Download.cpp:
(WebKit::Download::decideDestinationWithSuggestedFilenameAsync):
(WebKit::Download::didDecideDownloadDestination):
(WebKit::Download::continueDidReceiveResponse):
(WebKit::Download::decideDestinationWithSuggestedFilename): Deleted.
* NetworkProcess/Downloads/Download.h:
* NetworkProcess/Downloads/DownloadManager.cpp:
(WebKit::DownloadManager::willDecidePendingDownloadDestination):
(WebKit::DownloadManager::continueDecidePendingDownloadDestination):
(WebKit::DownloadManager::convertHandleToDownload): Deleted.
* NetworkProcess/Downloads/DownloadManager.h:
* NetworkProcess/NetworkLoad.cpp:
(WebKit::NetworkLoad::continueDidReceiveResponse):
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::continueDecidePendingDownloadDestination):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* UIProcess/Downloads/DownloadProxy.cpp:
(WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync): Deleted.
* UIProcess/Downloads/DownloadProxy.h:
* UIProcess/Downloads/DownloadProxy.messages.in:

LayoutTests:

* fast/dom/HTMLAnchorElement/anchor-download-expected.txt:
* fast/dom/HTMLAnchorElement/anchor-nodownload-set-expected.txt:
* http/tests/security/anchor-download-allow-blob-expected.txt:
Rebaseline several Blob download tests now that the &quot;Download started&quot;
message always comes first (as it should).

* platform/mac-wk2/TestExpectations:
Unskip test that is no longer flaky.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomHTMLAnchorElementanchordownloadexpectedtxt">trunk/LayoutTests/fast/dom/HTMLAnchorElement/anchor-download-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomHTMLAnchorElementanchornodownloadsetexpectedtxt">trunk/LayoutTests/fast/dom/HTMLAnchorElement/anchor-nodownload-set-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestssecurityanchordownloadallowblobexpectedtxt">trunk/LayoutTests/http/tests/security/anchor-download-allow-blob-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2TestExpectations">trunk/LayoutTests/platform/mac-wk2/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkBlobResourceHandlecpp">trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsBlobDownloadClientcpp">trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsBlobDownloadClienth">trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsDownloadcpp">trunk/Source/WebKit2/NetworkProcess/Downloads/Download.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsDownloadh">trunk/Source/WebKit2/NetworkProcess/Downloads/Download.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsDownloadManagercpp">trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsDownloadManagerh">trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkLoadcpp">trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcesscpp">trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcessh">trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcessmessagesin">trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in</a></li>
<li><a href="#trunkSourceWebKit2UIProcessDownloadsDownloadProxycpp">trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessDownloadsDownloadProxyh">trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessDownloadsDownloadProxymessagesin">trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/LayoutTests/ChangeLog        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2016-09-26  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        [WK2] BlobDownloadClient should use asynchronous IPC to decide destination path
+        https://bugs.webkit.org/show_bug.cgi?id=162568
+
+        Reviewed by Alex Christensen.
+
+        * fast/dom/HTMLAnchorElement/anchor-download-expected.txt:
+        * fast/dom/HTMLAnchorElement/anchor-nodownload-set-expected.txt:
+        * http/tests/security/anchor-download-allow-blob-expected.txt:
+        Rebaseline several Blob download tests now that the &quot;Download started&quot;
+        message always comes first (as it should).
+
+        * platform/mac-wk2/TestExpectations:
+        Unskip test that is no longer flaky.
+
</ins><span class="cx"> 2016-09-26  Nan Wang  &lt;n_wang@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         AX: Progress: [Mac] Content in label element should be used as AXTitle or AXDescription
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomHTMLAnchorElementanchordownloadexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/HTMLAnchorElement/anchor-download-expected.txt (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/HTMLAnchorElement/anchor-download-expected.txt        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/LayoutTests/fast/dom/HTMLAnchorElement/anchor-download-expected.txt        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><ins>+Download started.
</ins><span class="cx"> Downloading URL with suggested filename &quot;&quot;
</span><del>-Download started.
</del><span class="cx"> Download completed.
</span><span class="cx"> Blob URL
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomHTMLAnchorElementanchornodownloadsetexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/HTMLAnchorElement/anchor-nodownload-set-expected.txt (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/HTMLAnchorElement/anchor-nodownload-set-expected.txt        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/LayoutTests/fast/dom/HTMLAnchorElement/anchor-nodownload-set-expected.txt        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><ins>+Download started.
</ins><span class="cx"> Downloading URL with suggested filename &quot;&quot;
</span><del>-Download started.
</del><span class="cx"> Download completed.
</span><span class="cx"> Blob URL
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecurityanchordownloadallowblobexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/anchor-download-allow-blob-expected.txt (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/anchor-download-allow-blob-expected.txt        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/LayoutTests/http/tests/security/anchor-download-allow-blob-expected.txt        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><ins>+Download started.
</ins><span class="cx"> Downloading URL with suggested filename &quot;foo.pdf&quot;
</span><del>-Download started.
</del><span class="cx"> Download completed.
</span><span class="cx"> Tests that a suggested filename on a download attribute is allowed if the link is a blob URL.
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/TestExpectations        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -210,9 +210,6 @@
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/136109 fast/multicol/mixed-opacity-fixed-test.html  [ ImageOnlyFailure ]
</span><span class="cx"> 
</span><del>-# Flaky on WebKit2.
-webkit.org/b/162543 fast/dom/HTMLAnchorElement/anchor-download.html [ Pass Failure ]
-
</del><span class="cx"> # Reference expectation doesn't end up in compositing code path, leading to antialiasing differences.
</span><span class="cx"> webkit.org/b/132421 fast/multicol/fixed-stack.html [ ImageOnlyFailure ]
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebCore/ChangeLog        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2016-09-26  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        [WK2] BlobDownloadClient should use asynchronous IPC to decide destination path
+        https://bugs.webkit.org/show_bug.cgi?id=162568
+
+        Reviewed by Alex Christensen.
+
+        Update BlobResourceHandle to wait for continueDidReceiveResponse() to be
+        called after it calls the client's didReceiveResponseAsync(), before
+        actually reading the Blob Data.
+
+        No new tests, covered by existing tests.
+
+        * platform/network/BlobResourceHandle.cpp:
+        (WebCore::BlobResourceHandle::continueDidReceiveResponse):
+        (WebCore::BlobResourceHandle::getSizeForNext):
+        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
+        (WebCore::BlobResourceHandle::notifyResponseOnError):
+
</ins><span class="cx"> 2016-09-26  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Mark Ping{Handle, Load} as final
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkBlobResourceHandlecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -158,7 +158,11 @@
</span><span class="cx"> 
</span><span class="cx"> void BlobResourceHandle::continueDidReceiveResponse()
</span><span class="cx"> {
</span><del>-    // BlobResourceHandle doesn't wait for didReceiveResponse, and it currently cannot be used for downloading.
</del><ins>+    ASSERT(m_async);
+    ASSERT(usesAsyncCallbacks());
+
+    m_buffer.resize(bufferSize);
+    readAsync();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void BlobResourceHandle::start()
</span><span class="lines">@@ -223,8 +227,10 @@
</span><span class="cx">         if (m_async) {
</span><span class="cx">             Ref&lt;BlobResourceHandle&gt; protectedThis(*this);
</span><span class="cx">             notifyResponse();
</span><del>-            m_buffer.resize(bufferSize);
-            readAsync();
</del><ins>+            if (!usesAsyncCallbacks()) {
+                m_buffer.resize(bufferSize);
+                readAsync();
+            }
</ins><span class="cx">         }
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -568,9 +574,6 @@
</span><span class="cx">     // as if the response had a Content-Disposition header with the filename parameter set to the File's name attribute.
</span><span class="cx">     // Notably, this will affect a name suggested in &quot;File Save As&quot;.
</span><span class="cx"> 
</span><del>-    // BlobResourceHandle cannot be used with downloading, and doesn't even wait for continueDidReceiveResponse.
-    // It's currently client's responsibility to know that didReceiveResponseAsync cannot be used to convert a
-    // load into a download or blobs.
</del><span class="cx">     if (usesAsyncCallbacks())
</span><span class="cx">         client()-&gt;didReceiveResponseAsync(this, WTFMove(response));
</span><span class="cx">     else
</span><span class="lines">@@ -597,8 +600,6 @@
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // Note that we don't wait for continueDidReceiveResponse when using didReceiveResponseAsync.
-    // This is not formally correct, but the client has to be a no-op anyway, because blobs can't be downloaded.
</del><span class="cx">     if (usesAsyncCallbacks())
</span><span class="cx">         client()-&gt;didReceiveResponseAsync(this, WTFMove(response));
</span><span class="cx">     else
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/ChangeLog        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2016-09-26  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        [WK2] BlobDownloadClient should use asynchronous IPC to decide destination path
+        https://bugs.webkit.org/show_bug.cgi?id=162568
+
+        Reviewed by Alex Christensen.
+
+        Use DecideDestinationWithSuggestedFilenameAsync IPC to decide the destination
+        path in the case of Blob downloads, instead of the synchronous alternative.
+        To achieve this, BlobResourceHandle was updated in WebCore to properly support
+        asynchronous callback and BlobDownloadClient was updated to use asynchronous
+        callbacks. When BlobDownloadClient::didReceiveResponseAsync() is called, we
+        now ask the WebContent process asynchronously to decide what the destination
+        path should be. Then, when we later get the destination path back from the
+        WebContent process, we create the file on disk and call
+        continueDidReceiveResponse() on the BlobResourceHandle so we start getting the
+        blob data to write.
+
+        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
+        (WebKit::BlobDownloadClient::didReceiveResponseAsync):
+        (WebKit::BlobDownloadClient::didDecideDownloadDestination):
+        * NetworkProcess/Downloads/BlobDownloadClient.h:
+        * NetworkProcess/Downloads/Download.cpp:
+        (WebKit::Download::decideDestinationWithSuggestedFilenameAsync):
+        (WebKit::Download::didDecideDownloadDestination):
+        (WebKit::Download::continueDidReceiveResponse):
+        (WebKit::Download::decideDestinationWithSuggestedFilename): Deleted.
+        * NetworkProcess/Downloads/Download.h:
+        * NetworkProcess/Downloads/DownloadManager.cpp:
+        (WebKit::DownloadManager::willDecidePendingDownloadDestination):
+        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
+        (WebKit::DownloadManager::convertHandleToDownload): Deleted.
+        * NetworkProcess/Downloads/DownloadManager.h:
+        * NetworkProcess/NetworkLoad.cpp:
+        (WebKit::NetworkLoad::continueDidReceiveResponse):
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::continueDecidePendingDownloadDestination):
+        * NetworkProcess/NetworkProcess.h:
+        * NetworkProcess/NetworkProcess.messages.in:
+        * UIProcess/Downloads/DownloadProxy.cpp:
+        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync): Deleted.
+        * UIProcess/Downloads/DownloadProxy.h:
+        * UIProcess/Downloads/DownloadProxy.messages.in:
+
</ins><span class="cx"> 2016-09-26  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Mark Ping{Handle, Load} as final
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsBlobDownloadClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.cpp (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.cpp        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.cpp        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -41,27 +41,29 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void BlobDownloadClient::didReceiveResponse(ResourceHandle*, ResourceResponse&amp;&amp; response)
</del><ins>+void BlobDownloadClient::didReceiveResponseAsync(ResourceHandle*, ResourceResponse&amp;&amp; response)
</ins><span class="cx"> {
</span><span class="cx">     m_download.didReceiveResponse(WTFMove(response));
</span><ins>+    m_download.decideDestinationWithSuggestedFilenameAsync(m_download.suggestedName());
+}
</ins><span class="cx"> 
</span><del>-    bool allowOverwrite = false;
-    m_destinationPath = m_download.decideDestinationWithSuggestedFilename(m_download.suggestedName(), allowOverwrite);
-    if (m_destinationPath.isEmpty()) {
-        didFail(nullptr, cancelledError(m_download.request()));
-        return;
-    }
-    if (fileExists(m_destinationPath)) {
</del><ins>+void BlobDownloadClient::didDecideDownloadDestination(const String&amp; destinationPath, bool allowOverwrite)
+{
+    ASSERT(!destinationPath.isEmpty());
+
+    if (fileExists(destinationPath)) {
</ins><span class="cx">         if (!allowOverwrite) {
</span><del>-            m_destinationPath = emptyString();
</del><span class="cx">             didFail(nullptr, cancelledError(m_download.request()));
</span><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        deleteFile(m_destinationPath);
</del><ins>+        deleteFile(destinationPath);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    m_destinationPath = destinationPath;
</ins><span class="cx">     m_destinationFile = openFile(m_destinationPath, OpenForWrite);
</span><span class="cx">     m_download.didCreateDestination(m_destinationPath);
</span><ins>+
+    m_download.continueDidReceiveResponse();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void BlobDownloadClient::didReceiveBuffer(ResourceHandle*, Ref&lt;SharedBuffer&gt;&amp;&amp; buffer, int)
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsBlobDownloadClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.h (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.h        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.h        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -39,13 +39,15 @@
</span><span class="cx">     explicit BlobDownloadClient(Download&amp;);
</span><span class="cx"> 
</span><span class="cx">     void didCancel();
</span><ins>+    void didDecideDownloadDestination(const String&amp; destinationPath, bool allowOverwrite);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     // ResourceHandleClient
</span><del>-    void didReceiveResponse(WebCore::ResourceHandle*, WebCore::ResourceResponse&amp;&amp;) final;
</del><ins>+    void didReceiveResponseAsync(WebCore::ResourceHandle*, WebCore::ResourceResponse&amp;&amp;) final;
</ins><span class="cx">     void didReceiveBuffer(WebCore::ResourceHandle*, Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;, int reportedEncodedDataLength) final;
</span><span class="cx">     void didFinishLoading(WebCore::ResourceHandle*, double finishTime) final;
</span><span class="cx">     void didFail(WebCore::ResourceHandle*, const WebCore::ResourceError&amp;) final;
</span><ins>+    bool usesAsyncCallbacks() final { return true; }
</ins><span class="cx"> 
</span><span class="cx">     Download&amp; m_download;
</span><span class="cx">     String m_destinationPath;
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsDownloadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/Download.cpp (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/Download.cpp        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/Download.cpp        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -146,6 +146,8 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if !USE(NETWORK_SESSION)
+
</ins><span class="cx"> String Download::decideDestinationWithSuggestedFilename(const String&amp; filename, bool&amp; allowOverwrite)
</span><span class="cx"> {
</span><span class="cx">     String destination;
</span><span class="lines">@@ -160,6 +162,34 @@
</span><span class="cx">     return destination;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#endif
+
+void Download::decideDestinationWithSuggestedFilenameAsync(const String&amp; suggestedFilename)
+{
+    send(Messages::DownloadProxy::DecideDestinationWithSuggestedFilenameAsync(downloadID(), suggestedFilename));
+}
+
+void Download::didDecideDownloadDestination(const String&amp; destinationPath, const SandboxExtension::Handle&amp; sandboxExtensionHandle, bool allowOverwrite)
+{
+    ASSERT(!m_sandboxExtension);
+    m_sandboxExtension = SandboxExtension::create(sandboxExtensionHandle);
+    if (m_sandboxExtension)
+        m_sandboxExtension-&gt;consume();
+
+    if (m_request.url().protocolIsBlob()) {
+        static_cast&lt;BlobDownloadClient*&gt;(m_downloadClient.get())-&gt;didDecideDownloadDestination(destinationPath, allowOverwrite);
+        return;
+    }
+
+    // For now, only Blob URL downloads go through this code path.
+    ASSERT_NOT_REACHED();
+}
+
+void Download::continueDidReceiveResponse()
+{
+    m_resourceHandle-&gt;continueDidReceiveResponse();
+}
+
</ins><span class="cx"> void Download::didCreateDestination(const String&amp; path)
</span><span class="cx"> {
</span><span class="cx">     send(Messages::DownloadProxy::DidCreateDestination(path));
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsDownloadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/Download.h (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/Download.h        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/Download.h        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -100,7 +100,12 @@
</span><span class="cx">     void didReceiveResponse(const WebCore::ResourceResponse&amp;);
</span><span class="cx">     void didReceiveData(uint64_t length);
</span><span class="cx">     bool shouldDecodeSourceDataOfMIMEType(const String&amp; mimeType);
</span><ins>+#if !USE(NETWORK_SESSION)
</ins><span class="cx">     String decideDestinationWithSuggestedFilename(const String&amp; filename, bool&amp; allowOverwrite);
</span><ins>+#endif
+    void decideDestinationWithSuggestedFilenameAsync(const String&amp;);
+    void didDecideDownloadDestination(const String&amp; destinationPath, const SandboxExtension::Handle&amp;, bool allowOverwrite);
+    void continueDidReceiveResponse();
</ins><span class="cx">     void didCreateDestination(const String&amp; path);
</span><span class="cx">     void didFinish();
</span><span class="cx">     void platformDidFinish();
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsDownloadManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -105,25 +105,6 @@
</span><span class="cx">     auto addResult = m_downloadsWaitingForDestination.set(downloadID, std::make_pair&lt;RefPtr&lt;NetworkDataTask&gt;, ResponseCompletionHandler&gt;(&amp;networkDataTask, WTFMove(completionHandler)));
</span><span class="cx">     ASSERT_UNUSED(addResult, addResult.isNewEntry);
</span><span class="cx"> }
</span><del>-
-void DownloadManager::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle&amp; sandboxExtensionHandle, bool allowOverwrite)
-{
-    auto pair = m_downloadsWaitingForDestination.take(downloadID);
-    auto networkDataTask = WTFMove(pair.first);
-    auto completionHandler = WTFMove(pair.second);
-    if (!networkDataTask || !completionHandler)
-        return;
-
-    networkDataTask-&gt;setPendingDownloadLocation(destination, sandboxExtensionHandle);
-    
-    if (allowOverwrite &amp;&amp; fileExists(destination))
-        deleteFile(destination);
-
-    completionHandler(PolicyDownload);
-    
-    ASSERT(!m_downloadsAfterDestinationDecided.contains(downloadID));
-    m_downloadsAfterDestinationDecided.set(downloadID, networkDataTask);
-}
</del><span class="cx"> #else
</span><span class="cx"> void DownloadManager::convertHandleToDownload(DownloadID downloadID, ResourceHandle* handle, const ResourceRequest&amp; request, const ResourceResponse&amp; response)
</span><span class="cx"> {
</span><span class="lines">@@ -135,6 +116,32 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+void DownloadManager::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle&amp; sandboxExtensionHandle, bool allowOverwrite)
+{
+#if USE(NETWORK_SESSION)
+    if (m_downloadsWaitingForDestination.contains(downloadID)) {
+        auto pair = m_downloadsWaitingForDestination.take(downloadID);
+        auto networkDataTask = WTFMove(pair.first);
+        auto completionHandler = WTFMove(pair.second);
+        if (!networkDataTask || !completionHandler)
+            return;
+
+        networkDataTask-&gt;setPendingDownloadLocation(destination, sandboxExtensionHandle);
+
+        if (allowOverwrite &amp;&amp; fileExists(destination))
+            deleteFile(destination);
+
+        completionHandler(PolicyDownload);
+
+        ASSERT(!m_downloadsAfterDestinationDecided.contains(downloadID));
+        m_downloadsAfterDestinationDecided.set(downloadID, networkDataTask);
+        return;
+    }
+#endif
+    if (auto* waitingDownload = download(downloadID))
+        waitingDownload-&gt;didDecideDownloadDestination(destination, sandboxExtensionHandle, allowOverwrite);
+}
+
</ins><span class="cx"> void DownloadManager::resumeDownload(SessionID, DownloadID downloadID, const IPC::DataReference&amp; resumeData, const String&amp; path, const SandboxExtension::Handle&amp; sandboxExtensionHandle)
</span><span class="cx"> {
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsDownloadManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -80,10 +80,10 @@
</span><span class="cx">     void continueCanAuthenticateAgainstProtectionSpace(DownloadID, bool canAuthenticate);
</span><span class="cx">     void continueWillSendRequest(DownloadID, WebCore::ResourceRequest&amp;&amp;);
</span><span class="cx">     void willDecidePendingDownloadDestination(NetworkDataTask&amp;, ResponseCompletionHandler&amp;&amp;);
</span><del>-    void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle&amp;, bool allowOverwrite);
</del><span class="cx"> #else
</span><span class="cx">     void convertHandleToDownload(DownloadID, WebCore::ResourceHandle*, const WebCore::ResourceRequest&amp;, const WebCore::ResourceResponse&amp;);
</span><span class="cx"> #endif
</span><ins>+    void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle&amp;, bool allowOverwrite);
</ins><span class="cx"> 
</span><span class="cx">     void resumeDownload(WebCore::SessionID, DownloadID, const IPC::DataReference&amp; resumeData, const String&amp; path, const SandboxExtension::Handle&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkLoadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -149,7 +149,6 @@
</span><span class="cx"> void NetworkLoad::continueDidReceiveResponse()
</span><span class="cx"> {
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><del>-    ASSERT(m_responseCompletionHandler);
</del><span class="cx">     if (m_responseCompletionHandler) {
</span><span class="cx">         m_responseCompletionHandler(PolicyUse);
</span><span class="cx">         m_responseCompletionHandler = nullptr;
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -525,7 +525,8 @@
</span><span class="cx">     downloadManager().willDecidePendingDownloadDestination(networkDataTask, WTFMove(completionHandler));
</span><span class="cx">     downloadProxyConnection()-&gt;send(Messages::DownloadProxy::DecideDestinationWithSuggestedFilenameAsync(networkDataTask.pendingDownloadID(), networkDataTask.suggestedFilename()), destinationID);
</span><span class="cx"> }
</span><del>-    
</del><ins>+#endif
+
</ins><span class="cx"> void NetworkProcess::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle&amp; sandboxExtensionHandle, bool allowOverwrite)
</span><span class="cx"> {
</span><span class="cx">     if (destination.isEmpty())
</span><span class="lines">@@ -533,7 +534,6 @@
</span><span class="cx">     else
</span><span class="cx">         downloadManager().continueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite);
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx"> void NetworkProcess::setCacheModel(uint32_t cm)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkProcessh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -179,8 +179,9 @@
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx">     void continueCanAuthenticateAgainstProtectionSpaceDownload(DownloadID, bool canAuthenticate);
</span><span class="cx">     void continueWillSendRequest(DownloadID, WebCore::ResourceRequest&amp;&amp;);
</span><ins>+#endif
</ins><span class="cx">     void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle&amp; sandboxExtensionHandle, bool allowOverwrite);
</span><del>-#endif
</del><ins>+
</ins><span class="cx">     void setCacheModel(uint32_t);
</span><span class="cx">     void allowSpecificHTTPSCertificateForHost(const WebCore::CertificateInfo&amp;, const String&amp; host);
</span><span class="cx">     void setCanHandleHTTPSServerTrustEvaluation(bool);
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkProcessmessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -51,8 +51,8 @@
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx">     ContinueCanAuthenticateAgainstProtectionSpaceDownload(WebKit::DownloadID downloadID, bool canAuthenticate)
</span><span class="cx">     ContinueWillSendRequest(WebKit::DownloadID downloadID, WebCore::ResourceRequest request)
</span><ins>+#endif
</ins><span class="cx">     ContinueDecidePendingDownloadDestination(WebKit::DownloadID downloadID, String destination, WebKit::SandboxExtension::Handle sandboxExtensionHandle, bool allowOverwrite)
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">     SetProcessSuppressionEnabled(bool flag)
</span><span class="cx"> #if PLATFORM(COCOA)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessDownloadsDownloadProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -172,7 +172,6 @@
</span><span class="cx">     result = m_processPool-&gt;downloadClient().shouldDecodeSourceDataOfMIMEType(m_processPool.get(), this, mimeType);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if USE(NETWORK_SESSION)
</del><span class="cx"> void DownloadProxy::decideDestinationWithSuggestedFilenameAsync(DownloadID downloadID, const String&amp; suggestedFilename)
</span><span class="cx"> {
</span><span class="cx">     bool allowOverwrite = false;
</span><span class="lines">@@ -189,8 +188,9 @@
</span><span class="cx">     if (NetworkProcessProxy* networkProcess = m_processPool-&gt;networkProcess())
</span><span class="cx">         networkProcess-&gt;connection()-&gt;send(Messages::NetworkProcess::ContinueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite), 0);
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx"> 
</span><ins>+#if !USE(NETWORK_SESSION)
+
</ins><span class="cx"> void DownloadProxy::decideDestinationWithSuggestedFilename(const String&amp; filename, String&amp; destination, bool&amp; allowOverwrite, SandboxExtension::Handle&amp; sandboxExtensionHandle)
</span><span class="cx"> {
</span><span class="cx">     allowOverwrite = false;
</span><span class="lines">@@ -208,6 +208,8 @@
</span><span class="cx">         SandboxExtension::createHandle(destination, SandboxExtension::ReadWrite, sandboxExtensionHandle);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#endif
+
</ins><span class="cx"> void DownloadProxy::didCreateDestination(const String&amp; path)
</span><span class="cx"> {
</span><span class="cx">     if (!m_processPool)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessDownloadsDownloadProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -82,7 +82,6 @@
</span><span class="cx">     void didReceiveResponse(const WebCore::ResourceResponse&amp;);
</span><span class="cx">     void didReceiveData(uint64_t length);
</span><span class="cx">     void shouldDecodeSourceDataOfMIMEType(const String&amp; mimeType, bool&amp; result);
</span><del>-    void decideDestinationWithSuggestedFilename(const String&amp; filename, String&amp; destination, bool&amp; allowOverwrite, SandboxExtension::Handle&amp; sandboxExtensionHandle);
</del><span class="cx">     void didCreateDestination(const String&amp; path);
</span><span class="cx">     void didFinish();
</span><span class="cx">     void didFail(const WebCore::ResourceError&amp;, const IPC::DataReference&amp; resumeData);
</span><span class="lines">@@ -90,8 +89,10 @@
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx">     void canAuthenticateAgainstProtectionSpace(const WebCore::ProtectionSpace&amp;);
</span><span class="cx">     void willSendRequest(const WebCore::ResourceRequest&amp; redirectRequest, const WebCore::ResourceResponse&amp; redirectResponse);
</span><ins>+#else
+    void decideDestinationWithSuggestedFilename(const String&amp; filename, String&amp; destination, bool&amp; allowOverwrite, SandboxExtension::Handle&amp; sandboxExtensionHandle);
+#endif
</ins><span class="cx">     void decideDestinationWithSuggestedFilenameAsync(DownloadID, const String&amp; suggestedFilename);
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">     DownloadProxyMap&amp; m_downloadProxyMap;
</span><span class="cx">     RefPtr&lt;WebProcessPool&gt; m_processPool;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessDownloadsDownloadProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in (206396 => 206397)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in        2016-09-26 21:55:34 UTC (rev 206396)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in        2016-09-26 22:20:27 UTC (rev 206397)
</span><span class="lines">@@ -26,13 +26,15 @@
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx">     WillSendRequest(WebCore::ResourceRequest redirectRequest, WebCore::ResourceResponse redirectResponse));
</span><span class="cx">     CanAuthenticateAgainstProtectionSpace(WebCore::ProtectionSpace protectionSpace)
</span><ins>+#endif
</ins><span class="cx">     DecideDestinationWithSuggestedFilenameAsync(WebKit::DownloadID downloadID, String suggestedFilename)
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">     DidReceiveResponse(WebCore::ResourceResponse response)
</span><span class="cx">     DidReceiveData(uint64_t length)
</span><span class="cx">     ShouldDecodeSourceDataOfMIMEType(String mimeType) -&gt; (bool result)
</span><ins>+#if !USE(NETWORK_SESSION)
</ins><span class="cx">     DecideDestinationWithSuggestedFilename(String filename) -&gt; (String destination, bool allowOverwrite, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
</span><ins>+#endif
</ins><span class="cx">     DidCreateDestination(String path)
</span><span class="cx">     DidFinish()
</span><span class="cx">     DidFail(WebCore::ResourceError error, IPC::DataReference resumeData)
</span></span></pre>
</div>
</div>

</body>
</html>