Bug 1579367 - Initialize XPCJSContext explicitly, after loading user prefs. r=kmag

This way we get the correct values for start-up prefs in the parent process.

Differential Revision: https://phabricator.services.mozilla.com/D51061
This commit is contained in:
Jan de Mooij
2019-11-22 12:40:17 +00:00
parent 1175e2f5b3
commit 844ff93d3b
15 changed files with 106 additions and 38 deletions

View File

@@ -85,7 +85,6 @@ using namespace mozilla;
using namespace mozilla::dom;
nsIIOService* nsScriptSecurityManager::sIOService = nullptr;
JSContext* nsScriptSecurityManager::sContext = nullptr;
bool nsScriptSecurityManager::sStrictFileOriginPolicy = true;
namespace {
@@ -1371,22 +1370,28 @@ nsresult nsScriptSecurityManager::Init() {
mSystemPrincipal = system;
return NS_OK;
}
void nsScriptSecurityManager::InitJSCallbacks(JSContext* aCx) {
//-- Register security check callback in the JS engine
// Currently this is used to control access to function.caller
sContext = danger::GetJSContext();
static const JSSecurityCallbacks securityCallbacks = {
ContentSecurityPolicyPermitsJSAction,
JSPrincipalsSubsume,
};
MOZ_ASSERT(!JS_GetSecurityCallbacks(sContext));
JS_SetSecurityCallbacks(sContext, &securityCallbacks);
JS_InitDestroyPrincipalsCallback(sContext, nsJSPrincipals::Destroy);
MOZ_ASSERT(!JS_GetSecurityCallbacks(aCx));
JS_SetSecurityCallbacks(aCx, &securityCallbacks);
JS_InitDestroyPrincipalsCallback(aCx, nsJSPrincipals::Destroy);
JS_SetTrustedPrincipals(sContext, system);
JS_SetTrustedPrincipals(aCx, BasePrincipal::Cast(mSystemPrincipal));
}
return NS_OK;
void nsScriptSecurityManager::ClearJSCallbacks(JSContext* aCx) {
JS_SetSecurityCallbacks(aCx, nullptr);
JS_SetTrustedPrincipals(aCx, nullptr);
}
static StaticRefPtr<nsScriptSecurityManager> gScriptSecMan;
@@ -1404,12 +1409,6 @@ nsScriptSecurityManager::~nsScriptSecurityManager(void) {
}
void nsScriptSecurityManager::Shutdown() {
if (sContext) {
JS_SetSecurityCallbacks(sContext, nullptr);
JS_SetTrustedPrincipals(sContext, nullptr);
sContext = nullptr;
}
NS_IF_RELEASE(sIOService);
BundleHelper::Shutdown();
}