| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/browser/printing/print_view_manager_base.h" | 5 #include "chrome/browser/printing/print_view_manager_base.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "content/public/browser/render_view_host.h" | 26 #include "content/public/browser/render_view_host.h" |
| 27 #include "content/public/browser/web_contents.h" | 27 #include "content/public/browser/web_contents.h" |
| 28 #include "printing/pdf_metafile_skia.h" | 28 #include "printing/pdf_metafile_skia.h" |
| 29 #include "printing/printed_document.h" | 29 #include "printing/printed_document.h" |
| 30 #include "ui/base/l10n/l10n_util.h" | 30 #include "ui/base/l10n/l10n_util.h" |
| 31 | 31 |
| 32 #if defined(ENABLE_FULL_PRINTING) | 32 #if defined(ENABLE_FULL_PRINTING) |
| 33 #include "chrome/browser/printing/print_error_dialog.h" | 33 #include "chrome/browser/printing/print_error_dialog.h" |
| 34 #endif | 34 #endif |
| 35 | 35 |
| 36 #if defined(OS_WIN) | |
| 37 #include "base/memory/ref_counted.h" | |
| 38 #include "base/memory/ref_counted_memory.h" | |
| 39 #include "chrome/browser/printing/pdf_to_emf_converter.h" | |
| 40 #include "printing/emf_win.h" | |
| 41 #include "printing/pdf_render_settings.h" | |
| 42 #endif | |
| 43 | |
| 44 using base::TimeDelta; | 36 using base::TimeDelta; |
| 45 using content::BrowserThread; | 37 using content::BrowserThread; |
| 46 | 38 |
| 47 namespace printing { | 39 namespace printing { |
| 48 | 40 |
| 49 namespace { | 41 namespace { |
| 50 | 42 |
| 51 } // namespace | 43 } // namespace |
| 52 | 44 |
| 53 PrintViewManagerBase::PrintViewManagerBase(content::WebContents* web_contents) | 45 PrintViewManagerBase::PrintViewManagerBase(content::WebContents* web_contents) |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 DCHECK_GT(cookie, 0); | 111 DCHECK_GT(cookie, 0); |
| 120 DCHECK_GT(number_pages, 0); | 112 DCHECK_GT(number_pages, 0); |
| 121 number_pages_ = number_pages; | 113 number_pages_ = number_pages; |
| 122 OpportunisticallyCreatePrintJob(cookie); | 114 OpportunisticallyCreatePrintJob(cookie); |
| 123 } | 115 } |
| 124 | 116 |
| 125 void PrintViewManagerBase::OnDidGetDocumentCookie(int cookie) { | 117 void PrintViewManagerBase::OnDidGetDocumentCookie(int cookie) { |
| 126 cookie_ = cookie; | 118 cookie_ = cookie; |
| 127 } | 119 } |
| 128 | 120 |
| 129 #if defined(OS_WIN) | |
| 130 void PrintViewManagerBase::OnPdfToEmfConverted( | |
| 131 const PrintHostMsg_DidPrintPage_Params& params, | |
| 132 double scale_factor, | |
| 133 ScopedVector<MetafilePlayer>* emf_files) { | |
| 134 if (!print_job_.get()) | |
| 135 return; | |
| 136 | |
| 137 PrintedDocument* document = print_job_->document(); | |
| 138 if (!document) | |
| 139 return; | |
| 140 | |
| 141 for (size_t i = 0; i < emf_files->size(); ++i) { | |
| 142 if (!(*emf_files)[i]) { | |
| 143 web_contents()->Stop(); | |
| 144 return; | |
| 145 } | |
| 146 } | |
| 147 | |
| 148 for (size_t i = 0; i < emf_files->size(); ++i) { | |
| 149 // Update the rendered document. It will send notifications to the listener. | |
| 150 document->SetPage(i, | |
| 151 make_scoped_ptr((*emf_files)[i]), | |
| 152 scale_factor, | |
| 153 params.page_size, | |
| 154 params.content_area); | |
| 155 } | |
| 156 // document->SetPage took ownership of all EMFs. | |
| 157 emf_files->weak_clear(); | |
| 158 | |
| 159 ShouldQuitFromInnerMessageLoop(); | |
| 160 } | |
| 161 #endif // OS_WIN | |
| 162 | |
| 163 void PrintViewManagerBase::OnDidPrintPage( | 121 void PrintViewManagerBase::OnDidPrintPage( |
| 164 const PrintHostMsg_DidPrintPage_Params& params) { | 122 const PrintHostMsg_DidPrintPage_Params& params) { |
| 165 if (!OpportunisticallyCreatePrintJob(params.document_cookie)) | 123 if (!OpportunisticallyCreatePrintJob(params.document_cookie)) |
| 166 return; | 124 return; |
| 167 | 125 |
| 168 PrintedDocument* document = print_job_->document(); | 126 PrintedDocument* document = print_job_->document(); |
| 169 if (!document || params.document_cookie != document->cookie()) { | 127 if (!document || params.document_cookie != document->cookie()) { |
| 170 // Out of sync. It may happen since we are completely asynchronous. Old | 128 // Out of sync. It may happen since we are completely asynchronous. Old |
| 171 // spurious messages can be received if one of the processes is overloaded. | 129 // spurious messages can be received if one of the processes is overloaded. |
| 172 return; | 130 return; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 params.content_area); | 163 params.content_area); |
| 206 | 164 |
| 207 ShouldQuitFromInnerMessageLoop(); | 165 ShouldQuitFromInnerMessageLoop(); |
| 208 #else | 166 #else |
| 209 if (metafile_must_be_valid) { | 167 if (metafile_must_be_valid) { |
| 210 scoped_refptr<base::RefCountedBytes> bytes = new base::RefCountedBytes( | 168 scoped_refptr<base::RefCountedBytes> bytes = new base::RefCountedBytes( |
| 211 reinterpret_cast<const unsigned char*>(shared_buf.memory()), | 169 reinterpret_cast<const unsigned char*>(shared_buf.memory()), |
| 212 params.data_size); | 170 params.data_size); |
| 213 | 171 |
| 214 document->DebugDumpData(bytes, FILE_PATH_LITERAL(".pdf")); | 172 document->DebugDumpData(bytes, FILE_PATH_LITERAL(".pdf")); |
| 215 | 173 print_job_->StartPdfToEmfConversion( |
| 216 if (!pdf_to_emf_converter_) | 174 bytes, params.page_size, params.content_area); |
| 217 pdf_to_emf_converter_ = PdfToEmfConverter::CreateDefault(); | |
| 218 | |
| 219 const int kPrinterDpi = print_job_->settings().dpi(); | |
| 220 pdf_to_emf_converter_->Start( | |
| 221 bytes, | |
| 222 printing::PdfRenderSettings(params.content_area, kPrinterDpi, true), | |
| 223 base::Bind(&PrintViewManagerBase::OnPdfToEmfConverted, | |
| 224 base::Unretained(this), | |
| 225 params)); | |
| 226 } | 175 } |
| 227 #endif // !OS_WIN | 176 #endif // !OS_WIN |
| 228 } | 177 } |
| 229 | 178 |
| 230 void PrintViewManagerBase::OnPrintingFailed(int cookie) { | 179 void PrintViewManagerBase::OnPrintingFailed(int cookie) { |
| 231 if (cookie != cookie_) { | 180 if (cookie != cookie_) { |
| 232 NOTREACHED(); | 181 NOTREACHED(); |
| 233 return; | 182 return; |
| 234 } | 183 } |
| 235 | 184 |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 scoped_refptr<printing::PrinterQuery> printer_query; | 515 scoped_refptr<printing::PrinterQuery> printer_query; |
| 567 printer_query = queue_->PopPrinterQuery(cookie); | 516 printer_query = queue_->PopPrinterQuery(cookie); |
| 568 if (!printer_query.get()) | 517 if (!printer_query.get()) |
| 569 return; | 518 return; |
| 570 BrowserThread::PostTask( | 519 BrowserThread::PostTask( |
| 571 BrowserThread::IO, FROM_HERE, | 520 BrowserThread::IO, FROM_HERE, |
| 572 base::Bind(&PrinterQuery::StopWorker, printer_query.get())); | 521 base::Bind(&PrinterQuery::StopWorker, printer_query.get())); |
| 573 } | 522 } |
| 574 | 523 |
| 575 } // namespace printing | 524 } // namespace printing |
| OLD | NEW |