Title: [235526] tags/Safari-607.1.4/Source/WebKit
Revision
235526
Author
[email protected]
Date
2018-08-30 15:36:05 -0700 (Thu, 30 Aug 2018)

Log Message

Cherry-pick r235511. rdar://problem/43906230

    Unreviewed, rolling out r235413 and r235444.
    https://bugs.webkit.org/show_bug.cgi?id=189163

    Causes crashes when running layout tests under GuardMalloc
    (Requested by ryanhaddad on #webkit).

    Reverted changesets:

    "NetworkLoad::didReceiveResponse should pass its completion
    handler to its client"
    https://bugs.webkit.org/show_bug.cgi?id=188701
    https://trac.webkit.org/changeset/235413

    "Remove assertion introduced in r235413"
    https://bugs.webkit.org/show_bug.cgi?id=188701
    https://trac.webkit.org/changeset/235444

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235511 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: tags/Safari-607.1.4/Source/WebKit/ChangeLog (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/ChangeLog	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/ChangeLog	2018-08-30 22:36:05 UTC (rev 235526)
@@ -1,3 +1,45 @@
+2018-08-30  Babak Shafiei  <[email protected]>
+
+        Cherry-pick r235511. rdar://problem/43906230
+
+    Unreviewed, rolling out r235413 and r235444.
+    https://bugs.webkit.org/show_bug.cgi?id=189163
+    
+    Causes crashes when running layout tests under GuardMalloc
+    (Requested by ryanhaddad on #webkit).
+    
+    Reverted changesets:
+    
+    "NetworkLoad::didReceiveResponse should pass its completion
+    handler to its client"
+    https://bugs.webkit.org/show_bug.cgi?id=188701
+    https://trac.webkit.org/changeset/235413
+    
+    "Remove assertion introduced in r235413"
+    https://bugs.webkit.org/show_bug.cgi?id=188701
+    https://trac.webkit.org/changeset/235444
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235511 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2018-08-30  Commit Queue  <[email protected]>
+
+            Unreviewed, rolling out r235413 and r235444.
+            https://bugs.webkit.org/show_bug.cgi?id=189163
+
+            Causes crashes when running layout tests under GuardMalloc
+            (Requested by ryanhaddad on #webkit).
+
+            Reverted changesets:
+
+            "NetworkLoad::didReceiveResponse should pass its completion
+            handler to its client"
+            https://bugs.webkit.org/show_bug.cgi?id=188701
+            https://trac.webkit.org/changeset/235413
+
+            "Remove assertion introduced in r235413"
+            https://bugs.webkit.org/show_bug.cgi?id=188701
+            https://trac.webkit.org/changeset/235444
+
 2018-08-29  Babak Shafiei  <[email protected]>
 
         Cherry-pick r235492. rdar://problem/43860224

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -85,10 +85,10 @@
     ASSERT_UNUSED(addResult, addResult.isNewEntry);
 }
 
-void DownloadManager::convertNetworkLoadToDownload(DownloadID downloadID, std::unique_ptr<NetworkLoad>&& networkLoad, ResponseCompletionHandler&& completionHandler, Vector<RefPtr<WebCore::BlobDataFileReference>>&& blobFileReferences, const ResourceRequest& request, const ResourceResponse& response)
+void DownloadManager::convertNetworkLoadToDownload(DownloadID downloadID, std::unique_ptr<NetworkLoad>&& networkLoad, Vector<RefPtr<WebCore::BlobDataFileReference>>&& blobFileReferences, const ResourceRequest& request, const ResourceResponse& response)
 {
     ASSERT(!m_pendingDownloads.contains(downloadID));
-    m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(WTFMove(networkLoad), WTFMove(completionHandler), downloadID, request, response));
+    m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(WTFMove(networkLoad), downloadID, request, response));
 }
 
 void DownloadManager::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, SandboxExtension::Handle&& sandboxExtensionHandle, bool allowOverwrite)

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -79,7 +79,7 @@
     void dataTaskBecameDownloadTask(DownloadID, std::unique_ptr<Download>&&);
     void continueWillSendRequest(DownloadID, WebCore::ResourceRequest&&);
     void willDecidePendingDownloadDestination(NetworkDataTask&, ResponseCompletionHandler&&);
