Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(725)

Unified Diff: base/message_loop/message_loop.cc

Issue 61643006: Adds the ability for MessageLoop to take a MessagePump (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/message_loop/message_loop.cc
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc
index 7cd22a876553817ee788c09cbfdd3c05a45c4695..7357ed3bf857f2afcd962e03c75fd168170025c8 100644
--- a/base/message_loop/message_loop.cc
+++ b/base/message_loop/message_loop.cc
@@ -98,6 +98,50 @@ bool AlwaysNotifyPump(MessageLoop::Type type) {
#endif
}
+MessagePump* CreateMessagePump(MessageLoop::Type type) {
+// TODO(rvargas): Get rid of the OS guards.
+#if defined(OS_WIN)
+#define MESSAGE_PUMP_UI new MessagePumpForUI()
+#define MESSAGE_PUMP_IO new MessagePumpForIO()
+#elif defined(OS_IOS)
+#define MESSAGE_PUMP_UI MessagePumpMac::Create()
+#define MESSAGE_PUMP_IO new MessagePumpIOSForIO()
+#elif defined(OS_MACOSX)
+#define MESSAGE_PUMP_UI MessagePumpMac::Create()
+#define MESSAGE_PUMP_IO 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 NULL
+// 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 new MessagePumpDefault()
+#elif defined(OS_POSIX) // POSIX but not MACOSX.
+#define MESSAGE_PUMP_UI new MessagePumpForUI()
+#define MESSAGE_PUMP_IO new MessagePumpLibevent()
+#else
+#error Not implemented
+#endif
+
+ if (type == MessageLoop::TYPE_UI) {
+ if (message_pump_for_ui_factory_)
+ return message_pump_for_ui_factory_();
+ return MESSAGE_PUMP_UI;
+ }
+ if (type == MessageLoop::TYPE_IO)
+ return MESSAGE_PUMP_IO;
+#if defined(TOOLKIT_GTK)
+ if (type == MessageLoop::TYPE_GPU)
+ return new MessagePumpX11();
+#endif
+#if defined(OS_ANDROID)
+ if (type == MessageLoop::TYPE_JAVA)
+ return MESSAGE_PUMP_UI;
+#endif
+ DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type);
+ return new MessagePumpDefault();
+}
+
} // namespace
//------------------------------------------------------------------------------
@@ -135,8 +179,9 @@ MessageLoop::DestructionObserver::~DestructionObserver() {
//------------------------------------------------------------------------------
-MessageLoop::MessageLoop(Type type)
- : type_(type),
+MessageLoop::MessageLoop(Type type, MessagePump* message_pump)
+ : pump_(message_pump),
+ type_(type),
exception_restoration_(false),
nestable_tasks_allowed_(true),
#if defined(OS_WIN)
@@ -153,49 +198,8 @@ MessageLoop::MessageLoop(Type type)
thread_task_runner_handle_.reset(
new ThreadTaskRunnerHandle(message_loop_proxy_));
-// TODO(rvargas): Get rid of the OS guards.
-#if defined(OS_WIN)
-#define MESSAGE_PUMP_UI new MessagePumpForUI()
-#define MESSAGE_PUMP_IO new MessagePumpForIO()
-#elif defined(OS_IOS)
-#define MESSAGE_PUMP_UI MessagePumpMac::Create()
-#define MESSAGE_PUMP_IO new MessagePumpIOSForIO()
-#elif defined(OS_MACOSX)
-#define MESSAGE_PUMP_UI MessagePumpMac::Create()
-#define MESSAGE_PUMP_IO 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 NULL
-// 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 new MessagePumpDefault()
-#elif defined(OS_POSIX) // POSIX but not MACOSX.
-#define MESSAGE_PUMP_UI new MessagePumpForUI()
-#define MESSAGE_PUMP_IO new MessagePumpLibevent()
-#else
-#error Not implemented
-#endif
-
- if (type_ == TYPE_UI) {
- if (message_pump_for_ui_factory_)
- pump_.reset(message_pump_for_ui_factory_());
- else
- pump_.reset(MESSAGE_PUMP_UI);
- } else if (type_ == TYPE_IO) {
- pump_.reset(MESSAGE_PUMP_IO);
-#if defined(TOOLKIT_GTK)
- } else if (type_ == TYPE_GPU) {
- pump_.reset(new MessagePumpX11());
-#endif
-#if defined(OS_ANDROID)
- } else if (type_ == TYPE_JAVA) {
- pump_.reset(MESSAGE_PUMP_UI);
-#endif
- } else {
- DCHECK_EQ(TYPE_DEFAULT, type_);
- pump_.reset(new MessagePumpDefault());
- }
+ if (!pump_.get())
+ pump_.reset(CreateMessagePump(type));
}
MessageLoop::~MessageLoop() {

Powered by Google App Engine
This is Rietveld 408576698