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