diff -r 000000000000 -r 6474c204b198 ipc/glue/MessagePump.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipc/glue/MessagePump.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,95 @@ +/* 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 __IPC_GLUE_MESSAGEPUMP_H__ +#define __IPC_GLUE_MESSAGEPUMP_H__ + +#include "base/message_pump_default.h" +#include "base/time.h" +#include "mozilla/Attributes.h" +#include "nsAutoPtr.h" +#include "nsCOMPtr.h" + +class nsIThread; +class nsITimer; + +namespace mozilla { +namespace ipc { + +class DoWorkRunnable; + +class MessagePump : public base::MessagePumpDefault +{ + friend class DoWorkRunnable; + +public: + MessagePump(); + + // From base::MessagePump. + virtual void + Run(base::MessagePump::Delegate* aDelegate) MOZ_OVERRIDE; + + // From base::MessagePump. + virtual void + ScheduleWork() MOZ_OVERRIDE; + + // From base::MessagePump. + virtual void + ScheduleWorkForNestedLoop() MOZ_OVERRIDE; + + // From base::MessagePump. + virtual void + ScheduleDelayedWork(const base::TimeTicks& aDelayedWorkTime) MOZ_OVERRIDE; + +protected: + virtual ~MessagePump(); + +private: + // Only called by DoWorkRunnable. + void DoDelayedWork(base::MessagePump::Delegate* aDelegate); + +protected: + // mDelayedWorkTimer and mThread are set in Run() by this class or its + // subclasses. + nsCOMPtr mDelayedWorkTimer; + nsIThread* mThread; + +private: + // Only accessed by this class. + nsRefPtr mDoWorkEvent; +}; + +class MessagePumpForChildProcess MOZ_FINAL: public MessagePump +{ +public: + MessagePumpForChildProcess() + : mFirstRun(true) + { } + + virtual void Run(base::MessagePump::Delegate* aDelegate) MOZ_OVERRIDE; + +private: + ~MessagePumpForChildProcess() + { } + + bool mFirstRun; +}; + +class MessagePumpForNonMainThreads MOZ_FINAL : public MessagePump +{ +public: + MessagePumpForNonMainThreads() + { } + + virtual void Run(base::MessagePump::Delegate* aDelegate) MOZ_OVERRIDE; + +private: + ~MessagePumpForNonMainThreads() + { } +}; + +} /* namespace ipc */ +} /* namespace mozilla */ + +#endif /* __IPC_GLUE_MESSAGEPUMP_H__ */