Index: mojo/public/cpp/bindings/connector.h |
diff --git a/mojo/public/cpp/bindings/connector.h b/mojo/public/cpp/bindings/connector.h |
index 01e923679cd6d62ee83c34096c845504737f4168..fdfeb7344d00675dd06c6e8bdf949ddc9e83a9a2 100644 |
--- a/mojo/public/cpp/bindings/connector.h |
+++ b/mojo/public/cpp/bindings/connector.h |
@@ -18,7 +18,7 @@ |
#include "mojo/public/cpp/bindings/message.h" |
#include "mojo/public/cpp/bindings/sync_handle_watcher.h" |
#include "mojo/public/cpp/system/core.h" |
-#include "mojo/public/cpp/system/watcher.h" |
+#include "mojo/public/cpp/system/simple_watcher.h" |
namespace base { |
class Lock; |
@@ -155,8 +155,14 @@ class MOJO_CPP_BINDINGS_EXPORT Connector |
// |tag| must be a const string literal. |
void SetWatcherHeapProfilerTag(const char* tag); |
+ // Enables support for nested message dispatch so that the Connector can |
+ // continue dispatching inbound messages even if one of them spins a nested |
+ // message loop. This should be enabled only when needed, as dispatch in this |
+ // mode is generally less efficient. |
+ void EnableNestedDispatch(bool enabled); |
+ |
private: |
- // Callback of mojo::Watcher. |
+ // Callback of mojo::SimpleWatcher. |
void OnWatcherHandleReady(MojoResult result); |
// Callback of SyncHandleWatcher. |
void OnSyncHandleWatcherHandleReady(MojoResult result); |
@@ -188,7 +194,7 @@ class MOJO_CPP_BINDINGS_EXPORT Connector |
MessageReceiver* incoming_receiver_ = nullptr; |
scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
- std::unique_ptr<Watcher> handle_watcher_; |
+ std::unique_ptr<SimpleWatcher> handle_watcher_; |
bool error_ = false; |
bool drop_writes_ = false; |
@@ -196,6 +202,8 @@ class MOJO_CPP_BINDINGS_EXPORT Connector |
bool paused_ = false; |
+ bool nested_dispatch_enabled_ = false; |
+ |
// If sending messages is allowed from multiple threads, |lock_| is used to |
// protect modifications to |message_pipe_| and |drop_writes_|. |
base::Optional<base::Lock> lock_; |