-    void convertNetworkLoadToDownload(DownloadID, std::unique_ptr<NetworkLoad>&&, ResponseCompletionHandler&&,  Vector<RefPtr<WebCore::BlobDataFileReference>>&&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+    void convertNetworkLoadToDownload(DownloadID, std::unique_ptr<NetworkLoad>&&, Vector<RefPtr<WebCore::BlobDataFileReference>>&&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
     void continueDecidePendingDownloadDestination(DownloadID, String destination, SandboxExtension::Handle&&, bool allowOverwrite);
 
     void resumeDownload(PAL::SessionID, DownloadID, const IPC::DataReference& resumeData, const String& path, SandboxExtension::Handle&&);

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -47,7 +47,7 @@
     send(Messages::DownloadProxy::DidStart(m_networkLoad->currentRequest(), suggestedName));
 }
 
-PendingDownload::PendingDownload(std::unique_ptr<NetworkLoad>&& networkLoad, ResponseCompletionHandler&& completionHandler, DownloadID downloadID, const ResourceRequest& request, const ResourceResponse& response)
+PendingDownload::PendingDownload(std::unique_ptr<NetworkLoad>&& networkLoad, DownloadID downloadID, const ResourceRequest& request, const ResourceResponse& response)
     : m_networkLoad(WTFMove(networkLoad))
 {
     m_isAllowedToAskUserForCredentials = m_networkLoad->isAllowedToAskUserForCredentials();
@@ -55,7 +55,7 @@
     m_networkLoad->setPendingDownloadID(downloadID);
     send(Messages::DownloadProxy::DidStart(request, String()));
 
-    m_networkLoad->convertTaskToDownload(*this, request, response, WTFMove(completionHandler));
+    m_networkLoad->convertTaskToDownload(*this, request, response);
 }
 
 void PendingDownload::willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse)
@@ -85,11 +85,6 @@
     return NetworkProcess::singleton().parentProcessConnection();
 }
 
-void PendingDownload::didReceiveResponse(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
-{
-    completionHandler(WebCore::PolicyAction::Download);
-}
-
 uint64_t PendingDownload::messageSenderDestinationID()
 {
     return m_networkLoad->pendingDownloadID().downloadID();

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -43,7 +43,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     PendingDownload(NetworkLoadParameters&&, DownloadID, NetworkSession&, const String& suggestedName);
-    PendingDownload(std::unique_ptr<NetworkLoad>&&, ResponseCompletionHandler&&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+    PendingDownload(std::unique_ptr<NetworkLoad>&&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
 
     void continueWillSendRequest(WebCore::ResourceRequest&&);
     void cancel();
@@ -54,7 +54,7 @@
     bool isSynchronous() const override { return false; }
     bool isAllowedToAskUserForCredentials() const final { return m_isAllowedToAskUserForCredentials; }
     void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
-    void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
+    ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override { return ShouldContinueDidReceiveResponse::No; };
     void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override { };
     void didFinishLoading(const WebCore::NetworkLoadMetrics&) override { };
     void didFailLoading(const WebCore::ResourceError&) override;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -105,9 +105,9 @@
     NetworkProcess::singleton().authenticationManager().didReceiveAuthenticationChallenge(m_parameters.pageID, m_parameters.frameID, challenge, WTFMove(completionHandler));
 }
 
-void NetworkCORSPreflightChecker::didReceiveResponse(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
+void NetworkCORSPreflightChecker::didReceiveResponseNetworkSession(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
 {
-    RELEASE_LOG_IF_ALLOWED("didReceiveResponse");
+    RELEASE_LOG_IF_ALLOWED("didReceiveResponseNetworkSession");
 
     if (m_shouldCaptureExtraNetworkLoadMetrics)
         m_loadInformation.response = response;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -65,7 +65,7 @@
 private:
     void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
     void didReceiveChallenge(WebCore::AuthenticationChallenge&&, ChallengeCompletionHandler&&) final;
-    void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
+    void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
     void didReceiveData(Ref<WebCore::SharedBuffer>&&) final;
     void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) final;
     void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) final;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkDataTask.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkDataTask.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkDataTask.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -113,7 +113,7 @@
             return;
         }
     }
-    m_client->didReceiveResponse(WTFMove(response), WTFMove(completionHandler));
+    m_client->didReceiveResponseNetworkSession(WTFMove(response), WTFMove(completionHandler));
 }
 
 bool NetworkDataTask::shouldCaptureExtraNetworkLoadMetrics() const

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkDataTask.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkDataTask.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkDataTask.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -60,7 +60,7 @@
 public:
     virtual void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) = 0;
     virtual void didReceiveChallenge(WebCore::AuthenticationChallenge&&, ChallengeCompletionHandler&&) = 0;
