⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 197050 in webkit


Ignore:
Timestamp:
Feb 24, 2016, 1:44:00 PM (11 years ago)
Author:
achristensen@apple.com
Message:

Fix downloads when using NetworkSession
​https://bugs.webkit.org/show_bug.cgi?id=154620

Reviewed by Brady Eidson.

This fixes all the _WKDownload API tests when using NetworkSession.

  • NetworkProcess/Downloads/DownloadManager.cpp:

(WebKit::DownloadManager::willDecidePendingDownloadDestination):
When we store the NetworkDataTask in m_downloadsWaitingForDestination, we want to remove its owner
from m_pendingDownloads to prevent memory leaks.
(WebKit::DownloadManager::continueDecidePendingDownloadDestination):
If a file exists and the UIProcess has told us to overwrite the file, delete the file
before starting a new download in its place. This used to be done by CFNetwork in
NSURLDownload's setDestination:allowOverwrite:, but the NSURLSession equivalent (setting
NSURLSessionDataTask's _pathToDownloadTaskFile attribute) does not overwrite the file for us.
(WebKit::DownloadManager::cancelDownload):
If a download is canceled while it is waiting for its destination from the UIProcess, the Download
object does not exist yet. Instead, we have a completion handler stored in m_downloadsWaitingForDestination.
In this case, we want to send the UIProcess a DownloadProxy::DidCancel message, which I did through
NetworkProcess::pendingDownloadCanceled because the DownloadManager is not a MessageSender, and then
call the completion handler with PolicyIgnore to cancel the download.
(WebKit::DownloadManager::downloadFinished):

  • NetworkProcess/Downloads/DownloadManager.h:
  • NetworkProcess/Downloads/PendingDownload.cpp:

(WebKit::PendingDownload::continueCanAuthenticateAgainstProtectionSpace):
(WebKit::PendingDownload::didBecomeDownload):
(WebKit::PendingDownload::didFailLoading):
(WebKit::PendingDownload::messageSenderConnection):
(WebKit::PendingDownload::didConvertToDownload): Deleted.

  • NetworkProcess/Downloads/PendingDownload.h:
  • NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:

(WebKit::Download::cancel):
Send a didCancel message to the UIProcess when a download was cancelled.
Use cancelByProducingResumeData so we can resume canceled downloads.

  • NetworkProcess/NetworkConnectionToWebProcess.cpp:

(WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
didConvertToDownload is needed when using NetworkSession to tell the NetworkResourceLoader
not to call cancel on the NetworkLoad after converting it to a download.

  • NetworkProcess/NetworkDataTask.h:

(WebKit::NetworkDataTask::setPendingDownload):
(WebKit::NetworkDataTask::pendingDownloadLocation):

  • NetworkProcess/NetworkLoad.cpp:

(WebKit::NetworkLoad::convertTaskToDownload):
(WebKit::NetworkLoad::setPendingDownloadID):
(WebKit::NetworkLoad::didReceiveResponseNetworkSession):
Don't call findPendingDownloadLocation as a method on the NetworkDataTask to avoid memory leaks
in DownloadManager.m_pendingDownloads.
(WebKit::NetworkLoad::didBecomeDownload):
Call m_client.didBecomeDownload which is being separated from didConvertToDownload. The former is
called after the NetworkDataTask becomes a Download, the latter is called as soon as
convertMainResourceLoadToDownload is called.

  • NetworkProcess/NetworkLoadClient.h:
  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::continueWillSendRequest):
(WebKit::NetworkProcess::pendingDownloadCanceled):
Send a DownloadProxy::DidCancel message when a pending download is canceled.
(WebKit::NetworkProcess::findPendingDownloadLocation):
(WebKit::NetworkProcess::continueDecidePendingDownloadDestination):

  • NetworkProcess/NetworkProcess.h:
  • NetworkProcess/NetworkProcess.messages.in:
  • NetworkProcess/NetworkResourceLoader.cpp:

(WebKit::NetworkResourceLoader::didConvertToDownload):
(WebKit::NetworkResourceLoader::didBecomeDownload):
Separate setting m_didConvertToDownload, which needs to happen before the didReceiveResponse completion
handler is called to tell the NetworkResourceLoader not to call cancel in NetworkResourceLoader::abort,
from deleting the NetworkLoad, which can be done after the NSURLSessionDataTask has been converted to a
NSURLSessionDownloadTask.

  • NetworkProcess/NetworkResourceLoader.h:
  • NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
  • NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:

