summaryrefslogtreecommitdiffstats
path: root/chromium/mojo/embedder/channel_init.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/mojo/embedder/channel_init.h')
-rw-r--r--chromium/mojo/embedder/channel_init.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/chromium/mojo/embedder/channel_init.h b/chromium/mojo/embedder/channel_init.h
new file mode 100644
index 00000000000..002bd868aec
--- /dev/null
+++ b/chromium/mojo/embedder/channel_init.h
@@ -0,0 +1,59 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MOJO_EMBEDDER_CHANNEL_INIT_H_
+#define MOJO_EMBEDDER_CHANNEL_INIT_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/platform_file.h"
+#include "mojo/public/cpp/system/core.h"
+#include "mojo/system/system_impl_export.h"
+
+namespace base {
+class MessageLoopProxy;
+class TaskRunner;
+}
+
+namespace mojo {
+namespace embedder {
+struct ChannelInfo;
+}
+
+namespace embedder {
+
+// ChannelInit handle creation (and destruction) of the mojo channel. It is
+// expected that this class is created and destroyed on the main thread.
+class MOJO_SYSTEM_IMPL_EXPORT ChannelInit {
+ public:
+ ChannelInit();
+ ~ChannelInit();
+
+ // Initializes the channel. This takes ownership of |file|. Returns the
+ // primordial MessagePipe for the channel.
+ mojo::ScopedMessagePipeHandle Init(
+ base::PlatformFile file,
+ scoped_refptr<base::TaskRunner> io_thread_task_runner);
+
+ private:
+ // Invoked on the main thread once the channel has been established.
+ static void OnCreatedChannel(
+ base::WeakPtr<ChannelInit> host,
+ scoped_refptr<base::TaskRunner> io_thread,
+ embedder::ChannelInfo* channel);
+
+ scoped_refptr<base::TaskRunner> io_thread_task_runner_;
+
+ // If non-null the channel has been established.
+ embedder::ChannelInfo* channel_info_;
+
+ base::WeakPtrFactory<ChannelInit> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChannelInit);
+};
+
+} // namespace embedder
+} // namespace mojo
+
+#endif // MOJO_EMBEDDER_CHANNEL_INIT_H_