Title: [206355] trunk
Revision
206355
Author
[email protected]
Date
2016-09-24 18:00:02 -0700 (Sat, 24 Sep 2016)

Log 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:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (206354 => 206355)


--- trunk/LayoutTests/ChangeLog	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/LayoutTests/ChangeLog	2016-09-25 01:00:02 UTC (rev 206355)
@@ -1,3 +1,14 @@
+2016-09-24  Chris Dumez  <[email protected]>
+
+        [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.
+
+        Unskip tests that are now passing.
+
+        * platform/mac/TestExpectations:
+
 2016-09-23  Zalan Bujtas  <[email protected]>
 
         ASSERTION FAILED: !newRelayoutRoot.container() || is<RenderView>(newRelayoutRoot.container()) || !newRelayoutRoot.container()->needsLayout() while loading sohu.com

Modified: trunk/LayoutTests/platform/mac/TestExpectations (206354 => 206355)


--- trunk/LayoutTests/platform/mac/TestExpectations	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2016-09-25 01:00:02 UTC (rev 206355)
@@ -1383,8 +1383,6 @@
 # <rdar://problem/25536266> [Mac][iOS][NETWORK_SESSION] Unable to download BLOB URLs (156180)
 [ Sierra+ ] fast/dom/HTMLAnchorElement/anchor-download.html [ Skip ]
 [ Sierra+ ] fast/dom/HTMLAnchorElement/anchor-nodownload-set.html [ Skip ]
-[ Sierra+ ] http/tests/security/anchor-download-allow-data.html [ Skip ]
-[ Sierra+ ] http/tests/security/anchor-download-allow-sameorigin.html [ Skip ]
 [ Sierra+ ] http/tests/security/anchor-download-allow-blob.html [ Skip ]
 
 # <rdar://problem/25780035> CSP does not ignore paths for media redirects

Modified: trunk/Source/WebKit2/ChangeLog (206354 => 206355)


--- trunk/Source/WebKit2/ChangeLog	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/ChangeLog	2016-09-25 01:00:02 UTC (rev 206355)
@@ -1,3 +1,28 @@
+2016-09-24  Chris Dumez  <[email protected]>
+
+        [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.
+
+        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:]):
+
 2016-09-23  Wenson Hsieh  <[email protected]>
 
         Media controls playhead does not animate smoothly while playing

Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp (206354 => 206355)


--- trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp	2016-09-25 01:00:02 UTC (rev 206355)
@@ -54,7 +54,7 @@
     parameters.sessionID = sessionID;
     parameters.request = request;
     parameters.clientCredentialPolicy = ClientCredentialPolicy::MayAskClientForCredentials;
-    m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(WTFMove(parameters), downloadID, *networkSession));
+    m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(WTFMove(parameters), downloadID, *networkSession, suggestedName));
 #else
     auto download = std::make_unique<Download>(*this, downloadID, request, suggestedName);
     download->start();

Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.cpp (206354 => 206355)


--- trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.cpp	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.cpp	2016-09-25 01:00:02 UTC (rev 206355)
@@ -38,11 +38,12 @@
 
 namespace WebKit {
 
-PendingDownload::PendingDownload(NetworkLoadParameters&& parameters, DownloadID downloadID, NetworkSession& networkSession)
+PendingDownload::PendingDownload(NetworkLoadParameters&& parameters, DownloadID downloadID, NetworkSession& networkSession, const String& suggestedName)
     : m_networkLoad(std::make_unique<NetworkLoad>(*this, WTFMove(parameters), networkSession))
 {
     m_networkLoad->setPendingDownloadID(downloadID);
     m_networkLoad->setPendingDownload(*this);
+    m_networkLoad->setSuggestedFilename(suggestedName);
 }
 
 void PendingDownload::willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse)

Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h (206354 => 206355)


--- trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h	2016-09-25 01:00:02 UTC (rev 206355)
@@ -45,7 +45,7 @@
 class PendingDownload : public NetworkLoadClient, public IPC::MessageSender {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    PendingDownload(NetworkLoadParameters&&, DownloadID, NetworkSession&);
+    PendingDownload(NetworkLoadParameters&&, DownloadID, NetworkSession&, const String& suggestedName);
 
     void continueWillSendRequest(WebCore::ResourceRequest&&);
     void continueCanAuthenticateAgainstProtectionSpace(bool canAuthenticate);

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h (206354 => 206355)


--- trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h	2016-09-25 01:00:02 UTC (rev 206355)
@@ -127,6 +127,7 @@
     const WebCore::ResourceRequest& firstRequest() const { return m_firstRequest; }
     WebCore::ResourceRequest currentRequest();
     String suggestedFilename();
+    void setSuggestedFilename(const String&);
     void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&);
     void transferSandboxExtensionToDownload(Download&);
     bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&);