-    virtual void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) = 0;
+    virtual void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) = 0;
     virtual void didReceiveData(Ref<WebCore::SharedBuffer>&&) = 0;
     virtual void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) = 0;
     virtual void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) = 0;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoad.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoad.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoad.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -120,6 +120,8 @@
     ASSERT(RunLoop::isMain());
     if (m_redirectCompletionHandler)
         m_redirectCompletionHandler({ });
+    if (m_responseCompletionHandler)
+        m_responseCompletionHandler(PolicyAction::Ignore);
     if (m_task)
         m_task->clearClient();
 }
@@ -173,6 +175,14 @@
         redirectCompletionHandler(ResourceRequest(m_currentRequest));
 }
 
+void NetworkLoad::continueDidReceiveResponse()
+{
+    if (m_responseCompletionHandler) {
+        auto responseCompletionHandler = std::exchange(m_responseCompletionHandler, nullptr);
+        responseCompletionHandler(PolicyAction::Use);
+    }
+}
+
 bool NetworkLoad::shouldCaptureExtraNetworkLoadMetrics() const
 {
     return m_client.get().shouldCaptureExtraNetworkLoadMetrics();
@@ -183,16 +193,17 @@
     return m_client.get().isAllowedToAskUserForCredentials();
 }
 
-void NetworkLoad::convertTaskToDownload(PendingDownload& pendingDownload, const ResourceRequest& updatedRequest, const ResourceResponse& response, ResponseCompletionHandler&& completionHandler)
+void NetworkLoad::convertTaskToDownload(PendingDownload& pendingDownload, const ResourceRequest& updatedRequest, const ResourceResponse& response)
 {
     if (!m_task)
-        return completionHandler(PolicyAction::Ignore);
+        return;
 
     m_client = pendingDownload;
     m_currentRequest = updatedRequest;
     m_task->setPendingDownload(pendingDownload);
-    
-    NetworkProcess::singleton().findPendingDownloadLocation(*m_task.get(), WTFMove(completionHandler), response);
+
+    if (m_responseCompletionHandler)
+        NetworkProcess::singleton().findPendingDownloadLocation(*m_task.get(), std::exchange(m_responseCompletionHandler, nullptr), response);
 }
 
 void NetworkLoad::setPendingDownloadID(DownloadID downloadID)
@@ -257,7 +268,7 @@
         NetworkProcess::singleton().authenticationManager().didReceiveAuthenticationChallenge(m_parameters.webPageID, m_parameters.webFrameID, challenge, WTFMove(completionHandler));
 }
 
