Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Side by Side Diff: content/child/child_thread.cc

Issue 382333002: Introduce ChannelMojo (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/child/child_thread.h" 5 #include "content/child/child_thread.h"
6 6
7 #include <signal.h> 7 #include <signal.h>
8 8
9 #include <string> 9 #include <string>
10 10
(...skipping 30 matching lines...) Expand all
41 #include "content/child/service_worker/service_worker_message_filter.h" 41 #include "content/child/service_worker/service_worker_message_filter.h"
42 #include "content/child/socket_stream_dispatcher.h" 42 #include "content/child/socket_stream_dispatcher.h"
43 #include "content/child/thread_safe_sender.h" 43 #include "content/child/thread_safe_sender.h"
44 #include "content/child/websocket_dispatcher.h" 44 #include "content/child/websocket_dispatcher.h"
45 #include "content/common/child_process_messages.h" 45 #include "content/common/child_process_messages.h"
46 #include "content/public/common/content_switches.h" 46 #include "content/public/common/content_switches.h"
47 #include "ipc/ipc_logging.h" 47 #include "ipc/ipc_logging.h"
48 #include "ipc/ipc_switches.h" 48 #include "ipc/ipc_switches.h"
49 #include "ipc/ipc_sync_channel.h" 49 #include "ipc/ipc_sync_channel.h"
50 #include "ipc/ipc_sync_message_filter.h" 50 #include "ipc/ipc_sync_message_filter.h"
51 #include "ipc/mojo/ipc_channel_mojo.h"
51 52
52 #if defined(OS_WIN) 53 #if defined(OS_WIN)
53 #include "content/common/handle_enumerator_win.h" 54 #include "content/common/handle_enumerator_win.h"
54 #endif 55 #endif
55 56
56 #if defined(TCMALLOC_TRACE_MEMORY_SUPPORTED) 57 #if defined(TCMALLOC_TRACE_MEMORY_SUPPORTED)
57 #include "third_party/tcmalloc/chromium/src/gperftools/heap-profiler.h" 58 #include "third_party/tcmalloc/chromium/src/gperftools/heap-profiler.h"
58 #endif 59 #endif
59 60
60 using tracked_objects::ThreadData; 61 using tracked_objects::ThreadData;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 g_lazy_child_thread_cv = LAZY_INSTANCE_INITIALIZER; 186 g_lazy_child_thread_cv = LAZY_INSTANCE_INITIALIZER;
186 187
187 void QuitMainThreadMessageLoop() { 188 void QuitMainThreadMessageLoop() {
188 base::MessageLoop::current()->Quit(); 189 base::MessageLoop::current()->Quit();
189 } 190 }
190 191
191 #endif 192 #endif
192 193
193 } // namespace 194 } // namespace
194 195
196 ChildThread::Options::Options()
197 : channel_name(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
198 switches::kProcessChannelID)),
199 use_mojo_channel(false) {}
200
201 ChildThread::Options::Options(bool mojo)
202 : channel_name(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
203 switches::kProcessChannelID)),
204 use_mojo_channel(mojo) {}
205
206
195 ChildThread::ChildThreadMessageRouter::ChildThreadMessageRouter( 207 ChildThread::ChildThreadMessageRouter::ChildThreadMessageRouter(
196 IPC::Sender* sender) 208 IPC::Sender* sender)
197 : sender_(sender) {} 209 : sender_(sender) {}
198 210
199 bool ChildThread::ChildThreadMessageRouter::Send(IPC::Message* msg) { 211 bool ChildThread::ChildThreadMessageRouter::Send(IPC::Message* msg) {
200 return sender_->Send(msg); 212 return sender_->Send(msg);
201 } 213 }
202 214
203 ChildThread::ChildThread() 215 ChildThread::ChildThread()
204 : router_(this), 216 : router_(this),
205 channel_connected_factory_(this), 217 channel_connected_factory_(this),
206 in_browser_process_(false) { 218 in_browser_process_(false) {
207 channel_name_ = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 219 Init(Options());
208 switches::kProcessChannelID);
209 Init();
210 } 220 }
211 221
212 ChildThread::ChildThread(const std::string& channel_name) 222 ChildThread::ChildThread(const Options& options)
213 : channel_name_(channel_name), 223 : router_(this),
214 router_(this),
215 channel_connected_factory_(this), 224 channel_connected_factory_(this),
216 in_browser_process_(true) { 225 in_browser_process_(true) {
217 Init(); 226 Init(options);
218 } 227 }
219 228
220 void ChildThread::Init() { 229 scoped_ptr<IPC::SyncChannel> ChildThread::CreateChannel(bool use_mojo_channel) {
230 if (use_mojo_channel) {
231 VLOG(1) << "Mojo is enabled on child";
232 return IPC::SyncChannel::Create(
233 IPC::ChannelMojo::CreateFactory(
234 channel_name_,
235 IPC::Channel::MODE_CLIENT,
236 ChildProcess::current()->io_message_loop_proxy()),
237 this,
238 ChildProcess::current()->io_message_loop_proxy(),
239 true,
240 ChildProcess::current()->GetShutDownEvent());
241 }
242
243 VLOG(1) << "Mojo is disabled on child";
244 return IPC::SyncChannel::Create(
245 channel_name_,
246 IPC::Channel::MODE_CLIENT,
247 this,
248 ChildProcess::current()->io_message_loop_proxy(),
249 true,
250 ChildProcess::current()->GetShutDownEvent());
251 }
252
253 void ChildThread::Init(const Options& options) {
254 channel_name_ = options.channel_name;
255
221 g_lazy_tls.Pointer()->Set(this); 256 g_lazy_tls.Pointer()->Set(this);
222 on_channel_error_called_ = false; 257 on_channel_error_called_ = false;
223 message_loop_ = base::MessageLoop::current(); 258 message_loop_ = base::MessageLoop::current();
224 #ifdef IPC_MESSAGE_LOG_ENABLED 259 #ifdef IPC_MESSAGE_LOG_ENABLED
225 // We must make sure to instantiate the IPC Logger *before* we create the 260 // We must make sure to instantiate the IPC Logger *before* we create the
226 // channel, otherwise we can get a callback on the IO thread which creates 261 // channel, otherwise we can get a callback on the IO thread which creates
227 // the logger, and the logger does not like being created on the IO thread. 262 // the logger, and the logger does not like being created on the IO thread.
228 IPC::Logging::GetInstance(); 263 IPC::Logging::GetInstance();
229 #endif 264 #endif
230 channel_ = 265 channel_ = CreateChannel(options.use_mojo_channel);
231 IPC::SyncChannel::Create(channel_name_,
232 IPC::Channel::MODE_CLIENT,
233 this,
234 ChildProcess::current()->io_message_loop_proxy(),
235 true,
236 ChildProcess::current()->GetShutDownEvent());
237 #ifdef IPC_MESSAGE_LOG_ENABLED 266 #ifdef IPC_MESSAGE_LOG_ENABLED
238 if (!in_browser_process_) 267 if (!in_browser_process_)
239 IPC::Logging::GetInstance()->SetIPCSender(this); 268 IPC::Logging::GetInstance()->SetIPCSender(this);
240 #endif 269 #endif
241 270
242 mojo_application_.reset(new MojoApplication); 271 mojo_application_.reset(new MojoApplication);
243 272
244 sync_message_filter_ = 273 sync_message_filter_ =
245 new IPC::SyncMessageFilter(ChildProcess::current()->GetShutDownEvent()); 274 new IPC::SyncMessageFilter(ChildProcess::current()->GetShutDownEvent());
246 thread_safe_sender_ = new ThreadSafeSender( 275 thread_safe_sender_ = new ThreadSafeSender(
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 // inflight that would addref it. 582 // inflight that would addref it.
554 Send(new ChildProcessHostMsg_ShutdownRequest); 583 Send(new ChildProcessHostMsg_ShutdownRequest);
555 } 584 }
556 585
557 void ChildThread::EnsureConnected() { 586 void ChildThread::EnsureConnected() {
558 VLOG(0) << "ChildThread::EnsureConnected()"; 587 VLOG(0) << "ChildThread::EnsureConnected()";
559 base::KillProcess(base::GetCurrentProcessHandle(), 0, false); 588 base::KillProcess(base::GetCurrentProcessHandle(), 0, false);
560 } 589 }
561 590
562 } // namespace content 591 } // namespace content
OLDNEW
« no previous file with comments | « content/child/child_thread.h ('k') | content/common/BUILD.gn » ('j') | ipc/ipc_channel.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698