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

Unified Diff: content/browser/service_worker/service_worker_dispatcher_host.cc

Issue 625533002: Respect content settings for Service Worker registration (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@testing
Patch Set: better diff 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
Index: content/browser/service_worker/service_worker_dispatcher_host.cc
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc
index 29017a4ce4dbb58774f2be5bab84ea6c74389ae9..89ef4bdba3a0d95419aadf88b7f43ff30598faf0 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.cc
+++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
@@ -18,6 +18,8 @@
#include "content/browser/service_worker/service_worker_utils.h"
#include "content/common/service_worker/embedded_worker_messages.h"
#include "content/common/service_worker/service_worker_messages.h"
+#include "content/public/browser/content_browser_client.h"
+#include "content/public/common/content_client.h"
#include "ipc/ipc_message_macros.h"
#include "third_party/WebKit/public/platform/WebServiceWorkerError.h"
#include "url/gurl.h"
@@ -30,6 +32,7 @@ namespace {
const char kShutdownErrorMessage[] =
"The Service Worker system has shutdown.";
+const char kDisabledErrorMessage[] = "The browser has disabled Service Worker.";
const uint32 kFilteredMessageClasses[] = {
ServiceWorkerMsgStart,
@@ -42,23 +45,17 @@ const uint32 kFilteredMessageClasses[] = {
bool CanRegisterServiceWorker(const GURL& document_url,
const GURL& pattern,
const GURL& script_url) {
- // TODO: Respect Chrome's content settings, if we add a setting for
- // controlling whether Service Worker is allowed.
falken 2014/10/02 09:51:42 Doing the check here would kill the renderer if th
michaeln 2014/10/02 20:32:51 i remember when these methods were originally adde
falken 2014/10/03 08:30:42 Acknowledged. Now it's doing a bit more, checking
return document_url.GetOrigin() == pattern.GetOrigin() &&
document_url.GetOrigin() == script_url.GetOrigin();
}
bool CanUnregisterServiceWorker(const GURL& document_url,
const GURL& pattern) {
- // TODO: Respect Chrome's content settings, if we add a setting for
- // controlling whether Service Worker is allowed.
return document_url.GetOrigin() == pattern.GetOrigin();
}
bool CanGetRegistration(const GURL& document_url,
const GURL& given_document_url) {
- // TODO: Respect Chrome's content settings, if we add a setting for
- // controlling whether Service Worker is allowed.
falken 2014/10/02 09:51:42 Even if cookies are blocked/service worker is disa
michaeln 2014/10/02 20:32:51 That's not consistent with how cookies or other th
falken 2014/10/03 08:30:42 OK, makes sense. Done.
return document_url.GetOrigin() == given_document_url.GetOrigin();
}
@@ -66,11 +63,13 @@ bool CanGetRegistration(const GURL& document_url,
ServiceWorkerDispatcherHost::ServiceWorkerDispatcherHost(
int render_process_id,
- MessagePortMessageFilter* message_port_message_filter)
+ MessagePortMessageFilter* message_port_message_filter,
+ ResourceContext* resource_context)
: BrowserMessageFilter(kFilteredMessageClasses,
arraysize(kFilteredMessageClasses)),
render_process_id_(render_process_id),
message_port_message_filter_(message_port_message_filter),
+ resource_context_(resource_context),
channel_ready_(false) {
}
@@ -246,6 +245,17 @@ void ServiceWorkerDispatcherHost::OnRegisterServiceWorker(
BadMessageReceived();
return;
}
+
+ if (!GetContentClient()->browser()->AllowServiceWorker(
+ pattern, provider_host->document_url(), resource_context_)) {
+ Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
+ thread_id,
+ request_id,
+ WebServiceWorkerError::ErrorTypeDisabled,
+ base::ASCIIToUTF16(kDisabledErrorMessage)));
+ return;
+ }
+
TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker",
"ServiceWorkerDispatcherHost::RegisterServiceWorker",
request_id,
@@ -298,6 +308,16 @@ void ServiceWorkerDispatcherHost::OnUnregisterServiceWorker(
return;
}
+ if (!GetContentClient()->browser()->AllowServiceWorker(
+ pattern, provider_host->document_url(), resource_context_)) {
+ Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError(
+ thread_id,
+ request_id,
+ WebServiceWorkerError::ErrorTypeDisabled,
+ base::ASCIIToUTF16(kDisabledErrorMessage)));
+ return;
+ }
+
TRACE_EVENT_ASYNC_BEGIN1(
"ServiceWorker",
"ServiceWorkerDispatcherHost::UnregisterServiceWorker",

Powered by Google App Engine
This is Rietveld 408576698