summaryrefslogtreecommitdiffstats
path: root/ppapi/api/private/ppb_nacl_private.idl
blob: 9e4e898abe941137e65e8f917803d77728843ae1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/* This file contains NaCl private interfaces. This interface is not versioned
 * and is for internal Chrome use. It may change without notice. */

#inline c
#include "ppapi/c/private/pp_file_handle.h"
#include "ppapi/c/private/ppb_instance_private.h"
#endinl

/** NaCl-specific errors that should be reported to the user */
enum PP_NaClError {
  /**
   *  The manifest program element does not contain a program usable on the
   *  user's architecture
  */
  PP_NACL_MANIFEST_MISSING_ARCH = 0
};

/* PPB_NaCl_Private */
interface PPB_NaCl_Private {
  /* Launches NaCl's sel_ldr process.  Returns PP_EXTERNAL_PLUGIN_OK on success
   * and writes a NaClHandle to imc_handle. Returns PP_EXTERNAL_PLUGIN_FAILED on
   * failure. The |enable_ppapi_dev| parameter controls whether GetInterface
   * returns 'Dev' interfaces to the NaCl plugin.  The |uses_ppapi| flag
   * indicates that the nexe run by sel_ldr will use the PPAPI APIs.
   * This implies that LaunchSelLdr is run from the main thread.  If a nexe
   * does not need PPAPI, then it can run off the main thread.
   * The |uses_irt| flag indicates whether the IRT should be loaded in this
   * NaCl process.  This is true for ABI stable nexes.
   * The |enable_dyncode_syscalls| flag indicates whether or not the nexe
   * will be able to use dynamic code system calls (e.g., mmap with PROT_EXEC).
   * The |enable_exception_handling| flag indicates whether or not the nexe
   * will be able to use hardware exception handling.
   */
  PP_ExternalPluginResult LaunchSelLdr([in] PP_Instance instance,
                                       [in] str_t alleged_url,
                                       [in] PP_Bool uses_irt,
                                       [in] PP_Bool uses_ppapi,
                                       [in] PP_Bool enable_ppapi_dev,
                                       [in] PP_Bool enable_dyncode_syscalls,
                                       [in] PP_Bool enable_exception_handling,
                                       [out] mem_t imc_handle,
                                       [out] PP_Var error_message);

  /* This function starts the IPC proxy so the nexe can communicate with the
   * browser. Returns PP_EXTERNAL_PLUGIN_OK on success, otherwise a result code
   * indicating the failure. PP_EXTERNAL_PLUGIN_FAILED is returned if
   * LaunchSelLdr wasn't called with the instance.
   * PP_EXTERNAL_PLUGIN_ERROR_MODULE is returned if the module can't be
   * initialized. PP_EXTERNAL_PLUGIN_ERROR_INSTANCE is returned if the instance
   * can't be initialized.
   */
  PP_ExternalPluginResult StartPpapiProxy(PP_Instance instance);

  /* On POSIX systems, this function returns the file descriptor of
   * /dev/urandom.  On non-POSIX systems, this function returns 0.
   */
  int32_t UrandomFD();

  /* Whether the Pepper 3D interfaces should be disabled in the NaCl PPAPI
   * proxy. This is so paranoid admins can effectively prevent untrusted shader
   * code to be processed by the graphics stack.
   */
  PP_Bool Are3DInterfacesDisabled();

  /* This is Windows-specific.  This is a replacement for DuplicateHandle() for
   * use inside the Windows sandbox.  Note that we provide this via dependency
   * injection only to avoid the linkage problems that occur because the NaCl
   * plugin is built as a separate DLL/DSO
   * (see http://code.google.com/p/chromium/issues/detail?id=114439#c8).
   */
  int32_t BrokerDuplicateHandle([in] PP_FileHandle source_handle,
                                [in] uint32_t process_id,
                                [out] PP_FileHandle target_handle,
                                [in] uint32_t desired_access,
                                [in] uint32_t options);

  /* Returns a read-only file descriptor of a file rooted in the Pnacl
   * component directory, or an invalid handle on failure.
   * Do we want this to take a completion callback and be async, or
   * could we make this happen on another thread?
   */
  PP_FileHandle GetReadonlyPnaclFd([in] str_t filename);

  /* This creates a temporary file that will be deleted by the time
   * the last handle is closed (or earlier on POSIX systems), and
   * returns a posix handle to that temporary file.
   */
  PP_FileHandle CreateTemporaryFile([in] PP_Instance instance);

  /* Create a temporary file, which will be deleted by the time the last
   * handle is closed (or earlier on POSIX systems), to use for the nexe
   * with the cache information given by |pexe_url|, |abi_version|, |opt_level|,
   * |last_modified|, and |etag|. If the nexe is already present
   * in the cache, |is_hit| is set to PP_TRUE and the contents of the nexe
   * will be copied into the temporary file. Otherwise |is_hit| is set to
   * PP_FALSE and the temporary file will be writeable.
   * Currently the implementation is a stub, which always sets is_hit to false
   * and calls the implementation of CreateTemporaryFile. In a subsequent CL
   * it will call into the browser which will remember the association between
   * the cache key and the fd, and copy the nexe into the cache after the
   * translation finishes.
   */
  int32_t GetNexeFd([in] PP_Instance instance,
                    [in] str_t pexe_url,
                    [in] uint32_t abi_version,
                    [in] uint32_t opt_level,
                    [in] str_t last_modified,
                    [in] str_t etag,
                    [out] PP_Bool is_hit,
                    [out] PP_FileHandle nexe_handle,
                    [in] PP_CompletionCallback callback);

  /* Report to the browser that translation of the pexe for |instance|
   * has finished. The browser may then store the translation in the
   * cache. The renderer must first have called GetNexeFd for the same
   * instance. (It is not guaranteed to, however; if there is an error
   * or the file is too big for the cache, or the browser is in incognito
   * mode, no notification will be delivered to the plugin.)
   */
  void ReportTranslationFinished([in] PP_Instance instance);

  /* Return true if we are off the record.
   */
  PP_Bool IsOffTheRecord();

  /* Return true if PNaCl is turned on.
   */
  PP_Bool IsPnaclEnabled();

  /* Display a UI message to the user. */
  PP_ExternalPluginResult ReportNaClError([in] PP_Instance instance,
                                          [in] PP_NaClError message_id);

  /* Opens a NaCl executable file in the application's extension directory
   * corresponding to the file URL and returns a file descriptor, or an invalid
   * handle on failure. |metadata| is left unchanged on failure.
   */
  PP_FileHandle OpenNaClExecutable([in] PP_Instance instance,
                                   [in] str_t file_url,
                                   [out] uint64_t file_token_lo,
                                   [out] uint64_t file_token_hi);
};