OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/common/child_process_host_impl.h" | 5 #include "content/common/child_process_host_impl.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/atomic_sequence_num.h" | 9 #include "base/atomic_sequence_num.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 } | 102 } |
103 } | 103 } |
104 | 104 |
105 void ChildProcessHostImpl::AddFilter(IPC::MessageFilter* filter) { | 105 void ChildProcessHostImpl::AddFilter(IPC::MessageFilter* filter) { |
106 filters_.push_back(filter); | 106 filters_.push_back(filter); |
107 | 107 |
108 if (channel_) | 108 if (channel_) |
109 filter->OnFilterAdded(channel_.get()); | 109 filter->OnFilterAdded(channel_.get()); |
110 } | 110 } |
111 | 111 |
112 service_manager::InterfaceProvider* | 112 void ChildProcessHostImpl::BindInterface( |
113 ChildProcessHostImpl::GetRemoteInterfaces() { | 113 const std::string& interface_name, |
114 return delegate_->GetRemoteInterfaces(); | 114 mojo::ScopedMessagePipeHandle interface_pipe) { |
| 115 return delegate_->BindInterface(interface_name, std::move(interface_pipe)); |
115 } | 116 } |
116 | 117 |
117 void ChildProcessHostImpl::ForceShutdown() { | 118 void ChildProcessHostImpl::ForceShutdown() { |
118 Send(new ChildProcessMsg_Shutdown()); | 119 Send(new ChildProcessMsg_Shutdown()); |
119 } | 120 } |
120 | 121 |
121 std::string ChildProcessHostImpl::CreateChannelMojo( | 122 std::string ChildProcessHostImpl::CreateChannelMojo( |
122 mojo::edk::PendingProcessConnection* connection) { | 123 mojo::edk::PendingProcessConnection* connection) { |
123 DCHECK(channel_id_.empty()); | 124 DCHECK(channel_id_.empty()); |
124 channel_ = | 125 channel_ = |
125 IPC::ChannelMojo::Create(connection->CreateMessagePipe(&channel_id_), | 126 IPC::ChannelMojo::Create(connection->CreateMessagePipe(&channel_id_), |
126 IPC::Channel::MODE_SERVER, this); | 127 IPC::Channel::MODE_SERVER, this); |
127 if (!channel_ || !InitChannel()) | 128 if (!channel_ || !InitChannel()) |
128 return std::string(); | 129 return std::string(); |
129 return channel_id_; | 130 return channel_id_; |
130 } | 131 } |
131 | 132 |
132 void ChildProcessHostImpl::CreateChannelMojo() { | 133 void ChildProcessHostImpl::CreateChannelMojo() { |
133 // TODO(rockot): Remove |channel_id_| once this is the only code path by which | 134 // TODO(rockot): Remove |channel_id_| once this is the only code path by which |
134 // the Channel is created. For now it serves to at least mutually exclude | 135 // the Channel is created. For now it serves to at least mutually exclude |
135 // different CreateChannel* calls. | 136 // different CreateChannel* calls. |
136 DCHECK(channel_id_.empty()); | 137 DCHECK(channel_id_.empty()); |
137 channel_id_ = "ChannelMojo"; | 138 channel_id_ = "ChannelMojo"; |
138 | 139 |
139 service_manager::InterfaceProvider* remote_interfaces = GetRemoteInterfaces(); | 140 mojo::MessagePipe pipe; |
140 DCHECK(remote_interfaces); | 141 BindInterface(IPC::mojom::ChannelBootstrap::Name_, std::move(pipe.handle1)); |
141 | 142 channel_ = IPC::ChannelMojo::Create(std::move(pipe.handle0), |
142 IPC::mojom::ChannelBootstrapPtr bootstrap; | |
143 remote_interfaces->GetInterface(&bootstrap); | |
144 channel_ = IPC::ChannelMojo::Create(bootstrap.PassInterface().PassHandle(), | |
145 IPC::Channel::MODE_SERVER, this); | 143 IPC::Channel::MODE_SERVER, this); |
146 DCHECK(channel_); | 144 DCHECK(channel_); |
147 | 145 |
148 bool initialized = InitChannel(); | 146 bool initialized = InitChannel(); |
149 DCHECK(initialized); | 147 DCHECK(initialized); |
150 } | 148 } |
151 | 149 |
152 bool ChildProcessHostImpl::InitChannel() { | 150 bool ChildProcessHostImpl::InitChannel() { |
153 if (!channel_->Connect()) | 151 if (!channel_->Connect()) |
154 return false; | 152 return false; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 void ChildProcessHostImpl::OnBadMessageReceived(const IPC::Message& message) { | 277 void ChildProcessHostImpl::OnBadMessageReceived(const IPC::Message& message) { |
280 delegate_->OnBadMessageReceived(message); | 278 delegate_->OnBadMessageReceived(message); |
281 } | 279 } |
282 | 280 |
283 void ChildProcessHostImpl::OnShutdownRequest() { | 281 void ChildProcessHostImpl::OnShutdownRequest() { |
284 if (delegate_->CanShutdown()) | 282 if (delegate_->CanShutdown()) |
285 Send(new ChildProcessMsg_Shutdown()); | 283 Send(new ChildProcessMsg_Shutdown()); |
286 } | 284 } |
287 | 285 |
288 } // namespace content | 286 } // namespace content |
OLD | NEW |