Chromium Code Reviews| 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/base64.h" | 7 #include "base/base64.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| 11 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 12 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
| 13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/path_service.h" | 15 #include "base/path_service.h" |
| 16 #include "base/scoped_native_library.h" | 16 #include "base/scoped_native_library.h" |
| 17 #include "base/time/time.h" | 17 #include "base/time/time.h" |
| 18 #include "chrome/common/chrome_paths.h" | 18 #include "chrome/common/chrome_paths.h" |
| 19 #include "chrome/common/chrome_utility_messages.h" | 19 #include "chrome/common/chrome_utility_messages.h" |
| 20 #include "chrome/common/extensions/chrome_extensions_client.h" | 20 #include "chrome/common/extensions/chrome_extensions_client.h" |
| 21 #include "chrome/common/extensions/extension_l10n_util.h" | 21 #include "chrome/common/extensions/extension_l10n_util.h" |
| 22 #include "chrome/common/extensions/update_manifest.h" | 22 #include "chrome/common/extensions/update_manifest.h" |
| 23 #include "chrome/common/safe_browsing/zip_analyzer.h" | 23 #include "chrome/common/safe_browsing/zip_analyzer.h" |
| 24 #include "chrome/utility/cloud_print/bitmap_image.h" | |
| 25 #include "chrome/utility/cloud_print/pwg_encoder.h" | |
| 24 #include "chrome/utility/extensions/unpacker.h" | 26 #include "chrome/utility/extensions/unpacker.h" |
| 25 #include "chrome/utility/profile_import_handler.h" | 27 #include "chrome/utility/profile_import_handler.h" |
| 26 #include "chrome/utility/web_resource_unpacker.h" | 28 #include "chrome/utility/web_resource_unpacker.h" |
| 27 #include "content/public/child/image_decoder_utils.h" | 29 #include "content/public/child/image_decoder_utils.h" |
| 28 #include "content/public/common/content_paths.h" | 30 #include "content/public/common/content_paths.h" |
| 29 #include "content/public/utility/utility_thread.h" | 31 #include "content/public/utility/utility_thread.h" |
| 30 #include "extensions/common/extension.h" | 32 #include "extensions/common/extension.h" |
| 31 #include "extensions/common/manifest.h" | 33 #include "extensions/common/manifest.h" |
| 32 #include "media/base/media.h" | 34 #include "media/base/media.h" |
| 33 #include "media/base/media_file_checker.h" | 35 #include "media/base/media_file_checker.h" |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 320 IPC_BEGIN_MESSAGE_MAP(ChromeContentUtilityClient, message) | 322 IPC_BEGIN_MESSAGE_MAP(ChromeContentUtilityClient, message) |
| 321 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnpackExtension, OnUnpackExtension) | 323 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnpackExtension, OnUnpackExtension) |
| 322 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnpackWebResource, | 324 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnpackWebResource, |
| 323 OnUnpackWebResource) | 325 OnUnpackWebResource) |
| 324 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseUpdateManifest, | 326 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseUpdateManifest, |
| 325 OnParseUpdateManifest) | 327 OnParseUpdateManifest) |
| 326 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImage, OnDecodeImage) | 328 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImage, OnDecodeImage) |
| 327 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImageBase64, OnDecodeImageBase64) | 329 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImageBase64, OnDecodeImageBase64) |
| 328 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToMetafile, | 330 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToMetafile, |
| 329 OnRenderPDFPagesToMetafile) | 331 OnRenderPDFPagesToMetafile) |
| 332 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToPWGRaster, | |
| 333 OnRenderPDFPagesToPWGRaster) | |
| 330 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RobustJPEGDecodeImage, | 334 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RobustJPEGDecodeImage, |
| 331 OnRobustJPEGDecodeImage) | 335 OnRobustJPEGDecodeImage) |
| 332 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseJSON, OnParseJSON) | 336 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseJSON, OnParseJSON) |
| 333 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_GetPrinterCapsAndDefaults, | 337 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_GetPrinterCapsAndDefaults, |
| 334 OnGetPrinterCapsAndDefaults) | 338 OnGetPrinterCapsAndDefaults) |
| 335 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_StartupPing, OnStartupPing) | 339 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_StartupPing, OnStartupPing) |
| 336 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_AnalyzeZipFileForDownloadProtection, | 340 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_AnalyzeZipFileForDownloadProtection, |
| 337 OnAnalyzeZipFileForDownloadProtection) | 341 OnAnalyzeZipFileForDownloadProtection) |
| 338 | 342 |
| 339 #if !defined(OS_ANDROID) && !defined(OS_IOS) | 343 #if !defined(OS_ANDROID) && !defined(OS_IOS) |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 522 Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafile_Succeeded( | 526 Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafile_Succeeded( |
| 523 highest_rendered_page_number, scale_factor)); | 527 highest_rendered_page_number, scale_factor)); |
| 524 } | 528 } |
| 525 #endif // defined(OS_WIN) | 529 #endif // defined(OS_WIN) |
| 526 if (!succeeded) { | 530 if (!succeeded) { |
| 527 Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafile_Failed()); | 531 Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafile_Failed()); |
| 528 } | 532 } |
| 529 ReleaseProcessIfNeeded(); | 533 ReleaseProcessIfNeeded(); |
| 530 } | 534 } |
| 531 | 535 |
| 536 void ChromeContentUtilityClient::OnRenderPDFPagesToPWGRaster( | |
| 537 IPC::PlatformFileForTransit pdf_transit, | |
| 538 const printing::PdfRenderSettings& settings, | |
| 539 IPC::PlatformFileForTransit bitmap_transit) { | |
| 540 base::PlatformFile pdf = | |
| 541 IPC::PlatformFileForTransitToPlatformFile(pdf_transit); | |
| 542 base::PlatformFile bitmap = | |
| 543 IPC::PlatformFileForTransitToPlatformFile(bitmap_transit); | |
| 544 if (RenderPDFPagesToPWGRaster(pdf, settings, bitmap)) { | |
| 545 Send(new ChromeUtilityHostMsg_RenderPDFPagesToPWGRaster_Succeeded()); | |
| 546 } else { | |
| 547 Send(new ChromeUtilityHostMsg_RenderPDFPagesToPWGRaster_Failed()); | |
| 548 } | |
| 549 ReleaseProcessIfNeeded(); | |
| 550 } | |
| 551 | |
| 532 #if defined(OS_WIN) | 552 #if defined(OS_WIN) |
| 533 bool ChromeContentUtilityClient::RenderPDFToWinMetafile( | 553 bool ChromeContentUtilityClient::RenderPDFToWinMetafile( |
| 534 base::PlatformFile pdf_file, | 554 base::PlatformFile pdf_file, |
| 535 const base::FilePath& metafile_path, | 555 const base::FilePath& metafile_path, |
| 536 const printing::PdfRenderSettings& settings, | 556 const printing::PdfRenderSettings& settings, |
| 537 const std::vector<printing::PageRange>& page_ranges, | 557 const std::vector<printing::PageRange>& page_ranges, |
| 538 int* highest_rendered_page_number, | 558 int* highest_rendered_page_number, |
| 539 double* scale_factor) { | 559 double* scale_factor) { |
| 540 *highest_rendered_page_number = -1; | 560 *highest_rendered_page_number = -1; |
| 541 *scale_factor = 1.0; | 561 *scale_factor = 1.0; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 599 ret = true; | 619 ret = true; |
| 600 } | 620 } |
| 601 metafile.FinishPage(); | 621 metafile.FinishPage(); |
| 602 } | 622 } |
| 603 } | 623 } |
| 604 metafile.FinishDocument(); | 624 metafile.FinishDocument(); |
| 605 return ret; | 625 return ret; |
| 606 } | 626 } |
| 607 #endif // defined(OS_WIN) | 627 #endif // defined(OS_WIN) |
| 608 | 628 |
| 629 bool ChromeContentUtilityClient::RenderPDFPagesToPWGRaster( | |
| 630 base::PlatformFile pdf_file, | |
| 631 const printing::PdfRenderSettings& settings, | |
| 632 base::PlatformFile bitmap_file) { | |
| 633 bool autoupdate = true; | |
| 634 if (!g_pdf_lib.Get().IsValid()) | |
| 635 return false; | |
| 636 | |
| 637 base::PlatformFileInfo info; | |
| 638 if (!base::GetPlatformFileInfo(pdf_file, &info) || info.size <= 0) | |
| 639 return false; | |
| 640 | |
| 641 std::vector<char> data(info.size, 0); | |
| 642 int data_size = base::ReadPlatformFile(pdf_file, 0, &data[0], data.size()); | |
| 643 if (data_size != static_cast<int>(data.size())) | |
| 644 return false; | |
| 645 data.resize(data_size); | |
|
Lei Zhang
2013/11/22 01:52:50
Isn't this a no-op?
Vitaly Buka (NO REVIEWS)
2013/11/22 08:10:05
Done.
| |
| 646 | |
| 647 int total_page_count = 0; | |
| 648 if (!g_pdf_lib.Get().GetPDFDocInfo(&data.front(), data.size(), | |
| 649 &total_page_count, NULL)) { | |
| 650 return false; | |
| 651 } | |
| 652 | |
| 653 cloud_print::PwgEncoder encoder; | |
| 654 std::string pwg_header; | |
| 655 encoder.EncodeDocumentHeader(&pwg_header); | |
| 656 int bytes_written = base::WritePlatformFileAtCurrentPos(bitmap_file, | |
| 657 &pwg_header.front(), | |
| 658 pwg_header.size()); | |
| 659 if (bytes_written != static_cast<int>(pwg_header.size())) | |
| 660 return false; | |
| 661 | |
| 662 cloud_print::BitmapImage image(settings.area().size(), | |
| 663 cloud_print::BitmapImage::BGRA); | |
| 664 for (int i = 0; i < total_page_count; ++i) { | |
| 665 if (!g_pdf_lib.Get().RenderPDFPageToBitmap( | |
| 666 &data.front(), data.size(), i, image.pixel_data(), | |
| 667 image.size().width(), image.size().height(), settings.dpi(), | |
| 668 settings.dpi(), autoupdate)) { | |
| 669 return false; | |
| 670 } | |
| 671 std::string pwg_page; | |
| 672 if (!encoder.EncodePage(image, settings.dpi(), total_page_count, &pwg_page)) | |
| 673 return false; | |
| 674 bytes_written = base::WritePlatformFileAtCurrentPos(bitmap_file, | |
| 675 &pwg_page.front(), | |
| 676 pwg_page.size()); | |
| 677 if (bytes_written != static_cast<int>(pwg_page.size())) | |
| 678 return false; | |
| 679 } | |
| 680 return true; | |
| 681 } | |
| 682 | |
| 609 void ChromeContentUtilityClient::OnRobustJPEGDecodeImage( | 683 void ChromeContentUtilityClient::OnRobustJPEGDecodeImage( |
| 610 const std::vector<unsigned char>& encoded_data) { | 684 const std::vector<unsigned char>& encoded_data) { |
| 611 // Our robust jpeg decoding is using IJG libjpeg. | 685 // Our robust jpeg decoding is using IJG libjpeg. |
| 612 if (gfx::JPEGCodec::JpegLibraryVariant() == gfx::JPEGCodec::IJG_LIBJPEG) { | 686 if (gfx::JPEGCodec::JpegLibraryVariant() == gfx::JPEGCodec::IJG_LIBJPEG) { |
| 613 scoped_ptr<SkBitmap> decoded_image(gfx::JPEGCodec::Decode( | 687 scoped_ptr<SkBitmap> decoded_image(gfx::JPEGCodec::Decode( |
| 614 &encoded_data[0], encoded_data.size())); | 688 &encoded_data[0], encoded_data.size())); |
| 615 if (!decoded_image.get() || decoded_image->empty()) { | 689 if (!decoded_image.get() || decoded_image->empty()) { |
| 616 Send(new ChromeUtilityHostMsg_DecodeImage_Failed()); | 690 Send(new ChromeUtilityHostMsg_DecodeImage_Failed()); |
| 617 } else { | 691 } else { |
| 618 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(*decoded_image)); | 692 Send(new ChromeUtilityHostMsg_DecodeImage_Succeeded(*decoded_image)); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 754 picasa::PicasaAlbumsIndexer indexer(album_uids); | 828 picasa::PicasaAlbumsIndexer indexer(album_uids); |
| 755 indexer.ParseFolderINI(folders_inis); | 829 indexer.ParseFolderINI(folders_inis); |
| 756 | 830 |
| 757 Send(new ChromeUtilityHostMsg_IndexPicasaAlbumsContents_Finished( | 831 Send(new ChromeUtilityHostMsg_IndexPicasaAlbumsContents_Finished( |
| 758 indexer.albums_images())); | 832 indexer.albums_images())); |
| 759 ReleaseProcessIfNeeded(); | 833 ReleaseProcessIfNeeded(); |
| 760 } | 834 } |
| 761 #endif // defined(OS_WIN) || defined(OS_MACOSX) | 835 #endif // defined(OS_WIN) || defined(OS_MACOSX) |
| 762 | 836 |
| 763 } // namespace chrome | 837 } // namespace chrome |
| OLD | NEW |