1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef nsSyncRunnableHelpers_h 6 #define nsSyncRunnableHelpers_h 7 8 #include "nsThreadUtils.h" 9 #include "nsProxyRelease.h" 10 11 #include "mozilla/Monitor.h" 12 #include "msgIOAuth2Module.h" 13 #include "nsIStreamListener.h" 14 #include "nsIImapMailFolderSink.h" 15 #include "nsIImapServerSink.h" 16 #include "nsIImapProtocolSink.h" 17 #include "nsIImapMessageSink.h" 18 19 // The classes in this file proxy method calls to the main thread 20 // synchronously. The main thread must not block on this thread, or a 21 // deadlock condition can occur. 22 23 class StreamListenerProxy final : public nsIStreamListener { 24 public: StreamListenerProxy(nsIStreamListener * receiver)25 explicit StreamListenerProxy(nsIStreamListener* receiver) 26 : mReceiver(receiver) { 27 MOZ_DIAGNOSTIC_ASSERT( 28 receiver, "Null receiver, crash now to get feedback instead of later"); 29 } 30 31 NS_DECL_THREADSAFE_ISUPPORTS 32 NS_DECL_NSIREQUESTOBSERVER 33 NS_DECL_NSISTREAMLISTENER 34 35 private: ~StreamListenerProxy()36 ~StreamListenerProxy() { 37 NS_ReleaseOnMainThread("StreamListenerProxy::mReceiver", 38 mReceiver.forget()); 39 } 40 nsCOMPtr<nsIStreamListener> mReceiver; 41 }; 42 43 class ImapMailFolderSinkProxy final : public nsIImapMailFolderSink { 44 public: ImapMailFolderSinkProxy(nsIImapMailFolderSink * receiver)45 explicit ImapMailFolderSinkProxy(nsIImapMailFolderSink* receiver) 46 : mReceiver(receiver) { 47 MOZ_DIAGNOSTIC_ASSERT( 48 receiver, "Null receiver, crash now to get feedback instead of later"); 49 } 50 51 NS_DECL_THREADSAFE_ISUPPORTS 52 NS_DECL_NSIIMAPMAILFOLDERSINK 53 54 private: ~ImapMailFolderSinkProxy()55 ~ImapMailFolderSinkProxy() { 56 NS_ReleaseOnMainThread("ImapMailFolderSinkProxy::mReceiver", 57 mReceiver.forget()); 58 } 59 nsCOMPtr<nsIImapMailFolderSink> mReceiver; 60 }; 61 62 class ImapServerSinkProxy final : public nsIImapServerSink { 63 public: ImapServerSinkProxy(nsIImapServerSink * receiver)64 explicit ImapServerSinkProxy(nsIImapServerSink* receiver) 65 : mReceiver(receiver) { 66 MOZ_DIAGNOSTIC_ASSERT( 67 receiver, "Null receiver, crash now to get feedback instead of later"); 68 } 69 70 NS_DECL_THREADSAFE_ISUPPORTS 71 NS_DECL_NSIIMAPSERVERSINK 72 73 private: ~ImapServerSinkProxy()74 ~ImapServerSinkProxy() { 75 NS_ReleaseOnMainThread("ImapServerSinkProxy::mReceiver", 76 mReceiver.forget()); 77 } 78 nsCOMPtr<nsIImapServerSink> mReceiver; 79 }; 80 81 class ImapMessageSinkProxy final : public nsIImapMessageSink { 82 public: ImapMessageSinkProxy(nsIImapMessageSink * receiver)83 explicit ImapMessageSinkProxy(nsIImapMessageSink* receiver) 84 : mReceiver(receiver) { 85 MOZ_DIAGNOSTIC_ASSERT( 86 receiver, "Null receiver, crash now to get feedback instead of later"); 87 } 88 89 NS_DECL_THREADSAFE_ISUPPORTS 90 NS_DECL_NSIIMAPMESSAGESINK 91 92 private: ~ImapMessageSinkProxy()93 ~ImapMessageSinkProxy() { 94 NS_ReleaseOnMainThread("ImapMessageSinkProxy::mReceiver", 95 mReceiver.forget()); 96 } 97 nsCOMPtr<nsIImapMessageSink> mReceiver; 98 }; 99 100 class ImapProtocolSinkProxy final : public nsIImapProtocolSink { 101 public: ImapProtocolSinkProxy(nsIImapProtocolSink * receiver)102 explicit ImapProtocolSinkProxy(nsIImapProtocolSink* receiver) 103 : mReceiver(receiver) { 104 MOZ_DIAGNOSTIC_ASSERT( 105 receiver, "Null receiver, crash now to get feedback instead of later"); 106 } 107 108 NS_DECL_THREADSAFE_ISUPPORTS 109 NS_DECL_NSIIMAPPROTOCOLSINK 110 111 private: ~ImapProtocolSinkProxy()112 ~ImapProtocolSinkProxy() { 113 NS_ReleaseOnMainThread("ImapProtocolSinkProxy::mReceiver", 114 mReceiver.forget()); 115 } 116 nsCOMPtr<nsIImapProtocolSink> mReceiver; 117 }; 118 119 class msgIOAuth2Module; 120 class nsIMsgIncomingServer; 121 122 namespace mozilla { 123 namespace mailnews { 124 125 class OAuth2ThreadHelper final : public msgIOAuth2ModuleListener { 126 public: 127 explicit OAuth2ThreadHelper(nsIMsgIncomingServer* aServer); 128 129 NS_DECL_THREADSAFE_ISUPPORTS 130 NS_DECL_MSGIOAUTH2MODULELISTENER 131 132 bool SupportsOAuth2(); 133 void GetXOAuth2String(nsACString& base64Str); 134 135 private: 136 ~OAuth2ThreadHelper(); 137 void Init(); 138 void Connect(); 139 140 Monitor mMonitor; 141 nsCOMPtr<msgIOAuth2Module> mOAuth2Support; 142 nsCOMPtr<nsIMsgIncomingServer> mServer; 143 nsCString mOAuth2String; 144 }; 145 146 } // namespace mailnews 147 } // namespace mozilla 148 149 #endif // nsSyncRunnableHelpers_h 150