Index: content/browser/service_worker/service_worker_request_handler.cc |
diff --git a/content/browser/service_worker/service_worker_request_handler.cc b/content/browser/service_worker/service_worker_request_handler.cc |
index 6d7d04b2e0a1b99a9101916faee3f4dd1612a9fb..2702e62b5fc5ee9bda37a9037d2a5349f80aa450 100644 |
--- a/content/browser/service_worker/service_worker_request_handler.cc |
+++ b/content/browser/service_worker/service_worker_request_handler.cc |
@@ -11,9 +11,11 @@ |
#include "content/browser/service_worker/service_worker_provider_host.h" |
#include "content/browser/service_worker/service_worker_registration.h" |
#include "content/browser/service_worker/service_worker_url_request_job.h" |
+#include "content/browser/storage_partition_impl.h" |
#include "content/common/resource_request_body.h" |
#include "content/common/service_worker/service_worker_types.h" |
#include "content/common/service_worker/service_worker_utils.h" |
+#include "content/public/browser/content_browser_client.h" |
#include "content/public/browser/resource_context.h" |
#include "content/public/common/origin_util.h" |
#include "net/base/net_util.h" |
@@ -65,10 +67,19 @@ void ServiceWorkerRequestHandler::InitializeHandler( |
RequestContextType request_context_type, |
RequestContextFrameType frame_type, |
scoped_refptr<ResourceRequestBody> body) { |
+ BrowserContext* browser_context = |
+ context_wrapper->storage_partition() |
+ ? context_wrapper->storage_partition()->browser_context() |
+ : nullptr; |
+ |
// Create the handler even for insecure HTTP since it's used in the |
// case of redirect to HTTPS. |
if (!request->url().SchemeIsHTTPOrHTTPS() && |
- !OriginCanAccessServiceWorkers(request->url())) { |
+ !OriginCanAccessServiceWorkers(request->url()) && |
+ !GetContentClient() |
+ ->browser() |
+ ->GetHandlerFor(browser_context, request->url()) |
+ .SchemeIsHTTPOrHTTPS()) { |
return; |
} |