diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp index 239207efc9..6138a3c6de 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -299,6 +299,7 @@ LoadContextOptions(const char* aPrefName, void* /* aClosure */) .setNativeRegExp(GetWorkerPref(NS_LITERAL_CSTRING("native_regexp"))) .setAsyncStack(GetWorkerPref(NS_LITERAL_CSTRING("asyncstack"))) .setWerror(GetWorkerPref(NS_LITERAL_CSTRING("werror"))) + .setStreams(GetWorkerPref(NS_LITERAL_CSTRING("streams"))) .setExtraWarnings(GetWorkerPref(NS_LITERAL_CSTRING("strict"))) .setArrayProtoValues(GetWorkerPref( NS_LITERAL_CSTRING("array_prototype_values"))); diff --git a/js/src/jsapi.h b/js/src/jsapi.h index f80d2602e6..a8e28a587b 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -1161,6 +1161,16 @@ class JS_PUBLIC_API(ContextOptions) { return *this; } + bool streams() const { return streams_; } + ContextOptions& setStreams(bool flag) { + streams_ = flag; + return *this; + } + ContextOptions& toggleStreams() { + streams_ = !streams_; + return *this; + } + bool nativeRegExp() const { return nativeRegExp_; } ContextOptions& setNativeRegExp(bool flag) { nativeRegExp_ = flag; @@ -1243,6 +1253,7 @@ class JS_PUBLIC_API(ContextOptions) { bool strictMode_ : 1; bool extraWarnings_ : 1; bool arrayProtoValues_ : 1; + bool streams_ : 1; }; JS_PUBLIC_API(ContextOptions&) diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index a77e128a52..1f89e38482 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -318,6 +318,7 @@ static bool enableUnboxedArrays = false; static bool enableSharedMemory = SHARED_MEMORY_DEFAULT; static bool enableWasmAlwaysBaseline = false; static bool enableArrayProtoValues = true; +static bool enableStreams = false; static bool printTiming = false; static const char* jsCacheDir = nullptr; static const char* jsCacheAsmJSPath = nullptr; @@ -7565,6 +7566,7 @@ SetContextOptions(JSContext* cx, const OptionParser& op) enableUnboxedArrays = op.getBoolOption("unboxed-arrays"); enableWasmAlwaysBaseline = op.getBoolOption("wasm-always-baseline"); enableArrayProtoValues = !op.getBoolOption("no-array-proto-values"); + enableStreams = op.getBoolOption("enable-streams"); JS::ContextOptionsRef(cx).setBaseline(enableBaseline) .setIon(enableIon) @@ -7573,7 +7575,8 @@ SetContextOptions(JSContext* cx, const OptionParser& op) .setWasmAlwaysBaseline(enableWasmAlwaysBaseline) .setNativeRegExp(enableNativeRegExp) .setUnboxedArrays(enableUnboxedArrays) - .setArrayProtoValues(enableArrayProtoValues); + .setArrayProtoValues(enableArrayProtoValues) + .setStreams(enableStreams); if (op.getBoolOption("wasm-check-bce")) jit::JitOptions.wasmAlwaysCheckBounds = true; @@ -7845,7 +7848,8 @@ SetWorkerContextOptions(JSContext* cx) .setWasmAlwaysBaseline(enableWasmAlwaysBaseline) .setNativeRegExp(enableNativeRegExp) .setUnboxedArrays(enableUnboxedArrays) - .setArrayProtoValues(enableArrayProtoValues); + .setArrayProtoValues(enableArrayProtoValues) + .setStreams(enableStreams); cx->setOffthreadIonCompilationEnabled(offthreadCompilation); cx->profilingScripts = enableCodeCoverage || enableDisassemblyDumps; @@ -8019,6 +8023,7 @@ main(int argc, char** argv, char** envp) || !op.addBoolOption('\0', "wasm-always-baseline", "Enable wasm baseline compiler when possible") || !op.addBoolOption('\0', "wasm-check-bce", "Always generate wasm bounds check, even redundant ones.") || !op.addBoolOption('\0', "no-array-proto-values", "Remove Array.prototype.values") + || !op.addBoolOption('\0', "enable-streams", "Enable WHATWG Streams") #ifdef ENABLE_SHARED_ARRAY_BUFFER || !op.addStringOption('\0', "shared-memory", "on/off", "SharedArrayBuffer and Atomics " diff --git a/js/xpconnect/src/XPCJSContext.cpp b/js/xpconnect/src/XPCJSContext.cpp index e76cd9f9fe..be9a75f799 100644 --- a/js/xpconnect/src/XPCJSContext.cpp +++ b/js/xpconnect/src/XPCJSContext.cpp @@ -1438,6 +1438,8 @@ ReloadPrefsCallback(const char* pref, void* data) bool werror = Preferences::GetBool(JS_OPTIONS_DOT_STR "werror"); bool extraWarnings = Preferences::GetBool(JS_OPTIONS_DOT_STR "strict"); + + bool streams = Preferences::GetBool(JS_OPTIONS_DOT_STR "streams"); bool unboxedObjects = Preferences::GetBool(JS_OPTIONS_DOT_STR "unboxed_objects"); @@ -1463,7 +1465,8 @@ ReloadPrefsCallback(const char* pref, void* data) .setDumpStackOnDebuggeeWouldRun(dumpStackOnDebuggeeWouldRun) .setWerror(werror) .setExtraWarnings(extraWarnings) - .setArrayProtoValues(arrayProtoValues); + .setArrayProtoValues(arrayProtoValues) + .setStreams(streams); JS_SetParallelParsingEnabled(cx, parallelParsing); JS_SetOffthreadIonCompilationEnabled(cx, offthreadIonCompilation); diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index ab9ec4000d..d1e2ddf1e2 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -1334,6 +1334,9 @@ pref("javascript.options.main_thread_stack_quota_cap", 2097152); // Dynamic module import. pref("javascript.options.dynamicImport", true); +// Streams API +pref("javascript.options.streams", false); + // advanced prefs pref("advanced.mailftp", false); pref("image.animation_mode", "normal");