parent
							
								
									2ce85f9016
								
							
						
					
					
						commit
						4ac98daa3c
					
				|  | @ -1 +1 @@ | ||||||
| 1066 | 1067 | ||||||
|  |  | ||||||
|  | @ -1996,14 +1996,15 @@ index 0000000000000000000000000000000000000000..ba34976ad05e7f5f1a99777f76ac08b1 | ||||||
| +this.SimpleChannel = SimpleChannel;
 | +this.SimpleChannel = SimpleChannel;
 | ||||||
| diff --git a/juggler/TargetRegistry.js b/juggler/TargetRegistry.js
 | diff --git a/juggler/TargetRegistry.js b/juggler/TargetRegistry.js
 | ||||||
| new file mode 100644 | new file mode 100644 | ||||||
| index 0000000000000000000000000000000000000000..dcf03385589acc29c7fe0f02f912d40ab7efb76f
 | index 0000000000000000000000000000000000000000..b74ea28f1ee7bbfeb6ea3fa9c5a4ff244ac0f6ac
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/juggler/TargetRegistry.js
 | +++ b/juggler/TargetRegistry.js
 | ||||||
| @@ -0,0 +1,479 @@
 | @@ -0,0 +1,492 @@
 | ||||||
| +const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
 | +const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
 | ||||||
| +const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
 | +const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
 | ||||||
| +const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
 | +const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
 | ||||||
| +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
 | +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
 | ||||||
|  | +const {Preferences} = ChromeUtils.import("resource://gre/modules/Preferences.jsm");
 | ||||||
| +const {ContextualIdentityService} = ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm");
 | +const {ContextualIdentityService} = ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm");
 | ||||||
| +const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
 | +const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
 | ||||||
| +const {PageHandler} = ChromeUtils.import("chrome://juggler/content/protocol/PageHandler.js");
 | +const {PageHandler} = ChromeUtils.import("chrome://juggler/content/protocol/PageHandler.js");
 | ||||||
|  | @ -2327,6 +2328,18 @@ index 0000000000000000000000000000000000000000..dcf03385589acc29c7fe0f02f912d40a | ||||||
| +    this.options.scriptsToEvaluateOnNewDocument = [];
 | +    this.options.scriptsToEvaluateOnNewDocument = [];
 | ||||||
| +    this.options.bindings = [];
 | +    this.options.bindings = [];
 | ||||||
| +    this.pages = new Set();
 | +    this.pages = new Set();
 | ||||||
|  | +
 | ||||||
|  | +    if (this.options.ignoreHTTPSErrors) {
 | ||||||
|  | +      Preferences.set("network.stricttransportsecurity.preloadlist", false);
 | ||||||
|  | +      Preferences.set("security.cert_pinning.enforcement_level", 0);
 | ||||||
|  | +
 | ||||||
|  | +      const certOverrideService = Cc[
 | ||||||
|  | +        "@mozilla.org/security/certoverride;1"
 | ||||||
|  | +      ].getService(Ci.nsICertOverrideService);
 | ||||||
|  | +      certOverrideService.setDisableAllSecurityChecksAndLetAttackersInterceptMyData(
 | ||||||
|  | +        true, this.userContextId
 | ||||||
|  | +      );
 | ||||||
|  | +    }
 | ||||||
| +  }
 | +  }
 | ||||||
| +
 | +
 | ||||||
