WebKit Bugzilla
Attachment 348514 Details for
Bug 189163
: REGRESSION(r235413): Causes crashes when running layout tests under GuardMalloc (Requested by ryanhaddad on #webkit).
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
ROLLOUT of r235413
bug-189163-20180830141330.patch (text/plain), 32.64 KB, created by
WebKit Commit Bot
on 2018-08-30 11:13:31 PDT
(
hide
)
Description:
ROLLOUT of r235413
Filename:
MIME Type:
Creator:
WebKit Commit Bot
Created:
2018-08-30 11:13:31 PDT
Size:
32.64 KB
patch
obsolete
>Subversion Revision: 235509 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index bd7561140e2a3a5b880bce0670ed48dc903bf3bd..fa54cd6bb23387dedd59a2c11ae1573a907b0d20 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,22 @@ >+2018-08-30 Commit Queue <commit-queue@webkit.org> >+ >+ 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-30 Aditya Keerthi <akeerthi@apple.com> > > [macOS] Color picker layout is broken if suggested colors are specified >diff --git a/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp b/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp >index 1e28fc94278bc4387d2237152dc27b77b1411944..630cea568e082b6f14778d4ed900b931ff9fcd56 100644 >--- a/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp >+++ b/Source/WebKit/NetworkProcess/Downloads/DownloadManager.cpp >@@ -85,10 +85,10 @@ void DownloadManager::willDecidePendingDownloadDestination(NetworkDataTask& netw > 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) >diff --git a/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h b/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h >index 51d0ef16a6c5658ff10aeeaf8e336fae1c33c366..7919d27570279ea5de69160cfb52075711268fd0 100644 >--- a/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h >+++ b/Source/WebKit/NetworkProcess/Downloads/DownloadManager.h >@@ -79,7 +79,7 @@ public: > 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&&); >diff --git a/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp b/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp >index a099ab35e947b005ec927952022eba37df25ce52..7aad1dbb0f495a8481c99edb2a420f1152cc1be7 100644 >--- a/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp >+++ b/Source/WebKit/NetworkProcess/Downloads/PendingDownload.cpp >@@ -47,7 +47,7 @@ PendingDownload::PendingDownload(NetworkLoadParameters&& parameters, DownloadID > 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 @@ PendingDownload::PendingDownload(std::unique_ptr<NetworkLoad>&& networkLoad, Res > 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 @@ IPC::Connection* PendingDownload::messageSenderConnection() > 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(); >diff --git a/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h b/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h >index a3837498abe5e2100613ac759f86e4b6bdc20589..af990c15b32a8a931a169971b02264d2d42d6158 100644 >--- a/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h >+++ b/Source/WebKit/NetworkProcess/Downloads/PendingDownload.h >@@ -43,7 +43,7 @@ class PendingDownload : public NetworkLoadClient, public IPC::MessageSender { > 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 @@ private: > 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; >diff --git a/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp b/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp >index 5cbb43366501871518aa59cebbd27d99c0053639..f7d6657fd6fa90303eda695363445e67a695db0e 100644 >--- a/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp >@@ -105,9 +105,9 @@ void NetworkCORSPreflightChecker::didReceiveChallenge(WebCore::AuthenticationCha > 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; >diff --git a/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h b/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h >index 056df127a49c9c8cef98dc47f11c549ebfcbc8d1..4e55ea04ad6ffdbc374843202110d0225050abf0 100644 >--- a/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h >+++ b/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h >@@ -65,7 +65,7 @@ public: > 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; >diff --git a/Source/WebKit/NetworkProcess/NetworkDataTask.cpp b/Source/WebKit/NetworkProcess/NetworkDataTask.cpp >index cf4e64d503f1a9ee0bdc5e0d528c47f29429a641..ddbf3b730802b6a0ff69011b0fb031a90a5a8e7a 100644 >--- a/Source/WebKit/NetworkProcess/NetworkDataTask.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkDataTask.cpp >@@ -113,7 +113,7 @@ void NetworkDataTask::didReceiveResponse(ResourceResponse&& response, ResponseCo > return; > } > } >- m_client->didReceiveResponse(WTFMove(response), WTFMove(completionHandler)); >+ m_client->didReceiveResponseNetworkSession(WTFMove(response), WTFMove(completionHandler)); > } > > bool NetworkDataTask::shouldCaptureExtraNetworkLoadMetrics() const >diff --git a/Source/WebKit/NetworkProcess/NetworkDataTask.h b/Source/WebKit/NetworkProcess/NetworkDataTask.h >index 408f09a7810faa0ba2add4026a985843312894da..75a0a4a9966df806bdf35156a31cf73af94ae372 100644 >--- a/Source/WebKit/NetworkProcess/NetworkDataTask.h >+++ b/Source/WebKit/NetworkProcess/NetworkDataTask.h >@@ -60,7 +60,7 @@ class NetworkDataTaskClient { > 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; >diff --git a/Source/WebKit/NetworkProcess/NetworkLoad.cpp b/Source/WebKit/NetworkProcess/NetworkLoad.cpp >index 2a647dd8dbfe1de1d9ebdea2b60278135f223482..378a548441d31dd70aca766e3de06717ec029195 100644 >--- a/Source/WebKit/NetworkProcess/NetworkLoad.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkLoad.cpp >@@ -120,6 +120,8 @@ NetworkLoad::~NetworkLoad() > 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 @@ void NetworkLoad::continueWillSendRequest(WebCore::ResourceRequest&& newRequest) > 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 @@ bool NetworkLoad::isAllowedToAskUserForCredentials() const > 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 @@ void NetworkLoad::didReceiveChallenge(AuthenticationChallenge&& challenge, Chall > 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 @@ void NetworkLoad::notifyDidReceiveResponse(ResourceResponse&& response, Response > 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) >diff --git a/Source/WebKit/NetworkProcess/NetworkLoad.h b/Source/WebKit/NetworkProcess/NetworkLoad.h >index 00a9630fe9aa0bc90f4759033657d31b02730990..99c92093f83e65191ffa664ec55ef1dacc16339f 100644 >--- a/Source/WebKit/NetworkProcess/NetworkLoad.h >+++ b/Source/WebKit/NetworkProcess/NetworkLoad.h >@@ -59,8 +59,9 @@ public: > 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 @@ private: > // 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 @@ private: > 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; >diff --git a/Source/WebKit/NetworkProcess/NetworkLoadClient.h b/Source/WebKit/NetworkProcess/NetworkLoadClient.h >index 4692fd7d6b44b2d40d22835b94aecd88bc91b96c..5bbfb0e62f17e23723ae79aec93dbb4a6593c7bb 100644 >--- a/Source/WebKit/NetworkProcess/NetworkLoadClient.h >+++ b/Source/WebKit/NetworkProcess/NetworkLoadClient.h >@@ -34,13 +34,10 @@ namespace WebCore { > 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 @@ public: > > 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; >diff --git a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp b/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp >index 4ffd41053d426d5d29fe51e5da0422026455bd80..909acc43892a199da089d2837be25f3c969ac6d0 100644 >--- a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp >@@ -133,8 +133,6 @@ NetworkResourceLoader::~NetworkResourceLoader() > 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 @@ void NetworkResourceLoader::convertToDownload(DownloadID downloadID, const Resou > 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 @@ bool NetworkResourceLoader::shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptio > 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 @@ void NetworkResourceLoader::didReceiveResponse(ResourceResponse&& receivedRespon > } 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,26 +469,21 @@ void NetworkResourceLoader::didReceiveResponse(ResourceResponse&& receivedRespon > if (protectedThis->m_networkLoad) > protectedThis->didFailLoading(error); > }); >- completionHandler(PolicyAction::Ignore); >- return; >+ return ShouldContinueDidReceiveResponse::No; > } > } > > 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 > // 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::continueWillSendRedirectedRequest(ResourceRequest&& > 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::continueWillSendRequest(ResourceRequest&& newRequest > > void NetworkResourceLoader::continueDidReceiveResponse() > { >- if (m_responseCompletionHandler) >- m_responseCompletionHandler(PolicyAction::Use); >- >- 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(); > } > > void NetworkResourceLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) >diff --git a/Source/WebKit/NetworkProcess/NetworkResourceLoader.h b/Source/WebKit/NetworkProcess/NetworkResourceLoader.h >index 96edab3747e807d8ef86db8238599666a7489408..d8977482fcf22ff08fc3dfc5db372af9f2320cba 100644 >--- a/Source/WebKit/NetworkProcess/NetworkResourceLoader.h >+++ b/Source/WebKit/NetworkProcess/NetworkResourceLoader.h >@@ -97,7 +97,7 @@ public: > 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 @@ private: > 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; > }; >diff --git a/Source/WebKit/NetworkProcess/PingLoad.cpp b/Source/WebKit/NetworkProcess/PingLoad.cpp >index 57eb761b159ff8d7209435de4e3b3e68782046ac..bdb4123c17527b676a692f2d9ccafd137878ae4f 100644 >--- a/Source/WebKit/NetworkProcess/PingLoad.cpp >+++ b/Source/WebKit/NetworkProcess/PingLoad.cpp >@@ -121,9 +121,9 @@ void PingLoad::didReceiveChallenge(AuthenticationChallenge&&, ChallengeCompletio > 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) >diff --git a/Source/WebKit/NetworkProcess/PingLoad.h b/Source/WebKit/NetworkProcess/PingLoad.h >index 9f0c6b86b420f455bffc2de6b94ebe7c8be143a0..e47bf1733121b710beb5e5b3ff1ae61d8c4ebffe 100644 >--- a/Source/WebKit/NetworkProcess/PingLoad.h >+++ b/Source/WebKit/NetworkProcess/PingLoad.h >@@ -56,7 +56,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; >diff --git a/Source/WebKit/NetworkProcess/PreconnectTask.cpp b/Source/WebKit/NetworkProcess/PreconnectTask.cpp >index 7a99849adbc67451dbf940fe027342405fe866fb..421de34414f9cbd657e50f01c387c740c7e39930 100644 >--- a/Source/WebKit/NetworkProcess/PreconnectTask.cpp >+++ b/Source/WebKit/NetworkProcess/PreconnectTask.cpp >@@ -68,10 +68,10 @@ void PreconnectTask::willSendRedirectedRequest(ResourceRequest&&, ResourceReques > 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) >diff --git a/Source/WebKit/NetworkProcess/PreconnectTask.h b/Source/WebKit/NetworkProcess/PreconnectTask.h >index 8f93fdc2f730a1e8d30f1d6dd5872fed271df350..213aedf91171393f7029bef1b8b0669b5074cfc4 100644 >--- a/Source/WebKit/NetworkProcess/PreconnectTask.h >+++ b/Source/WebKit/NetworkProcess/PreconnectTask.h >@@ -51,7 +51,7 @@ private: > 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; >diff --git a/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp b/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp >index 7b40ab12d97306a0e69c18ea51ffb18a04e6a9fb..282afd7f99b07dab7f703fa78f0f19c2389bfbf2 100644 >--- a/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp >+++ b/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp >@@ -80,7 +80,7 @@ void SpeculativeLoad::willSendRedirectedRequest(ResourceRequest&& request, Resou > didComplete(); > } > >-void SpeculativeLoad::didReceiveResponse(ResourceResponse&& receivedResponse, ResponseCompletionHandler&& completionHandler) >+auto SpeculativeLoad::didReceiveResponse(ResourceResponse&& receivedResponse) -> ShouldContinueDidReceiveResponse > { > m_response = receivedResponse; > >@@ -93,7 +93,7 @@ void SpeculativeLoad::didReceiveResponse(ResourceResponse&& receivedResponse, Re > else > m_cacheEntry = nullptr; > >- completionHandler(PolicyAction::Use); >+ return ShouldContinueDidReceiveResponse::Yes; > } > > void SpeculativeLoad::didReceiveBuffer(Ref<SharedBuffer>&& buffer, int reportedEncodedDataLength) >diff --git a/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h b/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h >index 6ce77f99ea003473c69807ff8590b221c2e2d40c..6cab9565f54991f6008a9279d43b12891327e71c 100644 >--- a/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h >+++ b/Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h >@@ -56,7 +56,7 @@ private: > 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; >diff --git a/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp b/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp >index d56c74eda00b3c48e9c71d53e89a8f47b7995649..3db77e732c5d9a004ce9a95c67493e8f33fa931d 100644 >--- a/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp >+++ b/Source/WebKit/NetworkProcess/capture/NetworkDataTaskReplay.cpp >@@ -240,7 +240,7 @@ void NetworkDataTaskReplay::didReceiveResponse(WebCore::ResourceResponse&& respo > 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) {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 189163
: 348514