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