(WebKit::NetworkDataTask::failureTimerFired):
(WebKit::NetworkDataTask::setPendingDownloadLocation):
(WebKit::NetworkDataTask::transferSandboxExtensionToDownload):
(WebKit::NetworkDataTask::suggestedFilename):
(WebKit::NetworkDataTask::currentRequest):
(WebKit::NetworkDataTask::findPendingDownloadLocation): Deleted.

  • NetworkProcess/cocoa/NetworkSessionCocoa.mm:

(-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
Take the downloadID if it failed because we will report that download as failed and not use it again.
(WebKit::NetworkSession::takeDownloadID):

  • UIProcess/Downloads/DownloadProxy.cpp:

(WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync):
(WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):

Location:
trunk/Source/WebKit2
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r197041 r197050  
     12016-02-24  Alex Christensen  <achristensen@webkit.org>
     2
     3        Fix downloads when using NetworkSession
     4        https://bugs.webkit.org/show_bug.cgi?id=154620
     5
     6        Reviewed by Brady Eidson.
     7
     8        This fixes all the _WKDownload API tests when using NetworkSession.
     9
     10        * NetworkProcess/Downloads/DownloadManager.cpp:
     11        (WebKit::DownloadManager::willDecidePendingDownloadDestination):
     12        When we store the NetworkDataTask in m_downloadsWaitingForDestination, we want to remove its owner
     13        from m_pendingDownloads to prevent memory leaks.
     14        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
     15        If a file exists and the UIProcess has told us to overwrite the file, delete the file
     16        before starting a new download in its place.  This used to be done by CFNetwork in
     17        NSURLDownload's setDestination:allowOverwrite:, but the NSURLSession equivalent (setting
     18        NSURLSessionDataTask's _pathToDownloadTaskFile attribute) does not overwrite the file for us.
     19        (WebKit::DownloadManager::cancelDownload):
     20        If a download is canceled while it is waiting for its destination from the UIProcess, the Download
     21        object does not exist yet.  Instead, we have a completion handler stored in m_downloadsWaitingForDestination.
     22        In this case, we want to send the UIProcess a DownloadProxy::DidCancel message, which I did through
     23        NetworkProcess::pendingDownloadCanceled because the DownloadManager is not a MessageSender, and then
     24        call the completion handler with PolicyIgnore to cancel the download.
     25        (WebKit::DownloadManager::downloadFinished):
     26        * NetworkProcess/Downloads/DownloadManager.h:
     27        * NetworkProcess/Downloads/PendingDownload.cpp:
     28        (WebKit::PendingDownload::continueCanAuthenticateAgainstProtectionSpace):
     29        (WebKit::PendingDownload::didBecomeDownload):
     30        (WebKit::PendingDownload::didFailLoading):
     31        (WebKit::PendingDownload::messageSenderConnection):
     32        (WebKit::PendingDownload::didConvertToDownload): Deleted.
     33        * NetworkProcess/Downloads/PendingDownload.h:
     34        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
     35        (WebKit::Download::cancel):
     36        Send a didCancel message to the UIProcess when a download was cancelled.
     37        Use cancelByProducingResumeData so we can resume canceled downloads.
     38        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
     39        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
     40        didConvertToDownload is needed when using NetworkSession to tell the NetworkResourceLoader
     41        not to call cancel on the NetworkLoad after converting it to a download.
     42        * NetworkProcess/NetworkDataTask.h:
     43        (WebKit::NetworkDataTask::setPendingDownload):
     44        (WebKit::NetworkDataTask::pendingDownloadLocation):
     45        * NetworkProcess/NetworkLoad.cpp:
     46        (WebKit::NetworkLoad::convertTaskToDownload):
     47        (WebKit::NetworkLoad::setPendingDownloadID):
     48        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
     49        Don't call findPendingDownloadLocation as a method on the NetworkDataTask to avoid memory leaks
     50        in DownloadManager.m_pendingDownloads.
     51        (WebKit::NetworkLoad::didBecomeDownload):
     52        Call m_client.didBecomeDownload which is being separated from didConvertToDownload.  The former is
     53        called after the NetworkDataTask becomes a Download, the latter is called as soon as
     54        convertMainResourceLoadToDownload is called.
     55        * NetworkProcess/NetworkLoadClient.h:
     56        * NetworkProcess/NetworkProcess.cpp:
     57        (WebKit::NetworkProcess::continueWillSendRequest):
     58        (WebKit::NetworkProcess::pendingDownloadCanceled):
     59        Send a DownloadProxy::DidCancel message when a pending download is canceled.
     60        (WebKit::NetworkProcess::findPendingDownloadLocation):
     61        (WebKit::NetworkProcess::continueDecidePendingDownloadDestination):
     62        * NetworkProcess/NetworkProcess.h:
     63        * NetworkProcess/NetworkProcess.messages.in:
     64        * NetworkProcess/NetworkResourceLoader.cpp:
     65        (WebKit::NetworkResourceLoader::didConvertToDownload):
     66        (WebKit::NetworkResourceLoader::didBecomeDownload):
     67        Separate setting m_didConvertToDownload, which needs to happen before the didReceiveResponse completion
     68        handler is called to tell the NetworkResourceLoader not to call cancel in NetworkResourceLoader::abort,
     69        from deleting the NetworkLoad, which can be done after the NSURLSessionDataTask has been converted to a
     70        NSURLSessionDownloadTask.
     71        * NetworkProcess/NetworkResourceLoader.h:
     72        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
     73        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
     74        (WebKit::NetworkDataTask::failureTimerFired):
     75        (WebKit::NetworkDataTask::setPendingDownloadLocation):
     76        (WebKit::NetworkDataTask::transferSandboxExtensionToDownload):
     77        (WebKit::NetworkDataTask::suggestedFilename):
     78        (WebKit::NetworkDataTask::currentRequest):
     79        (WebKit::NetworkDataTask::findPendingDownloadLocation): Deleted.
     80        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
     81        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
     82        Take the downloadID if it failed because we will report that download as failed and not use it again.
     83        (WebKit::NetworkSession::takeDownloadID):
     84        * UIProcess/Downloads/DownloadProxy.cpp:
     85        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync):
     86        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
     87
    1882016-02-24  Anders Carlsson  <andersca@apple.com>
    289
  • trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp

    r196984 r197050  
    9898void DownloadManager::willDecidePendingDownloadDestination(NetworkDataTask& networkDataTask, ResponseCompletionHandler completionHandler)
    9999{
    100     auto addResult = m_downloadsWaitingForDestination.set(networkDataTask.pendingDownloadID(), std::make_pair<RefPtr<NetworkDataTask>, ResponseCompletionHandler>(&networkDataTask, WTFMove(completionHandler)));
     100    auto downloadID = networkDataTask.pendingDownloadID();
     101    auto pendingDownload = m_pendingDownloads.take(downloadID);
     102    ASSERT(networkDataTask.pendingDownload() == pendingDownload.get());
     103    auto addResult = m_downloadsWaitingForDestination.set(downloadID, std::make_pair<RefPtr<NetworkDataTask>, ResponseCompletionHandler>(&networkDataTask, WTFMove(completionHandler)));
    101104    ASSERT_UNUSED(addResult, addResult.isNewEntry);
    102105}
    103106
    104 void DownloadManager::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle)
     107void DownloadManager::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)
    105108{
    106109    auto pair = m_downloadsWaitingForDestination.take(downloadID);
    107110    auto networkDataTask = pair.first;
    108111    auto completionHandler = pair.second;
    109     if (!networkDataTask || !completionHandler) {
    110         ASSERT_NOT_REACHED();
     112    if (!networkDataTask || !completionHandler)
    111113        return;
    112     }
     114
    113115    networkDataTask->setPendingDownloadLocation(destination, sandboxExtensionHandle);
     116   
     117    if (allowOverwrite && fileExists(destination))
     118        deleteFile(destination);
     119
    114120    completionHandler(PolicyDownload);
    115121   
    … …  
    144150void DownloadManager::cancelDownload(DownloadID downloadID)
    145151{
    146     Download* download = m_downloads.get(downloadID);
    147     if (!download)
     152    if (Download* download = m_downloads.get(downloadID)) {
     153        download->cancel();
    148154        return;
    149 
    150     download->cancel();
     155    }
     156#if USE(NETWORK_SESSION)
     157    if (auto completionHandler = m_downloadsWaitingForDestination.take(downloadID).second) {
     158        m_client.pendingDownloadCanceled(downloadID);
     159        completionHandler(PolicyIgnore);
     160        return;
     161    }
     162#endif
    151163}
    152164
  • trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h

    r196984 r197050  
    6868        virtual IPC::Connection* downloadProxyConnection() = 0;
    6969        virtual AuthenticationManager& downloadsAuthenticationManager() = 0;
     70#if USE(NETWORK_SESSION)
     71        virtual void pendingDownloadCanceled(DownloadID) = 0;
     72#endif
    7073    };
    7174
    … …  
    7881    void continueWillSendRequest(DownloadID, const WebCore::ResourceRequest&);
    7982    void willDecidePendingDownloadDestination(NetworkDataTask&, ResponseCompletionHandler);
    80     void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle&);
     83    void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle&, bool allowOverwrite);
    8184#else
    8285    void convertHandleToDownload(DownloadID, WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
  • trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.cpp

    r195357 r197050  
    2929#if USE(NETWORK_SESSION)
    3030
     31#include "DataReference.h"
    3132#include "DownloadProxyMessages.h"
    3233#include "NetworkLoad.h"
    … …  
    6566}
    6667
    67 void PendingDownload::didConvertToDownload()
     68void PendingDownload::didBecomeDownload()
    6869{
    6970    m_networkLoad = nullptr;
     71}
     72   
     73void PendingDownload::didFailLoading(const WebCore::ResourceError& error)
     74{
     75    send(Messages::DownloadProxy::DidFail(error, { }));
    7076}
    7177   
  • trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h

    r194902 r197050  
    5858    virtual void didReceiveBuffer(RefPtr<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override { };
    5959    virtual void didFinishLoading(double finishTime) override { };
    60     virtual void didFailLoading(const WebCore::ResourceError&) override { };
    61     virtual void didConvertToDownload() override;
     60    virtual void didFailLoading(const WebCore::ResourceError&) override;
     61    virtual void didBecomeDownload() override;
    6262#if PLATFORM(COCOA)
    6363    virtual void willCacheResponseAsync(CFCachedURLResponseRef) override { }
  • trunk/Source/WebKit2/NetworkProcess/Downloads/cocoa/DownloadCocoa.mm

    r194562 r197050  
    2929#if USE(NETWORK_SESSION)
    3030
     31#import "DataReference.h"
    3132#import <WebCore/NotImplemented.h>
    3233
    … …  
    4041void Download::cancel()
    4142{
    42     [m_download cancel];
     43    [m_download cancelByProducingResumeData: ^(NSData *resumeData)
     44    {
     45        didCancel(IPC::DataReference(reinterpret_cast<const uint8_t*>([resumeData bytes]), [resumeData length]));
     46    }];
    4347}
    4448
  • trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r196174 r197050  
    205205    loader->networkLoad()->handle()->continueDidReceiveResponse();
    206206   
     207#endif
    207208    loader->didConvertToDownload();
    208 #endif
    209209}
    210210
  • trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h

    r196984 r197050  
    120120        m_pendingDownload = &pendingDownload;
    121121    }
    122     void findPendingDownloadLocation(ResponseCompletionHandler);
    123122    void setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle&);
    124123    const String& pendingDownloadLocation() { return m_pendingDownloadLocation; }
    125124    WebCore::ResourceRequest currentRequest();
     125    String suggestedFilename();
    126126    bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler);
    127127    void willPerformHTTPRedirection(const WebCore::ResourceResponse&, WebCore::ResourceRequest&&, RedirectCompletionHandler);
  • trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp

    r196984 r197050  
    173173    ASSERT(m_responseCompletionHandler);
    174174    if (m_responseCompletionHandler)
    175         m_task->findPendingDownloadLocation(WTFMove(m_responseCompletionHandler));
     175        NetworkProcess::singleton().findPendingDownloadLocation(*m_task.get(), WTFMove(m_responseCompletionHandler));
    176176}
    177177
    … …  
    222222    ASSERT(isMainThread());
    223223    if (m_task && m_task->pendingDownloadID().downloadID())
    224         m_task->findPendingDownloadLocation(completionHandler);
     224        NetworkProcess::singleton().findPendingDownloadLocation(*m_task.get(), completionHandler);
    225225    else if (sharedDidReceiveResponse(response) == NetworkLoadClient::ShouldContinueDidReceiveResponse::Yes)
    226226        completionHandler(PolicyUse);
    … …  
    246246void NetworkLoad::didBecomeDownload()
    247247{
    248     m_client.didConvertToDownload();
     248    m_client.didBecomeDownload();
    249249}
    250250
  • trunk/Source/WebKit2/NetworkProcess/NetworkLoadClient.h

    r194313 r197050  
    5757    virtual void didFinishLoading(double finishTime) = 0;
    5858    virtual void didFailLoading(const WebCore::ResourceError&) = 0;
    59     virtual void didConvertToDownload() = 0;
     59#if USE(NETWORK_SESSION)
     60    virtual void didBecomeDownload() = 0;
     61#endif
    6062
    6163#if PLATFORM(COCOA)
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp

    r196984 r197050  
    3232#include "ChildProcessMessages.h"
    3333#include "CustomProtocolManager.h"
     34#include "DataReference.h"
    3435#include "DownloadProxyMessages.h"
    3536#include "Logging.h"
    … …  
    472473}
    473474
    474 void NetworkProcess::findPendingDownloadLocation(NetworkDataTask& networkDataTask, String suggestedFilename, ResponseCompletionHandler completionHandler)
     475void NetworkProcess::pendingDownloadCanceled(DownloadID downloadID)
     476{
     477    downloadProxyConnection()->send(Messages::DownloadProxy::DidCancel({ }), downloadID.downloadID());
     478}
     479
     480void NetworkProcess::findPendingDownloadLocation(NetworkDataTask& networkDataTask, ResponseCompletionHandler completionHandler)
    475481{
    476482    uint64_t destinationID = networkDataTask.pendingDownloadID().downloadID();
    … …  
    478484   
    479485    downloadManager().willDecidePendingDownloadDestination(networkDataTask, completionHandler);
    480     downloadProxyConnection()->send(Messages::DownloadProxy::DecideDestinationWithSuggestedFilenameAsync(networkDataTask.pendingDownloadID(), suggestedFilename), destinationID);
     486    downloadProxyConnection()->send(Messages::DownloadProxy::DecideDestinationWithSuggestedFilenameAsync(networkDataTask.pendingDownloadID(), networkDataTask.suggestedFilename()), destinationID);
    481487}
    482488   
    483 void NetworkProcess::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle)
    484 {
    485     downloadManager().continueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle);
     489void NetworkProcess::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)
     490{
     491    downloadManager().continueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite);
    486492}
    487493#endif
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h

    r196984 r197050  
    102102
    103103#if USE(NETWORK_SESSION)
    104     void findPendingDownloadLocation(NetworkDataTask&, String suggestedFilename, ResponseCompletionHandler);
     104    void findPendingDownloadLocation(NetworkDataTask&, ResponseCompletionHandler);
    105105#endif
    106106   
    … …  
    139139    virtual IPC::Connection* downloadProxyConnection() override;
    140140    virtual AuthenticationManager& downloadsAuthenticationManager() override;
     141#if USE(NETWORK_SESSION)
     142    virtual void pendingDownloadCanceled(DownloadID) override;
     143#endif
    141144
    142145    // Message Handlers
    … …  
    163166    void continueCanAuthenticateAgainstProtectionSpace(DownloadID, bool canAuthenticate);
    164167    void continueWillSendRequest(DownloadID, const WebCore::ResourceRequest&);
    165     void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle);
     168    void continueDecidePendingDownloadDestination(DownloadID, String destination, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite);
    166169#endif
    167170    void setCacheModel(uint32_t);
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in

    r196984 r197050  
    4848    ContinueCanAuthenticateAgainstProtectionSpace(WebKit::DownloadID downloadID, bool canAuthenticate)
    4949    ContinueWillSendRequest(WebKit::DownloadID downloadID, WebCore::ResourceRequest request)
    50     ContinueDecidePendingDownloadDestination(WebKit::DownloadID downloadID, String destination, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
     50    ContinueDecidePendingDownloadDestination(WebKit::DownloadID downloadID, String destination, WebKit::SandboxExtension::Handle sandboxExtensionHandle, bool allowOverwrite)
    5151#endif
    5252
  • trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp

    r194496 r197050  
    238238void NetworkResourceLoader::didConvertToDownload()
    239239{
     240    ASSERT(!m_didConvertToDownload);
    240241    ASSERT(m_networkLoad);
    241242    m_didConvertToDownload = true;
     243}
     244   
    242245#if USE(NETWORK_SESSION)
     246void NetworkResourceLoader::didBecomeDownload()
     247{
     248    ASSERT(m_didConvertToDownload);
     249    ASSERT(m_networkLoad);
    243250    m_networkLoad = nullptr;
    244 #endif
    245 }
     251}
     252#endif
    246253
    247254void NetworkResourceLoader::abort()
  • trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h

    r194496 r197050  
    103103    virtual void didFinishLoading(double finishTime) override;
    104104    virtual void didFailLoading(const WebCore::ResourceError&) override;
    105     virtual void didConvertToDownload() override;
     105#if USE(NETWORK_SESSION)
     106    virtual void didBecomeDownload() override;
     107#endif
     108   
     109    void didConvertToDownload();
    106110
    107111private:
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h

    r194313 r197050  
    6060    virtual void didFinishLoading(double finishTime) override;
    6161    virtual void didFailLoading(const WebCore::ResourceError&) override;
    62     virtual void didConvertToDownload() override { ASSERT_NOT_REACHED(); }
     62#if USE(NETWORK_SESSION)
     63    virtual void didBecomeDownload() override { ASSERT_NOT_REACHED(); }
     64#endif
    6365#if PLATFORM(COCOA)
    6466    virtual void willCacheResponseAsync(CFCachedURLResponseRef) override { }
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm

    r196984 r197050  
    194194}
    195195
    196 void NetworkDataTask::findPendingDownloadLocation(ResponseCompletionHandler completionHandler)
    197 {
    198     NetworkProcess::singleton().findPendingDownloadLocation(*this, m_task.get().response.suggestedFilename, completionHandler);
    199 }
    200 
    201196void NetworkDataTask::setPendingDownloadLocation(const WTF::String& filename, const SandboxExtension::Handle& sandboxExtensionHandle)
    202197{
    … …  
    235230}
    236231
     232String NetworkDataTask::suggestedFilename()
     233{
     234    return m_task.get().response.suggestedFilename;
     235}
     236
    237237WebCore::ResourceRequest NetworkDataTask::currentRequest()
    238238{
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm

    r196984 r197050  
    135135    if (auto* networkDataTask = _session->dataTaskForIdentifier(task.taskIdentifier))
    136136        networkDataTask->didCompleteWithError(error);
    137     else if (auto* download = WebKit::NetworkProcess::singleton().downloadManager().download(_session->downloadID(task.taskIdentifier))) {
    138         if (error)
    139             download->didFail(error, { }); // FIXME: Give some actual data here for resuming.
     137    else if (error) {
     138        auto downloadID = _session->takeDownloadID(task.taskIdentifier);
     139        if (downloadID.downloadID()) {
     140            if (auto* download = WebKit::NetworkProcess::singleton().downloadManager().download(downloadID))
     141                download->didFail(error, { });
     142        }
    140143    }
    141144}
    … …  
    276279{
    277280    auto downloadID = m_downloadMap.take(taskIdentifier);
    278     ASSERT(downloadID.downloadID());
    279281    return downloadID;
    280282}
  • trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp

    r196984 r197050  
    185185    if (!destination.isNull())
    186186        SandboxExtension::createHandle(destination, SandboxExtension::ReadWrite, sandboxExtensionHandle);
    187    
     187
    188188    if (NetworkProcessProxy* networkProcess = m_processPool->networkProcess())
    189         networkProcess->connection()->send(Messages::NetworkProcess::ContinueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle), 0);
     189        networkProcess->connection()->send(Messages::NetworkProcess::ContinueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite), 0);
    190190}
    191191#else
Note: See TracChangeset for help on using the changeset viewer.