Some cleanups for the message_loop.h/cc.
The cleanups include:
* Remove some #includes and typedefs from message_loop.h
* Remove MessageLoop::Observer, and add MessageLoopForUI:Observer instead.
* Wrap all of MessageLoopForUI inside !defined(OS_NACL).
* Remove some pump_*() accessors (e.g. pump_win(), pump_libevent()), and
use static_cast<> instead where necessary.
* Add a MessagePumpForIO typedef in message_loop.cc for the various IO
message-pumps, and remove MESSAGE_PUMP_IO macro for creating the io pumps.
* Simplify the #ifdef's for MESSAGE_PUMP_UI macro.
BUG=none
R=darin@chromium.org
Review URL: https://codereview.chromium.org/235893016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265451 0039d316-1c4b-4281-b951-d872f2087c98
CrOS-Libchrome-Original-Commit: bf933e547cfde01c866e01a5b148c336ba753314
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc
index 0ca6e81..dd1a393 100644
--- a/base/message_loop/message_loop.cc
+++ b/base/message_loop/message_loop.cc
@@ -32,6 +32,9 @@
#if defined(OS_ANDROID)
#include "base/message_loop/message_pump_android.h"
#endif
+#if defined(USE_GLIB)
+#include "base/message_loop/message_pump_glib.h"
+#endif
namespace base {
@@ -95,6 +98,18 @@
#endif
}
+#if defined(OS_IOS)
+typedef MessagePumpIOSForIO MessagePumpForIO;
+#elif defined(OS_NACL)
+typedef MessagePumpDefault MessagePumpForIO;
+#elif defined(OS_POSIX)
+typedef MessagePumpLibevent MessagePumpForIO;
+#endif
+
+MessagePumpForIO* ToPumpIO(MessagePump* pump) {
+ return static_cast<MessagePumpForIO*>(pump);
+}
+
} // namespace
//------------------------------------------------------------------------------
@@ -198,30 +213,20 @@
// static
scoped_ptr<MessagePump> MessageLoop::CreateMessagePumpForType(Type type) {
// TODO(rvargas): Get rid of the OS guards.
-#if defined(OS_WIN)
-#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpForIO())
-#elif defined(OS_IOS)
+#if defined(USE_GLIB) && !defined(OS_NACL)
+ typedef MessagePumpGlib MessagePumpForUI;
+#elif defined(OS_LINUX) && !defined(OS_NACL)
+ typedef MessagePumpLibevent MessagePumpForUI;
+#endif
+
+#if defined(OS_IOS) || defined(OS_MACOSX)
#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpIOSForIO())
-#elif defined(OS_MACOSX)
-#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
#elif defined(OS_NACL)
// Currently NaCl doesn't have a UI MessageLoop.
// TODO(abarth): Figure out if we need this.
#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>()
-// ipc_channel_nacl.cc uses a worker thread to do socket reads currently, and
-// doesn't require extra support for watching file descriptors.
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpDefault())
-#elif defined(USE_OZONE)
-#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpLibevent())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
-#elif defined(OS_POSIX) // POSIX but not MACOSX.
-#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
#else
-#error Not implemented
+#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI())
#endif
if (type == MessageLoop::TYPE_UI) {
@@ -230,11 +235,13 @@
return MESSAGE_PUMP_UI;
}
if (type == MessageLoop::TYPE_IO)
- return MESSAGE_PUMP_IO;
+ return scoped_ptr<MessagePump>(new MessagePumpForIO());
+
#if defined(OS_ANDROID)
if (type == MessageLoop::TYPE_JAVA)
- return MESSAGE_PUMP_UI;
+ return scoped_ptr<MessagePump>(new MessagePumpForUI());
#endif
+
DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type);
return scoped_ptr<MessagePump>(new MessagePumpDefault());
}
@@ -644,6 +651,7 @@
PostNonNestableTask(from_here, Bind(releaser, object));
}
+#if !defined(OS_NACL)
//------------------------------------------------------------------------------
// MessageLoopForUI
@@ -660,25 +668,24 @@
}
#endif
-#if !defined(OS_NACL) && defined(OS_WIN)
+#if defined(OS_WIN)
void MessageLoopForUI::AddObserver(Observer* observer) {
- pump_ui()->AddObserver(observer);
+ static_cast<MessagePumpWin*>(pump_.get())->AddObserver(observer);
}
void MessageLoopForUI::RemoveObserver(Observer* observer) {
- pump_ui()->RemoveObserver(observer);
+ static_cast<MessagePumpWin*>(pump_.get())->RemoveObserver(observer);
}
-#endif // !defined(OS_NACL) && defined(OS_WIN)
+#endif // defined(OS_WIN)
-#if !defined(OS_NACL) && \
- (defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB)))
+#if defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))
bool MessageLoopForUI::WatchFileDescriptor(
int fd,
bool persistent,
MessagePumpLibevent::Mode mode,
MessagePumpLibevent::FileDescriptorWatcher *controller,
MessagePumpLibevent::Watcher *delegate) {
- return pump_libevent()->WatchFileDescriptor(
+ return static_cast<MessagePumpLibevent*>(pump_.get())->WatchFileDescriptor(
fd,
persistent,
mode,
@@ -687,53 +694,49 @@
}
#endif
+#endif // !defined(OS_NACL)
+
//------------------------------------------------------------------------------
// MessageLoopForIO
-#if defined(OS_WIN)
+#if !defined(OS_NACL)
+void MessageLoopForIO::AddIOObserver(
+ MessageLoopForIO::IOObserver* io_observer) {
+ ToPumpIO(pump_.get())->AddIOObserver(io_observer);
+}
+void MessageLoopForIO::RemoveIOObserver(
+ MessageLoopForIO::IOObserver* io_observer) {
+ ToPumpIO(pump_.get())->RemoveIOObserver(io_observer);
+}
+
+#if defined(OS_WIN)
void MessageLoopForIO::RegisterIOHandler(HANDLE file, IOHandler* handler) {
- pump_io()->RegisterIOHandler(file, handler);
+ ToPumpIO(pump_.get())->RegisterIOHandler(file, handler);
}
bool MessageLoopForIO::RegisterJobObject(HANDLE job, IOHandler* handler) {
- return pump_io()->RegisterJobObject(job, handler);
+ return ToPumpIO(pump_.get())->RegisterJobObject(job, handler);
}
bool MessageLoopForIO::WaitForIOCompletion(DWORD timeout, IOHandler* filter) {
- return pump_io()->WaitForIOCompletion(timeout, filter);
+ return ToPumpIO(pump_.get())->WaitForIOCompletion(timeout, filter);
}
-
-#elif defined(OS_IOS)
-
+#elif defined(OS_POSIX)
bool MessageLoopForIO::WatchFileDescriptor(int fd,
bool persistent,
Mode mode,
FileDescriptorWatcher *controller,
Watcher *delegate) {
- return pump_io()->WatchFileDescriptor(
+ return ToPumpIO(pump_.get())->WatchFileDescriptor(
fd,
persistent,
mode,
controller,
delegate);
}
-
-#elif defined(OS_POSIX) && !defined(OS_NACL)
-
-bool MessageLoopForIO::WatchFileDescriptor(int fd,
- bool persistent,
- Mode mode,
- FileDescriptorWatcher *controller,
- Watcher *delegate) {
- return pump_libevent()->WatchFileDescriptor(
- fd,
- persistent,
- mode,
- controller,
- delegate);
-}
-
#endif
+#endif // !defined(OS_NACL)
+
} // namespace base