WeakCryptoOverride.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* This Source Code Form is subject to the terms of the Mozilla Public
  3. * License, v. 2.0. If a copy of the MPL was not distributed with this
  4. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  5. #include "WeakCryptoOverride.h"
  6. #include "MainThreadUtils.h"
  7. #include "SharedSSLState.h"
  8. #include "nss.h"
  9. using namespace mozilla;
  10. using namespace mozilla::psm;
  11. NS_IMPL_ISUPPORTS(WeakCryptoOverride,
  12. nsIWeakCryptoOverride)
  13. WeakCryptoOverride::WeakCryptoOverride()
  14. {
  15. }
  16. WeakCryptoOverride::~WeakCryptoOverride()
  17. {
  18. }
  19. NS_IMETHODIMP
  20. WeakCryptoOverride::AddWeakCryptoOverride(const nsACString& aHostName,
  21. bool aPrivate, bool aTemporary)
  22. {
  23. if (!NS_IsMainThread()) {
  24. return NS_ERROR_NOT_SAME_THREAD;
  25. }
  26. SharedSSLState* sharedState = aPrivate ? PrivateSSLState()
  27. : PublicSSLState();
  28. if (!sharedState) {
  29. return NS_ERROR_NOT_AVAILABLE;
  30. }
  31. const nsPromiseFlatCString& host = PromiseFlatCString(aHostName);
  32. sharedState->IOLayerHelpers().addInsecureFallbackSite(host, aTemporary);
  33. return NS_OK;
  34. }
  35. NS_IMETHODIMP
  36. WeakCryptoOverride::RemoveWeakCryptoOverride(const nsACString& aHostName,
  37. int32_t aPort, bool aPrivate)
  38. {
  39. if (!NS_IsMainThread()) {
  40. return NS_ERROR_NOT_SAME_THREAD;
  41. }
  42. SharedSSLState* sharedState = aPrivate ? PrivateSSLState()
  43. : PublicSSLState();
  44. if (!sharedState) {
  45. return NS_ERROR_NOT_AVAILABLE;
  46. }
  47. const nsPromiseFlatCString& host = PromiseFlatCString(aHostName);
  48. sharedState->IOLayerHelpers().removeInsecureFallbackSite(host, aPort);
  49. // Some servers will fail with SSL_ERROR_ILLEGAL_PARAMETER_ALERT
  50. // unless the session cache is cleared.
  51. SSL_ClearSessionCache();
  52. return NS_OK;
  53. }