michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef __IPC_GLUE_MESSAGEPUMP_H__ michael@0: #define __IPC_GLUE_MESSAGEPUMP_H__ michael@0: michael@0: #include "base/message_pump_default.h" michael@0: #include "base/time.h" michael@0: #include "mozilla/Attributes.h" michael@0: #include "nsAutoPtr.h" michael@0: #include "nsCOMPtr.h" michael@0: michael@0: class nsIThread; michael@0: class nsITimer; michael@0: michael@0: namespace mozilla { michael@0: namespace ipc { michael@0: michael@0: class DoWorkRunnable; michael@0: michael@0: class MessagePump : public base::MessagePumpDefault michael@0: { michael@0: friend class DoWorkRunnable; michael@0: michael@0: public: michael@0: MessagePump(); michael@0: michael@0: // From base::MessagePump. michael@0: virtual void michael@0: Run(base::MessagePump::Delegate* aDelegate) MOZ_OVERRIDE; michael@0: michael@0: // From base::MessagePump. michael@0: virtual void michael@0: ScheduleWork() MOZ_OVERRIDE; michael@0: michael@0: // From base::MessagePump. michael@0: virtual void michael@0: ScheduleWorkForNestedLoop() MOZ_OVERRIDE; michael@0: michael@0: // From base::MessagePump. michael@0: virtual void michael@0: ScheduleDelayedWork(const base::TimeTicks& aDelayedWorkTime) MOZ_OVERRIDE; michael@0: michael@0: protected: michael@0: virtual ~MessagePump(); michael@0: michael@0: private: michael@0: // Only called by DoWorkRunnable. michael@0: void DoDelayedWork(base::MessagePump::Delegate* aDelegate); michael@0: michael@0: protected: michael@0: // mDelayedWorkTimer and mThread are set in Run() by this class or its michael@0: // subclasses. michael@0: nsCOMPtr mDelayedWorkTimer; michael@0: nsIThread* mThread; michael@0: michael@0: private: michael@0: // Only accessed by this class. michael@0: nsRefPtr mDoWorkEvent; michael@0: }; michael@0: michael@0: class MessagePumpForChildProcess MOZ_FINAL: public MessagePump michael@0: { michael@0: public: michael@0: MessagePumpForChildProcess() michael@0: : mFirstRun(true) michael@0: { } michael@0: michael@0: virtual void Run(base::MessagePump::Delegate* aDelegate) MOZ_OVERRIDE; michael@0: michael@0: private: michael@0: ~MessagePumpForChildProcess() michael@0: { } michael@0: michael@0: bool mFirstRun; michael@0: }; michael@0: michael@0: class MessagePumpForNonMainThreads MOZ_FINAL : public MessagePump michael@0: { michael@0: public: michael@0: MessagePumpForNonMainThreads() michael@0: { } michael@0: michael@0: virtual void Run(base::MessagePump::Delegate* aDelegate) MOZ_OVERRIDE; michael@0: michael@0: private: michael@0: ~MessagePumpForNonMainThreads() michael@0: { } michael@0: }; michael@0: michael@0: } /* namespace ipc */ michael@0: } /* namespace mozilla */ michael@0: michael@0: #endif /* __IPC_GLUE_MESSAGEPUMP_H__ */