1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MOJO_EMBEDDER_CHANNEL_INIT_H_
6#define MOJO_EMBEDDER_CHANNEL_INIT_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/memory/weak_ptr.h"
10#include "base/platform_file.h"
11#include "mojo/public/cpp/system/core.h"
12#include "mojo/system/system_impl_export.h"
13
14namespace base {
15class MessageLoopProxy;
16class TaskRunner;
17}
18
19namespace mojo {
20namespace embedder {
21struct ChannelInfo;
22}
23
24namespace embedder {
25
26// ChannelInit handle creation (and destruction) of the mojo channel. It is
27// expected that this class is created and destroyed on the main thread.
28class MOJO_SYSTEM_IMPL_EXPORT ChannelInit {
29 public:
30  ChannelInit();
31  ~ChannelInit();
32
33  // Initializes the channel. This takes ownership of |file|. Returns the
34  // primordial MessagePipe for the channel.
35  mojo::ScopedMessagePipeHandle Init(
36      base::PlatformFile file,
37      scoped_refptr<base::TaskRunner> io_thread_task_runner);
38
39 private:
40  // Invoked on the main thread once the channel has been established.
41  static void OnCreatedChannel(
42      base::WeakPtr<ChannelInit> host,
43      scoped_refptr<base::TaskRunner> io_thread,
44      embedder::ChannelInfo* channel);
45
46  scoped_refptr<base::TaskRunner> io_thread_task_runner_;
47
48  // If non-null the channel has been established.
49  embedder::ChannelInfo* channel_info_;
50
51  base::WeakPtrFactory<ChannelInit> weak_factory_;
52
53  DISALLOW_COPY_AND_ASSIGN(ChannelInit);
54};
55
56}  // namespace embedder
57}  // namespace mojo
58
59#endif  // MOJO_EMBEDDER_CHANNEL_INIT_H_
60