@@ -164,6 +165,7 @@
 #if PLATFORM(COCOA)
     RetainPtr<NSURLSessionDataTask> m_task;
 #endif
+    String m_suggestedFilename;
 };
 
 #if PLATFORM(COCOA)

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp (206354 => 206355)


--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp	2016-09-25 01:00:02 UTC (rev 206355)
@@ -201,6 +201,14 @@
     m_task->setPendingDownloadID(downloadID);
 }
 
+void NetworkLoad::setSuggestedFilename(const String& suggestedName)
+{
+    if (!m_task)
+        return;
+
+    m_task->setSuggestedFilename(suggestedName);
+}
+
 void NetworkLoad::setPendingDownload(PendingDownload& pendingDownload)
 {
     if (!m_task)

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h (206354 => 206355)


--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h	2016-09-25 01:00:02 UTC (rev 206355)
@@ -66,6 +66,7 @@
 #if USE(NETWORK_SESSION)
     void convertTaskToDownload(DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
     void setPendingDownloadID(DownloadID);
+    void setSuggestedFilename(const String&);
     void setPendingDownload(PendingDownload&);
     DownloadID pendingDownloadID() { return m_task->pendingDownloadID(); }
     

Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (206354 => 206355)


--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm	2016-09-25 01:00:02 UTC (rev 206355)
@@ -371,9 +371,16 @@
 
 String NetworkDataTask::suggestedFilename()
 {
+    if (!m_suggestedFilename.isEmpty())
+        return m_suggestedFilename;
     return m_task.get().response.suggestedFilename;
 }
 
+void NetworkDataTask::setSuggestedFilename(const String& suggestedName)
+{
+    m_suggestedFilename = suggestedName;
+}
+
 WebCore::ResourceRequest NetworkDataTask::currentRequest()
 {
     return [m_task currentRequest];

Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm (206354 => 206355)


--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2016-09-25 01:00:02 UTC (rev 206355)
@@ -297,7 +297,7 @@
     if (auto* networkDataTask = _session->dataTaskForIdentifier([dataTask taskIdentifier], storedCredentials)) {
         auto downloadID = networkDataTask->pendingDownloadID();
         auto& downloadManager = WebKit::NetworkProcess::singleton().downloadManager();
-        auto download = std::make_unique<WebKit::Download>(downloadManager, downloadID, downloadTask, _session->sessionID());
+        auto download = std::make_unique<WebKit::Download>(downloadManager, downloadID, downloadTask, _session->sessionID(), networkDataTask->suggestedFilename());
         networkDataTask->transferSandboxExtensionToDownload(*download);
         ASSERT(WebCore::fileExists(networkDataTask->pendingDownloadLocation()));
         download->didCreateDestination(networkDataTask->pendingDownloadLocation());

Modified: trunk/Tools/ChangeLog (206354 => 206355)


--- trunk/Tools/ChangeLog	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Tools/ChangeLog	2016-09-25 01:00:02 UTC (rev 206355)
@@ -1,3 +1,21 @@
+2016-09-24  Chris Dumez  <[email protected]>
+
+        [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.
+
+        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):
+
 2016-09-23  Wenson Hsieh  <[email protected]>
 
         [mac-sierra] 2 WKWebViewCandidateTests API test failures

Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (206354 => 206355)


--- trunk/Tools/WebKitTestRunner/TestController.cpp	2016-09-25 00:43:38 UTC (rev 206354)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp	2016-09-25 01:00:02 UTC (rev 206355)
@@ -1673,14 +1673,25 @@
 
 WKStringRef TestController::decideDestinationWithSuggestedFilename(WKContextRef, WKDownloadRef, WKStringRef filename, bool*& allowOverwrite)
 {
+    String suggestedFilename = toWTFString(filename);
+
     StringBuilder builder;
     builder.append("Downloading URL with suggested filename \"");
-    builder.append(toWTFString(filename));
+    builder.append(suggestedFilename);
     builder.append("\"\n");
 
     m_currentInvocation->outputText(builder.toString());
 
-    return nullptr;
+    const char* dumpRenderTreeTemp = libraryPathForTesting();
+    if (!dumpRenderTreeTemp)
+        return nullptr;
+
+    *allowOverwrite = true;
+    String temporaryFolder = String::fromUTF8(dumpRenderTreeTemp);
+    if (suggestedFilename.isEmpty())
+        suggestedFilename = "Unknown";
+
+    return toWK(temporaryFolder + "/" + suggestedFilename).leakRef();
 }
 
 void TestController::downloadDidFinish(WKContextRef, WKDownloadRef)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to