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