OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ipc/mojo/ipc_mojo_bootstrap.h" | 5 #include "ipc/mojo/ipc_mojo_bootstrap.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/callback.h" | |
11 #include "base/logging.h" | 10 #include "base/logging.h" |
12 #include "base/macros.h" | 11 #include "base/macros.h" |
13 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
14 #include "base/process/process_handle.h" | 13 #include "base/process/process_handle.h" |
15 #include "build/build_config.h" | 14 #include "build/build_config.h" |
16 #include "ipc/ipc_message_utils.h" | 15 #include "ipc/ipc_message_utils.h" |
17 #include "ipc/ipc_platform_file.h" | 16 #include "ipc/ipc_platform_file.h" |
18 #include "mojo/public/cpp/bindings/binding.h" | 17 #include "mojo/public/cpp/bindings/binding.h" |
19 | 18 |
20 namespace IPC { | 19 namespace IPC { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 } | 67 } |
69 | 68 |
70 void MojoServerBootstrap::OnInitDone(int32_t peer_pid) { | 69 void MojoServerBootstrap::OnInitDone(int32_t peer_pid) { |
71 if (state() != STATE_WAITING_ACK) { | 70 if (state() != STATE_WAITING_ACK) { |
72 set_state(STATE_ERROR); | 71 set_state(STATE_ERROR); |
73 LOG(ERROR) << "Got inconsistent message from client."; | 72 LOG(ERROR) << "Got inconsistent message from client."; |
74 return; | 73 return; |
75 } | 74 } |
76 | 75 |
77 set_state(STATE_READY); | 76 set_state(STATE_READY); |
78 bootstrap_.set_connection_error_handler(base::Closure()); | 77 bootstrap_.set_connection_error_handler(mojo::Closure()); |
79 delegate()->OnPipesAvailable(std::move(send_channel_), | 78 delegate()->OnPipesAvailable(std::move(send_channel_), |
80 std::move(receive_channel_request_), peer_pid); | 79 std::move(receive_channel_request_), peer_pid); |
81 } | 80 } |
82 | 81 |
83 // MojoBootstrap for client processes. You should create the instance | 82 // MojoBootstrap for client processes. You should create the instance |
84 // using MojoBootstrap::Create(). | 83 // using MojoBootstrap::Create(). |
85 class MojoClientBootstrap : public MojoBootstrap, public mojom::Bootstrap { | 84 class MojoClientBootstrap : public MojoBootstrap, public mojom::Bootstrap { |
86 public: | 85 public: |
87 MojoClientBootstrap(); | 86 MojoClientBootstrap(); |
88 | 87 |
89 private: | 88 private: |
90 // MojoBootstrap implementation. | 89 // MojoBootstrap implementation. |
91 void Connect() override; | 90 void Connect() override; |
92 | 91 |
93 // mojom::Bootstrap implementation. | 92 // mojom::Bootstrap implementation. |
94 void Init(mojom::ChannelAssociatedRequest receive_channel, | 93 void Init(mojom::ChannelAssociatedRequest receive_channel, |
95 mojom::ChannelAssociatedPtrInfo send_channel, | 94 mojom::ChannelAssociatedPtrInfo send_channel, |
96 int32_t peer_pid, | 95 int32_t peer_pid, |
97 const InitCallback& callback) override; | 96 const mojo::Callback<void(int32_t)>& callback) override; |
98 | 97 |
99 mojo::Binding<mojom::Bootstrap> binding_; | 98 mojo::Binding<mojom::Bootstrap> binding_; |
100 | 99 |
101 DISALLOW_COPY_AND_ASSIGN(MojoClientBootstrap); | 100 DISALLOW_COPY_AND_ASSIGN(MojoClientBootstrap); |
102 }; | 101 }; |
103 | 102 |
104 MojoClientBootstrap::MojoClientBootstrap() : binding_(this) {} | 103 MojoClientBootstrap::MojoClientBootstrap() : binding_(this) {} |
105 | 104 |
106 void MojoClientBootstrap::Connect() { | 105 void MojoClientBootstrap::Connect() { |
107 binding_.Bind(TakeHandle()); | 106 binding_.Bind(TakeHandle()); |
108 binding_.set_connection_error_handler( | 107 binding_.set_connection_error_handler( |
109 base::Bind(&MojoClientBootstrap::Fail, base::Unretained(this))); | 108 base::Bind(&MojoClientBootstrap::Fail, base::Unretained(this))); |
110 } | 109 } |
111 | 110 |
112 void MojoClientBootstrap::Init(mojom::ChannelAssociatedRequest receive_channel, | 111 void MojoClientBootstrap::Init(mojom::ChannelAssociatedRequest receive_channel, |
113 mojom::ChannelAssociatedPtrInfo send_channel, | 112 mojom::ChannelAssociatedPtrInfo send_channel, |
114 int32_t peer_pid, | 113 int32_t peer_pid, |
115 const InitCallback& callback) { | 114 const mojo::Callback<void(int32_t)>& callback) { |
116 callback.Run(GetSelfPID()); | 115 callback.Run(GetSelfPID()); |
117 set_state(STATE_READY); | 116 set_state(STATE_READY); |
118 binding_.set_connection_error_handler(base::Closure()); | 117 binding_.set_connection_error_handler(mojo::Closure()); |
119 delegate()->OnPipesAvailable(std::move(send_channel), | 118 delegate()->OnPipesAvailable(std::move(send_channel), |
120 std::move(receive_channel), peer_pid); | 119 std::move(receive_channel), peer_pid); |
121 } | 120 } |
122 | 121 |
123 } // namespace | 122 } // namespace |
124 | 123 |
125 // MojoBootstrap | 124 // MojoBootstrap |
126 | 125 |
127 // static | 126 // static |
128 std::unique_ptr<MojoBootstrap> MojoBootstrap::Create( | 127 std::unique_ptr<MojoBootstrap> MojoBootstrap::Create( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 | 164 |
166 bool MojoBootstrap::HasFailed() const { | 165 bool MojoBootstrap::HasFailed() const { |
167 return state() == STATE_ERROR; | 166 return state() == STATE_ERROR; |
168 } | 167 } |
169 | 168 |
170 mojo::ScopedMessagePipeHandle MojoBootstrap::TakeHandle() { | 169 mojo::ScopedMessagePipeHandle MojoBootstrap::TakeHandle() { |
171 return std::move(handle_); | 170 return std::move(handle_); |
172 } | 171 } |
173 | 172 |
174 } // namespace IPC | 173 } // namespace IPC |
OLD | NEW |