1// Copyright (c) 2012 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 COMPONENTS_NACL_BROWSER_NACL_BROKER_HOST_WIN_H_
6#define COMPONENTS_NACL_BROWSER_NACL_BROKER_HOST_WIN_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/memory/scoped_ptr.h"
12#include "base/process/process.h"
13#include "content/public/browser/browser_child_process_host_delegate.h"
14
15namespace content {
16class BrowserChildProcessHost;
17}
18
19namespace nacl {
20
21class NaClBrokerHost : public content::BrowserChildProcessHostDelegate {
22 public:
23  NaClBrokerHost();
24  ~NaClBrokerHost();
25
26  // This function starts the broker process. It needs to be called
27  // before loaders can be launched.
28  bool Init();
29
30  // Send a message to the broker process, causing it to launch
31  // a Native Client loader process.
32  bool LaunchLoader(const std::string& loader_channel_id);
33
34  bool LaunchDebugExceptionHandler(int32 pid,
35                                   base::ProcessHandle process_handle,
36                                   const std::string& startup_info);
37
38  // Stop the broker process.
39  void StopBroker();
40
41  // Returns true if the process has been asked to terminate. If true, this
42  // object should no longer be used; it will eventually be destroyed by
43  // BrowserChildProcessHostImpl::OnChildDisconnected()
44  bool IsTerminating() { return is_terminating_; }
45
46 private:
47  // Handler for NaClProcessMsg_LoaderLaunched message
48  void OnLoaderLaunched(const std::string& loader_channel_id,
49                        base::ProcessHandle handle);
50  // Handler for NaClProcessMsg_DebugExceptionHandlerLaunched message
51  void OnDebugExceptionHandlerLaunched(int32 pid, bool success);
52
53  // BrowserChildProcessHostDelegate implementation:
54  virtual bool OnMessageReceived(const IPC::Message& msg);
55
56  scoped_ptr<content::BrowserChildProcessHost> process_;
57  bool is_terminating_;
58
59  DISALLOW_COPY_AND_ASSIGN(NaClBrokerHost);
60};
61
62}  // namespace nacl
63
64#endif  // COMPONENTS_NACL_BROWSER_NACL_BROKER_HOST_WIN_H_
65