-void NetworkLoad::didReceiveResponse(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
+void NetworkLoad::didReceiveResponseNetworkSession(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
 {
     ASSERT(RunLoop::isMain());
     ASSERT(!m_throttle);
@@ -289,7 +300,11 @@
     if (m_parameters.needsCertificateInfo)
         response.includeCertificateInfo();
 
-    m_client.get().didReceiveResponse(WTFMove(response), WTFMove(completionHandler));
+    if (m_client.get().didReceiveResponse(WTFMove(response)) == NetworkLoadClient::ShouldContinueDidReceiveResponse::No) {
+        m_responseCompletionHandler = WTFMove(completionHandler);
+        return;
+    }
+    completionHandler(PolicyAction::Use);
 }
 
 void NetworkLoad::didReceiveData(Ref<SharedBuffer>&& buffer)

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoad.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoad.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoad.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -59,8 +59,9 @@
     const NetworkLoadParameters& parameters() const { return m_parameters; }
 
     void continueWillSendRequest(WebCore::ResourceRequest&&);
+    void continueDidReceiveResponse();
 
-    void convertTaskToDownload(PendingDownload&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, ResponseCompletionHandler&&);
+    void convertTaskToDownload(PendingDownload&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
     void setPendingDownloadID(DownloadID);
     void setSuggestedFilename(const String&);
     void setPendingDownload(PendingDownload&);
@@ -80,7 +81,7 @@
     // NetworkDataTaskClient
     void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
     void didReceiveChallenge(WebCore::AuthenticationChallenge&&, ChallengeCompletionHandler&&) final;
-    void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
+    void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
     void didReceiveData(Ref<WebCore::SharedBuffer>&&) final;
     void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) final;
     void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) final;
@@ -94,6 +95,7 @@
     const NetworkLoadParameters m_parameters;
     CompletionHandler<void(WebCore::ResourceRequest&&)> m_redirectCompletionHandler;
     RefPtr<NetworkDataTask> m_task;
+    ResponseCompletionHandler m_responseCompletionHandler;
     
     struct Throttle;
     std::unique_ptr<Throttle> m_throttle;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoadClient.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoadClient.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkLoadClient.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -34,13 +34,10 @@
 class NetworkLoadMetrics;
 class ProtectionSpace;
 class SharedBuffer;
-enum class PolicyAction;
 }
 
 namespace WebKit {
 
-using ResponseCompletionHandler = CompletionHandler<void(WebCore::PolicyAction)>;
-
 class NetworkLoadClient {
 public:
     virtual ~NetworkLoadClient() { }
@@ -51,7 +48,8 @@
 
     virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) = 0;
     virtual void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) = 0;
-    virtual void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) = 0;
+    enum class ShouldContinueDidReceiveResponse { No, Yes };
+    virtual ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) = 0;
     virtual void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) = 0;
     virtual void didFinishLoading(const WebCore::NetworkLoadMetrics&) = 0;
     virtual void didFailLoading(const WebCore::ResourceError&) = 0;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -133,8 +133,6 @@
     ASSERT(RunLoop::isMain());
     ASSERT(!m_networkLoad);
     ASSERT(!isSynchronous() || !m_synchronousLoadData->delayedReply);
-    if (m_responseCompletionHandler)
-        m_responseCompletionHandler(PolicyAction::Ignore);
 }
 
 bool NetworkResourceLoader::canUseCache(const ResourceRequest& request) const
@@ -345,8 +343,7 @@
         return;
     }
 
-    ASSERT(m_responseCompletionHandler);
-    NetworkProcess::singleton().downloadManager().convertNetworkLoadToDownload(downloadID, std::exchange(m_networkLoad, nullptr), WTFMove(m_responseCompletionHandler), WTFMove(m_fileReferences), request, response);
+    NetworkProcess::singleton().downloadManager().convertNetworkLoadToDownload(downloadID, std::exchange(m_networkLoad, nullptr), WTFMove(m_fileReferences), request, response);
 }
 
 void NetworkResourceLoader::abort()
@@ -428,7 +425,7 @@
     return false;
 }
 
-void NetworkResourceLoader::didReceiveResponse(ResourceResponse&& receivedResponse, ResponseCompletionHandler&& completionHandler)
+auto NetworkResourceLoader::didReceiveResponse(ResourceResponse&& receivedResponse) -> ShouldContinueDidReceiveResponse
 {
     RELEASE_LOG_IF_ALLOWED("didReceiveResponse: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", httpStatusCode = %d, length = %" PRId64 ")", m_parameters.webPageID, m_parameters.webFrameID, m_parameters.identifier, receivedResponse.httpStatusCode(), receivedResponse.expectedContentLength());
 
@@ -457,15 +454,12 @@
         } else
             m_cacheEntryForValidation = nullptr;
     }
-    if (m_cacheEntryForValidation) {
-        completionHandler(PolicyAction::Use);
-        return;
-    }
+    if (m_cacheEntryForValidation)
+        return ShouldContinueDidReceiveResponse::Yes;
 
     if (isMainResource() && shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptions(m_response)) {
         send(Messages::WebResourceLoader::StopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied { });
-        completionHandler(PolicyAction::Ignore);
-        return;
+        return ShouldContinueDidReceiveResponse::No;
     }
 
     if (m_networkLoadChecker) {
@@ -475,8 +469,7 @@
                 if (protectedThis->m_networkLoad)
                     protectedThis->didFailLoading(error);
             });
