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