1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef SharedSSLState_h 8 #define SharedSSLState_h 9 10 #include "nsNSSIOLayer.h" 11 12 class nsIObserver; 13 14 namespace mozilla { 15 namespace psm { 16 17 class SharedSSLState { 18 public: 19 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(SharedSSLState) 20 explicit SharedSSLState(uint32_t aTlsFlags = 0); 21 22 static void GlobalInit(); 23 static void GlobalCleanup(); 24 IOLayerHelpers()25 nsSSLIOLayerHelpers& IOLayerHelpers() { return mIOLayerHelpers; } 26 27 // Main-thread only 28 void ResetStoredData(); 29 void NotePrivateBrowsingStatus(); SetOCSPStaplingEnabled(bool staplingEnabled)30 void SetOCSPStaplingEnabled(bool staplingEnabled) { 31 mOCSPStaplingEnabled = staplingEnabled; 32 } SetOCSPMustStapleEnabled(bool mustStapleEnabled)33 void SetOCSPMustStapleEnabled(bool mustStapleEnabled) { 34 mOCSPMustStapleEnabled = mustStapleEnabled; 35 } SetSignedCertTimestampsEnabled(bool signedCertTimestampsEnabled)36 void SetSignedCertTimestampsEnabled(bool signedCertTimestampsEnabled) { 37 mSignedCertTimestampsEnabled = signedCertTimestampsEnabled; 38 } SetNameMatchingMode(BRNameMatchingPolicy::Mode aMode)39 void SetNameMatchingMode(BRNameMatchingPolicy::Mode aMode) { 40 mNameMatchingMode = aMode; 41 } 42 43 // The following methods may be called from any thread 44 bool SocketCreated(); 45 void NoteSocketCreated(); 46 static void NoteCertOverrideServiceInstantiated(); IsOCSPStaplingEnabled()47 bool IsOCSPStaplingEnabled() const { return mOCSPStaplingEnabled; } IsOCSPMustStapleEnabled()48 bool IsOCSPMustStapleEnabled() const { return mOCSPMustStapleEnabled; } IsSignedCertTimestampsEnabled()49 bool IsSignedCertTimestampsEnabled() const { 50 return mSignedCertTimestampsEnabled; 51 } NameMatchingMode()52 BRNameMatchingPolicy::Mode NameMatchingMode() { return mNameMatchingMode; } 53 54 private: 55 ~SharedSSLState(); 56 57 void Cleanup(); 58 59 nsCOMPtr<nsIObserver> mObserver; 60 nsSSLIOLayerHelpers mIOLayerHelpers; 61 62 // True if any sockets have been created that use this shared data. 63 // Requires synchronization between the socket and main threads for 64 // reading/writing. 65 Mutex mMutex; 66 bool mSocketCreated; 67 bool mOCSPStaplingEnabled; 68 bool mOCSPMustStapleEnabled; 69 bool mSignedCertTimestampsEnabled; 70 BRNameMatchingPolicy::Mode mNameMatchingMode; 71 }; 72 73 SharedSSLState* PublicSSLState(); 74 SharedSSLState* PrivateSSLState(); 75 76 } // namespace psm 77 } // namespace mozilla 78 79 #endif 80