15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef COMPONENTS_NACL_BROWSER_NACL_PROCESS_HOST_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define COMPONENTS_NACL_BROWSER_NACL_PROCESS_HOST_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/files/file.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_util_proxy.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/memory/shared_memory.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h"
17bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/process/process.h"
18a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "components/nacl/common/nacl_types.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host_delegate.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host_iterator.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_channel_handle.h"
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "native_client/src/public/nacl_file_info.h"
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/socket/socket_descriptor.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_permissions.h"
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserChildProcessHost;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserPpapiHost;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChannelProxy;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace nacl {
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class NaClHostMessageFilter;
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void* AllocateAddressSpaceASLR(base::ProcessHandle process, size_t size);
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Represents the browser side of the browser <--> NaCl communication
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// channel. There will be one NaClProcessHost per NaCl process
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The browser is responsible for starting the NaCl process
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// when requested by the renderer.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// After that, most of the communication is directly between NaCl plugin
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// running in the renderer and NaCl processes.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NaClProcessHost : public content::BrowserChildProcessHostDelegate {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // manifest_url: the URL of the manifest of the Native Client plugin being
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // executed.
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // nexe_file: A file that corresponds to the nexe module to be loaded.
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // nexe_token: A cache validation token for nexe_file.
536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // permissions: PPAPI permissions, to control access to private APIs.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // render_view_id: RenderView routing id, to control access to private APIs.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // permission_bits: controls which interfaces the NaCl plugin can use.
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // uses_irt: whether the launched process should use the IRT.
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // uses_nonsfi_mode: whether the program should be loaded under non-SFI mode.
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // enable_dyncode_syscalls: whether the launched process should allow dyncode
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  //                          and mmap with PROT_EXEC.
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // enable_exception_handling: whether the launched process should allow
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  //                            hardware exception handling.
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // enable_crash_throttling: whether a crash of this process contributes
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  //                          to the crash throttling statistics, and also
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  //                          whether this process should not start when too
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  //                          many crashes have been observed.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // off_the_record: was the process launched from an incognito renderer?
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // profile_directory: is the path of current profile directory.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NaClProcessHost(const GURL& manifest_url,
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  base::File nexe_file,
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                  const NaClFileToken& nexe_token,
716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                  ppapi::PpapiPermissions permissions,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  int render_view_id,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  uint32 permission_bits,
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  bool uses_irt,
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                  bool uses_nonsfi_mode,
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  bool enable_dyncode_syscalls,
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                  bool enable_exception_handling,
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                  bool enable_crash_throttling,
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  bool off_the_record,
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  const base::FilePath& profile_directory);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~NaClProcessHost();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnProcessCrashed(int exit_status) OVERRIDE;
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Do any minimal work that must be done at browser startup.
868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  static void EarlyStartup();
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Specifies throttling time in milliseconds for PpapiHostMsg_Keepalive IPCs.
89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  static void SetPpapiKeepAliveThrottleForTesting(unsigned milliseconds);
90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initialize the new NaCl process. Result is returned by sending ipc
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // message reply_msg.
937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void Launch(NaClHostMessageFilter* nacl_host_message_filter,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              IPC::Message* reply_msg,
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch              const base::FilePath& manifest_path);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnProcessLaunchedByBroker(base::ProcessHandle handle);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDebugExceptionHandlerLaunchedByBroker(bool success);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool Send(IPC::Message* msg);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::BrowserChildProcessHost* process() { return process_.get(); }
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::BrowserPpapiHost* browser_ppapi_host() { return ppapi_host_.get(); }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool LaunchNaClGdb();
1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Mark the process as using a particular GDB debug stub port and notify
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // listeners (if the port is not kGdbDebugStubPortUnknown).
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void SetDebugStubPort(int port);
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create bound TCP socket in the browser process so that the NaCl GDB debug
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // stub can use it to accept incoming connections even when the Chrome sandbox
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is enabled.
120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  net::SocketDescriptor GetDebugStubSocketHandle();
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_WIN)
124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Called when the debug stub port has been selected.
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnDebugStubPortSelected(uint16_t debug_stub_port);
126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool LaunchSelLdr();
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // BrowserChildProcessHostDelegate implementation:
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnProcessLaunched() OVERRIDE;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnResourcesReady();
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enable the PPAPI proxy only for NaCl processes corresponding to a renderer.
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool enable_ppapi_proxy() { return render_view_id_ != 0; }
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sends the reply message to the renderer who is waiting for the plugin
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to load. Returns true on success.
1410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  bool ReplyToRenderer(
1420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const IPC::ChannelHandle& ppapi_channel_handle,
1430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const IPC::ChannelHandle& trusted_channel_handle,
1440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const IPC::ChannelHandle& manifest_service_channel_handle);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Sends the reply with error message to the renderer.
147ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void SendErrorToRenderer(const std::string& error_message);
148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Sends the reply message to the renderer. Either result or
150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // error message must be empty.
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SendMessageToRenderer(const NaClLaunchResult& result,
152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                             const std::string& error_message);
153ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sends the message to the NaCl process to load the plugin. Returns true
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // on success.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool StartNaClExecution();
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does post-process-launching tasks for starting the NaCl process once
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // we have a connection.
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns false on failure.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool StartWithLaunchedProcess();
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Message handlers for validation caching.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnQueryKnownToValidate(const std::string& signature, bool* result);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnSetKnownToValidate(const std::string& signature);
16790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void OnResolveFileToken(uint64 file_token_lo, uint64 file_token_hi,
16890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                          IPC::Message* reply_msg);
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void OnResolveFileTokenAsync(uint64 file_token_lo, uint64 file_token_hi);
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void FileResolved(const base::FilePath& file_path,
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    IPC::Message* reply_msg,
172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    base::File file);
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void FileResolvedAsync(uint64_t file_token_lo,
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                         uint64_t file_token_hi,
1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                         const base::FilePath& file_path,
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                         base::File file);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Message handler for Windows hardware exception handling.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnAttachDebugExceptionHandler(const std::string& info,
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     IPC::Message* reply_msg);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool AttachDebugExceptionHandler(const std::string& info,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   IPC::Message* reply_msg);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Called when the PPAPI IPC channels to the browser/renderer have been
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // created.
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnPpapiChannelsCreated(
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const IPC::ChannelHandle& browser_channel_handle,
189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const IPC::ChannelHandle& ppapi_renderer_channel_handle,
1900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const IPC::ChannelHandle& trusted_renderer_channel_handle,
1910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const IPC::ChannelHandle& manifest_service_channel_handle);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL manifest_url_;
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::File nexe_file_;
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  NaClFileToken nexe_token_;
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ppapi::PpapiPermissions permissions_;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This field becomes true when the broker successfully launched
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the NaCl loader.
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool process_launched_by_broker_;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // The NaClHostMessageFilter that requested this NaCl process.  We use
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // this for sending the reply once the process has started.
2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<NaClHostMessageFilter> nacl_host_message_filter_;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The reply message to send. We must always send this message when the
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sub-process either succeeds or fails to unblock the renderer waiting for
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the reply. NULL when there is no reply to send.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC::Message* reply_msg_;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool debug_exception_handler_requested_;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<IPC::Message> attach_debug_exception_handler_reply_msg_;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The file path to the manifest is passed to nacl-gdb when it is used to
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // debug the NaCl loader.
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::FilePath manifest_path_;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<content::BrowserChildProcessHost> process_;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool uses_irt_;
224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool uses_nonsfi_mode_;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool enable_debug_stub_;
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool enable_dyncode_syscalls_;
2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool enable_exception_handling_;
2293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool enable_crash_throttling_;
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool off_the_record_;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const base::FilePath profile_directory_;
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Channel proxy to terminate the NaCl-Browser PPAPI channel.
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<IPC::ChannelProxy> ipc_proxy_channel_;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Browser host for plugin process.
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<content::BrowserPpapiHost> ppapi_host_;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int render_view_id_;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Throttling time in milliseconds for PpapiHostMsg_Keepalive IPCs.
243effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  static unsigned keepalive_throttle_interval_milliseconds_;
244effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
24503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Shared memory provided to the plugin and renderer for
24603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // reporting crash information.
24703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::SharedMemory crash_info_shmem_;
24803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::File socket_for_renderer_;
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::File socket_for_sel_ldr_;
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::WeakPtrFactory<NaClProcessHost> weak_factory_;
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NaClProcessHost);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace nacl
258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // COMPONENTS_NACL_BROWSER_NACL_PROCESS_HOST_H_
260