@@ -1996,14 +1996,15 @@ index 0000000000000000000000000000000000000000..ba34976ad05e7f5f1a99777f76ac08b1
1996
1996
+ this.SimpleChannel = SimpleChannel;
1997
1997
diff --git a/juggler/TargetRegistry.js b/juggler/TargetRegistry.js
1998
1998
new file mode 100644
1999
- index 0000000000000000000000000000000000000000..dcf03385589acc29c7fe0f02f912d40ab7efb76f
1999
+ index 0000000000000000000000000000000000000000..b74ea28f1ee7bbfeb6ea3fa9c5a4ff244ac0f6ac
2000
2000
--- /dev/null
2001
2001
+++ b/juggler/TargetRegistry.js
2002
- @@ -0,0 +1,479 @@
2002
+ @@ -0,0 +1,492 @@
2003
2003
+ const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
2004
2004
+ const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
2005
2005
+ const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
2006
2006
+ const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
2007
+ + const {Preferences} = ChromeUtils.import("resource://gre/modules/Preferences.jsm");
2007
2008
+ const {ContextualIdentityService} = ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm");
2008
2009
+ const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
2009
2010
+ const {PageHandler} = ChromeUtils.import("chrome://juggler/content/protocol/PageHandler.js");
@@ -2327,6 +2328,18 @@ index 0000000000000000000000000000000000000000..dcf03385589acc29c7fe0f02f912d40a
2327
2328
+ this.options.scriptsToEvaluateOnNewDocument = [];
2328
2329
+ this.options.bindings = [];
2329
2330
+ this.pages = new Set();
2331
+ +
2332
+ + if (this.options.ignoreHTTPSErrors) {
2333
+ + Preferences.set("network.stricttransportsecurity.preloadlist", false);
2334
+ + Preferences.set("security.cert_pinning.enforcement_level", 0);
2335
+ +
2336
+ + const certOverrideService = Cc[
2337
+ + "@mozilla.org/security/certoverride;1"
2338
+ + ].getService(Ci.nsICertOverrideService);
2339
+ + certOverrideService.setDisableAllSecurityChecksAndLetAttackersInterceptMyData(
2340
+ + true, this.userContextId
2341
+ + );
2342
+ + }
2330
2343
+ }
2331
2344
+
2332
2345
+ destroy() {
@@ -6133,10 +6146,10 @@ index 0000000000000000000000000000000000000000..78b6601b91d0b7fcda61114e6846aa07
6133
6146
+ this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
6134
6147
diff --git a/juggler/protocol/Protocol.js b/juggler/protocol/Protocol.js
6135
6148
new file mode 100644
6136
- index 0000000000000000000000000000000000000000..4028ed2f4c87e869da15103e936f85e887d769a1
6149
+ index 0000000000000000000000000000000000000000..41bd5059dafd9b9f192f8792110e8e3a5d1c7b20
6137
6150
--- /dev/null
6138
6151
+++ b/juggler/protocol/Protocol.js
6139
- @@ -0,0 +1,779 @@
6152
+ @@ -0,0 +1,780 @@
6140
6153
+ const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
6141
6154
+
6142
6155
+ // Protocol-specific types.
@@ -6349,6 +6362,7 @@ index 0000000000000000000000000000000000000000..4028ed2f4c87e869da15103e936f85e8
6349
6362
+ removeOnDetach: t.Optional(t.Boolean),
6350
6363
+ userAgent: t.Optional(t.String),
6351
6364
+ bypassCSP: t.Optional(t.Boolean),
6365
+ + ignoreHTTPSErrors: t.Optional(t.Boolean),
6352
6366
+ javaScriptDisabled: t.Optional(t.Boolean),
6353
6367
+ viewport: t.Optional(pageTypes.Viewport),
6354
6368
+ locale: t.Optional(t.String),
@@ -6992,19 +7006,105 @@ index 5bdd250f8061a2fc1f755a4ea82b91e525b88131..9d5d3b92429abc0a8d570b4ea6db67e2
6992
7006
nsresult rv = NS_OK;
6993
7007
nsCOMPtr<nsIContentSecurityPolicy> preloadCsp = mDocument->GetPreloadCsp();
6994
7008
if (!preloadCsp) {
7009
+ diff --git a/security/manager/ssl/SSLServerCertVerification.cpp b/security/manager/ssl/SSLServerCertVerification.cpp
7010
+ index d2014f0b1b6f3f02489d3259dd89446a25e4570f..61ceaa4da3f7dcc93e88521e0b0538c99968730e 100644
7011
+ --- a/security/manager/ssl/SSLServerCertVerification.cpp
7012
+ +++ b/security/manager/ssl/SSLServerCertVerification.cpp
7013
+ @@ -1296,8 +1296,8 @@ PRErrorCode AuthCertificateParseResults(
7014
+ return SEC_ERROR_NO_MEMORY;
7015
+ }
7016
+ nsresult rv = overrideService->HasMatchingOverride(
7017
+ - aHostName, aPort, nssCert, &overrideBits, &isTemporaryOverride,
7018
+ - &haveOverride);
7019
+ + aHostName, aPort, aOriginAttributes.mUserContextId, nssCert,
7020
+ + &overrideBits, &isTemporaryOverride, &haveOverride);
7021
+ if (NS_SUCCEEDED(rv) && haveOverride) {
7022
+ // remove the errors that are already overriden
7023
+ remainingDisplayErrors &= ~overrideBits;
6995
7024
diff --git a/security/manager/ssl/nsCertOverrideService.cpp b/security/manager/ssl/nsCertOverrideService.cpp
6996
- index e27b18249b9dca7fddbd0c45b5af383e75ef3143..cc352957002985d0d168b7045186b389cbc911fb 100644
7025
+ index e27b18249b9dca7fddbd0c45b5af383e75ef3143..371f2c7286dcc03f5759060009f09cb96afe9aa4 100644
6997
7026
--- a/security/manager/ssl/nsCertOverrideService.cpp
6998
7027
+++ b/security/manager/ssl/nsCertOverrideService.cpp
6999
- @@ -633,7 +633,7 @@ static bool IsDebugger() {
7028
+ @@ -413,13 +413,20 @@ nsCertOverrideService::RememberTemporaryValidityOverrideUsingFingerprint(
7029
+
7030
+ NS_IMETHODIMP
7031
+ nsCertOverrideService::HasMatchingOverride(const nsACString& aHostName,
7032
+ - int32_t aPort, nsIX509Cert* aCert,
7033
+ + int32_t aPort,
7034
+ + uint32_t aUserContextId,
7035
+ + nsIX509Cert* aCert,
7036
+ uint32_t* aOverrideBits,
7037
+ bool* aIsTemporary, bool* _retval) {
7038
+ bool disableAllSecurityCheck = false;
7039
+ {
7040
+ MutexAutoLock lock(mMutex);
7041
+ - disableAllSecurityCheck = mDisableAllSecurityCheck;
7042
+ + if (aUserContextId) {
7043
+ + disableAllSecurityCheck = mUserContextIdsWithDisabledSecurityChecks.has(
7044
+ + aUserContextId);
7045
+ + } else {
7046
+ + disableAllSecurityCheck = mDisableAllSecurityCheck;
7047
+ + }
7048
+ }
7049
+ if (disableAllSecurityCheck) {
7050
+ nsCertOverride::OverrideBits all = nsCertOverride::OverrideBits::Untrusted |
7051
+ @@ -632,12 +639,21 @@ static bool IsDebugger() {
7052
+
7000
7053
NS_IMETHODIMP
7001
7054
nsCertOverrideService::
7002
- SetDisableAllSecurityChecksAndLetAttackersInterceptMyData(bool aDisable) {
7055
+ - SetDisableAllSecurityChecksAndLetAttackersInterceptMyData(bool aDisable) {
7003
7056
- if (!(PR_GetEnv("XPCSHELL_TEST_PROFILE_DIR") || IsDebugger())) {
7057
+ + SetDisableAllSecurityChecksAndLetAttackersInterceptMyData(
7058
+ + bool aDisable, uint32_t aUserContextId) {
7004
7059
+ if (false /* juggler hacks */ && !(PR_GetEnv("XPCSHELL_TEST_PROFILE_DIR") || IsDebugger())) {
7005
7060
return NS_ERROR_NOT_AVAILABLE;
7006
7061
}
7007
7062
7063
+ MutexAutoLock lock(mMutex);
7064
+ + if (aUserContextId) {
7065
+ + if (aDisable) {
7066
+ + mozilla::Unused << mUserContextIdsWithDisabledSecurityChecks.put(aUserContextId);
7067
+ + } else {
7068
+ + mUserContextIdsWithDisabledSecurityChecks.remove(aUserContextId);
7069
+ + }
7070
+ + return NS_OK;
7071
+ + }
7072
+ mDisableAllSecurityCheck = aDisable;
7073
+ return NS_OK;
7074
+ }
7075
+ diff --git a/security/manager/ssl/nsCertOverrideService.h b/security/manager/ssl/nsCertOverrideService.h
7076
+ index b8702a933adc0c9c59e337a4fdb626681abf9797..b60b4836edcc7c88ca9a99d01cc0fb3e04b4e518 100644
7077
+ --- a/security/manager/ssl/nsCertOverrideService.h
7078
+ +++ b/security/manager/ssl/nsCertOverrideService.h
7079
+ @@ -133,6 +133,7 @@ class nsCertOverrideService final : public nsICertOverrideService,
7080
+ ~nsCertOverrideService();
7081
+
7082
+ bool mDisableAllSecurityCheck;
7083
+ + mozilla::HashSet<uint32_t> mUserContextIdsWithDisabledSecurityChecks;
7084
+ mozilla::Mutex mMutex;
7085
+ nsCOMPtr<nsIFile> mSettingsFile;
7086
+ nsTHashtable<nsCertOverrideEntry> mSettingsTable;
7087
+ diff --git a/security/manager/ssl/nsICertOverrideService.idl b/security/manager/ssl/nsICertOverrideService.idl
7088
+ index 6f0f8259b309c0a299c9c80b2943a498b0f1b0e6..03d17899be96bc87dc78f06277e1bd9eb93d08f8 100644
7089
+ --- a/security/manager/ssl/nsICertOverrideService.idl
7090
+ +++ b/security/manager/ssl/nsICertOverrideService.idl
7091
+ @@ -98,6 +98,7 @@ interface nsICertOverrideService : nsISupports {
7092
+ [must_use]
7093
+ boolean hasMatchingOverride(in AUTF8String aHostName,
7094
+ in int32_t aPort,
7095
+ + in uint32_t aUserContextId,
7096
+ in nsIX509Cert aCert,
7097
+ out uint32_t aOverrideBits,
7098
+ out boolean aIsTemporary);
7099
+ @@ -137,5 +138,7 @@ interface nsICertOverrideService : nsISupports {
7100
+ * @param aDisable If true, disable all security check and make
7101
+ * hasMatchingOverride always return true.
7102
+ */
7103
+ - void setDisableAllSecurityChecksAndLetAttackersInterceptMyData(in boolean aDisable);
7104
+ + void setDisableAllSecurityChecksAndLetAttackersInterceptMyData(
7105
+ + in boolean aDisable,
7106
+ + [optional] in uint32_t aUserContextId);
7107
+ };
7008
7108
diff --git a/services/settings/Utils.jsm b/services/settings/Utils.jsm
7009
7109
index 54eb24bceb10eeccdbdf1d0111f2cc0527cb09f8..0efa6e21ee0f32c0092402db60751c9f0674061d 100644
7010
7110
--- a/services/settings/Utils.jsm
0 commit comments