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 |