Bug 1188062 - Unship Request.context; r=baku

This commit is contained in:
Ehsan Akhgari 2015-07-27 17:57:34 -04:00
Родитель e6798f2427
Коммит aeacbc159a
11 изменённых файлов: 70 добавлений и 1 удалений

Просмотреть файл

@ -14,6 +14,7 @@
#include "mozilla/dom/Fetch.h" #include "mozilla/dom/Fetch.h"
#include "mozilla/dom/Promise.h" #include "mozilla/dom/Promise.h"
#include "mozilla/dom/URL.h" #include "mozilla/dom/URL.h"
#include "mozilla/dom/WorkerPrivate.h"
#include "mozilla/dom/workers/bindings/URL.h" #include "mozilla/dom/workers/bindings/URL.h"
#include "WorkerPrivate.h" #include "WorkerPrivate.h"
@ -42,6 +43,25 @@ Request::~Request()
{ {
} }
// static
bool
Request::RequestContextEnabled(JSContext* aCx, JSObject* aObj)
{
if (NS_IsMainThread()) {
return Preferences::GetBool("dom.requestcontext.enabled", false);
}
using namespace workers;
// Otherwise, check the pref via the WorkerPrivate
WorkerPrivate* workerPrivate = GetWorkerPrivateFromContext(aCx);
if (!workerPrivate) {
return false;
}
return workerPrivate->RequestContextEnabled();
}
already_AddRefed<InternalRequest> already_AddRefed<InternalRequest>
Request::GetInternalRequest() Request::GetInternalRequest()
{ {

Просмотреть файл

@ -34,6 +34,9 @@ class Request final : public nsISupports
public: public:
Request(nsIGlobalObject* aOwner, InternalRequest* aRequest); Request(nsIGlobalObject* aOwner, InternalRequest* aRequest);
static bool
RequestContextEnabled(JSContext* aCx, JSObject* aObj);
JSObject* JSObject*
WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override
{ {

Просмотреть файл

@ -2,7 +2,8 @@ function testScript(script) {
function setupPrefs() { function setupPrefs() {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
SpecialPowers.pushPrefEnv({ SpecialPowers.pushPrefEnv({
"set": [["dom.serviceWorkers.enabled", true], "set": [["dom.requestcontext.enabled", true],
["dom.serviceWorkers.enabled", true],
["dom.serviceWorkers.testing.enabled", true], ["dom.serviceWorkers.testing.enabled", true],
["dom.serviceWorkers.exemptFromPerDomainMax", true]] ["dom.serviceWorkers.exemptFromPerDomainMax", true]]
}, resolve); }, resolve);

Просмотреть файл

@ -35,6 +35,7 @@ skip-if = e10s || buildapp == 'b2g' # Bug 1093357 for e10s, bug 1137683 for b2g
[test_formdataparsing_sw_reroute.html] [test_formdataparsing_sw_reroute.html]
skip-if = buildapp == 'b2g' # Bug 1137683 skip-if = buildapp == 'b2g' # Bug 1137683
[test_request.html] [test_request.html]
[test_request_context.html]
[test_request_sw_reroute.html] [test_request_sw_reroute.html]
skip-if = buildapp == 'b2g' # Bug 1137683 skip-if = buildapp == 'b2g' # Bug 1137683
[test_response.html] [test_response.html]

Просмотреть файл

@ -0,0 +1,19 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE HTML>
<html>
<head>
<title>Make sure that Request.context is not exposed by default</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<script>
var req = new Request("");
ok(!("context" in req), "Request.context should not be exposed by default");
</script>
</body>
</html>

Просмотреть файл

@ -17,6 +17,7 @@ interface Request {
readonly attribute USVString url; readonly attribute USVString url;
[SameObject] readonly attribute Headers headers; [SameObject] readonly attribute Headers headers;
[Func="mozilla::dom::Request::RequestContextEnabled"]
readonly attribute RequestContext context; readonly attribute RequestContext context;
readonly attribute DOMString referrer; readonly attribute DOMString referrer;
readonly attribute RequestMode mode; readonly attribute RequestMode mode;
@ -41,6 +42,8 @@ dictionary RequestInit {
RequestCache cache; RequestCache cache;
}; };
// Gecko currently does not ship RequestContext, so please don't use it in IDL
// that is exposed to script.
enum RequestContext { enum RequestContext {
"audio", "beacon", "cspreport", "download", "embed", "eventsource", "favicon", "fetch", "audio", "beacon", "cspreport", "download", "embed", "eventsource", "favicon", "fetch",
"font", "form", "frame", "hyperlink", "iframe", "image", "imageset", "import", "font", "form", "frame", "hyperlink", "iframe", "image", "imageset", "import",

Просмотреть файл

@ -167,6 +167,7 @@ static_assert(MAX_WORKERS_PER_DOMAIN >= 1,
#define PREF_INTERCEPTION_ENABLED "dom.serviceWorkers.interception.enabled" #define PREF_INTERCEPTION_ENABLED "dom.serviceWorkers.interception.enabled"
#define PREF_INTERCEPTION_OPAQUE_ENABLED "dom.serviceWorkers.interception.opaque.enabled" #define PREF_INTERCEPTION_OPAQUE_ENABLED "dom.serviceWorkers.interception.opaque.enabled"
#define PREF_PUSH_ENABLED "dom.push.enabled" #define PREF_PUSH_ENABLED "dom.push.enabled"
#define PREF_REQUESTCONTEXT_ENABLED "dom.requestcontext.enabled"
namespace { namespace {
@ -1954,6 +1955,10 @@ RuntimeService::Init()
WorkerPrefChanged, WorkerPrefChanged,
PREF_PUSH_ENABLED, PREF_PUSH_ENABLED,
reinterpret_cast<void *>(WORKERPREF_PUSH))) || reinterpret_cast<void *>(WORKERPREF_PUSH))) ||
NS_FAILED(Preferences::RegisterCallbackAndCall(
WorkerPrefChanged,
PREF_REQUESTCONTEXT_ENABLED,
reinterpret_cast<void *>(WORKERPREF_REQUESTCONTEXT))) ||
NS_FAILED(Preferences::RegisterCallback(LoadRuntimeOptions, NS_FAILED(Preferences::RegisterCallback(LoadRuntimeOptions,
PREF_JS_OPTIONS_PREFIX, PREF_JS_OPTIONS_PREFIX,
nullptr)) || nullptr)) ||
@ -2185,6 +2190,10 @@ RuntimeService::Cleanup()
WorkerPrefChanged, WorkerPrefChanged,
PREF_PUSH_ENABLED, PREF_PUSH_ENABLED,
reinterpret_cast<void *>(WORKERPREF_PUSH))) || reinterpret_cast<void *>(WORKERPREF_PUSH))) ||
NS_FAILED(Preferences::UnregisterCallback(
WorkerPrefChanged,
PREF_REQUESTCONTEXT_ENABLED,
reinterpret_cast<void *>(WORKERPREF_REQUESTCONTEXT))) ||
#if DUMP_CONTROLLED_BY_PREF #if DUMP_CONTROLLED_BY_PREF
NS_FAILED(Preferences::UnregisterCallback( NS_FAILED(Preferences::UnregisterCallback(
WorkerPrefChanged, WorkerPrefChanged,
@ -2735,6 +2744,7 @@ RuntimeService::WorkerPrefChanged(const char* aPrefName, void* aClosure)
case WORKERPREF_SERVICEWORKERS: case WORKERPREF_SERVICEWORKERS:
case WORKERPREF_SERVICEWORKERS_TESTING: case WORKERPREF_SERVICEWORKERS_TESTING:
case WORKERPREF_PUSH: case WORKERPREF_PUSH:
case WORKERPREF_REQUESTCONTEXT:
sDefaultPreferences[key] = Preferences::GetBool(aPrefName, false); sDefaultPreferences[key] = Preferences::GetBool(aPrefName, false);
break; break;

Просмотреть файл

@ -1335,6 +1335,13 @@ public:
return mPreferences[WORKERPREF_PUSH]; return mPreferences[WORKERPREF_PUSH];
} }
bool
RequestContextEnabled() const
{
AssertIsOnWorkerThread();
return mPreferences[WORKERPREF_REQUESTCONTEXT];
}
bool bool
OnLine() const OnLine() const
{ {

Просмотреть файл

@ -207,6 +207,7 @@ enum WorkerPreference
WORKERPREF_INTERCEPTION_OPAQUE_ENABLED, // dom.serviceWorkers.interception.opaque.enabled WORKERPREF_INTERCEPTION_OPAQUE_ENABLED, // dom.serviceWorkers.interception.opaque.enabled
WORKERPREF_PERFORMANCE_LOGGING_ENABLED, // dom.performance.enable_user_timing_logging WORKERPREF_PERFORMANCE_LOGGING_ENABLED, // dom.performance.enable_user_timing_logging
WORKERPREF_PUSH, // dom.push.enabled WORKERPREF_PUSH, // dom.push.enabled
WORKERPREF_REQUESTCONTEXT, // dom.requestcontext.enabled
WORKERPREF_COUNT WORKERPREF_COUNT
}; };

Просмотреть файл

@ -68,6 +68,7 @@ onload = function() {
["dom.caches.enabled", true], ["dom.caches.enabled", true],
["dom.image.picture.enabled", true], ["dom.image.picture.enabled", true],
["dom.image.srcset.enabled", true], ["dom.image.srcset.enabled", true],
["dom.requestcontext.enabled", true],
["dom.serviceWorkers.exemptFromPerDomainMax", true], ["dom.serviceWorkers.exemptFromPerDomainMax", true],
["dom.serviceWorkers.interception.enabled", true], ["dom.serviceWorkers.interception.enabled", true],
["dom.serviceWorkers.enabled", true], ["dom.serviceWorkers.enabled", true],

Просмотреть файл

@ -5055,3 +5055,6 @@ pref("memory.report_concurrency", 10);
pref("media.useAudioChannelService", true); pref("media.useAudioChannelService", true);
// Add Mozilla AudioChannel APIs. // Add Mozilla AudioChannel APIs.
pref("media.useAudioChannelAPI", false); pref("media.useAudioChannelAPI", false);
// Expose Request.context. Currently disabled since the spec is in flux.
pref("dom.requestcontext.enabled", false);