| OLD | NEW |
| 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/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 decoded_image.reset(); | 231 decoded_image.reset(); |
| 232 LOG(ERROR) << "Decoded image too large for IPC message"; | 232 LOG(ERROR) << "Decoded image too large for IPC message"; |
| 233 } | 233 } |
| 234 } | 234 } |
| 235 | 235 |
| 236 return decoded_image; | 236 return decoded_image; |
| 237 } | 237 } |
| 238 | 238 |
| 239 // static | 239 // static |
| 240 void ChromeContentUtilityClient::DecodeImageAndSend( | 240 void ChromeContentUtilityClient::DecodeImageAndSend( |
| 241 const std::vector<unsigned char>& encoded_data, bool shrink_to_fit){ | 241 const std::vector<unsigned char>& encoded_data, |
| 242 bool shrink_to_fit, |
| 243 int id) { |
| 242 SkBitmap decoded_image = DecodeImage(encoded_data, shrink_to_fit); | 244 SkBitmap decoded_image = DecodeImage(encoded_data, shrink_to_fit); |
| 243 | 245 |
| 244 if (decoded_image.empty()) { | 246 if (decoded_image.empty()) { |
| 245 Send(new ChromeUtilityHostMsg_DecodeImage_Failed()); | 247 Send(new ChromeUtilityHostMsg_DecodeImage_Failed(id)); |
| 246 } else { | 248 } else { |
| 247 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(decoded_image)); | 249 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(decoded_image, id)); |
| 248 } | 250 } |
| 249 ReleaseProcessIfNeeded(); | 251 ReleaseProcessIfNeeded(); |
| 250 } | 252 } |
| 251 | 253 |
| 252 void ChromeContentUtilityClient::OnDecodeImage( | 254 void ChromeContentUtilityClient::OnDecodeImage( |
| 253 const std::vector<unsigned char>& encoded_data, bool shrink_to_fit) { | 255 const std::vector<unsigned char>& encoded_data, |
| 254 DecodeImageAndSend(encoded_data, shrink_to_fit); | 256 bool shrink_to_fit, |
| 257 int id) { |
| 258 DecodeImageAndSend(encoded_data, shrink_to_fit, id); |
| 255 } | 259 } |
| 256 | 260 |
| 257 #if defined(OS_CHROMEOS) | 261 #if defined(OS_CHROMEOS) |
| 258 void ChromeContentUtilityClient::OnCreateZipFile( | 262 void ChromeContentUtilityClient::OnCreateZipFile( |
| 259 const base::FilePath& src_dir, | 263 const base::FilePath& src_dir, |
| 260 const std::vector<base::FilePath>& src_relative_paths, | 264 const std::vector<base::FilePath>& src_relative_paths, |
| 261 const base::FileDescriptor& dest_fd) { | 265 const base::FileDescriptor& dest_fd) { |
| 262 // dest_fd should be closed in the function. See ipc/ipc_message_util.h for | 266 // dest_fd should be closed in the function. See ipc/ipc_message_util.h for |
| 263 // details. | 267 // details. |
| 264 base::ScopedFD fd_closer(dest_fd.fd); | 268 base::ScopedFD fd_closer(dest_fd.fd); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 bool supports_syscall = sandbox::SandboxBPF::SupportsSeccompSandbox( | 300 bool supports_syscall = sandbox::SandboxBPF::SupportsSeccompSandbox( |
| 297 sandbox::SandboxBPF::SeccompLevel::MULTI_THREADED); | 301 sandbox::SandboxBPF::SeccompLevel::MULTI_THREADED); |
| 298 Send(new ChromeUtilityHostMsg_DetectSeccompSupport_ResultSyscall( | 302 Send(new ChromeUtilityHostMsg_DetectSeccompSupport_ResultSyscall( |
| 299 supports_syscall)); | 303 supports_syscall)); |
| 300 | 304 |
| 301 ReleaseProcessIfNeeded(); | 305 ReleaseProcessIfNeeded(); |
| 302 } | 306 } |
| 303 #endif // defined(OS_ANDROID) && defined(USE_SECCOMP_BPF) | 307 #endif // defined(OS_ANDROID) && defined(USE_SECCOMP_BPF) |
| 304 | 308 |
| 305 void ChromeContentUtilityClient::OnRobustJPEGDecodeImage( | 309 void ChromeContentUtilityClient::OnRobustJPEGDecodeImage( |
| 306 const std::vector<unsigned char>& encoded_data) { | 310 const std::vector<unsigned char>& encoded_data, |
| 311 int id) { |
| 307 // Our robust jpeg decoding is using IJG libjpeg. | 312 // Our robust jpeg decoding is using IJG libjpeg. |
| 308 if (gfx::JPEGCodec::JpegLibraryVariant() == gfx::JPEGCodec::IJG_LIBJPEG && | 313 if (gfx::JPEGCodec::JpegLibraryVariant() == gfx::JPEGCodec::IJG_LIBJPEG && |
| 309 !encoded_data.empty()) { | 314 !encoded_data.empty()) { |
| 310 scoped_ptr<SkBitmap> decoded_image(gfx::JPEGCodec::Decode( | 315 scoped_ptr<SkBitmap> decoded_image(gfx::JPEGCodec::Decode( |
| 311 &encoded_data[0], encoded_data.size())); | 316 &encoded_data[0], encoded_data.size())); |
| 312 if (!decoded_image.get() || decoded_image->empty()) { | 317 if (!decoded_image.get() || decoded_image->empty()) { |
| 313 Send(new ChromeUtilityHostMsg_DecodeImage_Failed()); | 318 Send(new ChromeUtilityHostMsg_DecodeImage_Failed(id)); |
| 314 } else { | 319 } else { |
| 315 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(*decoded_image)); | 320 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(*decoded_image, id)); |
| 316 } | 321 } |
| 317 } else { | 322 } else { |
| 318 Send(new ChromeUtilityHostMsg_DecodeImage_Failed()); | 323 Send(new ChromeUtilityHostMsg_DecodeImage_Failed(id)); |
| 319 } | 324 } |
| 320 ReleaseProcessIfNeeded(); | 325 ReleaseProcessIfNeeded(); |
| 321 } | 326 } |
| 322 | 327 |
| 323 void ChromeContentUtilityClient::OnParseJSON(const std::string& json) { | 328 void ChromeContentUtilityClient::OnParseJSON(const std::string& json) { |
| 324 int error_code; | 329 int error_code; |
| 325 std::string error; | 330 std::string error; |
| 326 base::Value* value = base::JSONReader::ReadAndReturnError( | 331 base::Value* value = base::JSONReader::ReadAndReturnError( |
| 327 json, base::JSON_PARSE_RFC, &error_code, &error); | 332 json, base::JSON_PARSE_RFC, &error_code, &error); |
| 328 if (value) { | 333 if (value) { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 const std::string& mime_type, int64 total_size, bool get_attached_images) { | 397 const std::string& mime_type, int64 total_size, bool get_attached_images) { |
| 393 // Only one IPCDataSource may be created and added to the list of handlers. | 398 // Only one IPCDataSource may be created and added to the list of handlers. |
| 394 metadata::IPCDataSource* source = new metadata::IPCDataSource(total_size); | 399 metadata::IPCDataSource* source = new metadata::IPCDataSource(total_size); |
| 395 handlers_.push_back(source); | 400 handlers_.push_back(source); |
| 396 | 401 |
| 397 metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser( | 402 metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser( |
| 398 source, mime_type, get_attached_images); | 403 source, mime_type, get_attached_images); |
| 399 parser->Start(base::Bind(&FinishParseMediaMetadata, base::Owned(parser))); | 404 parser->Start(base::Bind(&FinishParseMediaMetadata, base::Owned(parser))); |
| 400 } | 405 } |
| 401 #endif | 406 #endif |
| OLD | NEW |