Changeset 206355 in webkit


Ignore:
Timestamp:
Sep 24, 2016 6:00:02 PM (8 years ago)
Author:
Chris Dumez
Message:

[WK2] anchor.download attribute value is ignored by NETWORK_SESSION code path
https://bugs.webkit.org/show_bug.cgi?id=162531

Reviewed by Darin Adler.

Source/WebKit2:

Pipe the suggested filename through in the NETWORK_SESSION code path so
that it is used when deciding the destination path.

  • NetworkProcess/Downloads/DownloadManager.cpp:

(WebKit::DownloadManager::startDownload):

  • NetworkProcess/Downloads/PendingDownload.cpp:

(WebKit::PendingDownload::PendingDownload):

  • NetworkProcess/Downloads/PendingDownload.h:
  • NetworkProcess/NetworkDataTask.h:
  • NetworkProcess/NetworkLoad.cpp:

(WebKit::NetworkLoad::setSuggestedFilename):

  • NetworkProcess/NetworkLoad.h:
  • NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:

(WebKit::NetworkDataTask::suggestedFilename):
(WebKit::NetworkDataTask::setSuggestedFilename):

  • NetworkProcess/cocoa/NetworkSessionCocoa.mm:

(-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):

Tools:

Update decideDestinationWithSuggestedFilename() to return a actual file path
instead of nullptr. The NETWORK_SESSION code path cancels the download when
decideDestinationWithSuggestedFilename() returns an empty file path, unlike
the !NETWORK_SESSION code path that just continue downloading without
explicitely setting a destination path. This lead to different test results
for NETWORK_SESSION and !NETWORK_SESSION code paths. Returns a valid
destination path makes more sense and leads to consistent results.

  • WebKitTestRunner/TestController.cpp:

(WTR::TestController::decideDestinationWithSuggestedFilename):

LayoutTests:

