Diff
Modified: trunk/Source/WebKit/ChangeLog (236462 => 236463)
--- trunk/Source/WebKit/ChangeLog 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/ChangeLog 2018-09-25 17:36:19 UTC (rev 236463)
@@ -1,3 +1,52 @@
+2018-09-25 Alex Christensen <achristen...@webkit.org>
+
+ NetworkLoad::didReceiveResponse should pass its completion handler to its client
+ https://bugs.webkit.org/show_bug.cgi?id=188701
+
+ Reviewed by Michael Catanzaro.
+
+ Right now we have a confusing enum ShouldContinueDidReceiveResponse and a complicated flow
+ that involves many objects and implicitly using NetworkLoad's destructor as part of the
+ loading flow. This makes the responsibilities of the objects clear.
+
+ * NetworkProcess/Downloads/PendingDownload.cpp:
+ (WebKit::PendingDownload::didReceiveResponse):
+ * NetworkProcess/Downloads/PendingDownload.h:
+ * NetworkProcess/NetworkCORSPreflightChecker.cpp:
+ (WebKit::NetworkCORSPreflightChecker::didReceiveResponse):
+ (WebKit::NetworkCORSPreflightChecker::didReceiveResponseNetworkSession): Deleted.
+ * NetworkProcess/NetworkCORSPreflightChecker.h:
+ * NetworkProcess/NetworkDataTask.cpp:
+ (WebKit::NetworkDataTask::didReceiveResponse):
+ * NetworkProcess/NetworkDataTask.h:
+ * NetworkProcess/NetworkLoad.cpp:
+ (WebKit::NetworkLoad::~NetworkLoad):
+ (WebKit::NetworkLoad::convertTaskToDownload):
+ (WebKit::NetworkLoad::didReceiveResponse):
+ (WebKit::NetworkLoad::notifyDidReceiveResponse):
+ (WebKit::NetworkLoad::continueDidReceiveResponse): Deleted.
+ (WebKit::NetworkLoad::didReceiveResponseNetworkSession): Deleted.
+ * NetworkProcess/NetworkLoad.h:
+ * NetworkProcess/NetworkLoadClient.h:
+ * NetworkProcess/NetworkResourceLoader.cpp:
+ (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
+ (WebKit::NetworkResourceLoader::didReceiveResponse):
+ (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse):
+ (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
+ * NetworkProcess/NetworkResourceLoader.h:
+ * NetworkProcess/PingLoad.cpp:
+ (WebKit::PingLoad::didReceiveResponse):
+ (WebKit::PingLoad::didReceiveResponseNetworkSession): Deleted.
+ * NetworkProcess/PingLoad.h:
+ * NetworkProcess/PreconnectTask.cpp:
+ (WebKit::PreconnectTask::didReceiveResponse):
+ * NetworkProcess/PreconnectTask.h:
+ * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
+ (WebKit::NetworkCache::SpeculativeLoad::didReceiveResponse):
+ * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
+ * NetworkProcess/capture/NetworkDataTaskReplay.cpp:
+ (WebKit::NetworkCapture::NetworkDataTaskReplay::didReceiveResponse):
+
2018-09-24 Alex Christensen <achristen...@webkit.org>
Build fix.
Modified: trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -85,10 +85,10 @@
ASSERT_UNUSED(addResult, addResult.isNewEntry);
}
-void DownloadManager::convertNetworkLoadToDownload(DownloadID downloadID, std::unique_ptr<NetworkLoad>&& networkLoad, Vector<RefPtr<WebCore::BlobDataFileReference>>&& blobFileReferences, const ResourceRequest& request, const ResourceResponse& response)
+void DownloadManager::convertNetworkLoadToDownload(DownloadID downloadID, std::unique_ptr<NetworkLoad>&& networkLoad, ResponseCompletionHandler&& completionHandler, 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), downloadID, request, response));
+ m_pendingDownloads.add(downloadID, std::make_unique<PendingDownload>(WTFMove(networkLoad), WTFMove(completionHandler), downloadID, request, response));
}
void DownloadManager::continueDecidePendingDownloadDestination(DownloadID downloadID, String destination, SandboxExtension::Handle&& sandboxExtensionHandle, bool allowOverwrite)
Modified: trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -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>&&, Vector<RefPtr<WebCore::BlobDataFileReference>>&&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+ void convertNetworkLoadToDownload(DownloadID, std::unique_ptr<NetworkLoad>&&, ResponseCompletionHandler&&, 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: trunk/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -47,7 +47,7 @@
send(Messages::DownloadProxy::DidStart(m_networkLoad->currentRequest(), suggestedName));
}
-PendingDownload::PendingDownload(std::unique_ptr<NetworkLoad>&& networkLoad, DownloadID downloadID, const ResourceRequest& request, const ResourceResponse& response)
+PendingDownload::PendingDownload(std::unique_ptr<NetworkLoad>&& networkLoad, ResponseCompletionHandler&& completionHandler, 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);
+ m_networkLoad->convertTaskToDownload(*this, request, response, WTFMove(completionHandler));
}
void PendingDownload::willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse)
@@ -85,6 +85,11 @@
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: trunk/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -43,7 +43,7 @@
WTF_MAKE_FAST_ALLOCATED;
public:
PendingDownload(NetworkLoadParameters&&, DownloadID, NetworkSession&, const String& suggestedName);
- PendingDownload(std::unique_ptr<NetworkLoad>&&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+ PendingDownload(std::unique_ptr<NetworkLoad>&&, ResponseCompletionHandler&&, 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;
- ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override { return ShouldContinueDidReceiveResponse::No; };
+ void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override { };
void didFinishLoading(const WebCore::NetworkLoadMetrics&) override { };
void didFailLoading(const WebCore::ResourceError&) override;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -106,9 +106,9 @@
NetworkProcess::singleton().authenticationManager().didReceiveAuthenticationChallenge(m_parameters.pageID, m_parameters.frameID, challenge, WTFMove(completionHandler));
}
-void NetworkCORSPreflightChecker::didReceiveResponseNetworkSession(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
+void NetworkCORSPreflightChecker::didReceiveResponse(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
{
- RELEASE_LOG_IF_ALLOWED("didReceiveResponseNetworkSession");
+ RELEASE_LOG_IF_ALLOWED("didReceiveResponse");
if (m_shouldCaptureExtraNetworkLoadMetrics)
m_loadInformation.response = response;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -65,7 +65,7 @@
private:
void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
void didReceiveChallenge(WebCore::AuthenticationChallenge&&, ChallengeCompletionHandler&&) final;
- void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
+ void didReceiveResponse(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: trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -113,7 +113,7 @@
return;
}
}
- m_client->didReceiveResponseNetworkSession(WTFMove(response), WTFMove(completionHandler));
+ m_client->didReceiveResponse(WTFMove(response), WTFMove(completionHandler));
}
bool NetworkDataTask::shouldCaptureExtraNetworkLoadMetrics() const
Modified: trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -60,7 +60,7 @@
public:
virtual void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) = 0;
virtual void didReceiveChallenge(WebCore::AuthenticationChallenge&&, ChallengeCompletionHandler&&) = 0;
- virtual void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) = 0;
+ virtual void didReceiveResponse(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: trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -121,8 +121,6 @@
ASSERT(RunLoop::isMain());
if (m_redirectCompletionHandler)
m_redirectCompletionHandler({ });
- if (m_responseCompletionHandler)
- m_responseCompletionHandler(PolicyAction::Ignore);
if (m_task)
m_task->clearClient();
}
@@ -176,14 +174,6 @@
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();
@@ -194,17 +184,16 @@
return m_client.get().isAllowedToAskUserForCredentials();
}
-void NetworkLoad::convertTaskToDownload(PendingDownload& pendingDownload, const ResourceRequest& updatedRequest, const ResourceResponse& response)
+void NetworkLoad::convertTaskToDownload(PendingDownload& pendingDownload, const ResourceRequest& updatedRequest, const ResourceResponse& response, ResponseCompletionHandler&& completionHandler)
{
if (!m_task)
- return;
+ return completionHandler(PolicyAction::Ignore);
m_client = pendingDownload;
m_currentRequest = updatedRequest;
m_task->setPendingDownload(pendingDownload);
-
- if (m_responseCompletionHandler)
- NetworkProcess::singleton().findPendingDownloadLocation(*m_task.get(), std::exchange(m_responseCompletionHandler, nullptr), response);
+
+ NetworkProcess::singleton().findPendingDownloadLocation(*m_task.get(), WTFMove(completionHandler), response);
}
void NetworkLoad::setPendingDownloadID(DownloadID downloadID)
@@ -269,7 +258,7 @@
NetworkProcess::singleton().authenticationManager().didReceiveAuthenticationChallenge(m_parameters.webPageID, m_parameters.webFrameID, challenge, WTFMove(completionHandler));
}
-void NetworkLoad::didReceiveResponseNetworkSession(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
+void NetworkLoad::didReceiveResponse(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
{
ASSERT(RunLoop::isMain());
ASSERT(!m_throttle);
@@ -301,11 +290,7 @@
if (m_parameters.needsCertificateInfo)
response.includeCertificateInfo();
- if (m_client.get().didReceiveResponse(WTFMove(response)) == NetworkLoadClient::ShouldContinueDidReceiveResponse::No) {
- m_responseCompletionHandler = WTFMove(completionHandler);
- return;
- }
- completionHandler(PolicyAction::Use);
+ m_client.get().didReceiveResponse(WTFMove(response), WTFMove(completionHandler));
}
void NetworkLoad::didReceiveData(Ref<SharedBuffer>&& buffer)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoad.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkLoad.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoad.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -59,9 +59,8 @@
const NetworkLoadParameters& parameters() const { return m_parameters; }
void continueWillSendRequest(WebCore::ResourceRequest&&);
- void continueDidReceiveResponse();
- void convertTaskToDownload(PendingDownload&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
+ void convertTaskToDownload(PendingDownload&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, ResponseCompletionHandler&&);
void setPendingDownloadID(DownloadID);
void setSuggestedFilename(const String&);
void setPendingDownload(PendingDownload&);
@@ -81,7 +80,7 @@
// NetworkDataTaskClient
void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
void didReceiveChallenge(WebCore::AuthenticationChallenge&&, ChallengeCompletionHandler&&) final;
- void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
+ void didReceiveResponse(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;
@@ -95,7 +94,6 @@
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: trunk/Source/WebKit/NetworkProcess/NetworkLoadClient.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkLoadClient.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadClient.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -34,10 +34,13 @@
class NetworkLoadMetrics;
class ProtectionSpace;
class SharedBuffer;
+enum class PolicyAction;
}
namespace WebKit {
+using ResponseCompletionHandler = CompletionHandler<void(WebCore::PolicyAction)>;
+
class NetworkLoadClient {
public:
virtual ~NetworkLoadClient() { }
@@ -48,8 +51,7 @@
virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) = 0;
virtual void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) = 0;
- enum class ShouldContinueDidReceiveResponse { No, Yes };
- virtual ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) = 0;
+ virtual void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) = 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: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -134,6 +134,8 @@
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
@@ -344,7 +346,8 @@
return;
}
- NetworkProcess::singleton().downloadManager().convertNetworkLoadToDownload(downloadID, std::exchange(m_networkLoad, nullptr), WTFMove(m_fileReferences), request, response);
+ ASSERT(m_responseCompletionHandler);
+ NetworkProcess::singleton().downloadManager().convertNetworkLoadToDownload(downloadID, std::exchange(m_networkLoad, nullptr), WTFMove(m_responseCompletionHandler), WTFMove(m_fileReferences), request, response);
}
void NetworkResourceLoader::abort()
@@ -426,7 +429,7 @@
return false;
}
-auto NetworkResourceLoader::didReceiveResponse(ResourceResponse&& receivedResponse) -> ShouldContinueDidReceiveResponse
+void NetworkResourceLoader::didReceiveResponse(ResourceResponse&& receivedResponse, ResponseCompletionHandler&& completionHandler)
{
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());
@@ -456,11 +459,11 @@
m_cacheEntryForValidation = nullptr;
}
if (m_cacheEntryForValidation)
- return ShouldContinueDidReceiveResponse::Yes;
+ return completionHandler(PolicyAction::Use);
if (isMainResource() && shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptions(m_response)) {
send(Messages::WebResourceLoader::StopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied { });
- return ShouldContinueDidReceiveResponse::No;
+ return completionHandler(PolicyAction::Ignore);
}
if (m_networkLoadChecker) {
@@ -470,7 +473,7 @@
if (protectedThis->m_networkLoad)
protectedThis->didFailLoading(error);
});
- return ShouldContinueDidReceiveResponse::No;
+ return completionHandler(PolicyAction::Ignore);
}
}
@@ -477,7 +480,7 @@
auto response = sanitizeResponseIfPossible(ResourceResponse { m_response }, ResourceResponse::SanitizationType::CrossOriginSafe);
if (isSynchronous()) {
m_synchronousLoadData->response = WTFMove(response);
- return ShouldContinueDidReceiveResponse::Yes;
+ return completionHandler(PolicyAction::Use);
}
// We wait to receive message NetworkResourceLoader::ContinueDidReceiveResponse before continuing a load for
@@ -484,7 +487,10 @@
// a main resource because the embedding client must decide whether to allow the load.
bool willWaitForContinueDidReceiveResponse = isMainResource();
send(Messages::WebResourceLoader::DidReceiveResponse { response, willWaitForContinueDidReceiveResponse });
- return willWaitForContinueDidReceiveResponse ? ShouldContinueDidReceiveResponse::No : ShouldContinueDidReceiveResponse::Yes;
+ if (willWaitForContinueDidReceiveResponse)
+ m_responseCompletionHandler = WTFMove(completionHandler);
+ else
+ completionHandler(PolicyAction::Use);
}
void NetworkResourceLoader::didReceiveBuffer(Ref<SharedBuffer>&& buffer, int reportedEncodedDataLength)
@@ -631,7 +637,7 @@
void NetworkResourceLoader::didFinishWithRedirectResponse(ResourceResponse&& redirectResponse)
{
redirectResponse.setType(ResourceResponse::Type::Opaqueredirect);
- didReceiveResponse(WTFMove(redirectResponse));
+ didReceiveResponse(WTFMove(redirectResponse), [] (auto) { });
WebCore::NetworkLoadMetrics networkLoadMetrics;
networkLoadMetrics.markComplete();
@@ -706,15 +712,11 @@
void NetworkResourceLoader::continueDidReceiveResponse()
{
- if (m_cacheEntryWaitingForContinueDidReceiveResponse) {
+ if (m_cacheEntryWaitingForContinueDidReceiveResponse)
continueProcessingCachedEntryAfterDidReceiveResponse(WTFMove(m_cacheEntryWaitingForContinueDidReceiveResponse));
- return;
- }
- // 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();
+ if (m_responseCompletionHandler)
+ m_responseCompletionHandler(PolicyAction::Use);
}
void NetworkResourceLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -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;
- ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override;
+ void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override;
void didFinishLoading(const WebCore::NetworkLoadMetrics&) override;
void didFailLoading(const WebCore::ResourceError&) override;
@@ -206,6 +206,7 @@
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: trunk/Source/WebKit/NetworkProcess/PingLoad.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/PingLoad.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/PingLoad.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -122,9 +122,9 @@
didFinish(ResourceError { String(), 0, currentURL(), "Failed HTTP authentication"_s, ResourceError::Type::AccessControl });
}
-void PingLoad::didReceiveResponseNetworkSession(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
+void PingLoad::didReceiveResponse(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
{
- RELEASE_LOG_IF_ALLOWED("didReceiveResponseNetworkSession - httpStatusCode: %d", response.httpStatusCode());
+ RELEASE_LOG_IF_ALLOWED("didReceiveResponse - httpStatusCode: %d", response.httpStatusCode());
auto weakThis = makeWeakPtr(*this);
completionHandler(PolicyAction::Ignore);
if (!weakThis)
Modified: trunk/Source/WebKit/NetworkProcess/PingLoad.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/PingLoad.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/PingLoad.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -56,7 +56,7 @@
void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
void didReceiveChallenge(WebCore::AuthenticationChallenge&&, ChallengeCompletionHandler&&) final;
- void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
+ void didReceiveResponse(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: trunk/Source/WebKit/NetworkProcess/PreconnectTask.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/PreconnectTask.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/PreconnectTask.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -68,10 +68,10 @@
ASSERT_NOT_REACHED();
}
-auto PreconnectTask::didReceiveResponse(ResourceResponse&&) -> ShouldContinueDidReceiveResponse
+void PreconnectTask::didReceiveResponse(ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
{
ASSERT_NOT_REACHED();
- return ShouldContinueDidReceiveResponse::No;
+ completionHandler(PolicyAction::Ignore);
}
void PreconnectTask::didReceiveBuffer(Ref<SharedBuffer>&&, int reportedEncodedDataLength)
Modified: trunk/Source/WebKit/NetworkProcess/PreconnectTask.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/PreconnectTask.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/PreconnectTask.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -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;
- ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) final;
+ void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) final;
void didFinishLoading(const WebCore::NetworkLoadMetrics&) final;
void didFailLoading(const WebCore::ResourceError&) final;
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -80,7 +80,7 @@
didComplete();
}
-auto SpeculativeLoad::didReceiveResponse(ResourceResponse&& receivedResponse) -> ShouldContinueDidReceiveResponse
+void SpeculativeLoad::didReceiveResponse(ResourceResponse&& receivedResponse, ResponseCompletionHandler&& completionHandler)
{
m_response = receivedResponse;
@@ -93,7 +93,7 @@
else
m_cacheEntry = nullptr;
- return ShouldContinueDidReceiveResponse::Yes;
+ completionHandler(PolicyAction::Use);
}
void SpeculativeLoad::didReceiveBuffer(Ref<SharedBuffer>&& buffer, int reportedEncodedDataLength)
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h 2018-09-25 17:36:19 UTC (rev 236463)
@@ -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;
- ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override;
+ void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override;
void didFinishLoading(const WebCore::NetworkLoadMetrics&) override;
void didFailLoading(const WebCore::ResourceError&) override;
Modified: trunk/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp (236462 => 236463)
--- trunk/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp 2018-09-25 17:19:36 UTC (rev 236462)
+++ trunk/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp 2018-09-25 17:36:19 UTC (rev 236463)
@@ -240,7 +240,7 @@
DEBUG_LOG("URL = "" STRING_SPECIFIER, DEBUG_STR(m_firstRequest.url().string()));
ASSERT(m_client);
- m_client->didReceiveResponseNetworkSession(WTFMove(response), [this, protectedThis = makeRef(*this)](WebCore::PolicyAction policyAction) {
+ m_client->didReceiveResponse(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) {