| 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 cc79a48d62d4055bed29427a2dfa1782b905da32..d31520dd4f71169e68b932fa7ce756a8e78787e4 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::restartForServiceWorkerFallback(const ResourceRequest& request)
|
| +{
|
| + 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,10 @@ 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)
|
| +void ResourceLoader::didReceiveResponse(WebURLLoader*, const WebURLResponse& response, WebDataConsumerHandle* handle)
|
| {
|
| 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);
|
| - if (!m_fetcher->canAccessResource(m_resource.get(), m_resource->options().securityOrigin.get(), response.url())) {
|
| - 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)
|
| - 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_fetcher->didReceiveResponse(m_resource.get(), response.toResourceResponse(), handle);
|
| }
|
|
|
| void ResourceLoader::didReceiveResponse(WebURLLoader* loader, const WebURLResponse& response)
|
|
|