app_child_process_host.cc revision 23730a6e56a168d1879203e4b3819bb36e3d8f1f
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#include "mojo/shell/app_child_process_host.h" 6 7#include "base/logging.h" 8#include "base/message_loop/message_loop.h" 9#include "mojo/embedder/embedder.h" 10#include "mojo/public/system/core_cpp.h" 11#include "mojo/shell/context.h" 12#include "mojo/shell/task_runners.h" 13 14namespace mojo { 15namespace shell { 16 17AppChildProcessHost::AppChildProcessHost( 18 Context* context, 19 mojo_shell::AppChildControllerClient* controller_client) 20 : ChildProcessHost(context, this, ChildProcess::TYPE_APP), 21 controller_client_(controller_client), 22 channel_info_(NULL) { 23} 24 25AppChildProcessHost::~AppChildProcessHost() { 26} 27 28void AppChildProcessHost::WillStart() { 29 DCHECK(platform_channel()->is_valid()); 30 31 mojo::ScopedMessagePipeHandle child_message_pipe(embedder::CreateChannel( 32 platform_channel()->Pass(), 33 context()->task_runners()->io_runner(), 34 base::Bind(&AppChildProcessHost::DidCreateChannel, 35 base::Unretained(this)), 36 base::MessageLoop::current()->message_loop_proxy())); 37 controller_.reset( 38 mojo_shell::ScopedAppChildControllerHandle( 39 mojo_shell::AppChildControllerHandle( 40 child_message_pipe.release().value())), controller_client_); 41} 42 43void AppChildProcessHost::DidStart(bool success) { 44 DVLOG(2) << "AppChildProcessHost::DidStart()"; 45 46 if (!success) { 47 LOG(ERROR) << "Failed to start app child process"; 48 controller_client_->AppCompleted(MOJO_RESULT_UNKNOWN); 49 return; 50 } 51} 52 53// Callback for |embedder::CreateChannel()|. 54void AppChildProcessHost::DidCreateChannel( 55 embedder::ChannelInfo* channel_info) { 56 DVLOG(2) << "AppChildProcessHost::DidCreateChannel()"; 57 58 CHECK(channel_info); 59 channel_info_ = channel_info; 60} 61 62} // namespace shell 63} // namespace mojo 64