Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Unified Diff: third_party/WebKit/Source/core/fetch/ResourceLoader.cpp

Issue 1975373002: Clean up response handling in ResourceLoader/ResourceFetcher (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
diff --git a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
index 8fa0dfd9e57d4d779bc06f1542787b0b5f8a8e54..618408e620a6e6f4c02e8323133e3cc1a6c56ccd 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
@@ -93,6 +93,14 @@ void ResourceLoader::start(const ResourceRequest& request, WebTaskRunner* loadin
m_loader->loadAsynchronously(WrappedResourceRequest(request), this);
}
+void ResourceLoader::restart(const ResourceRequest& request)
hiroshige 2016/07/28 09:56:42 I think the name of |restart| is too general, beca
Nate Chapin 2016/07/28 22:29:35 Renamed to restartForServiceWorkerFallback.
+{
+ m_loader.reset();
+ m_loader = wrapUnique(Platform::current()->createURLLoader());
+ DCHECK(m_loader);
+ m_loader->loadAsynchronously(WrappedResourceRequest(request), this);
+}
+
void ResourceLoader::setDefersLoading(bool defers)
{
ASSERT(m_loader);
@@ -144,60 +152,17 @@ void ResourceLoader::didSendData(WebURLLoader*, unsigned long long bytesSent, un
m_resource->didSendData(bytesSent, totalBytesToBeSent);
}
-bool ResourceLoader::responseNeedsAccessControlCheck() const
-{
- // If the fetch was (potentially) CORS enabled, an access control check of the response is required.
- return m_resource->options().corsEnabled == IsCORSEnabled;
-}
-
void ResourceLoader::didReceiveResponse(WebURLLoader*, const WebURLResponse& response, WebDataConsumerHandle* rawHandle)
{
DCHECK(!response.isNull());
// |rawHandle|'s ownership is transferred to the callee.
std::unique_ptr<WebDataConsumerHandle> handle = wrapUnique(rawHandle);
const ResourceResponse& resourceResponse = response.toResourceResponse();
-
- if (responseNeedsAccessControlCheck()) {
- if (response.wasFetchedViaServiceWorker()) {
- if (response.wasFallbackRequiredByServiceWorker()) {
- m_loader.reset();
- m_loader = wrapUnique(Platform::current()->createURLLoader());
- DCHECK(m_loader);
- ResourceRequest request = m_resource->lastResourceRequest();
- DCHECK_EQ(request.skipServiceWorker(), WebURLRequest::SkipServiceWorker::None);
- // This code handles the case when a regular controlling service worker
- // doesn't handle a cross origin request. When this happens we still
- // want to give foreign fetch a chance to handle the request, so
- // only skip the controlling service worker for the fallback request.
- // This is currently safe because of http://crbug.com/604084 the
- // wasFallbackRequiredByServiceWorker flag is never set when foreign fetch
- // handled a request.
- request.setSkipServiceWorker(WebURLRequest::SkipServiceWorker::Controlling);
- m_loader->loadAsynchronously(WrappedResourceRequest(request), this);
- return;
- }
- } else {
- if (!m_resource->isCacheValidator() || resourceResponse.httpStatusCode() != 304)
- m_resource->setResponse(resourceResponse);
hiroshige 2016/07/28 09:56:42 This CL removes this setResponse(). It's probably
Nate Chapin 2016/07/28 22:29:35 Mostly correct. The only reason it needed to be he
- if (!m_fetcher->canAccessResource(m_resource.get(), m_resource->options().securityOrigin.get(), response.url(), ResourceFetcher::ShouldLogAccessControlErrors)) {
- m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse);
- didFail(nullptr, ResourceError::cancelledDueToAccessCheckError(KURL(response.url())));
- return;
- }
- }
- }
-
- m_resource->responseReceived(resourceResponse, std::move(handle));
- if (!m_loader)
+ if (!m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse))
return;
-
- m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse);
- if (!m_loader)
- return;
-
- if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnoreHTTPStatusCodeErrors())
- return;
- didFail(nullptr, ResourceError::cancelledError(resourceResponse.url()));
+ m_resource->responseReceived(resourceResponse, std::move(handle));
+ if (response.httpStatusCode() >= 400 && !m_resource->shouldIgnoreHTTPStatusCodeErrors())
hiroshige 2016/07/28 09:56:42 Do we need |if (!m_loader) return;| before this?
Nate Chapin 2016/07/28 22:29:35 This moved to ResourceFetcher, but add a resource-
+ didFail(nullptr, ResourceError::cancelledError(resourceResponse.url()));
}
void ResourceLoader::didReceiveResponse(WebURLLoader* loader, const WebURLResponse& response)

Powered by Google App Engine
This is Rietveld 408576698