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
|
// Copyright 2013 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.
// Defines messages between the browser and NaCl process.
// Multiply-included message file, no traditional include guard.
#include "base/process/process.h"
#include "components/nacl/common/nacl_types.h"
#include "components/nacl/common/nacl_types_param_traits.h"
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_message_macros.h"
#include "ipc/ipc_platform_file.h"
#define IPC_MESSAGE_START NaClMsgStart
IPC_STRUCT_TRAITS_BEGIN(nacl::NaClStartParams)
IPC_STRUCT_TRAITS_MEMBER(nexe_file)
IPC_STRUCT_TRAITS_MEMBER(nexe_file_path_metadata)
IPC_STRUCT_TRAITS_MEMBER(imc_bootstrap_handle)
IPC_STRUCT_TRAITS_MEMBER(irt_handle)
#if defined(OS_MACOSX)
IPC_STRUCT_TRAITS_MEMBER(mac_shm_fd)
#endif
#if defined(OS_POSIX)
IPC_STRUCT_TRAITS_MEMBER(debug_stub_server_bound_socket)
#endif
#if defined(OS_LINUX) || defined(OS_NACL_NONSFI)
IPC_STRUCT_TRAITS_MEMBER(ppapi_browser_channel_handle)
IPC_STRUCT_TRAITS_MEMBER(ppapi_renderer_channel_handle)
IPC_STRUCT_TRAITS_MEMBER(trusted_service_channel_handle)
IPC_STRUCT_TRAITS_MEMBER(manifest_service_channel_handle)
#endif
IPC_STRUCT_TRAITS_MEMBER(validation_cache_enabled)
IPC_STRUCT_TRAITS_MEMBER(validation_cache_key)
IPC_STRUCT_TRAITS_MEMBER(version)
IPC_STRUCT_TRAITS_MEMBER(enable_debug_stub)
IPC_STRUCT_TRAITS_MEMBER(enable_ipc_proxy)
IPC_STRUCT_TRAITS_MEMBER(process_type)
IPC_STRUCT_TRAITS_MEMBER(crash_info_shmem_handle)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(nacl::NaClResourcePrefetchResult)
IPC_STRUCT_TRAITS_MEMBER(file)
IPC_STRUCT_TRAITS_MEMBER(file_path_metadata)
IPC_STRUCT_TRAITS_MEMBER(file_key)
IPC_STRUCT_TRAITS_END()
//-----------------------------------------------------------------------------
// NaClProcess messages
// These are messages sent between the browser and the NaCl process.
// Sends a prefetched resource file to a NaCl loader process. This message
// can be sent multiple times, but all of them must be done before sending
// NaClProcessMsg_Start.
IPC_MESSAGE_CONTROL1(NaClProcessMsg_AddPrefetchedResource,
nacl::NaClResourcePrefetchResult)
// Tells the NaCl process to start. This message can be sent only once.
IPC_MESSAGE_CONTROL1(NaClProcessMsg_Start,
nacl::NaClStartParams /* params */)
#if defined(OS_WIN)
// Tells the NaCl broker to launch a NaCl loader process.
IPC_MESSAGE_CONTROL1(NaClProcessMsg_LaunchLoaderThroughBroker,
std::string /* channel ID for the loader */)
// Notify the browser process that the loader was launched successfully.
IPC_MESSAGE_CONTROL2(NaClProcessMsg_LoaderLaunched,
std::string, /* channel ID for the loader */
base::ProcessHandle /* loader process handle */)
// Tells the NaCl broker to attach a debug exception handler to the
// given NaCl loader process.
IPC_MESSAGE_CONTROL3(NaClProcessMsg_LaunchDebugExceptionHandler,
int32 /* pid of the NaCl process */,
base::ProcessHandle /* handle of the NaCl process */,
std::string /* NaCl internal process layout info */)
// Notify the browser process that the broker process finished
// attaching a debug exception handler to the given NaCl loader
// process.
IPC_MESSAGE_CONTROL2(NaClProcessMsg_DebugExceptionHandlerLaunched,
int32 /* pid */,
bool /* success */)
// Notify the broker that all loader processes have been terminated and it
// should shutdown.
IPC_MESSAGE_CONTROL0(NaClProcessMsg_StopBroker)
// Used by the NaCl process to request that a Windows debug exception
// handler be attached to it.
IPC_SYNC_MESSAGE_CONTROL1_1(NaClProcessMsg_AttachDebugExceptionHandler,
std::string, /* Internal process info */
bool /* Result */)
// Notify the browser process that the NaCl process has bound the given
// TCP port number to use for the GDB debug stub.
IPC_MESSAGE_CONTROL1(NaClProcessHostMsg_DebugStubPortSelected,
uint16_t /* debug_stub_port */)
#endif
// Used by the NaCl process to query a database in the browser. The database
// contains the signatures of previously validated code chunks.
IPC_SYNC_MESSAGE_CONTROL1_1(NaClProcessMsg_QueryKnownToValidate,
std::string, /* A validation signature */
bool /* Can validation be skipped? */)
// Used by the NaCl process to add a validation signature to the validation
// database in the browser.
IPC_MESSAGE_CONTROL1(NaClProcessMsg_SetKnownToValidate,
std::string /* A validation signature */)
// Used by the NaCl process to acquire trusted information about a file directly
// from the browser, including the file's path as well as a fresh version of the
// file handle.
IPC_MESSAGE_CONTROL2(NaClProcessMsg_ResolveFileToken,
uint64, /* file_token_lo */
uint64 /* file_token_hi */)
IPC_MESSAGE_CONTROL4(NaClProcessMsg_ResolveFileTokenReply,
uint64, /* file_token_lo */
uint64, /* file_token_hi */
IPC::PlatformFileForTransit, /* fd */
base::FilePath /* Path opened to get fd */)
// Notify the browser process that the server side of the PPAPI channel was
// created successfully.
// This is used for SFI mode only. Non-SFI mode passes channel handles in
// NaClStartParams instead.
IPC_MESSAGE_CONTROL4(NaClProcessHostMsg_PpapiChannelsCreated,
IPC::ChannelHandle, /* browser_channel_handle */
IPC::ChannelHandle, /* ppapi_renderer_channel_handle */
IPC::ChannelHandle, /* trusted_renderer_channel_handle */
IPC::ChannelHandle /* manifest_service_channel_handle */)
|