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) {