Home | History | Annotate | Download | only in common
      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