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/process/process_handle.h"
     13 #include "build/build_config.h"
     14 #include "ipc/ipc_channel.h"
     15 
     16 #if defined(OS_POSIX)
     17 #include "base/file_descriptor_posix.h"
     18 #endif
     19 
     20 #if defined(OS_WIN)
     21 #include <windows.h>   // for HANDLE
     22 #endif
     23 
     24 // TODO(gregoryd): add a Windows definition for base::FileDescriptor
     25 namespace nacl {
     26 
     27 #if defined(OS_WIN)
     28 typedef HANDLE FileDescriptor;
     29 inline HANDLE ToNativeHandle(const FileDescriptor& desc) {
     30   return desc;
     31 }
     32 #elif defined(OS_POSIX)
     33 typedef base::FileDescriptor FileDescriptor;
     34 inline int ToNativeHandle(const FileDescriptor& desc) {
     35   return desc.fd;
     36 }
     37 #endif
     38 
     39 
     40 // Parameters sent to the NaCl process when we start it.
     41 //
     42 // If you change this, you will also need to update the IPC serialization in
     43 // nacl_messages.h.
     44 struct NaClStartParams {
     45   NaClStartParams();
     46   ~NaClStartParams();
     47 
     48   std::vector<FileDescriptor> handles;
     49   FileDescriptor debug_stub_server_bound_socket;
     50 
     51   bool validation_cache_enabled;
     52   std::string validation_cache_key;
     53   // Chrome version string. Sending the version string over IPC avoids linkage
     54   // issues in cases where NaCl is not compiled into the main Chromium
     55   // executable or DLL.
     56   std::string version;
     57 
     58   bool enable_exception_handling;
     59   bool enable_debug_stub;
     60   bool enable_ipc_proxy;
     61   bool uses_irt;
     62   bool enable_dyncode_syscalls;
     63 };
     64 
     65 // Parameters sent to the browser process to have it launch a NaCl process.
     66 //
     67 // If you change this, you will also need to update the IPC serialization in
     68 // nacl_host_messages.h.
     69 struct NaClLaunchParams {
     70   NaClLaunchParams();
     71   NaClLaunchParams(const std::string& u, int r, uint32 p, bool uses_irt,
     72                    bool enable_dyncode_syscalls,
     73                    bool enable_exception_handling,
     74                    bool enable_crash_throttling);
     75   NaClLaunchParams(const NaClLaunchParams& l);
     76   ~NaClLaunchParams();
     77 
     78   std::string manifest_url;
     79   int render_view_id;
     80   uint32 permission_bits;
     81   bool uses_irt;
     82   bool enable_dyncode_syscalls;
     83   bool enable_exception_handling;
     84   bool enable_crash_throttling;
     85 };
     86 
     87 struct NaClLaunchResult {
     88   NaClLaunchResult();
     89   NaClLaunchResult(FileDescriptor imc_channel_handle,
     90                    const IPC::ChannelHandle& ipc_channel_handle,
     91                    base::ProcessId plugin_pid,
     92                    int plugin_child_id);
     93   ~NaClLaunchResult();
     94 
     95   FileDescriptor imc_channel_handle;
     96   IPC::ChannelHandle ipc_channel_handle;
     97   base::ProcessId plugin_pid;
     98   int plugin_child_id;
     99 };
    100 
    101 }  // namespace nacl
    102 
    103 #endif  // COMPONENTS_NACL_COMMON_NACL_TYPES_H_
    104