From 9b0d642c00e555926256eccac43c72d3b3615b30 Mon Sep 17 00:00:00 2001 From: Ben Kelly Date: Thu, 2 Jul 2015 20:09:20 -0700 Subject: [PATCH] Bug 1167808 P1 Add dom.serviceWorkers.interception.opaque.enabled pref. r=ehsan --- dom/workers/RuntimeService.cpp | 10 ++++++++++ dom/workers/WorkerPrivate.h | 7 +++++++ dom/workers/Workers.h | 1 + modules/libpref/init/all.js | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp index 66573fd2eee..3a1743a5bda 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -165,6 +165,7 @@ static_assert(MAX_WORKERS_PER_DOMAIN >= 1, #define PREF_SERVICEWORKERS_ENABLED "dom.serviceWorkers.enabled" #define PREF_SERVICEWORKERS_TESTING_ENABLED "dom.serviceWorkers.testing.enabled" #define PREF_INTERCEPTION_ENABLED "dom.serviceWorkers.interception.enabled" +#define PREF_INTERCEPTION_OPAQUE_ENABLED "dom.serviceWorkers.interception.opaque.enabled" namespace { @@ -1932,6 +1933,10 @@ RuntimeService::Init() WorkerPrefChanged, PREF_INTERCEPTION_ENABLED, reinterpret_cast(WORKERPREF_INTERCEPTION_ENABLED))) || + NS_FAILED(Preferences::RegisterCallbackAndCall( + WorkerPrefChanged, + PREF_INTERCEPTION_OPAQUE_ENABLED, + reinterpret_cast(WORKERPREF_INTERCEPTION_OPAQUE_ENABLED))) || NS_FAILED(Preferences::RegisterCallbackAndCall( WorkerPrefChanged, PREF_DOM_CACHES_TESTING_ENABLED, @@ -2143,6 +2148,10 @@ RuntimeService::Cleanup() WorkerPrefChanged, PREF_DOM_CACHES_TESTING_ENABLED, reinterpret_cast(WORKERPREF_DOM_CACHES_TESTING))) || + NS_FAILED(Preferences::UnregisterCallback( + WorkerPrefChanged, + PREF_INTERCEPTION_OPAQUE_ENABLED, + reinterpret_cast(WORKERPREF_INTERCEPTION_OPAQUE_ENABLED))) || NS_FAILED(Preferences::UnregisterCallback( WorkerPrefChanged, PREF_INTERCEPTION_ENABLED, @@ -2704,6 +2713,7 @@ RuntimeService::WorkerPrefChanged(const char* aPrefName, void* aClosure) case WORKERPREF_DUMP: #endif case WORKERPREF_INTERCEPTION_ENABLED: + case WORKERPREF_INTERCEPTION_OPAQUE_ENABLED: case WORKERPREF_SERVICEWORKERS: case WORKERPREF_SERVICEWORKERS_TESTING: sDefaultPreferences[key] = Preferences::GetBool(aPrefName, false); diff --git a/dom/workers/WorkerPrivate.h b/dom/workers/WorkerPrivate.h index a565944c0f1..c0b5e4d045e 100644 --- a/dom/workers/WorkerPrivate.h +++ b/dom/workers/WorkerPrivate.h @@ -1291,6 +1291,13 @@ public: return mPreferences[WORKERPREF_INTERCEPTION_ENABLED]; } + bool + OpaqueInterceptionEnabled() const + { + AssertIsOnWorkerThread(); + return mPreferences[WORKERPREF_INTERCEPTION_OPAQUE_ENABLED]; + } + bool DOMWorkerNotificationEnabled() const { diff --git a/dom/workers/Workers.h b/dom/workers/Workers.h index c398d679068..6e1674e0681 100644 --- a/dom/workers/Workers.h +++ b/dom/workers/Workers.h @@ -202,6 +202,7 @@ enum WorkerPreference WORKERPREF_DOM_WORKERNOTIFICATION, // dom.webnotifications.workers.enabled WORKERPREF_DOM_CACHES_TESTING, // dom.caches.testing.enabled WORKERPREF_SERVICEWORKERS_TESTING, // dom.serviceWorkers.testing.enabled + WORKERPREF_INTERCEPTION_OPAQUE_ENABLED, // dom.serviceWorkers.interception.opaque.enabled WORKERPREF_COUNT }; diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index c211033d0f2..bb1a6361921 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -135,6 +135,12 @@ pref("dom.workers.sharedWorkers.enabled", true); // Service workers pref("dom.serviceWorkers.enabled", false); +// Allow service workers to intercept network requests using the fetch event +pref("dom.serviceWorkers.interception.enabled", false); + +// Allow service workers to intercept opaque (cross origin) responses +pref("dom.serviceWorkers.interception.opaque.enabled", false); + // Whether nonzero values can be returned from performance.timing.* pref("dom.enable_performance", true);