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