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

Unified Diff: chrome/browser/printing/print_job.cc

Issue 566693002: Use file handles to interact with utility process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mon Sep 15 03:22:54 PDT 2014 Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/printing/print_job.cc
diff --git a/chrome/browser/printing/print_job.cc b/chrome/browser/printing/print_job.cc
index 2569af4ea7743c7727f212f75da4edcab3654da5..9a85ed770800cbc4ab2d7f80429a787aab4b84b5 100644
--- a/chrome/browser/printing/print_job.cc
+++ b/chrome/browser/printing/print_job.cc
@@ -17,6 +17,11 @@
#include "printing/printed_document.h"
#include "printing/printed_page.h"
+#if defined(OS_WIN)
+#include "chrome/browser/printing/pdf_to_emf_converter.h"
+#include "printing/pdf_render_settings.h"
+#endif
+
using base::TimeDelta;
namespace {
@@ -37,6 +42,10 @@ PrintJob::PrintJob()
settings_(),
is_job_pending_(false),
is_canceling_(false),
+#if defined(OS_WIN)
+ pdf_to_emf_page_count_(0),
+ pdf_to_emf_current_page_(0),
+#endif
quit_factory_(this) {
// This is normally a UI message loop, but in unit tests, the message loop is
// of the 'default' type.
@@ -214,6 +223,57 @@ PrintedDocument* PrintJob::document() const {
return document_.get();
}
+#if defined(OS_WIN)
+void PrintJob::ConvertPdfToEmf(
+ const scoped_refptr<base::RefCountedMemory>& bytes,
+ gfx::Size page_size,
+ gfx::Rect content_area) {
Lei Zhang 2014/09/15 21:49:53 Can you DCHECK here and in the callbacks to make s
Vitaly Buka (NO REVIEWS) 2014/09/15 22:33:50 Done.
+ DCHECK(!pdf_to_emf_converter_.get());
+ pdf_to_emf_converter_ = PdfToEmfConverter::CreateDefault();
+ const int kPrinterDpi = settings().dpi();
+ pdf_to_emf_page_size_ = page_size;
Lei Zhang 2014/09/15 21:49:53 This is set once here for PDF file. Is the PDF fil
Vitaly Buka (NO REVIEWS) 2014/09/15 22:33:50 That's looks incorrect. But I don't change behaiv
+ pdf_to_emf_content_area_ = content_area;
+ pdf_to_emf_converter_->Start(
+ bytes,
+ printing::PdfRenderSettings(content_area, kPrinterDpi, true),
+ base::Bind(&PrintJob::OnPdfLoaded, this));
+}
+
+void PrintJob::OnPdfPageConvertedToEmf(int page_number,
+ double scale_factor,
+ scoped_ptr<MetafilePlayer> emf) {
+ DCHECK(pdf_to_emf_converter_);
+ if (!document_.get() || !emf)
+ return OnPdfLoaded(false);
+
+ // Update the rendered document. It will send notifications to the listener.
+ document_->SetPage(pdf_to_emf_current_page_++,
+ emf.Pass(),
+ scale_factor,
+ pdf_to_emf_page_size_,
+ pdf_to_emf_content_area_);
+
+ if (pdf_to_emf_current_page_ < pdf_to_emf_page_count_)
Lei Zhang 2014/09/15 21:49:53 nit: wrap inner block in braces.
Vitaly Buka (NO REVIEWS) 2014/09/15 22:33:50 Done.
Vitaly Buka (NO REVIEWS) 2014/09/15 22:33:50 Done.
+ pdf_to_emf_converter_->GetPage(
+ pdf_to_emf_current_page_,
+ base::Bind(&PrintJob::OnPdfPageConvertedToEmf, this));
+}
+
+void PrintJob::OnPdfLoaded(int page_count) {
+ if (page_count <= 0) {
+ pdf_to_emf_converter_.reset();
+ Cancel();
+ return;
+ }
+ pdf_to_emf_page_count_ = page_count;
+ pdf_to_emf_current_page_ = 0;
+
+ pdf_to_emf_converter_->GetPage(
+ pdf_to_emf_current_page_,
+ base::Bind(&PrintJob::OnPdfPageConvertedToEmf, this));
+}
+#endif // OS_WIN
+
void PrintJob::UpdatePrintedDocument(PrintedDocument* new_document) {
if (document_.get() == new_document)
return;

Powered by Google App Engine
This is Rietveld 408576698