nacl_process_host.h revision effb81e5f8246d0db0270817048dc992db66e9fb
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) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_util_proxy.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 15bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/process/process.h" 16a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "components/nacl/common/nacl_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host_delegate.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_child_process_host_iterator.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_channel_handle.h" 20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/socket/socket_descriptor.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_permissions.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserChildProcessHost; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserPpapiHost; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChannelProxy; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace nacl { 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class NaClHostMessageFilter; 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void* AllocateAddressSpaceASLR(base::ProcessHandle process, size_t size); 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Represents the browser side of the browser <--> NaCl communication 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// channel. There will be one NaClProcessHost per NaCl process 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The browser is responsible for starting the NaCl process 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// when requested by the renderer. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// After that, most of the communication is directly between NaCl plugin 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// running in the renderer and NaCl processes. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NaClProcessHost : public content::BrowserChildProcessHostDelegate { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // manifest_url: the URL of the manifest of the Native Client plugin being 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // executed. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // render_view_id: RenderView routing id, to control access to private APIs. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission_bits: controls which interfaces the NaCl plugin can use. 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // uses_irt: whether the launched process should use the IRT. 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // uses_nonsfi_mode: whether the program should be loaded under non-SFI mode. 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // enable_dyncode_syscalls: whether the launched process should allow dyncode 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // and mmap with PROT_EXEC. 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // enable_exception_handling: whether the launched process should allow 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // hardware exception handling. 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // enable_crash_throttling: whether a crash of this process contributes 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // to the crash throttling statistics, and also 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // whether this process should not start when too 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // many crashes have been observed. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // off_the_record: was the process launched from an incognito renderer? 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // profile_directory: is the path of current profile directory. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NaClProcessHost(const GURL& manifest_url, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 permission_bits, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool uses_irt, 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool uses_nonsfi_mode, 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_dyncode_syscalls, 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool enable_exception_handling, 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool enable_crash_throttling, 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool off_the_record, 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& profile_directory); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NaClProcessHost(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void OnProcessCrashed(int exit_status) OVERRIDE; 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do any minimal work that must be done at browser startup. 778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) static void EarlyStartup(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Specifies throttling time in milliseconds for PpapiHostMsg_Keepalive IPCs. 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static void SetPpapiKeepAliveThrottleForTesting(unsigned milliseconds); 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the new NaCl process. Result is returned by sending ipc 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // message reply_msg. 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void Launch(NaClHostMessageFilter* nacl_host_message_filter, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg, 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath& manifest_path); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnProcessLaunchedByBroker(base::ProcessHandle handle); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDebugExceptionHandlerLaunchedByBroker(bool success); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Send(IPC::Message* msg); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserChildProcessHost* process() { return process_.get(); } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserPpapiHost* browser_ppapi_host() { return ppapi_host_.get(); } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Internal class that holds the NaClHandle objecs so that 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // nacl_process_host.h doesn't include NaCl headers. Needed since it's 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // included by src\content, which can't depend on the NaCl gyp file because it 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // depends on chrome.gyp (circular dependency). 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NaClInternal; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool LaunchNaClGdb(); 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create bound TCP socket in the browser process so that the NaCl GDB debug 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // stub can use it to accept incoming connections even when the Chrome sandbox 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is enabled. 113424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::SocketDescriptor GetDebugStubSocketHandle(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool LaunchSelLdr(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserChildProcessHostDelegate implementation: 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnProcessLaunched() OVERRIDE; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnResourcesReady(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable the PPAPI proxy only for NaCl processes corresponding to a renderer. 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool enable_ppapi_proxy() { return render_view_id_ != 0; } 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sends the reply message to the renderer who is waiting for the plugin 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to load. Returns true on success. 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool ReplyToRenderer(const IPC::ChannelHandle& ppapi_channel_handle, 129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const IPC::ChannelHandle& trusted_channel_handle); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 131ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Sends the reply with error message to the renderer. 132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void SendErrorToRenderer(const std::string& error_message); 133ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 134ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Sends the reply message to the renderer. Either result or 135ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // error message must be empty. 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendMessageToRenderer(const NaClLaunchResult& result, 137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& error_message); 138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sends the message to the NaCl process to load the plugin. Returns true 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on success. 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool StartNaClExecution(); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Does post-process-launching tasks for starting the NaCl process once 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we have a connection. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false on failure. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool StartWithLaunchedProcess(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers for validation caching. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnQueryKnownToValidate(const std::string& signature, bool* result); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetKnownToValidate(const std::string& signature); 15290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnResolveFileToken(uint64 file_token_lo, uint64 file_token_hi, 15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) IPC::Message* reply_msg); 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void FileResolved(const base::FilePath& file_path, 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IPC::Message* reply_msg, 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::File file); 15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handler for Windows hardware exception handling. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAttachDebugExceptionHandler(const std::string& info, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool AttachDebugExceptionHandler(const std::string& info, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Called when the PPAPI IPC channels to the browser/renderer have been 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // created. 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnPpapiChannelsCreated( 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const IPC::ChannelHandle& browser_channel_handle, 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const IPC::ChannelHandle& ppapi_renderer_channel_handle, 171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const IPC::ChannelHandle& trusted_renderer_channel_handle); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL manifest_url_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::PpapiPermissions permissions_; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This field becomes true when the broker successfully launched 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the NaCl loader. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool process_launched_by_broker_; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The NaClHostMessageFilter that requested this NaCl process. We use 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this for sending the reply once the process has started. 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<NaClHostMessageFilter> nacl_host_message_filter_; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The reply message to send. We must always send this message when the 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sub-process either succeeds or fails to unblock the renderer waiting for 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the reply. NULL when there is no reply to send. 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg_; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool debug_exception_handler_requested_; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<IPC::Message> attach_debug_exception_handler_reply_msg_; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The file path to the manifest is passed to nacl-gdb when it is used to 195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // debug the NaCl loader. 196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath manifest_path_; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Socket pairs for the NaCl process and renderer. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<NaClInternal> internal_; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtrFactory<NaClProcessHost> weak_factory_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::BrowserChildProcessHost> process_; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool uses_irt_; 206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool uses_nonsfi_mode_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool enable_debug_stub_; 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_dyncode_syscalls_; 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool enable_exception_handling_; 2113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool enable_crash_throttling_; 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool off_the_record_; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath profile_directory_; 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Channel proxy to terminate the NaCl-Browser PPAPI channel. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<IPC::ChannelProxy> ipc_proxy_channel_; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Browser host for plugin process. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::BrowserPpapiHost> ppapi_host_; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id_; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Throttling time in milliseconds for PpapiHostMsg_Keepalive IPCs. 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static unsigned keepalive_throttle_interval_milliseconds_; 226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NaClProcessHost); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace nacl 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // COMPONENTS_NACL_BROWSER_NACL_PROCESS_HOST_H_ 233