| +  destroy() {
 | +  destroy() {
 | ||||||
|  | @ -6133,10 +6146,10 @@ index 0000000000000000000000000000000000000000..78b6601b91d0b7fcda61114e6846aa07 | ||||||
| +this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
 | +this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
 | ||||||
| diff --git a/juggler/protocol/Protocol.js b/juggler/protocol/Protocol.js
 | diff --git a/juggler/protocol/Protocol.js b/juggler/protocol/Protocol.js
 | ||||||
| new file mode 100644 | new file mode 100644 | ||||||
| index 0000000000000000000000000000000000000000..4028ed2f4c87e869da15103e936f85e887d769a1
 | index 0000000000000000000000000000000000000000..41bd5059dafd9b9f192f8792110e8e3a5d1c7b20
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/juggler/protocol/Protocol.js
 | +++ b/juggler/protocol/Protocol.js
 | ||||||
| @@ -0,0 +1,779 @@
 | @@ -0,0 +1,780 @@
 | ||||||
| +const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
 | +const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
 | ||||||
| +
 | +
 | ||||||
| +// Protocol-specific types.
 | +// Protocol-specific types.
 | ||||||
|  | @ -6349,6 +6362,7 @@ index 0000000000000000000000000000000000000000..4028ed2f4c87e869da15103e936f85e8 | ||||||
| +        removeOnDetach: t.Optional(t.Boolean),
 | +        removeOnDetach: t.Optional(t.Boolean),
 | ||||||
| +        userAgent: t.Optional(t.String),
 | +        userAgent: t.Optional(t.String),
 | ||||||
| +        bypassCSP: t.Optional(t.Boolean),
 | +        bypassCSP: t.Optional(t.Boolean),
 | ||||||
|  | +        ignoreHTTPSErrors: t.Optional(t.Boolean),
 | ||||||
| +        javaScriptDisabled: t.Optional(t.Boolean),
 | +        javaScriptDisabled: t.Optional(t.Boolean),
 | ||||||
| +        viewport: t.Optional(pageTypes.Viewport),
 | +        viewport: t.Optional(pageTypes.Viewport),
 | ||||||
| +        locale: t.Optional(t.String),
 | +        locale: t.Optional(t.String),
 | ||||||
|  | @ -6992,19 +7006,105 @@ index 5bdd250f8061a2fc1f755a4ea82b91e525b88131..9d5d3b92429abc0a8d570b4ea6db67e2 | ||||||
|    nsresult rv = NS_OK; |    nsresult rv = NS_OK; | ||||||
|    nsCOMPtr<nsIContentSecurityPolicy> preloadCsp = mDocument->GetPreloadCsp(); |    nsCOMPtr<nsIContentSecurityPolicy> preloadCsp = mDocument->GetPreloadCsp(); | ||||||
|    if (!preloadCsp) { |    if (!preloadCsp) { | ||||||
|  | diff --git a/security/manager/ssl/SSLServerCertVerification.cpp b/security/manager/ssl/SSLServerCertVerification.cpp
 | ||||||
|  | index d2014f0b1b6f3f02489d3259dd89446a25e4570f..61ceaa4da3f7dcc93e88521e0b0538c99968730e 100644
 | ||||||
|  | --- a/security/manager/ssl/SSLServerCertVerification.cpp
 | ||||||
|  | +++ b/security/manager/ssl/SSLServerCertVerification.cpp
 | ||||||
|  | @@ -1296,8 +1296,8 @@ PRErrorCode AuthCertificateParseResults(
 | ||||||
|  |          return SEC_ERROR_NO_MEMORY; | ||||||
|  |        } | ||||||
|  |        nsresult rv = overrideService->HasMatchingOverride( | ||||||
|  | -          aHostName, aPort, nssCert, &overrideBits, &isTemporaryOverride,
 | ||||||
|  | -          &haveOverride);
 | ||||||
|  | +          aHostName, aPort, aOriginAttributes.mUserContextId, nssCert,
 | ||||||
|  | +          &overrideBits, &isTemporaryOverride, &haveOverride);
 | ||||||
|  |        if (NS_SUCCEEDED(rv) && haveOverride) { | ||||||
|  |          // remove the errors that are already overriden | ||||||
|  |          remainingDisplayErrors &= ~overrideBits; | ||||||
| diff --git a/security/manager/ssl/nsCertOverrideService.cpp b/security/manager/ssl/nsCertOverrideService.cpp
 | diff --git a/security/manager/ssl/nsCertOverrideService.cpp b/security/manager/ssl/nsCertOverrideService.cpp
 | ||||||
| index e27b18249b9dca7fddbd0c45b5af383e75ef3143..cc352957002985d0d168b7045186b389cbc911fb 100644
 | index e27b18249b9dca7fddbd0c45b5af383e75ef3143..371f2c7286dcc03f5759060009f09cb96afe9aa4 100644
 | ||||||
| --- a/security/manager/ssl/nsCertOverrideService.cpp
 | --- a/security/manager/ssl/nsCertOverrideService.cpp
 | ||||||
| +++ b/security/manager/ssl/nsCertOverrideService.cpp
 | +++ b/security/manager/ssl/nsCertOverrideService.cpp
 | ||||||
| @@ -633,7 +633,7 @@ static bool IsDebugger() {
 | @@ -413,13 +413,20 @@ nsCertOverrideService::RememberTemporaryValidityOverrideUsingFingerprint(
 | ||||||
|  |   | ||||||
|  |  NS_IMETHODIMP | ||||||
|  |  nsCertOverrideService::HasMatchingOverride(const nsACString& aHostName, | ||||||
|  | -                                           int32_t aPort, nsIX509Cert* aCert,
 | ||||||
|  | +                                           int32_t aPort,
 | ||||||
|  | +                                           uint32_t aUserContextId,
 | ||||||
|  | +                                           nsIX509Cert* aCert,
 | ||||||
|  |                                             uint32_t* aOverrideBits, | ||||||
|  |                                             bool* aIsTemporary, bool* _retval) { | ||||||
|  |    bool disableAllSecurityCheck = false; | ||||||
|  |    { | ||||||
|  |      MutexAutoLock lock(mMutex); | ||||||
|  | -    disableAllSecurityCheck = mDisableAllSecurityCheck;
 | ||||||
|  | +    if (aUserContextId) {
 | ||||||
|  | +      disableAllSecurityCheck = mUserContextIdsWithDisabledSecurityChecks.has(
 | ||||||
|  | +          aUserContextId);
 | ||||||
|  | +    } else {
 | ||||||
|  | +      disableAllSecurityCheck = mDisableAllSecurityCheck;
 | ||||||
|  | +    }
 | ||||||
|  |    } | ||||||
|  |    if (disableAllSecurityCheck) { | ||||||
|  |      nsCertOverride::OverrideBits all = nsCertOverride::OverrideBits::Untrusted | | ||||||
|  | @@ -632,12 +639,21 @@ static bool IsDebugger() {
 | ||||||
|  |   | ||||||
|  NS_IMETHODIMP |  NS_IMETHODIMP | ||||||
|  nsCertOverrideService:: |  nsCertOverrideService:: | ||||||
|      SetDisableAllSecurityChecksAndLetAttackersInterceptMyData(bool aDisable) { | -    SetDisableAllSecurityChecksAndLetAttackersInterceptMyData(bool aDisable) {
 | ||||||
| -  if (!(PR_GetEnv("XPCSHELL_TEST_PROFILE_DIR") || IsDebugger())) {
 | -  if (!(PR_GetEnv("XPCSHELL_TEST_PROFILE_DIR") || IsDebugger())) {
 | ||||||
|  | +    SetDisableAllSecurityChecksAndLetAttackersInterceptMyData(
 | ||||||
|  | +      bool aDisable, uint32_t aUserContextId) {
 | ||||||
| +  if (false /* juggler hacks */ && !(PR_GetEnv("XPCSHELL_TEST_PROFILE_DIR") || IsDebugger())) {
 | +  if (false /* juggler hacks */ && !(PR_GetEnv("XPCSHELL_TEST_PROFILE_DIR") || IsDebugger())) {
 | ||||||
|      return NS_ERROR_NOT_AVAILABLE; |      return NS_ERROR_NOT_AVAILABLE; | ||||||
|    } |    } | ||||||
|   |   | ||||||
|  |    MutexAutoLock lock(mMutex); | ||||||
|  | +  if (aUserContextId) {
 | ||||||
|  | +    if (aDisable) {
 | ||||||
|  | +      mozilla::Unused << mUserContextIdsWithDisabledSecurityChecks.put(aUserContextId);
 | ||||||
|  | +    } else {
 | ||||||
|  | +      mUserContextIdsWithDisabledSecurityChecks.remove(aUserContextId);
 | ||||||
|  | +    }
 | ||||||
|  | +    return NS_OK;
 | ||||||
|  | +  }
 | ||||||
|  |    mDisableAllSecurityCheck = aDisable; | ||||||
|  |    return NS_OK; | ||||||
|  |  } | ||||||
|  | diff --git a/security/manager/ssl/nsCertOverrideService.h b/security/manager/ssl/nsCertOverrideService.h
 | ||||||
|  | index b8702a933adc0c9c59e337a4fdb626681abf9797..b60b4836edcc7c88ca9a99d01cc0fb3e04b4e518 100644
 | ||||||
|  | --- a/security/manager/ssl/nsCertOverrideService.h
 | ||||||
|  | +++ b/security/manager/ssl/nsCertOverrideService.h
 | ||||||
|  | @@ -133,6 +133,7 @@ class nsCertOverrideService final : public nsICertOverrideService,
 | ||||||
|  |    ~nsCertOverrideService(); | ||||||
|  |   | ||||||
|  |    bool mDisableAllSecurityCheck; | ||||||
|  | +  mozilla::HashSet<uint32_t> mUserContextIdsWithDisabledSecurityChecks;
 | ||||||
|  |    mozilla::Mutex mMutex; | ||||||
|  |    nsCOMPtr<nsIFile> mSettingsFile; | ||||||
|  |    nsTHashtable<nsCertOverrideEntry> mSettingsTable; | ||||||
|  | diff --git a/security/manager/ssl/nsICertOverrideService.idl b/security/manager/ssl/nsICertOverrideService.idl
 | ||||||
|  | index 6f0f8259b309c0a299c9c80b2943a498b0f1b0e6..03d17899be96bc87dc78f06277e1bd9eb93d08f8 100644
 | ||||||
|  | --- a/security/manager/ssl/nsICertOverrideService.idl
 | ||||||
|  | +++ b/security/manager/ssl/nsICertOverrideService.idl
 | ||||||
|  | @@ -98,6 +98,7 @@ interface nsICertOverrideService : nsISupports {
 | ||||||
|  |    [must_use] | ||||||
|  |    boolean hasMatchingOverride(in AUTF8String aHostName, | ||||||
|  |                                in int32_t aPort, | ||||||
|  | +                              in uint32_t aUserContextId,
 | ||||||
|  |                                in nsIX509Cert aCert, | ||||||
|  |                                out uint32_t aOverrideBits, | ||||||
|  |                                out boolean aIsTemporary); | ||||||
|  | @@ -137,5 +138,7 @@ interface nsICertOverrideService : nsISupports {
 | ||||||
|  |     *  @param aDisable If true, disable all security check and make | ||||||
|  |     *                  hasMatchingOverride always return true. | ||||||
|  |     */ | ||||||
|  | -  void setDisableAllSecurityChecksAndLetAttackersInterceptMyData(in boolean aDisable);
 | ||||||
|  | +  void setDisableAllSecurityChecksAndLetAttackersInterceptMyData(
 | ||||||
|  | +      in boolean aDisable,
 | ||||||
|  | +      [optional] in uint32_t aUserContextId);
 | ||||||
|  |  }; | ||||||
| diff --git a/services/settings/Utils.jsm b/services/settings/Utils.jsm
 | diff --git a/services/settings/Utils.jsm b/services/settings/Utils.jsm
 | ||||||
| index 54eb24bceb10eeccdbdf1d0111f2cc0527cb09f8..0efa6e21ee0f32c0092402db60751c9f0674061d 100644
 | index 54eb24bceb10eeccdbdf1d0111f2cc0527cb09f8..0efa6e21ee0f32c0092402db60751c9f0674061d 100644
 | ||||||
| --- a/services/settings/Utils.jsm
 | --- a/services/settings/Utils.jsm
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue