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 #ifndef CONTENT_BROWSER_MOJO_MOJO_APPLICATION_HOST_H_ 6 #define CONTENT_BROWSER_MOJO_MOJO_APPLICATION_HOST_H_ 7 8 #include "base/process/process_handle.h" 9 #include "content/common/mojo/service_registry_impl.h" 10 #include "mojo/embedder/channel_init.h" 11 #include "mojo/embedder/scoped_platform_handle.h" 12 13 namespace IPC { 14 class Sender; 15 } 16 17 namespace content { 18 19 // MojoApplicationHost represents the code needed on the browser side to setup 20 // a child process as a Mojo application via Chrome IPC. The child process 21 // should use MojoApplication to handle messages generated by an instance of 22 // MojoApplicationHost. MojoApplicationHost makes the ServiceRegistry interface 23 // available so that child-provided services can be invoked. 24 class MojoApplicationHost { 25 public: 26 MojoApplicationHost(); 27 virtual ~MojoApplicationHost(); 28 29 // Two-phase initialization: 30 // 1- Init makes service_registry() available synchronously. 31 // 2- Activate establishes the actual connection to the peer process. 32 bool Init(); 33 bool Activate(IPC::Sender* sender, base::ProcessHandle process_handle); 34 35 void WillDestroySoon(); 36 did_activate()37 bool did_activate() const { return did_activate_; } 38 service_registry()39 ServiceRegistry* service_registry() { return &service_registry_; } 40 41 private: 42 mojo::embedder::ChannelInit channel_init_; 43 mojo::embedder::ScopedPlatformHandle client_handle_; 44 45 bool did_activate_; 46 47 ServiceRegistryImpl service_registry_; 48 49 DISALLOW_COPY_AND_ASSIGN(MojoApplicationHost); 50 }; 51 52 } // namespace content 53 54 #endif // CONTENT_BROWSER_MOJO_MOJO_APPLICATION_HOST_H_ 55