#include "base/message_loop/message_pump_io_ios.h"
#elif defined(OS_POSIX)
#include "base/message_loop/message_pump_libevent.h"
-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
-
-#if defined(USE_AURA) && defined(USE_X11) && !defined(OS_NACL)
-#include "base/message_loop/message_pump_x11.h"
-#elif defined(USE_OZONE) && !defined(OS_NACL)
-#include "base/message_loop/message_pump_ozone.h"
-#elif !defined(OS_ANDROID_HOST)
-#define USE_GTK_MESSAGE_PUMP
-#include "base/message_loop/message_pump_gtk.h"
-#if defined(TOOLKIT_GTK)
-#include "base/message_loop/message_pump_x11.h"
-#endif
-#endif
-
-#endif
#endif
namespace base {
class MessagePumpObserver;
class RunLoop;
class ThreadTaskRunnerHandle;
-#if defined(OS_ANDROID)
-class MessagePumpForUI;
-#elif defined(OS_ANDROID_HOST)
-typedef MessagePumpLibevent MessagePumpForUI;
-#endif
class WaitableEvent;
// A MessageLoop is used to process events for a particular thread. There is
//
class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
public:
-
-#if defined(USE_AURA)
- typedef MessagePumpObserver Observer;
-#elif defined(USE_GTK_MESSAGE_PUMP)
- typedef MessagePumpGdkObserver Observer;
-#endif
-
// A MessageLoop has a particular type, which indicates the set of
// asynchronous events it may process in addition to tasks and timers.
//
// This type of ML also supports native UI events (e.g., Windows messages).
// See also MessageLoopForUI.
//
- // TYPE_GPU
- // This type of ML also supports native UI events for use in the GPU
- // process. On Linux this will always be an X11 ML (as compared with the
- // sometimes-GTK ML in the browser process).
- //
// TYPE_IO
// This type of ML also supports asynchronous IO. See also
// MessageLoopForIO.
TYPE_DEFAULT,
TYPE_UI,
TYPE_CUSTOM,
-#if defined(TOOLKIT_GTK)
- TYPE_GPU,
-#endif
TYPE_IO,
#if defined(OS_ANDROID)
TYPE_JAVA,
//----------------------------------------------------------------------------
protected:
-
-#if defined(OS_WIN)
- MessagePumpWin* pump_win() {
- return static_cast<MessagePumpWin*>(pump_.get());
- }
-#elif defined(OS_POSIX) && !defined(OS_IOS)
- MessagePumpLibevent* pump_libevent() {
- return static_cast<MessagePumpLibevent*>(pump_.get());
- }
-#if defined(TOOLKIT_GTK)
- friend class MessagePumpX11;
- MessagePumpX11* pump_gpu() {
- DCHECK_EQ(TYPE_GPU, type());
- return static_cast<MessagePumpX11*>(pump_.get());
- }
-#endif
-#endif
-
scoped_ptr<MessagePump> pump_;
private:
DISALLOW_COPY_AND_ASSIGN(MessageLoop);
};
+#if !defined(OS_NACL)
+
//-----------------------------------------------------------------------------
// MessageLoopForUI extends MessageLoop with methods that are particular to a
// MessageLoop instantiated with TYPE_UI.
void Start();
#endif
-#if !defined(OS_NACL) && (defined(TOOLKIT_GTK) || defined(USE_OZONE) || \
- defined(OS_WIN) || defined(USE_X11))
- // Please see message_pump_win/message_pump_glib for definitions of these
- // methods.
+#if defined(OS_WIN)
+ typedef MessagePumpObserver Observer;
+
+ // Please see message_pump_win for definitions of these methods.
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
#endif
- protected:
-#if defined(USE_X11)
- friend class MessagePumpX11;
-#endif
-#if defined(USE_OZONE) && !defined(OS_NACL)
- friend class MessagePumpOzone;
-#endif
-
-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
- // TODO(rvargas): Make this platform independent.
- MessagePumpForUI* pump_ui() {
- return static_cast<MessagePumpForUI*>(pump_.get());
- }
+#if defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))
+ // Please see MessagePumpLibevent for definition.
+ bool WatchFileDescriptor(
+ int fd,
+ bool persistent,
+ MessagePumpLibevent::Mode mode,
+ MessagePumpLibevent::FileDescriptorWatcher* controller,
+ MessagePumpLibevent::Watcher* delegate);
#endif
};
COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForUI),
MessageLoopForUI_should_not_have_extra_member_variables);
+#endif // !defined(OS_NACL)
+
//-----------------------------------------------------------------------------
// MessageLoopForIO extends MessageLoop with methods that are particular to a
// MessageLoop instantiated with TYPE_IO.
//
class BASE_EXPORT MessageLoopForIO : public MessageLoop {
public:
+ MessageLoopForIO() : MessageLoop(TYPE_IO) {
+ }
+
+ // Returns the MessageLoopForIO of the current thread.
+ static MessageLoopForIO* current() {
+ MessageLoop* loop = MessageLoop::current();
+ DCHECK_EQ(MessageLoop::TYPE_IO, loop->type());
+ return static_cast<MessageLoopForIO*>(loop);
+ }
+
+ static bool IsCurrent() {
+ MessageLoop* loop = MessageLoop::current();
+ return loop && loop->type() == MessageLoop::TYPE_IO;
+ }
+
+#if !defined(OS_NACL)
+
#if defined(OS_WIN)
typedef MessagePumpForIO::IOHandler IOHandler;
typedef MessagePumpForIO::IOContext IOContext;
WATCH_WRITE = MessagePumpLibevent::WATCH_WRITE,
WATCH_READ_WRITE = MessagePumpLibevent::WATCH_READ_WRITE
};
-
#endif
- MessageLoopForIO() : MessageLoop(TYPE_IO) {
- }
-
- // Returns the MessageLoopForIO of the current thread.
- static MessageLoopForIO* current() {
- MessageLoop* loop = MessageLoop::current();
- DCHECK_EQ(MessageLoop::TYPE_IO, loop->type());
- return static_cast<MessageLoopForIO*>(loop);
- }
-
- static bool IsCurrent() {
- MessageLoop* loop = MessageLoop::current();
- return loop && loop->type() == MessageLoop::TYPE_IO;
- }
-
- void AddIOObserver(IOObserver* io_observer) {
- pump_io()->AddIOObserver(io_observer);
- }
-
- void RemoveIOObserver(IOObserver* io_observer) {
- pump_io()->RemoveIOObserver(io_observer);
- }
+ void AddIOObserver(IOObserver* io_observer);
+ void RemoveIOObserver(IOObserver* io_observer);
#if defined(OS_WIN)
// Please see MessagePumpWin for definitions of these methods.
void RegisterIOHandler(HANDLE file, IOHandler* handler);
bool RegisterJobObject(HANDLE job, IOHandler* handler);
bool WaitForIOCompletion(DWORD timeout, IOHandler* filter);
-
- protected:
- // TODO(rvargas): Make this platform independent.
- MessagePumpForIO* pump_io() {
- return static_cast<MessagePumpForIO*>(pump_.get());
- }
-
-#elif defined(OS_IOS)
- // Please see MessagePumpIOSForIO for definition.
+#elif defined(OS_POSIX)
+ // Please see MessagePumpIOSForIO/MessagePumpLibevent for definition.
bool WatchFileDescriptor(int fd,
bool persistent,
Mode mode,
FileDescriptorWatcher *controller,
Watcher *delegate);
-
- private:
- MessagePumpIOSForIO* pump_io() {
- return static_cast<MessagePumpIOSForIO*>(pump_.get());
- }
-
-#elif defined(OS_POSIX)
- // Please see MessagePumpLibevent for definition.
- bool WatchFileDescriptor(int fd,
- bool persistent,
- Mode mode,
- FileDescriptorWatcher* controller,
- Watcher* delegate);
-
- private:
- MessagePumpLibevent* pump_io() {
- return static_cast<MessagePumpLibevent*>(pump_.get());
- }
-#endif // defined(OS_POSIX)
+#endif // defined(OS_IOS) || defined(OS_POSIX)
+#endif // !defined(OS_NACL)
};
// Do not add any member variables to MessageLoopForIO! This is important b/c