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

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

Issue 600393004: [ServiceWorker] Set FetchRequestMode and handle wasFetchedViaServiceWorker. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: delete fetch-cors-xhr-expected.txt Created 6 years, 2 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
« no previous file with comments | « Source/core/fetch/ResourceLoader.h ('k') | Source/core/fetch/ResourceLoaderHost.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/fetch/ResourceLoader.cpp
diff --git a/Source/core/fetch/ResourceLoader.cpp b/Source/core/fetch/ResourceLoader.cpp
index 1aeb73034cb1c3be24e4795f324d6cc83e1d3603..0b7212e9b401d538580119d2cdf6a191d221f13d 100644
--- a/Source/core/fetch/ResourceLoader.cpp
+++ b/Source/core/fetch/ResourceLoader.cpp
@@ -149,6 +149,11 @@ void ResourceLoader::start()
ASSERT(!m_request.isNull());
ASSERT(m_deferredRequest.isNull());
+ if (responseNeedsAccessControlCheck() && m_host->isControlledByServiceWorker()) {
+ m_fallbackRequestForServiceWorker = adoptPtr(new ResourceRequest(m_request));
+ m_fallbackRequestForServiceWorker->setSkipServiceWorker(true);
+ }
+
m_host->willStartLoadingResource(m_resource, m_request);
if (m_options.synchronousPolicy == RequestSynchronously) {
@@ -355,18 +360,32 @@ void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebUR
const ResourceResponse& resourceResponse = response.toResourceResponse();
if (responseNeedsAccessControlCheck()) {
- // If the response successfully validated a cached resource, perform
- // the access control with respect to it. Need to do this right here
- // before the resource switches clients over to that validated resource.
- Resource* resource = m_resource;
- if (resource->isCacheValidator() && resourceResponse.httpStatusCode() == 304)
- resource = m_resource->resourceToRevalidate();
- else
- m_resource->setResponse(resourceResponse);
- if (!m_host->canAccessResource(resource, m_options.securityOrigin.get(), response.url())) {
- m_host->didReceiveResponse(m_resource, resourceResponse);
- cancel();
- return;
+ if (response.wasFetchedViaServiceWorker()) {
+ if (response.wasFallbackRequiredByServiceWorker()) {
+ m_loader->cancel();
+ m_loader.clear();
+ m_connectionState = ConnectionStateStarted;
+ m_request = *m_fallbackRequestForServiceWorker;
+ m_loader = adoptPtr(blink::Platform::current()->createURLLoader());
+ ASSERT(m_loader);
+ blink::WrappedResourceRequest wrappedRequest(m_request);
+ m_loader->loadAsynchronously(wrappedRequest, this);
+ return;
+ }
+ } else {
+ // If the response successfully validated a cached resource, perform
+ // the access control with respect to it. Need to do this right here
+ // before the resource switches clients over to that validated resource.
+ Resource* resource = m_resource;
+ if (resource->isCacheValidator() && resourceResponse.httpStatusCode() == 304)
+ resource = m_resource->resourceToRevalidate();
+ else
+ m_resource->setResponse(resourceResponse);
+ if (!m_host->canAccessResource(resource, m_options.securityOrigin.get(), response.url())) {
+ m_host->didReceiveResponse(m_resource, resourceResponse);
+ cancel();
+ return;
+ }
}
}
« no previous file with comments | « Source/core/fetch/ResourceLoader.h ('k') | Source/core/fetch/ResourceLoaderHost.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698