Skip to content

Commit

Permalink
Bug 1272697 - Part 2: Add runtime pref to enable streams. r=baku,jonco
Browse files Browse the repository at this point in the history
MozReview-Commit-ID: 5OSxbcd3jQB
  • Loading branch information
tschneidereit committed Jul 28, 2017
1 parent 91b919e commit b7c3338
Show file tree
Hide file tree
Showing 15 changed files with 77 additions and 0 deletions.
4 changes: 4 additions & 0 deletions dom/base/nsFrameMessageManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1713,6 +1713,10 @@ nsMessageManagerScriptExecutor::InitChildGlobalInternal(
options.creationOptions().setSharedMemoryAndAtomicsEnabled(true);
}

if (xpc::DOMStreamsEnabled()) {
options.creationOptions().setStreamsEnabled(true);
}

nsCOMPtr<nsIXPConnectJSObjectHolder> globalHolder;
nsresult rv =
xpc->InitClassesWithNewWrappedGlobal(cx, aScope, mPrincipal,
Expand Down
3 changes: 3 additions & 0 deletions dom/bindings/BindingUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -3106,6 +3106,9 @@ CreateGlobal(JSContext* aCx, T* aNative, nsWrapperCache* aCache,
if (xpc::SharedMemoryEnabled()) {
aOptions.creationOptions().setSharedMemoryAndAtomicsEnabled(true);
}
if (xpc::DOMStreamsEnabled()) {
aOptions.creationOptions().setStreamsEnabled(true);
}

aGlobal.set(JS_NewGlobalObject(aCx, aClass, aPrincipal,
JS::DontFireOnNewGlobalHook, aOptions));
Expand Down
1 change: 1 addition & 0 deletions dom/ipc/ContentPrefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ const char* mozilla::dom::ContentPrefs::gInitPrefs[] = {
"dom.performance.enable_notify_performance_timing",
"dom.performance.enable_user_timing_logging",
"dom.storage.testing",
"dom.streams.enabled",
"dom.url.encode_decode_hash",
"dom.url.getters_decode_hash",
"dom.use_watchdog",
Expand Down
2 changes: 2 additions & 0 deletions dom/workers/WorkerScope.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -545,9 +545,11 @@ DedicatedWorkerGlobalScope::WrapGlobalObject(JSContext* aCx,
.extraWarningsOverride().set(extraWarnings);

const bool sharedMemoryEnabled = xpc::SharedMemoryEnabled();
const bool domStreamsEnabled = xpc::DOMStreamsEnabled();

JS::CompartmentCreationOptions& creationOptions = options.creationOptions();
creationOptions.setSharedMemoryAndAtomicsEnabled(sharedMemoryEnabled);
creationOptions.setStreamsEnabled(domStreamsEnabled);

return DedicatedWorkerGlobalScopeBinding::Wrap(aCx, this, this,
options,
Expand Down
2 changes: 2 additions & 0 deletions ipc/testshell/XPCShellEnvironment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,8 @@ XPCShellEnvironment::Init()
options.behaviors().setVersion(JSVERSION_LATEST);
if (xpc::SharedMemoryEnabled())
options.creationOptions().setSharedMemoryAndAtomicsEnabled(true);
if (xpc::DOMStreamsEnabled())
options.creationOptions().setStreamsEnabled(true);

nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
rv = xpc->InitClassesWithNewWrappedGlobal(cx,
Expand Down
19 changes: 19 additions & 0 deletions js/src/jsapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1897,6 +1897,25 @@ JS::CompartmentCreationOptions::setSharedMemoryAndAtomicsEnabled(bool flag)
return *this;
}

bool
JS::CompartmentCreationOptions::getStreamsEnabled() const
{
#if defined(ENABLE_STREAMS)
return streamsEnabled_;
#else
return false;
#endif
}

JS::CompartmentCreationOptions&
JS::CompartmentCreationOptions::setStreamsEnabled(bool flag)
{
#if defined(ENABLE_STREAMS)
streamsEnabled_ = flag;
#endif
return *this;
}

JS::CompartmentBehaviors&
JS::CompartmentBehaviorsRef(JSCompartment* compartment)
{
Expand Down
5 changes: 5 additions & 0 deletions js/src/jsapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -2325,6 +2325,7 @@ class JS_PUBLIC_API(CompartmentCreationOptions)
cloneSingletons_(false),
experimentalNumberFormatFormatToPartsEnabled_(false),
sharedMemoryAndAtomics_(false),
streamsEnabled_(false),
secureContext_(false)
{}

Expand Down Expand Up @@ -2408,6 +2409,9 @@ class JS_PUBLIC_API(CompartmentCreationOptions)
bool getSharedMemoryAndAtomicsEnabled() const;
CompartmentCreationOptions& setSharedMemoryAndAtomicsEnabled(bool flag);

bool getStreamsEnabled() const;
CompartmentCreationOptions& setStreamsEnabled(bool flag);

// This flag doesn't affect JS engine behavior. It is used by Gecko to
// mark whether content windows and workers are "Secure Context"s. See
// https://w3c.github.io/webappsec-secure-contexts/
Expand All @@ -2429,6 +2433,7 @@ class JS_PUBLIC_API(CompartmentCreationOptions)
bool cloneSingletons_;
bool experimentalNumberFormatFormatToPartsEnabled_;
bool sharedMemoryAndAtomics_;
bool streamsEnabled_;
bool secureContext_;
};

Expand Down
19 changes: 19 additions & 0 deletions js/src/shell/js.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ static bool enableWasm = false;
static bool enableNativeRegExp = false;
static bool enableUnboxedArrays = false;
static bool enableSharedMemory = SHARED_MEMORY_DEFAULT;
static bool enableStreams = true;
static bool enableWasmAlwaysBaseline = false;
static bool enableAsyncStacks = false;
#ifdef JS_GC_ZEAL
Expand Down Expand Up @@ -3146,6 +3147,7 @@ SetStandardCompartmentOptions(JS::CompartmentOptions& options)
{
options.behaviors().setVersion(JSVERSION_DEFAULT);
options.creationOptions().setSharedMemoryAndAtomicsEnabled(enableSharedMemory);
options.creationOptions().setStreamsEnabled(enableStreams);
}

static JSObject*
Expand Down Expand Up @@ -8030,6 +8032,17 @@ SetContextOptions(JSContext* cx, const OptionParser& op)
}
#endif

#ifdef ENABLE_STREAMS
if (const char* str = op.getStringOption("streams")) {
if (strcmp(str, "off") == 0)
enableStreams = false;
else if (strcmp(str, "on") == 0)
enableStreams = true;
else
return OptionFailure("streams", str);
}
#endif

#if defined(JS_CODEGEN_ARM)
if (const char* str = op.getStringOption("arm-hwcap"))
jit::ParseARMHwCapFlags(str);
Expand Down Expand Up @@ -8313,6 +8326,12 @@ main(int argc, char** argv, char** envp)
"(default: off, on to enable)"
# endif
)
#endif
#ifdef ENABLE_STREAMS
|| !op.addStringOption('\0', "streams", "on/off",
"WHATWG Streams "
"(default: on, off to disable)"
)
#endif
|| !op.addStringOption('\0', "cache-ir-stubs", "on/off",
"Use CacheIR stubs (default: on, off to disable)")
Expand Down
3 changes: 3 additions & 0 deletions js/xpconnect/loader/mozJSComponentLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,9 @@ mozJSComponentLoader::CreateLoaderGlobal(JSContext* aCx,
if (xpc::SharedMemoryEnabled())
options.creationOptions().setSharedMemoryAndAtomicsEnabled(true);

if (xpc::DOMStreamsEnabled())
options.creationOptions().setStreamsEnabled(true);

// Defer firing OnNewGlobalObject until after the __URI__ property has
// been defined so the JS debugger can tell what module the global is
// for
Expand Down
3 changes: 3 additions & 0 deletions js/xpconnect/src/Sandbox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1072,6 +1072,9 @@ xpc::CreateSandboxObject(JSContext* cx, MutableHandleValue vp, nsISupports* prin
if (xpc::SharedMemoryEnabled())
creationOptions.setSharedMemoryAndAtomicsEnabled(true);

if (xpc::DOMStreamsEnabled())
creationOptions.setStreamsEnabled(true);

if (options.sameZoneAs)
creationOptions.setExistingZone(js::UncheckedUnwrap(options.sameZoneAs));
else if (options.freshZone)
Expand Down
6 changes: 6 additions & 0 deletions js/xpconnect/src/XPCJSContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,11 @@ static mozilla::Atomic<bool> sSharedMemoryEnabled(false);
bool
xpc::SharedMemoryEnabled() { return sSharedMemoryEnabled; }

static mozilla::Atomic<bool> sDOMStreamsEnabled(false);

bool
xpc::DOMStreamsEnabled() { return sDOMStreamsEnabled; }

static void
ReloadPrefsCallback(const char* pref, void* data)
{
Expand Down Expand Up @@ -648,6 +653,7 @@ ReloadPrefsCallback(const char* pref, void* data)
bool extraWarnings = Preferences::GetBool(JS_OPTIONS_DOT_STR "strict");

sSharedMemoryEnabled = Preferences::GetBool(JS_OPTIONS_DOT_STR "shared_memory");
sDOMStreamsEnabled = Preferences::GetBool("dom.streams.enabled");

#ifdef DEBUG
sExtraWarningsForSystemJS = Preferences::GetBool(JS_OPTIONS_DOT_STR "strict.debug");
Expand Down
2 changes: 2 additions & 0 deletions js/xpconnect/src/XPCShellImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1435,6 +1435,8 @@ XRE_XPCShellMain(int argc, char** argv, char** envp,
options.creationOptions().setNewZoneInSystemZoneGroup();
if (xpc::SharedMemoryEnabled())
options.creationOptions().setSharedMemoryAndAtomicsEnabled(true);
if (xpc::DOMStreamsEnabled())
options.creationOptions().setStreamsEnabled(true);
options.behaviors().setVersion(JSVERSION_LATEST);
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
rv = nsXPConnect::XPConnect()->
Expand Down
2 changes: 2 additions & 0 deletions js/xpconnect/src/XPCWrappedNative.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ XPCWrappedNative::WrapNewGlobal(xpcObjectHelper& nativeHelper,
aOptions.creationOptions().setTrace(XPCWrappedNative::Trace);
if (xpc::SharedMemoryEnabled())
aOptions.creationOptions().setSharedMemoryAndAtomicsEnabled(true);
if (xpc::DOMStreamsEnabled())
aOptions.creationOptions().setStreamsEnabled(true);
RootedObject global(cx, xpc::CreateGlobalObject(cx, clasp, principal, aOptions));
if (!global)
return NS_ERROR_FAILURE;
Expand Down
3 changes: 3 additions & 0 deletions js/xpconnect/src/xpcpublic.h
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,9 @@ ShouldDiscardSystemSource();
bool
SharedMemoryEnabled();

bool
DOMStreamsEnabled();

bool
SetAddonInterposition(const nsACString& addonId, nsIAddonInterposition* interposition);

Expand Down
3 changes: 3 additions & 0 deletions modules/libpref/init/all.js
Original file line number Diff line number Diff line change
Expand Up @@ -1480,6 +1480,9 @@ pref("javascript.options.shared_memory", true);
pref("javascript.options.throw_on_debuggee_would_run", false);
pref("javascript.options.dump_stack_on_debuggee_would_run", false);

// Streams API
pref("dom.streams.enabled", false);

// advanced prefs
pref("advanced.mailftp", false);
pref("image.animation_mode", "normal");
Expand Down

0 comments on commit b7c3338

Please sign in to comment.