-            completionHandler(PolicyAction::Ignore);
-            return;
+            return ShouldContinueDidReceiveResponse::No;
         }
     }
 
@@ -483,8 +476,7 @@
     auto response = sanitizeResponseIfPossible(ResourceResponse { m_response }, ResourceResponse::SanitizationType::CrossOriginSafe);
     if (isSynchronous()) {
         m_synchronousLoadData->response = WTFMove(response);
-        completionHandler(PolicyAction::Use);
-        return;
+        return ShouldContinueDidReceiveResponse::Yes;
     }
 
     // We wait to receive message NetworkResourceLoader::ContinueDidReceiveResponse before continuing a load for
@@ -491,10 +483,7 @@
     // a main resource because the embedding client must decide whether to allow the load.
     bool willWaitForContinueDidReceiveResponse = isMainResource();
     send(Messages::WebResourceLoader::DidReceiveResponse { response, willWaitForContinueDidReceiveResponse });
-    if (willWaitForContinueDidReceiveResponse)
-        m_responseCompletionHandler = WTFMove(completionHandler);
-    else
-        completionHandler(PolicyAction::Use);
+    return willWaitForContinueDidReceiveResponse ? ShouldContinueDidReceiveResponse::No : ShouldContinueDidReceiveResponse::Yes;
 }
 
 void NetworkResourceLoader::didReceiveBuffer(Ref<SharedBuffer>&& buffer, int reportedEncodedDataLength)
@@ -641,7 +630,7 @@
 void NetworkResourceLoader::didFinishWithRedirectResponse(ResourceResponse&& redirectResponse)
 {
     redirectResponse.setType(ResourceResponse::Type::Opaqueredirect);
-    didReceiveResponse(WTFMove(redirectResponse), [] (auto) { });
+    didReceiveResponse(WTFMove(redirectResponse));
 
     WebCore::NetworkLoadMetrics networkLoadMetrics;
     networkLoadMetrics.markComplete();
@@ -716,11 +705,15 @@
 
 void NetworkResourceLoader::continueDidReceiveResponse()
 {
-    if (m_responseCompletionHandler)
-        m_responseCompletionHandler(PolicyAction::Use);
+    if (m_cacheEntryWaitingForContinueDidReceiveResponse) {
+        continueProcessingCachedEntryAfterDidReceiveResponse(WTFMove(m_cacheEntryWaitingForContinueDidReceiveResponse));
+        return;
+    }
 
-    if (m_cacheEntryWaitingForContinueDidReceiveResponse)
-        continueProcessingCachedEntryAfterDidReceiveResponse(WTFMove(m_cacheEntryWaitingForContinueDidReceiveResponse));
+    // FIXME: Remove this check once BlobResourceHandle implements didReceiveResponseAsync correctly.
+    // Currently, it does not wait for response, so the load is likely to finish before continueDidReceiveResponse.
+    if (m_networkLoad)
+        m_networkLoad->continueDidReceiveResponse();
 }
 
 void NetworkResourceLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkResourceLoader.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkResourceLoader.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/NetworkResourceLoader.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -97,7 +97,7 @@
     bool isSynchronous() const override;
     bool isAllowedToAskUserForCredentials() const override { return m_isAllowedToAskUserForCredentials; }
     void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&) override;
-    void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
+    ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override;
     void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override;
     void didFinishLoading(const WebCore::NetworkLoadMetrics&) override;
     void didFailLoading(const WebCore::ResourceError&) override;
@@ -206,7 +206,6 @@
     std::unique_ptr<NetworkCache::Entry> m_cacheEntryWaitingForContinueDidReceiveResponse;
     std::unique_ptr<NetworkLoadChecker> m_networkLoadChecker;
     bool m_shouldRestartLoad { false };
-    ResponseCompletionHandler m_responseCompletionHandler;
 
     std::optional<NetworkActivityTracker> m_networkActivityTracker;
 };

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PingLoad.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PingLoad.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PingLoad.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -121,9 +121,9 @@
     didFinish(ResourceError { String(), 0, currentURL(), "Failed HTTP authentication"_s, ResourceError::Type::AccessControl });
 }
 
