Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(451)

Side by Side Diff: chrome/utility/chrome_content_utility_client.cc

Issue 345693002: Extensions: Split extensions utility IPC messages into its own file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: disable another test Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/utility/chrome_content_utility_client.h" 5 #include "chrome/utility/chrome_content_utility_client.h"
6 6
7 #include "base/base64.h"
8 #include "base/bind.h"
9 #include "base/command_line.h" 7 #include "base/command_line.h"
10 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
11 #include "base/json/json_reader.h"
12 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
13 #include "base/path_service.h"
14 #include "base/time/time.h" 10 #include "base/time/time.h"
15 #include "chrome/common/chrome_utility_messages.h" 11 #include "chrome/common/chrome_utility_messages.h"
16 #include "chrome/common/extensions/chrome_extensions_client.h"
17 #include "chrome/common/extensions/update_manifest.h"
18 #include "chrome/common/safe_browsing/zip_analyzer.h" 12 #include "chrome/common/safe_browsing/zip_analyzer.h"
19 #include "chrome/utility/chrome_content_utility_ipc_whitelist.h" 13 #include "chrome/utility/chrome_content_utility_ipc_whitelist.h"
20 #include "chrome/utility/extensions/unpacker.h" 14 #include "chrome/utility/utility_message_handler.h"
21 #include "chrome/utility/image_writer/image_writer_handler.h"
22 #include "chrome/utility/profile_import_handler.h"
23 #include "chrome/utility/web_resource_unpacker.h" 15 #include "chrome/utility/web_resource_unpacker.h"
24 #include "content/public/child/image_decoder_utils.h" 16 #include "content/public/child/image_decoder_utils.h"
25 #include "content/public/common/content_paths.h"
26 #include "content/public/common/content_switches.h" 17 #include "content/public/common/content_switches.h"
27 #include "content/public/utility/utility_thread.h" 18 #include "content/public/utility/utility_thread.h"
28 #include "courgette/courgette.h" 19 #include "courgette/courgette.h"
29 #include "courgette/third_party/bsdiff.h" 20 #include "courgette/third_party/bsdiff.h"
30 #include "extensions/common/extension.h"
31 #include "extensions/common/extension_l10n_util.h"
32 #include "extensions/common/manifest.h"
33 #include "media/base/media.h"
34 #include "media/base/media_file_checker.h"
35 #include "third_party/skia/include/core/SkBitmap.h" 21 #include "third_party/skia/include/core/SkBitmap.h"
36 #include "third_party/zlib/google/zip.h" 22 #include "third_party/zlib/google/zip.h"
37 #include "ui/base/ui_base_switches.h"
38 #include "ui/gfx/codec/jpeg_codec.h" 23 #include "ui/gfx/codec/jpeg_codec.h"
39 #include "ui/gfx/rect.h"
40 #include "ui/gfx/size.h" 24 #include "ui/gfx/size.h"
41 25
42 #if defined(OS_WIN) 26 #if !defined(OS_ANDROID)
43 #include "chrome/common/extensions/api/networking_private/networking_private_cry pto.h" 27 #include "chrome/utility/profile_import_handler.h"
44 #include "chrome/utility/media_galleries/itunes_pref_parser_win.h" 28 #endif
45 #include "components/wifi/wifi_service.h"
46 #endif // defined(OS_WIN)
47 29
48 #if defined(OS_MACOSX) 30 #if defined(ENABLE_EXTENSIONS)
49 #include "chrome/utility/media_galleries/iphoto_library_parser.h" 31 #include "chrome/common/extensions/chrome_utility_extensions_messages.h"
50 #endif // defined(OS_MACOSX) 32 #include "chrome/utility/extensions/extensions_handler.h"
51 33 #include "chrome/utility/image_writer/image_writer_handler.h"
52 #if defined(OS_WIN) || defined(OS_MACOSX)
53 #include "chrome/utility/media_galleries/iapps_xml_utils.h"
54 #include "chrome/utility/media_galleries/itunes_library_parser.h"
55 #include "chrome/utility/media_galleries/picasa_album_table_reader.h"
56 #include "chrome/utility/media_galleries/picasa_albums_indexer.h"
57 #endif // defined(OS_WIN) || defined(OS_MACOSX)
58
59 #if !defined(OS_ANDROID) && !defined(OS_IOS)
60 #include "chrome/common/media_galleries/metadata_types.h"
61 #include "chrome/utility/media_galleries/image_metadata_extractor.h"
62 #include "chrome/utility/media_galleries/ipc_data_source.h" 34 #include "chrome/utility/media_galleries/ipc_data_source.h"
63 #include "chrome/utility/media_galleries/media_metadata_parser.h" 35 #include "chrome/utility/media_galleries/media_metadata_parser.h"
64 #endif // !defined(OS_ANDROID) && !defined(OS_IOS) 36 #endif
65 37
66 #if defined(ENABLE_FULL_PRINTING) 38 #if defined(ENABLE_FULL_PRINTING)
67 #include "chrome/utility/printing_handler.h" 39 #include "chrome/utility/printing_handler.h"
68 #endif 40 #endif
69 41
70 #if defined(ENABLE_MDNS) 42 #if defined(ENABLE_MDNS)
71 #include "chrome/utility/local_discovery/service_discovery_message_handler.h" 43 #include "chrome/utility/local_discovery/service_discovery_message_handler.h"
72 #endif 44 #endif
73 45
74 namespace { 46 namespace {
75 47
76 bool Send(IPC::Message* message) { 48 bool Send(IPC::Message* message) {
77 return content::UtilityThread::Get()->Send(message); 49 return content::UtilityThread::Get()->Send(message);
78 } 50 }
79 51
80 void ReleaseProcessIfNeeded() { 52 void ReleaseProcessIfNeeded() {
81 content::UtilityThread::Get()->ReleaseProcessIfNeeded(); 53 content::UtilityThread::Get()->ReleaseProcessIfNeeded();
82 } 54 }
83 55
84 #if !defined(OS_ANDROID) && !defined(OS_IOS) 56 #if defined(ENABLE_EXTENSIONS)
85 void FinishParseMediaMetadata( 57 void FinishParseMediaMetadata(
86 metadata::MediaMetadataParser* parser, 58 metadata::MediaMetadataParser* /* parser */,
87 const extensions::api::media_galleries::MediaMetadata& metadata, 59 const extensions::api::media_galleries::MediaMetadata& metadata,
88 const std::vector<metadata::AttachedImage>& attached_images) { 60 const std::vector<metadata::AttachedImage>& attached_images) {
89 Send(new ChromeUtilityHostMsg_ParseMediaMetadata_Finished( 61 Send(new ChromeUtilityHostMsg_ParseMediaMetadata_Finished(
90 true, *metadata.ToValue(), attached_images)); 62 true, *metadata.ToValue(), attached_images));
91 ReleaseProcessIfNeeded(); 63 ReleaseProcessIfNeeded();
92 } 64 }
93 #endif // !defined(OS_ANDROID) && !defined(OS_IOS) 65 #endif
94 66
95 } // namespace 67 } // namespace
96 68
97 ChromeContentUtilityClient::ChromeContentUtilityClient() 69 ChromeContentUtilityClient::ChromeContentUtilityClient()
98 : filter_messages_(false) { 70 : filter_messages_(false) {
99 #if !defined(OS_ANDROID) 71 #if !defined(OS_ANDROID)
100 handlers_.push_back(new ProfileImportHandler()); 72 handlers_.push_back(new ProfileImportHandler());
101 #endif 73 #endif
102 74
75 #if defined(ENABLE_EXTENSIONS)
76 handlers_.push_back(new extensions::ExtensionsHandler());
77 handlers_.push_back(new image_writer::ImageWriterHandler());
78 #endif
79
103 #if defined(ENABLE_FULL_PRINTING) 80 #if defined(ENABLE_FULL_PRINTING)
104 handlers_.push_back(new PrintingHandler()); 81 handlers_.push_back(new PrintingHandler());
105 #endif 82 #endif
106 83
107 #if defined(ENABLE_MDNS) 84 #if defined(ENABLE_MDNS)
108 if (CommandLine::ForCurrentProcess()->HasSwitch( 85 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
109 switches::kUtilityProcessEnableMDns)) { 86 switches::kUtilityProcessEnableMDns)) {
110 handlers_.push_back(new local_discovery::ServiceDiscoveryMessageHandler()); 87 handlers_.push_back(new local_discovery::ServiceDiscoveryMessageHandler());
111 } 88 }
112 #endif 89 #endif
113
114 handlers_.push_back(new image_writer::ImageWriterHandler());
115 } 90 }
116 91
117 ChromeContentUtilityClient::~ChromeContentUtilityClient() { 92 ChromeContentUtilityClient::~ChromeContentUtilityClient() {
118 } 93 }
119 94
120 void ChromeContentUtilityClient::UtilityThreadStarted() { 95 void ChromeContentUtilityClient::UtilityThreadStarted() {
121 CommandLine* command_line = CommandLine::ForCurrentProcess(); 96 #if defined(ENABLE_EXTENSIONS)
122 std::string lang = command_line->GetSwitchValueASCII(switches::kLang); 97 extensions::ExtensionsHandler::UtilityThreadStarted();
123 if (!lang.empty()) 98 #endif
124 extension_l10n_util::SetProcessLocale(lang);
125 99
126 if (command_line->HasSwitch(switches::kUtilityProcessRunningElevated)) { 100 if (kMessageWhitelistSize > 0) {
127 message_id_whitelist_.insert(kMessageWhitelist, 101 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
128 kMessageWhitelist + kMessageWhitelistSize); 102 if (command_line->HasSwitch(switches::kUtilityProcessRunningElevated)) {
129 filter_messages_ = true; 103 message_id_whitelist_.insert(kMessageWhitelist,
104 kMessageWhitelist + kMessageWhitelistSize);
105 filter_messages_ = true;
106 }
130 } 107 }
131 } 108 }
132 109
133 bool ChromeContentUtilityClient::OnMessageReceived( 110 bool ChromeContentUtilityClient::OnMessageReceived(
134 const IPC::Message& message) { 111 const IPC::Message& message) {
135 if (filter_messages_ && !ContainsKey(message_id_whitelist_, message.type())) 112 if (filter_messages_ && !ContainsKey(message_id_whitelist_, message.type()))
136 return false; 113 return false;
137 114
138 bool handled = true; 115 bool handled = true;
139 IPC_BEGIN_MESSAGE_MAP(ChromeContentUtilityClient, message) 116 IPC_BEGIN_MESSAGE_MAP(ChromeContentUtilityClient, message)
140 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnpackExtension, OnUnpackExtension)
141 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnpackWebResource, 117 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnpackWebResource,
142 OnUnpackWebResource) 118 OnUnpackWebResource)
143 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseUpdateManifest,
144 OnParseUpdateManifest)
145 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImage, OnDecodeImage) 119 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImage, OnDecodeImage)
146 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImageBase64, OnDecodeImageBase64)
147 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RobustJPEGDecodeImage, 120 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RobustJPEGDecodeImage,
148 OnRobustJPEGDecodeImage) 121 OnRobustJPEGDecodeImage)
149 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseJSON, OnParseJSON)
150 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_PatchFileBsdiff, 122 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_PatchFileBsdiff,
151 OnPatchFileBsdiff) 123 OnPatchFileBsdiff)
152 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_PatchFileCourgette, 124 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_PatchFileCourgette,
153 OnPatchFileCourgette) 125 OnPatchFileCourgette)
154 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_StartupPing, OnStartupPing) 126 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_StartupPing, OnStartupPing)
155 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_AnalyzeZipFileForDownloadProtection, 127 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_AnalyzeZipFileForDownloadProtection,
156 OnAnalyzeZipFileForDownloadProtection) 128 OnAnalyzeZipFileForDownloadProtection)
157 129 #if defined(ENABLE_EXTENSIONS)
158 #if !defined(OS_ANDROID) && !defined(OS_IOS)
159 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_CheckMediaFile, OnCheckMediaFile)
160 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseMediaMetadata, 130 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseMediaMetadata,
161 OnParseMediaMetadata) 131 OnParseMediaMetadata)
162 #endif // !defined(OS_ANDROID) && !defined(OS_IOS) 132 #endif
163
164 #if defined(OS_CHROMEOS) 133 #if defined(OS_CHROMEOS)
165 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_CreateZipFile, OnCreateZipFile) 134 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_CreateZipFile, OnCreateZipFile)
166 #endif // defined(OS_CHROMEOS) 135 #endif
167
168 #if defined(OS_WIN)
169 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesPrefXml,
170 OnParseITunesPrefXml)
171 #endif // defined(OS_WIN)
172
173 #if defined(OS_MACOSX)
174 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseIPhotoLibraryXmlFile,
175 OnParseIPhotoLibraryXmlFile)
176 #endif // defined(OS_MACOSX)
177
178 #if defined(OS_WIN) || defined(OS_MACOSX)
179 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesLibraryXmlFile,
180 OnParseITunesLibraryXmlFile)
181 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParsePicasaPMPDatabase,
182 OnParsePicasaPMPDatabase)
183 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_IndexPicasaAlbumsContents,
184 OnIndexPicasaAlbumsContents)
185 #endif // defined(OS_WIN) || defined(OS_MACOSX)
186
187 #if defined(OS_WIN)
188 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_GetAndEncryptWiFiCredentials,
189 OnGetAndEncryptWiFiCredentials)
190 #endif // defined(OS_WIN)
191
192 IPC_MESSAGE_UNHANDLED(handled = false) 136 IPC_MESSAGE_UNHANDLED(handled = false)
193 IPC_END_MESSAGE_MAP() 137 IPC_END_MESSAGE_MAP()
194 138
195 for (Handlers::iterator it = handlers_.begin(); 139 for (Handlers::iterator it = handlers_.begin();
196 !handled && it != handlers_.end(); ++it) { 140 !handled && it != handlers_.end(); ++it) {
197 handled = (*it)->OnMessageReceived(message); 141 handled = (*it)->OnMessageReceived(message);
198 } 142 }
199 143
200 return handled; 144 return handled;
201 } 145 }
202 146
203 // static 147 // static
204 void ChromeContentUtilityClient::PreSandboxStartup() { 148 void ChromeContentUtilityClient::PreSandboxStartup() {
149 #if defined(ENABLE_EXTENSIONS)
150 extensions::ExtensionsHandler::PreSandboxStartup();
151 #endif
152
205 #if defined(ENABLE_FULL_PRINTING) 153 #if defined(ENABLE_FULL_PRINTING)
206 PrintingHandler::PreSandboxStartup(); 154 PrintingHandler::PreSandboxStartup();
207 #endif 155 #endif
208 156
209 #if defined(ENABLE_MDNS) 157 #if defined(ENABLE_MDNS)
210 if (CommandLine::ForCurrentProcess()->HasSwitch( 158 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
211 switches::kUtilityProcessEnableMDns)) { 159 switches::kUtilityProcessEnableMDns)) {
212 local_discovery::ServiceDiscoveryMessageHandler::PreSandboxStartup(); 160 local_discovery::ServiceDiscoveryMessageHandler::PreSandboxStartup();
213 } 161 }
214 #endif // ENABLE_MDNS 162 #endif // ENABLE_MDNS
215
216 #if !defined(OS_ANDROID) && !defined(OS_IOS)
217 // Initialize libexif for image metadata parsing.
218 metadata::ImageMetadataExtractor::InitializeLibrary();
219 #endif // !defined(OS_ANDROID) && !defined(OS_IOS)
220
221 // Load media libraries for media file validation.
222 base::FilePath media_path;
223 PathService::Get(content::DIR_MEDIA_LIBS, &media_path);
224 if (!media_path.empty())
225 media::InitializeMediaLibrary(media_path);
226 } 163 }
227 164
228 void ChromeContentUtilityClient::OnUnpackExtension( 165 // static
229 const base::FilePath& extension_path, 166 void ChromeContentUtilityClient::DecodeImage(
230 const std::string& extension_id, 167 const std::vector<unsigned char>& encoded_data) {
231 int location, 168 const SkBitmap& decoded_image = content::DecodeImage(&encoded_data[0],
232 int creation_flags) { 169 gfx::Size(),
233 CHECK_GT(location, extensions::Manifest::INVALID_LOCATION); 170 encoded_data.size());
234 CHECK_LT(location, extensions::Manifest::NUM_LOCATIONS); 171 if (decoded_image.empty()) {
235 extensions::ExtensionsClient::Set( 172 Send(new ChromeUtilityHostMsg_DecodeImage_Failed());
236 extensions::ChromeExtensionsClient::GetInstance());
237 extensions::Unpacker unpacker(
238 extension_path,
239 extension_id,
240 static_cast<extensions::Manifest::Location>(location),
241 creation_flags);
242 if (unpacker.Run() && unpacker.DumpImagesToFile() &&
243 unpacker.DumpMessageCatalogsToFile()) {
244 Send(new ChromeUtilityHostMsg_UnpackExtension_Succeeded(
245 *unpacker.parsed_manifest()));
246 } else { 173 } else {
247 Send(new ChromeUtilityHostMsg_UnpackExtension_Failed( 174 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(decoded_image));
248 unpacker.error_message()));
249 } 175 }
250
251 ReleaseProcessIfNeeded(); 176 ReleaseProcessIfNeeded();
252 } 177 }
253 178
254 void ChromeContentUtilityClient::OnUnpackWebResource( 179 void ChromeContentUtilityClient::OnUnpackWebResource(
255 const std::string& resource_data) { 180 const std::string& resource_data) {
256 // Parse json data. 181 // Parse json data.
257 // TODO(mrc): Add the possibility of a template that controls parsing, and 182 // TODO(mrc): Add the possibility of a template that controls parsing, and
258 // the ability to download and verify images. 183 // the ability to download and verify images.
259 WebResourceUnpacker unpacker(resource_data); 184 WebResourceUnpacker unpacker(resource_data);
260 if (unpacker.Run()) { 185 if (unpacker.Run()) {
261 Send(new ChromeUtilityHostMsg_UnpackWebResource_Succeeded( 186 Send(new ChromeUtilityHostMsg_UnpackWebResource_Succeeded(
262 *unpacker.parsed_json())); 187 *unpacker.parsed_json()));
263 } else { 188 } else {
264 Send(new ChromeUtilityHostMsg_UnpackWebResource_Failed( 189 Send(new ChromeUtilityHostMsg_UnpackWebResource_Failed(
265 unpacker.error_message())); 190 unpacker.error_message()));
266 } 191 }
267 192
268 ReleaseProcessIfNeeded(); 193 ReleaseProcessIfNeeded();
269 } 194 }
270 195
271 void ChromeContentUtilityClient::OnParseUpdateManifest(const std::string& xml) {
272 UpdateManifest manifest;
273 if (!manifest.Parse(xml)) {
274 Send(new ChromeUtilityHostMsg_ParseUpdateManifest_Failed(
275 manifest.errors()));
276 } else {
277 Send(new ChromeUtilityHostMsg_ParseUpdateManifest_Succeeded(
278 manifest.results()));
279 }
280 ReleaseProcessIfNeeded();
281 }
282
283 void ChromeContentUtilityClient::OnDecodeImage( 196 void ChromeContentUtilityClient::OnDecodeImage(
284 const std::vector<unsigned char>& encoded_data) { 197 const std::vector<unsigned char>& encoded_data) {
285 const SkBitmap& decoded_image = content::DecodeImage(&encoded_data[0], 198 DecodeImage(encoded_data);
286 gfx::Size(),
287 encoded_data.size());
288 if (decoded_image.empty()) {
289 Send(new ChromeUtilityHostMsg_DecodeImage_Failed());
290 } else {
291 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(decoded_image));
292 }
293 ReleaseProcessIfNeeded();
294 }
295
296 void ChromeContentUtilityClient::OnDecodeImageBase64(
297 const std::string& encoded_string) {
298 std::string decoded_string;
299
300 if (!base::Base64Decode(encoded_string, &decoded_string)) {
301 Send(new ChromeUtilityHostMsg_DecodeImage_Failed());
302 return;
303 }
304
305 std::vector<unsigned char> decoded_vector(decoded_string.size());
306 for (size_t i = 0; i < decoded_string.size(); ++i) {
307 decoded_vector[i] = static_cast<unsigned char>(decoded_string[i]);
308 }
309
310 OnDecodeImage(decoded_vector);
311 } 199 }
312 200
313 #if defined(OS_CHROMEOS) 201 #if defined(OS_CHROMEOS)
314 void ChromeContentUtilityClient::OnCreateZipFile( 202 void ChromeContentUtilityClient::OnCreateZipFile(
315 const base::FilePath& src_dir, 203 const base::FilePath& src_dir,
316 const std::vector<base::FilePath>& src_relative_paths, 204 const std::vector<base::FilePath>& src_relative_paths,
317 const base::FileDescriptor& dest_fd) { 205 const base::FileDescriptor& dest_fd) {
318 bool succeeded = true; 206 bool succeeded = true;
319 207
320 // Check sanity of source relative paths. Reject if path is absolute or 208 // Check sanity of source relative paths. Reject if path is absolute or
(...skipping 28 matching lines...) Expand all
349 Send(new ChromeUtilityHostMsg_DecodeImage_Failed()); 237 Send(new ChromeUtilityHostMsg_DecodeImage_Failed());
350 } else { 238 } else {
351 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(*decoded_image)); 239 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(*decoded_image));
352 } 240 }
353 } else { 241 } else {
354 Send(new ChromeUtilityHostMsg_DecodeImage_Failed()); 242 Send(new ChromeUtilityHostMsg_DecodeImage_Failed());
355 } 243 }
356 ReleaseProcessIfNeeded(); 244 ReleaseProcessIfNeeded();
357 } 245 }
358 246
359 void ChromeContentUtilityClient::OnParseJSON(const std::string& json) {
360 int error_code;
361 std::string error;
362 base::Value* value = base::JSONReader::ReadAndReturnError(
363 json, base::JSON_PARSE_RFC, &error_code, &error);
364 if (value) {
365 base::ListValue wrapper;
366 wrapper.Append(value);
367 Send(new ChromeUtilityHostMsg_ParseJSON_Succeeded(wrapper));
368 } else {
369 Send(new ChromeUtilityHostMsg_ParseJSON_Failed(error));
370 }
371 ReleaseProcessIfNeeded();
372 }
373
374 void ChromeContentUtilityClient::OnPatchFileBsdiff( 247 void ChromeContentUtilityClient::OnPatchFileBsdiff(
375 const base::FilePath& input_file, 248 const base::FilePath& input_file,
376 const base::FilePath& patch_file, 249 const base::FilePath& patch_file,
377 const base::FilePath& output_file) { 250 const base::FilePath& output_file) {
378 if (input_file.empty() || patch_file.empty() || output_file.empty()) { 251 if (input_file.empty() || patch_file.empty() || output_file.empty()) {
379 Send(new ChromeUtilityHostMsg_PatchFile_Failed(-1)); 252 Send(new ChromeUtilityHostMsg_PatchFile_Failed(-1));
380 } else { 253 } else {
381 const int patch_status = courgette::ApplyBinaryPatch(input_file, 254 const int patch_status = courgette::ApplyBinaryPatch(input_file,
382 patch_file, 255 patch_file,
383 output_file); 256 output_file);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 void ChromeContentUtilityClient::OnAnalyzeZipFileForDownloadProtection( 289 void ChromeContentUtilityClient::OnAnalyzeZipFileForDownloadProtection(
417 const IPC::PlatformFileForTransit& zip_file) { 290 const IPC::PlatformFileForTransit& zip_file) {
418 safe_browsing::zip_analyzer::Results results; 291 safe_browsing::zip_analyzer::Results results;
419 safe_browsing::zip_analyzer::AnalyzeZipFile( 292 safe_browsing::zip_analyzer::AnalyzeZipFile(
420 IPC::PlatformFileForTransitToFile(zip_file), &results); 293 IPC::PlatformFileForTransitToFile(zip_file), &results);
421 Send(new ChromeUtilityHostMsg_AnalyzeZipFileForDownloadProtection_Finished( 294 Send(new ChromeUtilityHostMsg_AnalyzeZipFileForDownloadProtection_Finished(
422 results)); 295 results));
423 ReleaseProcessIfNeeded(); 296 ReleaseProcessIfNeeded();
424 } 297 }
425 298
426 #if !defined(OS_ANDROID) && !defined(OS_IOS) 299 #if defined(ENABLE_EXTENSIONS)
427 void ChromeContentUtilityClient::OnCheckMediaFile( 300 // TODO(thestig): Try to move this to
428 int64 milliseconds_of_decoding, 301 // chrome/utility/extensions/extensions_handler.cc.
429 const IPC::PlatformFileForTransit& media_file) {
430 media::MediaFileChecker checker(
431 IPC::PlatformFileForTransitToFile(media_file));
432 const bool check_success = checker.Start(
433 base::TimeDelta::FromMilliseconds(milliseconds_of_decoding));
434 Send(new ChromeUtilityHostMsg_CheckMediaFile_Finished(check_success));
435 ReleaseProcessIfNeeded();
436 }
437
438 void ChromeContentUtilityClient::OnParseMediaMetadata( 302 void ChromeContentUtilityClient::OnParseMediaMetadata(
439 const std::string& mime_type, int64 total_size, bool get_attached_images) { 303 const std::string& mime_type, int64 total_size, bool get_attached_images) {
440 // Only one IPCDataSource may be created and added to the list of handlers. 304 // Only one IPCDataSource may be created and added to the list of handlers.
441 metadata::IPCDataSource* source = new metadata::IPCDataSource(total_size); 305 metadata::IPCDataSource* source = new metadata::IPCDataSource(total_size);
442 handlers_.push_back(source); 306 handlers_.push_back(source);
443 307
444 metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser( 308 metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser(
445 source, mime_type, get_attached_images); 309 source, mime_type, get_attached_images);
446 parser->Start(base::Bind(&FinishParseMediaMetadata, base::Owned(parser))); 310 parser->Start(base::Bind(&FinishParseMediaMetadata, base::Owned(parser)));
447 } 311 }
448 #endif // !defined(OS_ANDROID) && !defined(OS_IOS) 312 #endif
449
450 #if defined(OS_WIN)
451 void ChromeContentUtilityClient::OnParseITunesPrefXml(
452 const std::string& itunes_xml_data) {
453 base::FilePath library_path(
454 itunes::FindLibraryLocationInPrefXml(itunes_xml_data));
455 Send(new ChromeUtilityHostMsg_GotITunesDirectory(library_path));
456 ReleaseProcessIfNeeded();
457 }
458 #endif // defined(OS_WIN)
459
460 #if defined(OS_MACOSX)
461 void ChromeContentUtilityClient::OnParseIPhotoLibraryXmlFile(
462 const IPC::PlatformFileForTransit& iphoto_library_file) {
463 iphoto::IPhotoLibraryParser parser;
464 base::File file = IPC::PlatformFileForTransitToFile(iphoto_library_file);
465 bool result = parser.Parse(iapps::ReadFileAsString(file.Pass()));
466 Send(new ChromeUtilityHostMsg_GotIPhotoLibrary(result, parser.library()));
467 ReleaseProcessIfNeeded();
468 }
469 #endif // defined(OS_MACOSX)
470
471 #if defined(OS_WIN) || defined(OS_MACOSX)
472 void ChromeContentUtilityClient::OnParseITunesLibraryXmlFile(
473 const IPC::PlatformFileForTransit& itunes_library_file) {
474 itunes::ITunesLibraryParser parser;
475 base::File file = IPC::PlatformFileForTransitToFile(itunes_library_file);
476 bool result = parser.Parse(iapps::ReadFileAsString(file.Pass()));
477 Send(new ChromeUtilityHostMsg_GotITunesLibrary(result, parser.library()));
478 ReleaseProcessIfNeeded();
479 }
480
481 void ChromeContentUtilityClient::OnParsePicasaPMPDatabase(
482 const picasa::AlbumTableFilesForTransit& album_table_files) {
483 picasa::AlbumTableFiles files;
484 files.indicator_file =
485 IPC::PlatformFileForTransitToFile(album_table_files.indicator_file);
486 files.category_file =
487 IPC::PlatformFileForTransitToFile(album_table_files.category_file);
488 files.date_file =
489 IPC::PlatformFileForTransitToFile(album_table_files.date_file);
490 files.filename_file =
491 IPC::PlatformFileForTransitToFile(album_table_files.filename_file);
492 files.name_file =
493 IPC::PlatformFileForTransitToFile(album_table_files.name_file);
494 files.token_file =
495 IPC::PlatformFileForTransitToFile(album_table_files.token_file);
496 files.uid_file =
497 IPC::PlatformFileForTransitToFile(album_table_files.uid_file);
498
499 picasa::PicasaAlbumTableReader reader(files.Pass());
500 bool parse_success = reader.Init();
501 Send(new ChromeUtilityHostMsg_ParsePicasaPMPDatabase_Finished(
502 parse_success,
503 reader.albums(),
504 reader.folders()));
505 ReleaseProcessIfNeeded();
506 }
507
508 void ChromeContentUtilityClient::OnIndexPicasaAlbumsContents(
509 const picasa::AlbumUIDSet& album_uids,
510 const std::vector<picasa::FolderINIContents>& folders_inis) {
511 picasa::PicasaAlbumsIndexer indexer(album_uids);
512 indexer.ParseFolderINI(folders_inis);
513
514 Send(new ChromeUtilityHostMsg_IndexPicasaAlbumsContents_Finished(
515 indexer.albums_images()));
516 ReleaseProcessIfNeeded();
517 }
518 #endif // defined(OS_WIN) || defined(OS_MACOSX)
519
520 #if defined(OS_WIN)
521 void ChromeContentUtilityClient::OnGetAndEncryptWiFiCredentials(
522 const std::string& network_guid,
523 const std::vector<uint8>& public_key) {
524 scoped_ptr<wifi::WiFiService> wifi_service(wifi::WiFiService::Create());
525 wifi_service->Initialize(NULL);
526
527 std::string key_data;
528 std::string error;
529 wifi_service->GetKeyFromSystem(network_guid, &key_data, &error);
530
531 std::vector<uint8> ciphertext;
532 bool success = error.empty() && !key_data.empty();
533 if (success) {
534 NetworkingPrivateCrypto crypto;
535 success = crypto.EncryptByteString(public_key, key_data, &ciphertext);
536 }
537
538 Send(new ChromeUtilityHostMsg_GotEncryptedWiFiCredentials(ciphertext,
539 success));
540 }
541 #endif // defined(OS_WIN)
OLDNEW
« no previous file with comments | « chrome/utility/chrome_content_utility_client.h ('k') | chrome/utility/chrome_content_utility_ipc_whitelist.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698