/* 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 mozilla_dom_workerinternals_JSSettings_h #define mozilla_dom_workerinternals_JSSettings_h #include #include "js/ContextOptions.h" #include "js/GCAPI.h" #include "js/RealmOptions.h" #include "mozilla/Maybe.h" #include "nsString.h" #include "nsTArray.h" namespace mozilla::dom::workerinternals { // Random unique constant to facilitate JSPrincipal debugging const uint32_t kJSPrincipalsDebugToken = 0x7e2df9d2; struct JSSettings { struct JSGCSetting { JSGCParamKey key; // Nothing() represents the default value, the result of calling // JS_ResetGCParameter. Maybe value; // For the IndexOf call below. bool operator==(JSGCParamKey k) const { return key == k; } }; JS::RealmOptions chromeRealmOptions; JS::RealmOptions contentRealmOptions; CopyableTArray gcSettings; JS::ContextOptions contextOptions; #ifdef JS_GC_ZEAL uint8_t gcZeal = 0; uint32_t gcZealFrequency = 0; #endif // Returns whether there was a change in the setting. bool ApplyGCSetting(JSGCParamKey aKey, Maybe aValue) { size_t index = gcSettings.IndexOf(aKey); if (index == gcSettings.NoIndex) { gcSettings.AppendElement(JSGCSetting{aKey, aValue}); return true; } if (gcSettings[index].value != aValue) { gcSettings[index].value = std::move(aValue); return true; } return false; } void CopyOverrideStrings() { chromeRealmOptions.behaviors().copyOverrideStrings(); contentRealmOptions.behaviors().copyOverrideStrings(); } }; } // namespace mozilla::dom::workerinternals #endif // mozilla_dom_workerinternals_JSSettings_h