-void PingLoad::didReceiveResponse(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
+void PingLoad::didReceiveResponseNetworkSession(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
 {
-    RELEASE_LOG_IF_ALLOWED("didReceiveResponse - httpStatusCode: %d", response.httpStatusCode());
+    RELEASE_LOG_IF_ALLOWED("didReceiveResponseNetworkSession - httpStatusCode: %d", response.httpStatusCode());
     auto weakThis = makeWeakPtr(*this);
     completionHandler(PolicyAction::Ignore);
     if (!weakThis)

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PingLoad.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PingLoad.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PingLoad.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -56,7 +56,7 @@
 
     void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
     void didReceiveChallenge(WebCore::AuthenticationChallenge&&, ChallengeCompletionHandler&&) final;
-    void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
+    void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
     void didReceiveData(Ref<WebCore::SharedBuffer>&&) final;
     void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) final;
     void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) final;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PreconnectTask.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PreconnectTask.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PreconnectTask.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -68,10 +68,10 @@
     ASSERT_NOT_REACHED();
 }
 
-void PreconnectTask::didReceiveResponse(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
+auto PreconnectTask::didReceiveResponse(ResourceResponse&&) -> ShouldContinueDidReceiveResponse
 {
     ASSERT_NOT_REACHED();
-    completionHandler(PolicyAction::Ignore);
+    return ShouldContinueDidReceiveResponse::No;
 }
 
 void PreconnectTask::didReceiveBuffer(Ref<SharedBuffer>&&, int reportedEncodedDataLength)

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PreconnectTask.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PreconnectTask.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/PreconnectTask.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -51,7 +51,7 @@
     bool isAllowedToAskUserForCredentials() const final { return false; }
     void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final;
     void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) final;
-    void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
+    ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) final;
     void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) final;
     void didFinishLoading(const WebCore::NetworkLoadMetrics&) final;
     void didFailLoading(const WebCore::ResourceError&) final;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -80,7 +80,7 @@
     didComplete();
 }
 
-void SpeculativeLoad::didReceiveResponse(ResourceResponse&& receivedResponse, ResponseCompletionHandler&& completionHandler)
+auto SpeculativeLoad::didReceiveResponse(ResourceResponse&& receivedResponse) -> ShouldContinueDidReceiveResponse
 {
     m_response = receivedResponse;
 
@@ -93,7 +93,7 @@
     else
         m_cacheEntry = nullptr;
 
-    completionHandler(PolicyAction::Use);
+    return ShouldContinueDidReceiveResponse::Yes;
 }
 
 void SpeculativeLoad::didReceiveBuffer(Ref<SharedBuffer>&& buffer, int reportedEncodedDataLength)

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h	2018-08-30 22:36:05 UTC (rev 235526)
@@ -56,7 +56,7 @@
     bool isSynchronous() const override { return false; }
     bool isAllowedToAskUserForCredentials() const final { return false; }
     void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
-    void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
+    ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override;
     void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override;
     void didFinishLoading(const WebCore::NetworkLoadMetrics&) override;
     void didFailLoading(const WebCore::ResourceError&) override;

Modified: tags/Safari-607.1.4/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp (235525 => 235526)


--- tags/Safari-607.1.4/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp	2018-08-30 21:53:43 UTC (rev 235525)
+++ tags/Safari-607.1.4/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp	2018-08-30 22:36:05 UTC (rev 235526)
@@ -240,7 +240,7 @@
     DEBUG_LOG("URL = "" STRING_SPECIFIER, DEBUG_STR(m_firstRequest.url().string()));
 
     ASSERT(m_client);
-    m_client->didReceiveResponse(WTFMove(response), [this, protectedThis = makeRef(*this)](WebCore::PolicyAction policyAction) {
+    m_client->didReceiveResponseNetworkSession(WTFMove(response), [this, protectedThis = makeRef(*this)](WebCore::PolicyAction policyAction) {
         DEBUG_LOG("didReceiveResponse callback (%u)", static_cast<unsigned>(policyAction));
 
         if (m_state == State::Canceling || m_state == State::Completed) {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to