diff --git a/security/manager/ssl/src/nsNSSComponent.cpp b/security/manager/ssl/src/nsNSSComponent.cpp index ef33196f6feb..0f636895553f 100644 --- a/security/manager/ssl/src/nsNSSComponent.cpp +++ b/security/manager/ssl/src/nsNSSComponent.cpp @@ -157,6 +157,7 @@ bool EnsureNSSInitialized(EnsureNSSOperator op) // call do_GetService for nss component to ensure it. case nssEnsure: case nssEnsureOnChromeOnly: + case nssEnsureChromeOrContent: // We are reentered during nss component creation or nss component is already up if (PR_AtomicAdd(&haveLoaded, 0) || loading) return true; diff --git a/security/manager/ssl/src/nsNSSComponent.h b/security/manager/ssl/src/nsNSSComponent.h index fdb4f47aaa9e..9f52714e292f 100644 --- a/security/manager/ssl/src/nsNSSComponent.h +++ b/security/manager/ssl/src/nsNSSComponent.h @@ -55,7 +55,8 @@ enum EnsureNSSOperator nssInitFailed = 2, nssShutdown = 3, nssEnsure = 100, - nssEnsureOnChromeOnly = 101 + nssEnsureOnChromeOnly = 101, + nssEnsureChromeOrContent = 102, }; extern bool EnsureNSSInitializedChromeOrContent(); diff --git a/security/manager/ssl/src/nsNSSModule.cpp b/security/manager/ssl/src/nsNSSModule.cpp index c78c712f1b29..b1643364f5e0 100644 --- a/security/manager/ssl/src/nsNSSModule.cpp +++ b/security/manager/ssl/src/nsNSSModule.cpp @@ -93,8 +93,14 @@ _InstanceClassChrome##Constructor(nsISupports *aOuter, REFNSIID aIID, \ return rv; \ } \ \ - if (!EnsureNSSInitialized(ensureOperator)) \ + if (!NS_IS_PROCESS_DEFAULT && \ + ensureOperator == nssEnsureChromeOrContent) { \ + if (!EnsureNSSInitializedChromeOrContent()) { \ + return NS_ERROR_FAILURE; \ + } \ + } else if (!EnsureNSSInitialized(ensureOperator)) { \ return NS_ERROR_FAILURE; \ + } \ \ if (NS_IS_PROCESS_DEFAULT) \ NS_NSS_INSTANTIATE(ensureOperator, _InstanceClassChrome); \ @@ -193,7 +199,7 @@ NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCertTree) NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsPkcs11) NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCertPicker) NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssEnsure, nsNTLMAuthModule, InitTest) -NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCryptoHash) +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsureChromeOrContent, nsCryptoHash) NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCryptoHMAC) NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsStreamCipher) NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsKeyObject) diff --git a/security/manager/ssl/tests/unit/test_hash_algorithms_wrap.js b/security/manager/ssl/tests/unit/test_hash_algorithms_wrap.js new file mode 100644 index 000000000000..e3c4ebaafc70 --- /dev/null +++ b/security/manager/ssl/tests/unit/test_hash_algorithms_wrap.js @@ -0,0 +1,3 @@ +function run_test() { + run_test_in_child("test_hash_algorithms.js"); +} diff --git a/security/manager/ssl/tests/unit/xpcshell.ini b/security/manager/ssl/tests/unit/xpcshell.ini index 471dca96ce5f..42381a6a7313 100644 --- a/security/manager/ssl/tests/unit/xpcshell.ini +++ b/security/manager/ssl/tests/unit/xpcshell.ini @@ -22,6 +22,9 @@ support-files = [test_datasignatureverifier.js] [test_hash_algorithms.js] +[test_hash_algorithms_wrap.js] +# bug 1124289 - run_test_in_child violates the sandbox on b2g and android +skip-if = toolkit == 'android' || toolkit == 'gonk' [test_hmac.js] [test_sts_preloadlist_perwindowpb.js]