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

Side by Side Diff: chrome/browser/printing/print_preview_pdf_generated_browsertest.cc

Issue 2508563003: Printing: Load the source PDF only once. (Closed)
Patch Set: More renaming Created 4 years, 1 month 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <fstream> 8 #include <fstream>
9 #include <iostream> 9 #include <iostream>
10 #include <iterator> 10 #include <iterator>
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 // Need to check whether the save was successful. Ending the loop only 328 // Need to check whether the save was successful. Ending the loop only
329 // means the save was attempted. 329 // means the save was attempted.
330 base::File pdf_file( 330 base::File pdf_file(
331 pdf_file_save_path_, base::File::FLAG_OPEN | base::File::FLAG_READ); 331 pdf_file_save_path_, base::File::FLAG_OPEN | base::File::FLAG_READ);
332 ASSERT_TRUE(pdf_file.IsValid()); 332 ASSERT_TRUE(pdf_file.IsValid());
333 } 333 }
334 334
335 // Converts the PDF to a PNG file so that the layout test can do an image 335 // Converts the PDF to a PNG file so that the layout test can do an image
336 // diff on this image and a reference image. 336 // diff on this image and a reference image.
337 void PdfToPng() { 337 void PdfToPng() {
338 std::string pdf_data;
339 ASSERT_TRUE(base::ReadFileToString(pdf_file_save_path_, &pdf_data));
340
338 int num_pages; 341 int num_pages;
339 double max_width_in_points = 0; 342 double max_width_in_points = 0;
340 std::vector<uint8_t> bitmap_data; 343 void* pdf_handle = nullptr;
341 double total_height_in_pixels = 0; 344 ASSERT_TRUE(chrome_pdf::GetPDFDocInfo(pdf_data.data(), pdf_data.size(),
342 std::string pdf_data; 345 &num_pages, &max_width_in_points,
343 346 &pdf_handle));
344 ASSERT_TRUE(base::ReadFileToString(pdf_file_save_path_, &pdf_data));
345 ASSERT_TRUE(chrome_pdf::GetPDFDocInfo(pdf_data.data(),
346 pdf_data.size(),
347 &num_pages,
348 &max_width_in_points));
349
350 ASSERT_GT(num_pages, 0); 347 ASSERT_GT(num_pages, 0);
351 double max_width_in_pixels = 348 double max_width_in_pixels =
352 ConvertUnitDouble(max_width_in_points, kPointsPerInch, kDpi); 349 ConvertUnitDouble(max_width_in_points, kPointsPerInch, kDpi);
353 350
351 std::vector<uint8_t> bitmap_data;
352 double total_height_in_pixels = 0;
354 for (int i = 0; i < num_pages; ++i) { 353 for (int i = 0; i < num_pages; ++i) {
355 double width_in_points, height_in_points; 354 double width_in_points, height_in_points;
356 ASSERT_TRUE(chrome_pdf::GetPDFPageSizeByIndex(pdf_data.data(), 355 ASSERT_TRUE(chrome_pdf::GetPDFPageSizeByIndex(
357 pdf_data.size(), 356 pdf_handle, i, &width_in_points, &height_in_points));
358 i,
359 &width_in_points,
360 &height_in_points));
361 357
362 double width_in_pixels = ConvertUnitDouble( 358 double width_in_pixels = ConvertUnitDouble(
363 width_in_points, kPointsPerInch, kDpi); 359 width_in_points, kPointsPerInch, kDpi);
364 double height_in_pixels = ConvertUnitDouble( 360 double height_in_pixels = ConvertUnitDouble(
365 height_in_points, kPointsPerInch, kDpi); 361 height_in_points, kPointsPerInch, kDpi);
366 362
367 // The image will be rotated if |width_in_pixels| is greater than 363 // The image will be rotated if |width_in_pixels| is greater than
368 // |height_in_pixels|. This is because the page will be rotated to fit 364 // |height_in_pixels|. This is because the page will be rotated to fit
369 // within a piece of paper. Therefore, |width_in_pixels| and 365 // within a piece of paper. Therefore, |width_in_pixels| and
370 // |height_in_pixels| have to be swapped or else they won't reflect the 366 // |height_in_pixels| have to be swapped or else they won't reflect the
(...skipping 10 matching lines...) Expand all
381 settings.area().height() > int_max / (kColorChannels * 377 settings.area().height() > int_max / (kColorChannels *
382 settings.area().width())) { 378 settings.area().width())) {
383 FAIL() << "The dimensions of the image are too large." 379 FAIL() << "The dimensions of the image are too large."
384 << "Decrease the DPI or the dimensions of the image."; 380 << "Decrease the DPI or the dimensions of the image.";
385 } 381 }
386 382
387 std::vector<uint8_t> page_bitmap_data( 383 std::vector<uint8_t> page_bitmap_data(
388 kColorChannels * settings.area().size().GetArea()); 384 kColorChannels * settings.area().size().GetArea());
389 385
390 ASSERT_TRUE(chrome_pdf::RenderPDFPageToBitmap( 386 ASSERT_TRUE(chrome_pdf::RenderPDFPageToBitmap(
391 pdf_data.data(), 387 pdf_handle, i, page_bitmap_data.data(),
392 pdf_data.size(), 388 settings.area().size().width(), settings.area().size().height(),
393 i, 389 settings.dpi(), true));
394 page_bitmap_data.data(),
395 settings.area().size().width(),
396 settings.area().size().height(),
397 settings.dpi(),
398 true));
399 FillPng(&page_bitmap_data, 390 FillPng(&page_bitmap_data,
400 width_in_pixels, 391 width_in_pixels,
401 max_width_in_pixels, 392 max_width_in_pixels,
402 settings.area().size().height()); 393 settings.area().size().height());
403 bitmap_data.insert(bitmap_data.end(), 394 bitmap_data.insert(bitmap_data.end(),
404 page_bitmap_data.begin(), 395 page_bitmap_data.begin(),
405 page_bitmap_data.end()); 396 page_bitmap_data.end());
406 } 397 }
407 398
399 chrome_pdf::ReleasePDFHandle(pdf_handle);
408 CreatePng(bitmap_data, max_width_in_pixels, total_height_in_pixels); 400 CreatePng(bitmap_data, max_width_in_pixels, total_height_in_pixels);
409 } 401 }
410 402
411 // Fills out a bitmap with whitespace so that the image will correctly fit 403 // Fills out a bitmap with whitespace so that the image will correctly fit
412 // within a PNG that is wider than the bitmap itself. 404 // within a PNG that is wider than the bitmap itself.
413 void FillPng(std::vector<uint8_t>* bitmap, 405 void FillPng(std::vector<uint8_t>* bitmap,
414 int current_width, 406 int current_width,
415 int desired_width, 407 int desired_width,
416 int height) { 408 int height) {
417 ASSERT_TRUE(bitmap); 409 ASSERT_TRUE(bitmap);
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 // waiting for this message and start waiting for the image data. 633 // waiting for this message and start waiting for the image data.
642 std::cout << "#EOF\n"; 634 std::cout << "#EOF\n";
643 std::cout.flush(); 635 std::cout.flush();
644 636
645 SendPng(); 637 SendPng();
646 Reset(); 638 Reset();
647 } 639 }
648 } 640 }
649 641
650 } // namespace printing 642 } // namespace printing
OLDNEW
« no previous file with comments | « chrome/browser/printing/pdf_to_emf_converter.cc ('k') | chrome/common/chrome_utility_printing_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698