| 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/renderer/print_web_view_helper.h" | 5 #include "chrome/renderer/print_web_view_helper.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 preview_params.expected_pages_count = | 853 preview_params.expected_pages_count = |
| 854 print_preview_context_.total_page_count(); | 854 print_preview_context_.total_page_count(); |
| 855 preview_params.modifiable = print_preview_context_.IsModifiable(); | 855 preview_params.modifiable = print_preview_context_.IsModifiable(); |
| 856 preview_params.preview_request_id = | 856 preview_params.preview_request_id = |
| 857 print_pages_params_->params.preview_request_id; | 857 print_pages_params_->params.preview_request_id; |
| 858 | 858 |
| 859 Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(), | 859 Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(), |
| 860 preview_params)); | 860 preview_params)); |
| 861 return; | 861 return; |
| 862 } | 862 } |
| 863 |
| 864 // If we are previewing a pdf and the print scaling is disabled, send a |
| 865 // message to browser. |
| 866 if (!print_preview_context_.IsModifiable() && |
| 867 print_pages_params_->params.is_first_request && |
| 868 print_preview_context_.frame()->isPrintScalingDisabledForPlugin( |
| 869 print_preview_context_.node())) { |
| 870 Send(new PrintHostMsg_PrintPreviewScalingDisabled(routing_id())); |
| 871 } |
| 872 |
| 863 // Always clear |old_print_pages_params_| before rendering the pages. | 873 // Always clear |old_print_pages_params_| before rendering the pages. |
| 864 old_print_pages_params_.reset(); | 874 old_print_pages_params_.reset(); |
| 865 is_print_ready_metafile_sent_ = false; | 875 is_print_ready_metafile_sent_ = false; |
| 866 | 876 |
| 867 // PDF printer device supports alpha blending. | 877 // PDF printer device supports alpha blending. |
| 868 print_pages_params_->params.supports_alpha_blend = true; | 878 print_pages_params_->params.supports_alpha_blend = true; |
| 869 | 879 |
| 870 bool generate_draft_pages = false; | 880 bool generate_draft_pages = false; |
| 871 if (!settings.GetBoolean(printing::kSettingGenerateDraftData, | 881 if (!settings.GetBoolean(printing::kSettingGenerateDraftData, |
| 872 &generate_draft_pages)) { | 882 &generate_draft_pages)) { |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1302 } | 1312 } |
| 1303 } else { | 1313 } else { |
| 1304 source_is_html = !PrintingNodeOrPdfFrame(frame, node); | 1314 source_is_html = !PrintingNodeOrPdfFrame(frame, node); |
| 1305 } | 1315 } |
| 1306 | 1316 |
| 1307 if (print_for_preview_ || !source_is_html) { | 1317 if (print_for_preview_ || !source_is_html) { |
| 1308 modified_job_settings.MergeDictionary(job_settings); | 1318 modified_job_settings.MergeDictionary(job_settings); |
| 1309 modified_job_settings.SetBoolean(printing::kSettingHeaderFooterEnabled, | 1319 modified_job_settings.SetBoolean(printing::kSettingHeaderFooterEnabled, |
| 1310 false); | 1320 false); |
| 1311 | 1321 |
| 1312 // - On Windows, we don't add a margin until we turn it into an EMF when | |
| 1313 // printing for print preview (We could add it in the plugin). | |
| 1314 // - On Mac with Skia, we don't add a margin until we send it to the printer | |
| 1315 // using the CG PDF class (We could add it in the plugin). | |
| 1316 // - On Mac with CG, we can add a margin when generating the preview. | |
| 1317 // - On Linux, we never add a margin (We Could add it in the plugin). | |
| 1318 #if defined(OS_MACOSX) && !defined(USE_SKIA) | |
| 1319 bool get_margins_from_pdf = !source_is_html && !print_for_preview_; | |
| 1320 #elif defined(OS_WIN) || defined(OS_MACOSX) | |
| 1321 bool get_margins_from_pdf = !source_is_html && print_for_preview_; | |
| 1322 #else | |
| 1323 bool get_margins_from_pdf = false; | |
| 1324 #endif | |
| 1325 | |
| 1326 printing::MarginType margin_type = printing::NO_MARGINS; | 1322 printing::MarginType margin_type = printing::NO_MARGINS; |
| 1327 if (get_margins_from_pdf) | |
| 1328 margin_type = GetMarginsForPdf(frame, node); | |
| 1329 modified_job_settings.SetInteger(printing::kSettingMarginsType, | 1323 modified_job_settings.SetInteger(printing::kSettingMarginsType, |
| 1330 margin_type); | 1324 margin_type); |
| 1331 job_settings = &modified_job_settings; | 1325 job_settings = &modified_job_settings; |
| 1332 } | 1326 } |
| 1333 | 1327 |
| 1334 // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when | 1328 // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when |
| 1335 // possible. | 1329 // possible. |
| 1336 int cookie = print_pages_params_.get() ? | 1330 int cookie = print_pages_params_.get() ? |
| 1337 print_pages_params_->params.document_cookie : 0; | 1331 print_pages_params_->params.document_cookie : 0; |
| 1338 PrintMsg_PrintPages_Params settings; | 1332 PrintMsg_PrintPages_Params settings; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1372 &(settings.params.preview_request_id)) || | 1366 &(settings.params.preview_request_id)) || |
| 1373 !job_settings->GetBoolean(printing::kIsFirstRequest, | 1367 !job_settings->GetBoolean(printing::kIsFirstRequest, |
| 1374 &(settings.params.is_first_request))) { | 1368 &(settings.params.is_first_request))) { |
| 1375 NOTREACHED(); | 1369 NOTREACHED(); |
| 1376 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); | 1370 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); |
| 1377 return false; | 1371 return false; |
| 1378 } | 1372 } |
| 1379 | 1373 |
| 1380 settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings); | 1374 settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings); |
| 1381 UpdateFrameMarginsCssInfo(*job_settings); | 1375 UpdateFrameMarginsCssInfo(*job_settings); |
| 1382 fit_to_page_ = source_is_html && !IsPrintToPdfRequested(*job_settings); | 1376 |
| 1377 // Source is PDF (Fit to page) |
| 1378 bool print_to_pdf_requested = IsPrintToPdfRequested(*job_settings); |
| 1379 bool fit_pdf_page_to_paper_size = false; |
| 1380 bool reset_fit_to_page_option = true; |
| 1381 if (!print_for_preview_ && !source_is_html && !print_to_pdf_requested) { |
| 1382 if (settings.params.is_first_request) { |
| 1383 // If print scaling is disabled, do not fit to paper size. |
| 1384 fit_pdf_page_to_paper_size = !print_preview_context_.frame()-> |
| 1385 isPrintScalingDisabledForPlugin(print_preview_context_.node()); |
| 1386 } else { |
| 1387 reset_fit_to_page_option = false; |
| 1388 } |
| 1389 } |
| 1390 |
| 1391 if (reset_fit_to_page_option) { |
| 1392 settings.params.fit_pdf_page_to_paper_size = fit_pdf_page_to_paper_size; |
| 1393 } else if (!job_settings->GetBoolean(printing::kSettingFitToPageEnabled, |
| 1394 &(settings.params.fit_pdf_page_to_paper_size))) { |
| 1395 NOTREACHED(); |
| 1396 } |
| 1397 |
| 1398 // Source is HTML (Fit to Page) |
| 1399 fit_to_page_ = source_is_html && !print_to_pdf_requested; |
| 1383 | 1400 |
| 1384 // Header/Footer: Set |header_footer_info_|. | 1401 // Header/Footer: Set |header_footer_info_|. |
| 1385 if (settings.params.display_header_footer) { | 1402 if (settings.params.display_header_footer) { |
| 1386 header_footer_info_.reset(new DictionaryValue()); | 1403 header_footer_info_.reset(new DictionaryValue()); |
| 1387 header_footer_info_->SetString(printing::kSettingHeaderFooterDate, | 1404 header_footer_info_->SetString(printing::kSettingHeaderFooterDate, |
| 1388 settings.params.date); | 1405 settings.params.date); |
| 1389 header_footer_info_->SetString(printing::kSettingHeaderFooterURL, | 1406 header_footer_info_->SetString(printing::kSettingHeaderFooterURL, |
| 1390 settings.params.url); | 1407 settings.params.url); |
| 1391 header_footer_info_->SetString(printing::kSettingHeaderFooterTitle, | 1408 header_footer_info_->SetString(printing::kSettingHeaderFooterTitle, |
| 1392 settings.params.title); | 1409 settings.params.title); |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1818 DCHECK(IsRendering()); | 1835 DCHECK(IsRendering()); |
| 1819 return prep_frame_view_->GetPrintCanvasSize(); | 1836 return prep_frame_view_->GetPrintCanvasSize(); |
| 1820 } | 1837 } |
| 1821 | 1838 |
| 1822 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { | 1839 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
| 1823 prep_frame_view_.reset(); | 1840 prep_frame_view_.reset(); |
| 1824 metafile_.reset(); | 1841 metafile_.reset(); |
| 1825 pages_to_render_.clear(); | 1842 pages_to_render_.clear(); |
| 1826 error_ = PREVIEW_ERROR_NONE; | 1843 error_ = PREVIEW_ERROR_NONE; |
| 1827 } | 1844 } |
| OLD | NEW |