1 // Copyright (c) 2012 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.
5 // Multiply-included message file, so no include guard.
9 #endif // defined(OS_WIN)
14 #include "base/files/file_path.h"
15 #include "base/strings/string16.h"
16 #include "base/tuple.h"
17 #include "base/values.h"
18 #include "chrome/common/safe_browsing/zip_analyzer_results.h"
19 #include "ipc/ipc_message_macros.h"
20 #include "ipc/ipc_platform_file.h"
21 #include "third_party/skia/include/core/SkBitmap.h"
22 #include "ui/gfx/ipc/gfx_param_traits.h"
24 #if defined(FULL_SAFE_BROWSING)
25 #include "chrome/common/safe_browsing/ipc_protobuf_message_macros.h"
26 #include "chrome/common/safe_browsing/protobuf_message_param_traits.h"
29 // Singly-included section for typedefs.
30 #ifndef CHROME_COMMON_CHROME_UTILITY_MESSAGES_H_
31 #define CHROME_COMMON_CHROME_UTILITY_MESSAGES_H_
34 // A vector of filters, each being a Tuple containing a display string (i.e.
35 // "Text Files") and a filter pattern (i.e. "*.txt").
36 typedef std::vector
<Tuple
<base::string16
, base::string16
>>
37 GetOpenFileNameFilter
;
40 #endif // CHROME_COMMON_CHROME_UTILITY_MESSAGES_H_
42 #define IPC_MESSAGE_START ChromeUtilityMsgStart
44 #if defined(FULL_SAFE_BROWSING)
45 IPC_ENUM_TRAITS_VALIDATE(
46 safe_browsing::ClientDownloadRequest_DownloadType
,
47 safe_browsing::ClientDownloadRequest_DownloadType_IsValid(value
))
49 IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(safe_browsing::ClientDownloadRequest_Digests
)
50 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(sha256
)
51 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(sha1
)
52 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(md5
)
53 IPC_PROTOBUF_MESSAGE_TRAITS_END()
55 IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(
56 safe_browsing::ClientDownloadRequest_CertificateChain_Element
)
57 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(certificate
)
58 IPC_PROTOBUF_MESSAGE_TRAITS_END()
60 IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(
61 safe_browsing::ClientDownloadRequest_CertificateChain
)
62 IPC_PROTOBUF_MESSAGE_TRAITS_REPEATED_COMPLEX_MEMBER(element
)
63 IPC_PROTOBUF_MESSAGE_TRAITS_END()
65 IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(
66 safe_browsing::ClientDownloadRequest_SignatureInfo
)
67 IPC_PROTOBUF_MESSAGE_TRAITS_REPEATED_COMPLEX_MEMBER(certificate_chain
)
68 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_FUNDAMENTAL_MEMBER(trusted
)
69 IPC_PROTOBUF_MESSAGE_TRAITS_REPEATED_COMPLEX_MEMBER(signed_data
)
70 IPC_PROTOBUF_MESSAGE_TRAITS_END()
72 IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(
73 safe_browsing::ClientDownloadRequest_PEImageHeaders_DebugData
)
74 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(directory_entry
)
75 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(raw_data
)
76 IPC_PROTOBUF_MESSAGE_TRAITS_END()
78 IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(
79 safe_browsing::ClientDownloadRequest_PEImageHeaders
)
80 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(dos_header
)
81 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(file_header
)
82 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(optional_headers32
)
83 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(optional_headers64
)
84 IPC_PROTOBUF_MESSAGE_TRAITS_REPEATED_COMPLEX_MEMBER(section_header
)
85 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(export_section_data
)
86 IPC_PROTOBUF_MESSAGE_TRAITS_REPEATED_COMPLEX_MEMBER(debug_data
)
87 IPC_PROTOBUF_MESSAGE_TRAITS_END()
89 IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(
90 safe_browsing::ClientDownloadRequest_ImageHeaders
)
91 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(pe_headers
)
92 IPC_PROTOBUF_MESSAGE_TRAITS_END()
94 IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(
95 safe_browsing::ClientDownloadRequest_ArchivedBinary
)
96 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(file_basename
)
97 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_FUNDAMENTAL_MEMBER(download_type
)
98 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(digests
)
99 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_FUNDAMENTAL_MEMBER(length
)
100 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(signature
)
101 IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(image_headers
)
102 IPC_PROTOBUF_MESSAGE_TRAITS_END()
104 IPC_STRUCT_TRAITS_BEGIN(safe_browsing::zip_analyzer::Results
)
105 IPC_STRUCT_TRAITS_MEMBER(success
)
106 IPC_STRUCT_TRAITS_MEMBER(has_executable
)
107 IPC_STRUCT_TRAITS_MEMBER(has_archive
)
108 IPC_STRUCT_TRAITS_MEMBER(archived_binary
)
109 IPC_STRUCT_TRAITS_END()
110 #endif // FULL_SAFE_BROWSING
113 IPC_STRUCT_BEGIN(ChromeUtilityMsg_GetSaveFileName_Params
)
114 IPC_STRUCT_MEMBER(HWND
, owner
)
115 IPC_STRUCT_MEMBER(DWORD
, flags
)
116 IPC_STRUCT_MEMBER(GetOpenFileNameFilter
, filters
)
117 IPC_STRUCT_MEMBER(int, one_based_filter_index
)
118 IPC_STRUCT_MEMBER(base::FilePath
, suggested_filename
)
119 IPC_STRUCT_MEMBER(base::FilePath
, initial_directory
)
120 IPC_STRUCT_MEMBER(base::string16
, default_extension
)
124 //------------------------------------------------------------------------------
125 // Utility process messages:
126 // These are messages from the browser to the utility process.
128 // Tell the utility process to parse a JSON string into a Value object.
129 IPC_MESSAGE_CONTROL1(ChromeUtilityMsg_ParseJSON
,
130 std::string
/* JSON to parse */)
132 // Tell the utility process to decode the given image data.
133 IPC_MESSAGE_CONTROL3(ChromeUtilityMsg_DecodeImage
,
134 std::vector
<unsigned char> /* encoded image contents */,
135 bool /* shrink image if needed for IPC msg limit */,
136 int /* delegate id */)
138 // Tell the utility process to decode the given JPEG image data with a robust
140 IPC_MESSAGE_CONTROL2(ChromeUtilityMsg_RobustJPEGDecodeImage
,
141 std::vector
<unsigned char> /* encoded image contents*/,
142 int /* delegate id */)
144 // Tell the utility process to patch the given |input_file| using |patch_file|
145 // and place the output in |output_file|. The patch should use the bsdiff
146 // algorithm (Courgette's version).
147 IPC_MESSAGE_CONTROL3(ChromeUtilityMsg_PatchFileBsdiff
,
148 base::FilePath
/* input_file */,
149 base::FilePath
/* patch_file */,
150 base::FilePath
/* output_file */)
152 // Tell the utility process to patch the given |input_file| using |patch_file|
153 // and place the output in |output_file|. The patch should use the Courgette
155 IPC_MESSAGE_CONTROL3(ChromeUtilityMsg_PatchFileCourgette
,
156 base::FilePath
/* input_file */,
157 base::FilePath
/* patch_file */,
158 base::FilePath
/* output_file */)
160 #if defined(OS_CHROMEOS)
161 // Tell the utility process to create a zip file on the given list of files.
162 IPC_MESSAGE_CONTROL3(ChromeUtilityMsg_CreateZipFile
,
163 base::FilePath
/* src_dir */,
164 std::vector
<base::FilePath
> /* src_relative_paths */,
165 base::FileDescriptor
/* dest_fd */)
166 #endif // defined(OS_CHROMEOS)
168 // Requests the utility process to respond with a
169 // ChromeUtilityHostMsg_ProcessStarted message once it has started. This may
170 // be used if the host process needs a handle to the running utility process.
171 IPC_MESSAGE_CONTROL0(ChromeUtilityMsg_StartupPing
)
173 #if defined(FULL_SAFE_BROWSING)
174 // Tells the utility process to analyze a zip file for malicious download
175 // protection, providing a file that can be used temporarily to analyze binaries
176 // contained therein.
177 IPC_MESSAGE_CONTROL2(ChromeUtilityMsg_AnalyzeZipFileForDownloadProtection
,
178 IPC::PlatformFileForTransit
/* zip_file */,
179 IPC::PlatformFileForTransit
/* temp_file */)
183 // Invokes ui::base::win::OpenFileViaShell from the utility process.
184 IPC_MESSAGE_CONTROL1(ChromeUtilityMsg_OpenFileViaShell
,
185 base::FilePath
/* full_path */)
187 // Invokes ui::base::win::OpenFolderViaShell from the utility process.
188 IPC_MESSAGE_CONTROL1(ChromeUtilityMsg_OpenFolderViaShell
,
189 base::FilePath
/* full_path */)
191 // Instructs the utility process to invoke GetOpenFileName. |owner| is the
192 // parent of the modal dialog, |flags| are OFN_* flags. |filter| constrains the
193 // user's file choices. |initial_directory| and |filename| select the directory
194 // to be displayed and the file to be initially selected.
196 // Either ChromeUtilityHostMsg_GetOpenFileName_Failed or
197 // ChromeUtilityHostMsg_GetOpenFileName_Result will be returned when the
198 // operation completes whether due to error or user action.
199 IPC_MESSAGE_CONTROL5(ChromeUtilityMsg_GetOpenFileName
,
202 GetOpenFileNameFilter
/* filter */,
203 base::FilePath
/* initial_directory */,
204 base::FilePath
/* filename */)
205 IPC_MESSAGE_CONTROL1(ChromeUtilityMsg_GetSaveFileName
,
206 ChromeUtilityMsg_GetSaveFileName_Params
/* params */)
207 #endif // defined(OS_WIN)
209 #if defined(OS_ANDROID)
210 // Instructs the utility process to detect support for seccomp-bpf,
211 // and the result is reported through
212 // ChromeUtilityHostMsg_DetectSeccompSupport_Result.
213 IPC_MESSAGE_CONTROL0(ChromeUtilityMsg_DetectSeccompSupport
)
216 //------------------------------------------------------------------------------
217 // Utility process host messages:
218 // These are messages from the utility process to the browser.
220 // Reply when the utility process successfully parsed a JSON string.
222 // WARNING: The result can be of any Value subclass type, but we can't easily
223 // pass indeterminate value types by const object reference with our IPC macros,
224 // so we put the result Value into a ListValue. Handlers should examine the
225 // first (and only) element of the ListValue for the actual result.
226 IPC_MESSAGE_CONTROL1(ChromeUtilityHostMsg_ParseJSON_Succeeded
,
229 // Reply when the utility process failed in parsing a JSON string.
230 IPC_MESSAGE_CONTROL1(ChromeUtilityHostMsg_ParseJSON_Failed
,
231 std::string
/* error message, if any*/)
233 // Reply when the utility process has failed while unpacking and parsing a
234 // web resource. |error_message| is a user-readable explanation of what
236 IPC_MESSAGE_CONTROL1(ChromeUtilityHostMsg_UnpackWebResource_Failed
,
237 std::string
/* error_message, if any */)
239 // Reply when the utility process has succeeded in decoding the image.
240 IPC_MESSAGE_CONTROL2(ChromeUtilityHostMsg_DecodeImage_Succeeded
,
241 SkBitmap
/* decoded image */,
242 int /* delegate id */)
244 // Reply when an error occurred decoding the image.
245 IPC_MESSAGE_CONTROL1(ChromeUtilityHostMsg_DecodeImage_Failed
,
246 int /* delegate id */)
248 // Reply when a file has been patched.
249 IPC_MESSAGE_CONTROL1(ChromeUtilityHostMsg_PatchFile_Finished
, int /* result */)
251 #if defined(OS_CHROMEOS)
252 // Reply when the utility process has succeeded in creating the zip file.
253 IPC_MESSAGE_CONTROL0(ChromeUtilityHostMsg_CreateZipFile_Succeeded
)
255 // Reply when an error occured in creating the zip file.
256 IPC_MESSAGE_CONTROL0(ChromeUtilityHostMsg_CreateZipFile_Failed
)
257 #endif // defined(OS_CHROMEOS)
259 // Reply when the utility process has started.
260 IPC_MESSAGE_CONTROL0(ChromeUtilityHostMsg_ProcessStarted
)
262 #if defined(FULL_SAFE_BROWSING)
263 // Reply when a zip file has been analyzed for malicious download protection.
264 IPC_MESSAGE_CONTROL1(
265 ChromeUtilityHostMsg_AnalyzeZipFileForDownloadProtection_Finished
,
266 safe_browsing::zip_analyzer::Results
)
270 IPC_MESSAGE_CONTROL0(ChromeUtilityHostMsg_GetOpenFileName_Failed
)
271 IPC_MESSAGE_CONTROL2(ChromeUtilityHostMsg_GetOpenFileName_Result
,
272 base::FilePath
/* directory */,
273 std::vector
<base::FilePath
> /* filenames */)
274 IPC_MESSAGE_CONTROL0(ChromeUtilityHostMsg_GetSaveFileName_Failed
)
275 IPC_MESSAGE_CONTROL2(ChromeUtilityHostMsg_GetSaveFileName_Result
,
276 base::FilePath
/* path */,
277 int /* one_based_filter_index */)
278 IPC_MESSAGE_CONTROL1(ChromeUtilityHostMsg_BuildDirectWriteFontCache
,
279 base::FilePath
/* cache file path */)
280 #endif // defined(OS_WIN)
282 #if defined(OS_ANDROID)
283 // Reply to ChromeUtilityMsg_DetectSeccompSupport to report the level
284 // of kernel support for seccomp-bpf.
285 IPC_MESSAGE_CONTROL1(ChromeUtilityHostMsg_DetectSeccompSupport_ResultPrctl
,
286 bool /* seccomp prctl supported */)