1 // Copyright 2013 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_COMMON_NACL_TYPES_H_ 6 #define COMPONENTS_NACL_COMMON_NACL_TYPES_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/memory/shared_memory.h" 13 #include "base/process/process_handle.h" 14 #include "build/build_config.h" 15 #include "ipc/ipc_channel.h" 16 #include "ipc/ipc_platform_file.h" 17 18 #if defined(OS_POSIX) 19 #include "base/file_descriptor_posix.h" 20 #endif 21 22 #if defined(OS_WIN) 23 #include <windows.h> // for HANDLE 24 #endif 25 26 // TODO(gregoryd): add a Windows definition for base::FileDescriptor 27 namespace nacl { 28 29 #if defined(OS_WIN) 30 typedef HANDLE FileDescriptor; 31 inline HANDLE ToNativeHandle(const FileDescriptor& desc) { 32 return desc; 33 } 34 #elif defined(OS_POSIX) 35 typedef base::FileDescriptor FileDescriptor; 36 inline int ToNativeHandle(const FileDescriptor& desc) { 37 return desc.fd; 38 } 39 #endif 40 41 // We allocate a page of shared memory for sharing crash information from 42 // trusted code in the NaCl process to the renderer. 43 static const int kNaClCrashInfoShmemSize = 4096; 44 static const int kNaClCrashInfoMaxLogSize = 1024; 45 46 // Parameters sent to the NaCl process when we start it. 47 struct NaClStartParams { 48 NaClStartParams(); 49 ~NaClStartParams(); 50 51 IPC::PlatformFileForTransit nexe_file; 52 uint64_t nexe_token_lo; 53 uint64_t nexe_token_hi; 54 55 std::vector<FileDescriptor> handles; 56 FileDescriptor debug_stub_server_bound_socket; 57 58 bool validation_cache_enabled; 59 std::string validation_cache_key; 60 // Chrome version string. Sending the version string over IPC avoids linkage 61 // issues in cases where NaCl is not compiled into the main Chromium 62 // executable or DLL. 63 std::string version; 64 65 bool enable_exception_handling; 66 bool enable_debug_stub; 67 bool enable_ipc_proxy; 68 bool uses_irt; 69 bool enable_dyncode_syscalls; 70 71 // For NaCl <-> renderer crash information reporting. 72 base::SharedMemoryHandle crash_info_shmem_handle; 73 74 // NOTE: Any new fields added here must also be added to the IPC 75 // serialization in nacl_messages.h and (for POD fields) the constructor 76 // in nacl_types.cc. 77 }; 78 79 // Parameters sent to the browser process to have it launch a NaCl process. 80 // 81 // If you change this, you will also need to update the IPC serialization in 82 // nacl_host_messages.h. 83 struct NaClLaunchParams { 84 NaClLaunchParams(); 85 NaClLaunchParams(const std::string& manifest_url, 86 const IPC::PlatformFileForTransit& nexe_file, 87 uint64_t nexe_token_lo, 88 uint64_t nexe_token_hi, 89 int render_view_id, 90 uint32 permission_bits, 91 bool uses_irt, 92 bool uses_nonsfi_mode, 93 bool enable_dyncode_syscalls, 94 bool enable_exception_handling, 95 bool enable_crash_throttling); 96 ~NaClLaunchParams(); 97 98 std::string manifest_url; 99 // On Windows, the HANDLE passed here is valid in the renderer's context. 100 // It's the responsibility of the browser to duplicate this handle properly 101 // for passing it to the plugin. 102 IPC::PlatformFileForTransit nexe_file; 103 uint64_t nexe_token_lo; 104 uint64_t nexe_token_hi; 105 106 int render_view_id; 107 uint32 permission_bits; 108 bool uses_irt; 109 bool uses_nonsfi_mode; 110 bool enable_dyncode_syscalls; 111 bool enable_exception_handling; 112 bool enable_crash_throttling; 113 }; 114 115 struct NaClLaunchResult { 116 NaClLaunchResult(); 117 NaClLaunchResult( 118 FileDescriptor imc_channel_handle, 119 const IPC::ChannelHandle& ppapi_ipc_channel_handle, 120 const IPC::ChannelHandle& trusted_ipc_channel_handle, 121 const IPC::ChannelHandle& manifest_service_ipc_channel_handle, 122 base::ProcessId plugin_pid, 123 int plugin_child_id, 124 base::SharedMemoryHandle crash_info_shmem_handle); 125 ~NaClLaunchResult(); 126 127 // For plugin loader <-> renderer IMC communication. 128 FileDescriptor imc_channel_handle; 129 130 // For plugin <-> renderer PPAPI communication. 131 IPC::ChannelHandle ppapi_ipc_channel_handle; 132 133 // For plugin loader <-> renderer control communication (loading and 134 // starting nexe). 135 IPC::ChannelHandle trusted_ipc_channel_handle; 136 137 // For plugin <-> renderer ManifestService communication. 138 IPC::ChannelHandle manifest_service_ipc_channel_handle; 139 140 base::ProcessId plugin_pid; 141 int plugin_child_id; 142 143 // For NaCl <-> renderer crash information reporting. 144 base::SharedMemoryHandle crash_info_shmem_handle; 145 }; 146 147 } // namespace nacl 148 149 #endif // COMPONENTS_NACL_COMMON_NACL_TYPES_H_ 150