1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef MOJO_SHELL_APP_CHILD_PROCESS_HOST_H_
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define MOJO_SHELL_APP_CHILD_PROCESS_HOST_H_
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/macros.h"
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "mojo/shell/app_child_process.mojom.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "mojo/shell/child_process_host.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace mojo {
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace embedder {
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)struct ChannelInfo;
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace shell {
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A subclass of |ChildProcessHost| to host a |TYPE_APP| child process, which
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// runs a single app (loaded from the file system).
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch//
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Note: After |Start()|, this object must remain alive until the controller
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// client's |AppCompleted()| is called.
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class AppChildProcessHost : public ChildProcessHost,
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            public ChildProcessHost::Delegate {
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  AppChildProcessHost(Context* context,
290de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)                      AppChildControllerClient* controller_client);
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~AppChildProcessHost();
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
320de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  AppChildController* controller() {
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    return controller_.get();
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // |ChildProcessHost::Delegate| methods:
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void WillStart() OVERRIDE;
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void DidStart(bool success) OVERRIDE;
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Callback for |embedder::CreateChannel()|.
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  void DidCreateChannel(embedder::ChannelInfo* channel_info);
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
440de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  AppChildControllerClient* const controller_client_;
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
460de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  AppChildControllerPtr controller_;
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  embedder::ChannelInfo* channel_info_;
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppChildProcessHost);
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace shell
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace mojo
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif  // MOJO_SHELL_APP_CHILD_PROCESS_HOST_H_
56