/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef js_Prefs_h #define js_Prefs_h
#include"js/PrefsGenerated.h"
// [SMDOC] Prefs // // JS::Prefs is used to make JS preferences defined in StaticPrefList.yaml // available to SpiderMonkey code. // // Adding a Pref // ============= // Adding a new pref is easy. For example, if you're adding a new JS feature, // you could add the following to StaticPrefList.yaml: // // - name: javascript.options.experimental.my_new_feature // type: bool // value: false // mirror: always // set_spidermonkey_pref: startup // // The value of this pref can then be accessed in SpiderMonkey code with // |JS::Prefs::experimental_my_new_feature()|. // // The default pref value in the YAML file applies to all SpiderMonkey builds // (browser, JS shell, jsapi-tests, etc), so by default this feature will be // disabled everywhere. // // To enable your feature, use the |--setpref experimental.my_new_feature=true| // JS shell command line argument, or set the browser pref in about:config. // Because this is a 'startup' pref, a browser restart is required for this to // take effect. // // The rest of this comment describes more advanced use cases. // // Non-startup prefs // ================= // Setting |set_spidermonkey_pref = startup| is recommended for most prefs. // In this case the pref is only set during startup so we don't have to worry // about the pref value changing at runtime. // // However, for some prefs this doesn't work. For instance, the WPT test harness // can set test-specific prefs after startup. To properly update the JS pref in // this case, |set_spidermonkey_pref = always| must be used. This means the // SpiderMonkey pref will be updated whenever it's changed in the browser. // // Setting Prefs // ============= // Embedders can override pref values. For startup prefs, this should only be // done during startup (before calling JS_Init*) to avoid races with worker // threads and to avoid confusing code with unexpected pref changes: // // JS::Prefs::setAtStartup_experimental_my_new_feature(true); // // Non-startup prefs can also be changed after startup: // // JS::Prefs::set_experimental_my_new_feature(true); // // JS Shell Prefs // ============== // The JS shell |--list-prefs| command line flag will print a list of all of the // available JS prefs and their current values. // // To change a pref, use |--setpref name=value|, for example // |--setpref experimental.my_new_feature=true|. // // It's also possible to add a custom shell flag. In this case you have to // override the pref value yourself based on this flag. // // Testing Functions // ================= // The |getAllPrefNames()| function will return an array with all JS pref names. // // The |getPrefValue(name)| function can be used to look up the value of the // given pref. For example, use |getPrefValue("experimental.my_new_feature")| // for the pref defined above.
namespace JS {
class Prefs { // For each pref, define a static |pref_| member.
JS_PREF_CLASS_FIELDS;
/** * Specification for whether weak refs should be enabled and if so whether the * FinalizationRegistry.cleanupSome method should be present.
*/ enumclass WeakRefSpecifier {
Disabled,
EnabledWithCleanupSome,
EnabledWithoutCleanupSome
};
inline WeakRefSpecifier GetWeakRefsEnabled() { if (!Prefs::weakrefs()) { return WeakRefSpecifier::Disabled;
} if (Prefs::experimental_weakrefs_expose_cleanupSome()) { return WeakRefSpecifier::EnabledWithCleanupSome;
} return WeakRefSpecifier::EnabledWithoutCleanupSome;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.