diff options
Diffstat (limited to 'comm/mailnews/imap/src/nsSyncRunnableHelpers.h')
-rw-r--r-- | comm/mailnews/imap/src/nsSyncRunnableHelpers.h | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/comm/mailnews/imap/src/nsSyncRunnableHelpers.h b/comm/mailnews/imap/src/nsSyncRunnableHelpers.h new file mode 100644 index 0000000000..9be1aafef6 --- /dev/null +++ b/comm/mailnews/imap/src/nsSyncRunnableHelpers.h @@ -0,0 +1,149 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsSyncRunnableHelpers_h +#define nsSyncRunnableHelpers_h + +#include "nsThreadUtils.h" +#include "nsProxyRelease.h" + +#include "mozilla/Monitor.h" +#include "msgIOAuth2Module.h" +#include "nsIStreamListener.h" +#include "nsIImapMailFolderSink.h" +#include "nsIImapServerSink.h" +#include "nsIImapProtocolSink.h" +#include "nsIImapMessageSink.h" + +// The classes in this file proxy method calls to the main thread +// synchronously. The main thread must not block on this thread, or a +// deadlock condition can occur. + +class StreamListenerProxy final : public nsIStreamListener { + public: + explicit StreamListenerProxy(nsIStreamListener* receiver) + : mReceiver(receiver) { + MOZ_DIAGNOSTIC_ASSERT( + receiver, "Null receiver, crash now to get feedback instead of later"); + } + + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIREQUESTOBSERVER + NS_DECL_NSISTREAMLISTENER + + private: + ~StreamListenerProxy() { + NS_ReleaseOnMainThread("StreamListenerProxy::mReceiver", + mReceiver.forget()); + } + nsCOMPtr<nsIStreamListener> mReceiver; +}; + +class ImapMailFolderSinkProxy final : public nsIImapMailFolderSink { + public: + explicit ImapMailFolderSinkProxy(nsIImapMailFolderSink* receiver) + : mReceiver(receiver) { + MOZ_DIAGNOSTIC_ASSERT( + receiver, "Null receiver, crash now to get feedback instead of later"); + } + + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIIMAPMAILFOLDERSINK + + private: + ~ImapMailFolderSinkProxy() { + NS_ReleaseOnMainThread("ImapMailFolderSinkProxy::mReceiver", + mReceiver.forget()); + } + nsCOMPtr<nsIImapMailFolderSink> mReceiver; +}; + +class ImapServerSinkProxy final : public nsIImapServerSink { + public: + explicit ImapServerSinkProxy(nsIImapServerSink* receiver) + : mReceiver(receiver) { + MOZ_DIAGNOSTIC_ASSERT( + receiver, "Null receiver, crash now to get feedback instead of later"); + } + + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIIMAPSERVERSINK + + private: + ~ImapServerSinkProxy() { + NS_ReleaseOnMainThread("ImapServerSinkProxy::mReceiver", + mReceiver.forget()); + } + nsCOMPtr<nsIImapServerSink> mReceiver; +}; + +class ImapMessageSinkProxy final : public nsIImapMessageSink { + public: + explicit ImapMessageSinkProxy(nsIImapMessageSink* receiver) + : mReceiver(receiver) { + MOZ_DIAGNOSTIC_ASSERT( + receiver, "Null receiver, crash now to get feedback instead of later"); + } + + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIIMAPMESSAGESINK + + private: + ~ImapMessageSinkProxy() { + NS_ReleaseOnMainThread("ImapMessageSinkProxy::mReceiver", + mReceiver.forget()); + } + nsCOMPtr<nsIImapMessageSink> mReceiver; +}; + +class ImapProtocolSinkProxy final : public nsIImapProtocolSink { + public: + explicit ImapProtocolSinkProxy(nsIImapProtocolSink* receiver) + : mReceiver(receiver) { + MOZ_DIAGNOSTIC_ASSERT( + receiver, "Null receiver, crash now to get feedback instead of later"); + } + + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIIMAPPROTOCOLSINK + + private: + ~ImapProtocolSinkProxy() { + NS_ReleaseOnMainThread("ImapProtocolSinkProxy::mReceiver", + mReceiver.forget()); + } + nsCOMPtr<nsIImapProtocolSink> mReceiver; +}; + +class msgIOAuth2Module; +class nsIMsgIncomingServer; + +namespace mozilla { +namespace mailnews { + +class OAuth2ThreadHelper final : public msgIOAuth2ModuleListener { + public: + explicit OAuth2ThreadHelper(nsIMsgIncomingServer* aServer); + + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_MSGIOAUTH2MODULELISTENER + + bool SupportsOAuth2(); + void GetXOAuth2String(nsACString& base64Str); + + private: + ~OAuth2ThreadHelper(); + void Init(); + void Connect(); + + Monitor mMonitor; + nsCOMPtr<msgIOAuth2Module> mOAuth2Support; + nsCOMPtr<nsIMsgIncomingServer> mServer; + nsCString mOAuth2String; +}; + +} // namespace mailnews +} // namespace mozilla + +#endif // nsSyncRunnableHelpers_h |