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
diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h
index 6617646..4bb7d55 100644
--- a/base/message_loop/message_loop.h
+++ b/base/message_loop/message_loop.h
@@ -32,17 +32,6 @@
 #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(OS_CHROMEOS) && !defined(OS_NACL) && !defined(USE_GLIB)
-#include "base/message_loop/message_pump_libevent.h"
-#elif defined(USE_GLIB) && !defined(OS_NACL)
-#include "base/message_loop/message_pump_glib.h"
-#elif !defined(OS_ANDROID_HOST)
-#include "base/message_loop/message_pump_glib.h"
-#endif
-
-#endif
 #endif
 
 namespace base {
@@ -51,11 +40,6 @@
 class MessagePumpObserver;
 class RunLoop;
 class ThreadTaskRunnerHandle;
-#if defined(OS_ANDROID)
-class MessagePumpForUI;
-#elif defined(OS_ANDROID_HOST) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))
-typedef MessagePumpLibevent MessagePumpForUI;
-#endif
 class WaitableEvent;
 
 // A MessageLoop is used to process events for a particular thread.  There is
@@ -91,10 +75,6 @@
 //
 class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
  public:
-#if defined(OS_WIN)
-  typedef MessagePumpObserver Observer;
-#endif
-
   // A MessageLoop has a particular type, which indicates the set of
   // asynchronous events it may process in addition to tasks and timers.
   //
@@ -392,17 +372,6 @@
 
   //----------------------------------------------------------------------------
  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());
-  }
-#endif
-
   scoped_ptr<MessagePump> pump_;
 
  private:
@@ -518,6 +487,8 @@
   DISALLOW_COPY_AND_ASSIGN(MessageLoop);
 };
 
+#if !defined(OS_NACL)
+
 //-----------------------------------------------------------------------------
 // MessageLoopForUI extends MessageLoop with methods that are particular to a
 // MessageLoop instantiated with TYPE_UI.
@@ -557,14 +528,15 @@
   void Start();
 #endif
 
-#if !defined(OS_NACL) && defined(OS_WIN)
+#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
 
-#if !defined(OS_NACL) && \
-    (defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB)))
+#if defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))
   // Please see MessagePumpLibevent for definition.
   bool WatchFileDescriptor(
       int fd,
@@ -573,14 +545,6 @@
       MessagePumpLibevent::FileDescriptorWatcher* controller,
       MessagePumpLibevent::Watcher* delegate);
 #endif
-
- protected:
-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
-  // TODO(rvargas): Make this platform independent.
-  MessagePumpForUI* pump_ui() {
-    return static_cast<MessagePumpForUI*>(pump_.get());
-  }
-#endif
 };
 
 // Do not add any member variables to MessageLoopForUI!  This is important b/c
@@ -589,6 +553,8 @@
 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.
@@ -598,6 +564,23 @@
 //
 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;
@@ -624,70 +607,25 @@
     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
diff --git a/base/message_loop/message_pump_glib.h b/base/message_loop/message_pump_glib.h
index 179e264..a13493a 100644
--- a/base/message_loop/message_pump_glib.h
+++ b/base/message_loop/message_pump_glib.h
@@ -73,8 +73,6 @@
   DISALLOW_COPY_AND_ASSIGN(MessagePumpGlib);
 };
 
-typedef MessagePumpGlib MessagePumpForUI;
-
 }  // namespace base
 
 #endif  // BASE_MESSAGE_LOOP_MESSAGE_PUMP_GLIB_H_