Unskip tests that are now passing.

  • platform/mac/TestExpectations:
Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r206343 r206355  
     12016-09-24  Chris Dumez  <cdumez@apple.com>
     2
     3        [WK2] anchor.download attribute value is ignored by NETWORK_SESSION code path
     4        https://bugs.webkit.org/show_bug.cgi?id=162531
     5
     6        Reviewed by Darin Adler.
     7
     8        Unskip tests that are now passing.
     9
     10        * platform/mac/TestExpectations:
     11
    1122016-09-23  Zalan Bujtas  <zalan@apple.com>
    213
  • trunk/LayoutTests/platform/mac/TestExpectations

    r206341 r206355  
    13841384[ Sierra+ ] fast/dom/HTMLAnchorElement/anchor-download.html [ Skip ]
    13851385[ Sierra+ ] fast/dom/HTMLAnchorElement/anchor-nodownload-set.html [ Skip ]
    1386 [ Sierra+ ] http/tests/security/anchor-download-allow-data.html [ Skip ]
    1387 [ Sierra+ ] http/tests/security/anchor-download-allow-sameorigin.html [ Skip ]
    13881386[ Sierra+ ] http/tests/security/anchor-download-allow-blob.html [ Skip ]
    13891387
  • trunk/Source/WebKit2/ChangeLog

    r206350 r206355  
     12016-09-24  Chris Dumez  <cdumez@apple.com>
     2
     3        [WK2] anchor.download attribute value is ignored by NETWORK_SESSION code path
     4        https://bugs.webkit.org/show_bug.cgi?id=162531
     5
     6        Reviewed by Darin Adler.
     7
     8        Pipe the suggested filename through in the NETWORK_SESSION code path so
     9        that it is used when deciding the destination path.
     10
     11        * NetworkProcess/Downloads/DownloadManager.cpp:
     12        (WebKit::DownloadManager::startDownload):
     13        * NetworkProcess/Downloads/PendingDownload.cpp:
     14        (WebKit::PendingDownload::PendingDownload):
     15        * NetworkProcess/Downloads/PendingDownload.h:
     16        * NetworkProcess/NetworkDataTask.h:
     17        * NetworkProcess/NetworkLoad.cpp:
     18        (WebKit::NetworkLoad::setSuggestedFilename):
     19        * NetworkProcess/NetworkLoad.h:
     20        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
     21        (WebKit::NetworkDataTask::suggestedFilename):
     22        (WebKit::NetworkDataTask::setSuggestedFilename):
     23        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
     24        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
     25
    1262016-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>
    227
  • trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp

    r203720 r206355  
    5555    parameters.request = request;
    5656    parameters.clientCredentialPolicy = ClientCredentialPolicy::MayAskClientForCredentials;
    57     m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(WTFMove(parameters), downloadID, *networkSession));
     57    m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(WTFMove(parameters), downloadID, *networkSession, suggestedName));
    5858#else
    5959    auto download = std::make_unique<Download>(*this, downloadID, request, suggestedName);
  • trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.cpp

    r203133 r206355  
    3939namespace WebKit {
    4040
    41 PendingDownload::PendingDownload(NetworkLoadParameters&& parameters, DownloadID downloadID, NetworkSession& networkSession)
     41PendingDownload::PendingDownload(NetworkLoadParameters&& parameters, DownloadID downloadID, NetworkSession& networkSession, const String& suggestedName)
    4242    : m_networkLoad(std::make_unique<NetworkLoad>(*this, WTFMove(parameters), networkSession))
    4343{
    4444    m_networkLoad->setPendingDownloadID(downloadID);
    4545    m_networkLoad->setPendingDownload(*this);
     46    m_networkLoad->setSuggestedFilename(suggestedName);
    4647}
    4748
  • trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h

    r203133 r206355  
    4646    WTF_MAKE_FAST_ALLOCATED;
    4747public:
    48     PendingDownload(NetworkLoadParameters&&, DownloadID, NetworkSession&);
     48    PendingDownload(NetworkLoadParameters&&, DownloadID, NetworkSession&, const String& suggestedName);
    4949
    5050    void continueWillSendRequest(WebCore::ResourceRequest&&);
  • trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h

    r202439 r206355  
    128128    WebCore::ResourceRequest currentRequest();
    129129    String suggestedFilename();
     130    void setSuggestedFilename(const String&);
    130131    void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&);
    131132    void transferSandboxExtensionToDownload(Download&);
     
    165166    RetainPtr<NSURLSessionDataTask> m_task;
    166167#endif
     168    String m_suggestedFilename;
    167169};
    168170
  • trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp

    r204008 r206355  
    202202}
    203203
     204void NetworkLoad::setSuggestedFilename(const String& suggestedName)
     205{
     206    if (!m_task)
     207        return;
     208
     209    m_task->setSuggestedFilename(suggestedName);
     210}
     211
    204212void NetworkLoad::setPendingDownload(PendingDownload& pendingDownload)
    205213{
  • trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h

    r204008 r206355  
    6767    void convertTaskToDownload(DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
    6868    void setPendingDownloadID(DownloadID);
     69    void setSuggestedFilename(const String&);
    6970    void setPendingDownload(PendingDownload&);
    7071    DownloadID pendingDownloadID() { return m_task->pendingDownloadID(); }
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm

    r202184 r206355  
    372372String NetworkDataTask::suggestedFilename()
    373373{
     374    if (!m_suggestedFilename.isEmpty())
     375        return m_suggestedFilename;
    374376    return m_task.get().response.suggestedFilename;
     377}
     378
     379void NetworkDataTask::setSuggestedFilename(const String& suggestedName)
     380{
     381    m_suggestedFilename = suggestedName;
    375382}
    376383
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm

    r204429 r206355  
    298298        auto downloadID = networkDataTask->pendingDownloadID();
    299299        auto& downloadManager = WebKit::NetworkProcess::singleton().downloadManager();
    300         auto download = std::make_unique<WebKit::Download>(downloadManager, downloadID, downloadTask, _session->sessionID());
     300        auto download = std::make_unique<WebKit::Download>(downloadManager, downloadID, downloadTask, _session->sessionID(), networkDataTask->suggestedFilename());
    301301        networkDataTask->transferSandboxExtensionToDownload(*download);
    302302        ASSERT(WebCore::fileExists(networkDataTask->pendingDownloadLocation()));
  • trunk/Tools/ChangeLog

    r206335 r206355  
     12016-09-24  Chris Dumez  <cdumez@apple.com>
     2
     3        [WK2] anchor.download attribute value is ignored by NETWORK_SESSION code path
     4        https://bugs.webkit.org/show_bug.cgi?id=162531
     5
     6        Reviewed by Darin Adler.
     7
     8        Update decideDestinationWithSuggestedFilename() to return a actual file path
     9        instead of nullptr. The NETWORK_SESSION code path cancels the download when
     10        decideDestinationWithSuggestedFilename() returns an empty file path, unlike
     11        the !NETWORK_SESSION code path that just continue downloading without
     12        explicitely setting a destination path. This lead to different test results
     13        for NETWORK_SESSION and !NETWORK_SESSION code paths. Returns a valid
     14        destination path makes more sense and leads to consistent results.
     15
     16        * WebKitTestRunner/TestController.cpp:
     17        (WTR::TestController::decideDestinationWithSuggestedFilename):
     18
    1192016-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>
    220
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r206261 r206355  
    16741674WKStringRef TestController::decideDestinationWithSuggestedFilename(WKContextRef, WKDownloadRef, WKStringRef filename, bool*& allowOverwrite)
    16751675{
     1676    String suggestedFilename = toWTFString(filename);
     1677
    16761678    StringBuilder builder;
    16771679    builder.append("Downloading URL with suggested filename \"");
    1678     builder.append(toWTFString(filename));
     1680    builder.append(suggestedFilename);
    16791681    builder.append("\"\n");
    16801682
    16811683    m_currentInvocation->outputText(builder.toString());
    16821684
    1683     return nullptr;
     1685    const char* dumpRenderTreeTemp = libraryPathForTesting();
     1686    if (!dumpRenderTreeTemp)
     1687        return nullptr;
     1688
     1689    *allowOverwrite = true;
     1690    String temporaryFolder = String::fromUTF8(dumpRenderTreeTemp);
     1691    if (suggestedFilename.isEmpty())
     1692        suggestedFilename = "Unknown";
     1693
     1694    return toWK(temporaryFolder + "/" + suggestedFilename).leakRef();
    16841695}
    16851696
Note: See TracChangeset for help on using the changeset viewer.