Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Use of this source code is governed by a BSD-style license that can be | |
|
Noam Samuel
2014/08/20 00:04:17
??? Pretty sure this line doesn't need to be moved
Vitaly Buka (NO REVIEWS)
2014/08/20 02:42:55
Done.
| |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 // 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 | |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/renderer/printing/print_web_view_helper.h" | 5 #include "chrome/renderer/printing/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" |
| 11 #include "base/json/json_writer.h" | 11 #include "base/json/json_writer.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 84 return kPointsPerInch; | 84 return kPointsPerInch; |
| 85 #else | 85 #else |
| 86 return static_cast<int>(print_params->dpi); | 86 return static_cast<int>(print_params->dpi); |
| 87 #endif // defined(OS_MACOSX) | 87 #endif // defined(OS_MACOSX) |
| 88 } | 88 } |
| 89 | 89 |
| 90 bool PrintMsg_Print_Params_IsValid(const PrintMsg_Print_Params& params) { | 90 bool PrintMsg_Print_Params_IsValid(const PrintMsg_Print_Params& params) { |
| 91 return !params.content_size.IsEmpty() && !params.page_size.IsEmpty() && | 91 return !params.content_size.IsEmpty() && !params.page_size.IsEmpty() && |
| 92 !params.printable_area.IsEmpty() && params.document_cookie && | 92 !params.printable_area.IsEmpty() && params.document_cookie && |
| 93 params.desired_dpi && params.max_shrink && params.min_shrink && | 93 params.desired_dpi && params.max_shrink && params.min_shrink && |
| 94 params.dpi && (params.margin_top >= 0) && (params.margin_left >= 0); | 94 params.dpi && (params.margin_top >= 0) && (params.margin_left >= 0) && |
| 95 params.dpi > kMinDpi && params.document_cookie != 0; | |
| 95 } | 96 } |
| 96 | 97 |
| 97 PrintMsg_Print_Params GetCssPrintParams( | 98 PrintMsg_Print_Params GetCssPrintParams( |
| 98 blink::WebFrame* frame, | 99 blink::WebFrame* frame, |
| 99 int page_index, | 100 int page_index, |
| 100 const PrintMsg_Print_Params& page_params) { | 101 const PrintMsg_Print_Params& page_params) { |
| 101 PrintMsg_Print_Params page_css_params = page_params; | 102 PrintMsg_Print_Params page_css_params = page_params; |
| 102 int dpi = GetDPI(&page_params); | 103 int dpi = GetDPI(&page_params); |
| 103 | 104 |
| 104 blink::WebSize page_size_in_pixels( | 105 blink::WebSize page_size_in_pixels( |
| (...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1013 if (!print_preview_context_.source_frame()) { | 1014 if (!print_preview_context_.source_frame()) { |
| 1014 DidFinishPrinting(FAIL_PREVIEW); | 1015 DidFinishPrinting(FAIL_PREVIEW); |
| 1015 return; | 1016 return; |
| 1016 } | 1017 } |
| 1017 | 1018 |
| 1018 if (!UpdatePrintSettings(print_preview_context_.source_frame(), | 1019 if (!UpdatePrintSettings(print_preview_context_.source_frame(), |
| 1019 print_preview_context_.source_node(), settings)) { | 1020 print_preview_context_.source_node(), settings)) { |
| 1020 if (print_preview_context_.last_error() != PREVIEW_ERROR_BAD_SETTING) { | 1021 if (print_preview_context_.last_error() != PREVIEW_ERROR_BAD_SETTING) { |
| 1021 Send(new PrintHostMsg_PrintPreviewInvalidPrinterSettings( | 1022 Send(new PrintHostMsg_PrintPreviewInvalidPrinterSettings( |
| 1022 routing_id(), | 1023 routing_id(), |
| 1023 print_pages_params_ ? | 1024 print_pages_params() ? print_pages_params()->params.document_cookie |
| 1024 print_pages_params_->params.document_cookie : 0)); | 1025 : 0)); |
| 1025 notify_browser_of_print_failure_ = false; // Already sent. | 1026 notify_browser_of_print_failure_ = false; // Already sent. |
| 1026 } | 1027 } |
| 1027 DidFinishPrinting(FAIL_PREVIEW); | 1028 DidFinishPrinting(FAIL_PREVIEW); |
| 1028 return; | 1029 return; |
| 1029 } | 1030 } |
| 1030 | 1031 |
| 1031 // Set the options from document if we are previewing a pdf and send a | 1032 // Set the options from document if we are previewing a pdf and send a |
| 1032 // message to browser. | 1033 // message to browser. |
| 1033 if (print_pages_params_->params.is_first_request && | 1034 if (print_pages_params()->params.is_first_request && |
| 1034 !print_preview_context_.IsModifiable()) { | 1035 !print_preview_context_.IsModifiable()) { |
| 1035 PrintHostMsg_SetOptionsFromDocument_Params params; | 1036 PrintHostMsg_SetOptionsFromDocument_Params params; |
| 1036 SetOptionsFromDocument(params); | 1037 SetOptionsFromDocument(params); |
| 1037 Send(new PrintHostMsg_SetOptionsFromDocument(routing_id(), params)); | 1038 Send(new PrintHostMsg_SetOptionsFromDocument(routing_id(), params)); |
| 1038 } | 1039 } |
| 1039 | 1040 |
| 1040 is_print_ready_metafile_sent_ = false; | 1041 is_print_ready_metafile_sent_ = false; |
| 1041 | 1042 |
| 1042 // PDF printer device supports alpha blending. | 1043 // PDF printer device supports alpha blending. |
| 1043 print_pages_params_->params.supports_alpha_blend = true; | 1044 print_pages_params_->params.supports_alpha_blend = true; |
| 1044 | 1045 |
| 1045 bool generate_draft_pages = false; | 1046 bool generate_draft_pages = false; |
| 1046 if (!settings.GetBoolean(kSettingGenerateDraftData, | 1047 if (!settings.GetBoolean(kSettingGenerateDraftData, |
| 1047 &generate_draft_pages)) { | 1048 &generate_draft_pages)) { |
| 1048 NOTREACHED(); | 1049 NOTREACHED(); |
| 1049 } | 1050 } |
| 1050 print_preview_context_.set_generate_draft_pages(generate_draft_pages); | 1051 print_preview_context_.set_generate_draft_pages(generate_draft_pages); |
| 1051 | 1052 |
| 1052 PrepareFrameForPreviewDocument(); | 1053 PrepareFrameForPreviewDocument(); |
| 1053 } | 1054 } |
| 1054 | 1055 |
| 1055 void PrintWebViewHelper::PrepareFrameForPreviewDocument() { | 1056 void PrintWebViewHelper::PrepareFrameForPreviewDocument() { |
| 1056 reset_prep_frame_view_ = false; | 1057 reset_prep_frame_view_ = false; |
| 1057 | 1058 |
| 1058 if (!print_pages_params_ || CheckForCancel()) { | 1059 if (!print_pages_params() || CheckForCancel()) { |
| 1059 DidFinishPrinting(FAIL_PREVIEW); | 1060 DidFinishPrinting(FAIL_PREVIEW); |
| 1060 return; | 1061 return; |
| 1061 } | 1062 } |
| 1062 | 1063 |
| 1063 // Don't reset loading frame or WebKit will fail assert. Just retry when | 1064 // Don't reset loading frame or WebKit will fail assert. Just retry when |
| 1064 // current selection is loaded. | 1065 // current selection is loaded. |
| 1065 if (prep_frame_view_ && prep_frame_view_->IsLoadingSelection()) { | 1066 if (prep_frame_view_ && prep_frame_view_->IsLoadingSelection()) { |
| 1066 reset_prep_frame_view_ = true; | 1067 reset_prep_frame_view_ = true; |
| 1067 return; | 1068 return; |
| 1068 } | 1069 } |
| 1069 | 1070 |
| 1070 const PrintMsg_Print_Params& print_params = print_pages_params_->params; | 1071 const PrintMsg_Print_Params& print_params = print_pages_params()->params; |
| 1071 prep_frame_view_.reset( | 1072 prep_frame_view_.reset( |
| 1072 new PrepareFrameAndViewForPrint(print_params, | 1073 new PrepareFrameAndViewForPrint(print_params, |
| 1073 print_preview_context_.source_frame(), | 1074 print_preview_context_.source_frame(), |
| 1074 print_preview_context_.source_node(), | 1075 print_preview_context_.source_node(), |
| 1075 ignore_css_margins_)); | 1076 ignore_css_margins_)); |
| 1076 prep_frame_view_->CopySelectionIfNeeded( | 1077 prep_frame_view_->CopySelectionIfNeeded( |
| 1077 render_view()->GetWebkitPreferences(), | 1078 render_view()->GetWebkitPreferences(), |
| 1078 base::Bind(&PrintWebViewHelper::OnFramePreparedForPreviewDocument, | 1079 base::Bind(&PrintWebViewHelper::OnFramePreparedForPreviewDocument, |
| 1079 base::Unretained(this))); | 1080 base::Unretained(this))); |
| 1080 } | 1081 } |
| 1081 | 1082 |
| 1082 void PrintWebViewHelper::OnFramePreparedForPreviewDocument() { | 1083 void PrintWebViewHelper::OnFramePreparedForPreviewDocument() { |
| 1083 if (reset_prep_frame_view_) { | 1084 if (reset_prep_frame_view_) { |
| 1084 PrepareFrameForPreviewDocument(); | 1085 PrepareFrameForPreviewDocument(); |
| 1085 return; | 1086 return; |
| 1086 } | 1087 } |
| 1087 DidFinishPrinting(CreatePreviewDocument() ? OK : FAIL_PREVIEW); | 1088 DidFinishPrinting(CreatePreviewDocument() ? OK : FAIL_PREVIEW); |
| 1088 } | 1089 } |
| 1089 | 1090 |
| 1090 bool PrintWebViewHelper::CreatePreviewDocument() { | 1091 bool PrintWebViewHelper::CreatePreviewDocument() { |
| 1091 if (!print_pages_params_ || CheckForCancel()) | 1092 if (!print_pages_params() || CheckForCancel()) |
| 1092 return false; | 1093 return false; |
| 1093 | 1094 |
| 1094 UMA_HISTOGRAM_ENUMERATION("PrintPreview.PreviewEvent", | 1095 UMA_HISTOGRAM_ENUMERATION("PrintPreview.PreviewEvent", |
| 1095 PREVIEW_EVENT_CREATE_DOCUMENT, PREVIEW_EVENT_MAX); | 1096 PREVIEW_EVENT_CREATE_DOCUMENT, PREVIEW_EVENT_MAX); |
| 1096 | 1097 |
| 1097 const PrintMsg_Print_Params& print_params = print_pages_params_->params; | 1098 const PrintMsg_Print_Params& print_params = print_pages_params()->params; |
| 1098 const std::vector<int>& pages = print_pages_params_->pages; | 1099 const std::vector<int>& pages = print_pages_params()->pages; |
| 1099 | 1100 |
| 1100 if (!print_preview_context_.CreatePreviewDocument(prep_frame_view_.release(), | 1101 if (!print_preview_context_.CreatePreviewDocument(prep_frame_view_.release(), |
| 1101 pages)) { | 1102 pages)) { |
| 1102 return false; | 1103 return false; |
| 1103 } | 1104 } |
| 1104 | 1105 |
| 1105 PageSizeMargins default_page_layout; | 1106 PageSizeMargins default_page_layout; |
| 1106 ComputePageLayoutInPointsForCss(print_preview_context_.prepared_frame(), 0, | 1107 ComputePageLayoutInPointsForCss(print_preview_context_.prepared_frame(), 0, |
| 1107 print_params, ignore_css_margins_, NULL, | 1108 print_params, ignore_css_margins_, NULL, |
| 1108 &default_page_layout); | 1109 &default_page_layout); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1168 DCHECK(!is_print_ready_metafile_sent_); | 1169 DCHECK(!is_print_ready_metafile_sent_); |
| 1169 print_preview_context_.FinalizePrintReadyDocument(); | 1170 print_preview_context_.FinalizePrintReadyDocument(); |
| 1170 | 1171 |
| 1171 // Get the size of the resulting metafile. | 1172 // Get the size of the resulting metafile. |
| 1172 PreviewMetafile* metafile = print_preview_context_.metafile(); | 1173 PreviewMetafile* metafile = print_preview_context_.metafile(); |
| 1173 uint32 buf_size = metafile->GetDataSize(); | 1174 uint32 buf_size = metafile->GetDataSize(); |
| 1174 DCHECK_GT(buf_size, 0u); | 1175 DCHECK_GT(buf_size, 0u); |
| 1175 | 1176 |
| 1176 PrintHostMsg_DidPreviewDocument_Params preview_params; | 1177 PrintHostMsg_DidPreviewDocument_Params preview_params; |
| 1177 preview_params.data_size = buf_size; | 1178 preview_params.data_size = buf_size; |
| 1178 preview_params.document_cookie = print_pages_params_->params.document_cookie; | 1179 preview_params.document_cookie = print_pages_params()->params.document_cookie; |
| 1179 preview_params.expected_pages_count = | 1180 preview_params.expected_pages_count = |
| 1180 print_preview_context_.total_page_count(); | 1181 print_preview_context_.total_page_count(); |
| 1181 preview_params.modifiable = print_preview_context_.IsModifiable(); | 1182 preview_params.modifiable = print_preview_context_.IsModifiable(); |
| 1182 preview_params.preview_request_id = | 1183 preview_params.preview_request_id = |
| 1183 print_pages_params_->params.preview_request_id; | 1184 print_pages_params()->params.preview_request_id; |
| 1184 | 1185 |
| 1185 // Ask the browser to create the shared memory for us. | 1186 // Ask the browser to create the shared memory for us. |
| 1186 if (!CopyMetafileDataToSharedMem(metafile, | 1187 if (!CopyMetafileDataToSharedMem(metafile, |
| 1187 &(preview_params.metafile_data_handle))) { | 1188 &(preview_params.metafile_data_handle))) { |
| 1188 LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; | 1189 LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; |
| 1189 print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); | 1190 print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); |
| 1190 return false; | 1191 return false; |
| 1191 } | 1192 } |
| 1192 is_print_ready_metafile_sent_ = true; | 1193 is_print_ready_metafile_sent_ = true; |
| 1193 | 1194 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1290 void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { | 1291 void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { |
| 1291 switch (result) { | 1292 switch (result) { |
| 1292 case OK: | 1293 case OK: |
| 1293 break; | 1294 break; |
| 1294 | 1295 |
| 1295 case FAIL_PRINT_INIT: | 1296 case FAIL_PRINT_INIT: |
| 1296 DCHECK(!notify_browser_of_print_failure_); | 1297 DCHECK(!notify_browser_of_print_failure_); |
| 1297 break; | 1298 break; |
| 1298 | 1299 |
| 1299 case FAIL_PRINT: | 1300 case FAIL_PRINT: |
| 1300 if (notify_browser_of_print_failure_ && print_pages_params_) { | 1301 if (notify_browser_of_print_failure_ && print_pages_params()) { |
| 1301 int cookie = print_pages_params_->params.document_cookie; | 1302 int cookie = print_pages_params()->params.document_cookie; |
| 1302 Send(new PrintHostMsg_PrintingFailed(routing_id(), cookie)); | 1303 Send(new PrintHostMsg_PrintingFailed(routing_id(), cookie)); |
| 1303 } | 1304 } |
| 1304 break; | 1305 break; |
| 1305 | 1306 |
| 1306 case FAIL_PREVIEW: | 1307 case FAIL_PREVIEW: |
| 1307 DCHECK(is_preview_enabled_); | 1308 DCHECK(is_preview_enabled_); |
| 1308 int cookie = print_pages_params_ ? | 1309 int cookie = print_pages_params() |
| 1309 print_pages_params_->params.document_cookie : 0; | 1310 ? print_pages_params()->params.document_cookie |
| 1311 : 0; | |
| 1310 if (notify_browser_of_print_failure_) { | 1312 if (notify_browser_of_print_failure_) { |
| 1311 LOG(ERROR) << "CreatePreviewDocument failed"; | 1313 LOG(ERROR) << "CreatePreviewDocument failed"; |
| 1312 Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie)); | 1314 Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie)); |
| 1313 } else { | 1315 } else { |
| 1314 Send(new PrintHostMsg_PrintPreviewCancelled(routing_id(), cookie)); | 1316 Send(new PrintHostMsg_PrintPreviewCancelled(routing_id(), cookie)); |
| 1315 } | 1317 } |
| 1316 print_preview_context_.Failed(notify_browser_of_print_failure_); | 1318 print_preview_context_.Failed(notify_browser_of_print_failure_); |
| 1317 break; | 1319 break; |
| 1318 } | 1320 } |
| 1319 prep_frame_view_.reset(); | 1321 prep_frame_view_.reset(); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 1330 if (!prep_frame_view_) // Printing is already canceled or failed. | 1332 if (!prep_frame_view_) // Printing is already canceled or failed. |
| 1331 return; | 1333 return; |
| 1332 prep_frame_view_->StartPrinting(); | 1334 prep_frame_view_->StartPrinting(); |
| 1333 | 1335 |
| 1334 int page_count = prep_frame_view_->GetExpectedPageCount(); | 1336 int page_count = prep_frame_view_->GetExpectedPageCount(); |
| 1335 if (!page_count) { | 1337 if (!page_count) { |
| 1336 LOG(ERROR) << "Can't print 0 pages."; | 1338 LOG(ERROR) << "Can't print 0 pages."; |
| 1337 return DidFinishPrinting(FAIL_PRINT); | 1339 return DidFinishPrinting(FAIL_PRINT); |
| 1338 } | 1340 } |
| 1339 | 1341 |
| 1340 const PrintMsg_PrintPages_Params& params = *print_pages_params_; | 1342 const PrintMsg_PrintPages_Params& params = *print_pages_params(); |
| 1341 const PrintMsg_Print_Params& print_params = params.params; | 1343 const PrintMsg_Print_Params& print_params = params.params; |
| 1342 | 1344 |
| 1343 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) | 1345 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) |
| 1344 // TODO(vitalybuka): should be page_count or valid pages from params.pages. | 1346 // TODO(vitalybuka): should be page_count or valid pages from params.pages. |
| 1345 // See http://crbug.com/161576 | 1347 // See http://crbug.com/161576 |
| 1346 Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(), | 1348 Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(), |
| 1347 print_params.document_cookie, | 1349 print_params.document_cookie, |
| 1348 page_count)); | 1350 page_count)); |
| 1349 #endif // !defined(OS_CHROMEOS) | 1351 #endif // !defined(OS_CHROMEOS) |
| 1350 | 1352 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 1369 | 1371 |
| 1370 void PrintWebViewHelper::FinishFramePrinting() { | 1372 void PrintWebViewHelper::FinishFramePrinting() { |
| 1371 prep_frame_view_.reset(); | 1373 prep_frame_view_.reset(); |
| 1372 } | 1374 } |
| 1373 | 1375 |
| 1374 #if defined(OS_MACOSX) || \ | 1376 #if defined(OS_MACOSX) || \ |
| 1375 (defined(OS_WIN) && !defined(WIN_PDF_METAFILE_FOR_PRINTING)) | 1377 (defined(OS_WIN) && !defined(WIN_PDF_METAFILE_FOR_PRINTING)) |
| 1376 bool PrintWebViewHelper::PrintPagesNative(blink::WebFrame* frame, | 1378 bool PrintWebViewHelper::PrintPagesNative(blink::WebFrame* frame, |
| 1377 int page_count, | 1379 int page_count, |
| 1378 const gfx::Size& canvas_size) { | 1380 const gfx::Size& canvas_size) { |
| 1379 const PrintMsg_PrintPages_Params& params = *print_pages_params_; | 1381 const PrintMsg_PrintPages_Params& params = *print_pages_params(); |
| 1380 const PrintMsg_Print_Params& print_params = params.params; | 1382 const PrintMsg_Print_Params& print_params = params.params; |
| 1381 | 1383 |
| 1382 PrintMsg_PrintPage_Params page_params; | 1384 PrintMsg_PrintPage_Params page_params; |
| 1383 page_params.params = print_params; | 1385 page_params.params = print_params; |
| 1384 if (params.pages.empty()) { | 1386 if (params.pages.empty()) { |
| 1385 for (int i = 0; i < page_count; ++i) { | 1387 for (int i = 0; i < page_count; ++i) { |
| 1386 page_params.page_number = i; | 1388 page_params.page_number = i; |
| 1387 PrintPageInternal(page_params, canvas_size, frame); | 1389 PrintPageInternal(page_params, canvas_size, frame); |
| 1388 } | 1390 } |
| 1389 } else { | 1391 } else { |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 1419 PrintMsg_PrintPages_Params settings; | 1421 PrintMsg_PrintPages_Params settings; |
| 1420 Send(new PrintHostMsg_GetDefaultPrintSettings(routing_id(), | 1422 Send(new PrintHostMsg_GetDefaultPrintSettings(routing_id(), |
| 1421 &settings.params)); | 1423 &settings.params)); |
| 1422 // Check if the printer returned any settings, if the settings is empty, we | 1424 // Check if the printer returned any settings, if the settings is empty, we |
| 1423 // can safely assume there are no printer drivers configured. So we safely | 1425 // can safely assume there are no printer drivers configured. So we safely |
| 1424 // terminate. | 1426 // terminate. |
| 1425 bool result = true; | 1427 bool result = true; |
| 1426 if (!PrintMsg_Print_Params_IsValid(settings.params)) | 1428 if (!PrintMsg_Print_Params_IsValid(settings.params)) |
| 1427 result = false; | 1429 result = false; |
| 1428 | 1430 |
| 1429 if (result && | |
| 1430 (settings.params.dpi < kMinDpi || settings.params.document_cookie == 0)) { | |
| 1431 // Invalid print page settings. | |
| 1432 NOTREACHED(); | |
| 1433 result = false; | |
| 1434 } | |
| 1435 | |
| 1436 // Reset to default values. | 1431 // Reset to default values. |
| 1437 ignore_css_margins_ = false; | 1432 ignore_css_margins_ = false; |
| 1438 settings.pages.clear(); | 1433 settings.pages.clear(); |
| 1439 | 1434 |
| 1440 settings.params.print_scaling_option = | 1435 settings.params.print_scaling_option = |
| 1441 blink::WebPrintScalingOptionSourceSize; | 1436 blink::WebPrintScalingOptionSourceSize; |
| 1442 if (fit_to_paper_size) { | 1437 if (fit_to_paper_size) { |
| 1443 settings.params.print_scaling_option = | 1438 settings.params.print_scaling_option = |
| 1444 blink::WebPrintScalingOptionFitToPrintableArea; | 1439 blink::WebPrintScalingOptionFitToPrintableArea; |
| 1445 } | 1440 } |
| 1446 | 1441 |
| 1447 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); | 1442 SetPrintPagesParams(settings); |
| 1448 return result; | 1443 return result; |
| 1449 } | 1444 } |
| 1450 | 1445 |
| 1451 bool PrintWebViewHelper::CalculateNumberOfPages(blink::WebLocalFrame* frame, | 1446 bool PrintWebViewHelper::CalculateNumberOfPages(blink::WebLocalFrame* frame, |
| 1452 const blink::WebNode& node, | 1447 const blink::WebNode& node, |
| 1453 int* number_of_pages) { | 1448 int* number_of_pages) { |
| 1454 DCHECK(frame); | 1449 DCHECK(frame); |
| 1455 bool fit_to_paper_size = !(PrintingNodeOrPdfFrame(frame, node)); | 1450 bool fit_to_paper_size = !(PrintingNodeOrPdfFrame(frame, node)); |
| 1456 if (!InitPrintSettings(fit_to_paper_size)) { | 1451 if (!InitPrintSettings(fit_to_paper_size)) { |
| 1457 notify_browser_of_print_failure_ = false; | 1452 notify_browser_of_print_failure_ = false; |
| 1458 Send(new PrintHostMsg_ShowInvalidPrinterSettingsError(routing_id())); | 1453 Send(new PrintHostMsg_ShowInvalidPrinterSettingsError(routing_id())); |
| 1459 return false; | 1454 return false; |
| 1460 } | 1455 } |
| 1461 | 1456 |
| 1462 const PrintMsg_Print_Params& params = print_pages_params_->params; | 1457 const PrintMsg_Print_Params& params = print_pages_params()->params; |
| 1463 PrepareFrameAndViewForPrint prepare(params, frame, node, ignore_css_margins_); | 1458 PrepareFrameAndViewForPrint prepare(params, frame, node, ignore_css_margins_); |
| 1464 prepare.StartPrinting(); | 1459 prepare.StartPrinting(); |
| 1465 | 1460 |
| 1466 Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), | |
| 1467 params.document_cookie)); | |
| 1468 *number_of_pages = prepare.GetExpectedPageCount(); | 1461 *number_of_pages = prepare.GetExpectedPageCount(); |
| 1469 return true; | 1462 return true; |
| 1470 } | 1463 } |
| 1471 | 1464 |
| 1472 void PrintWebViewHelper::SetOptionsFromDocument( | 1465 void PrintWebViewHelper::SetOptionsFromDocument( |
| 1473 PrintHostMsg_SetOptionsFromDocument_Params& params) { | 1466 PrintHostMsg_SetOptionsFromDocument_Params& params) { |
| 1474 blink::WebLocalFrame* source_frame = print_preview_context_.source_frame(); | 1467 blink::WebLocalFrame* source_frame = print_preview_context_.source_frame(); |
| 1475 const blink::WebNode& source_node = print_preview_context_.source_node(); | 1468 const blink::WebNode& source_node = print_preview_context_.source_node(); |
| 1476 | 1469 |
| 1477 params.is_scaling_disabled = | 1470 params.is_scaling_disabled = |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 1502 | 1495 |
| 1503 if (print_for_preview_ || !source_is_html) { | 1496 if (print_for_preview_ || !source_is_html) { |
| 1504 modified_job_settings.MergeDictionary(job_settings); | 1497 modified_job_settings.MergeDictionary(job_settings); |
| 1505 modified_job_settings.SetBoolean(kSettingHeaderFooterEnabled, false); | 1498 modified_job_settings.SetBoolean(kSettingHeaderFooterEnabled, false); |
| 1506 modified_job_settings.SetInteger(kSettingMarginsType, NO_MARGINS); | 1499 modified_job_settings.SetInteger(kSettingMarginsType, NO_MARGINS); |
| 1507 job_settings = &modified_job_settings; | 1500 job_settings = &modified_job_settings; |
| 1508 } | 1501 } |
| 1509 | 1502 |
| 1510 // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when | 1503 // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when |
| 1511 // possible. | 1504 // possible. |
| 1512 int cookie = print_pages_params_ ? | 1505 int cookie = |
| 1513 print_pages_params_->params.document_cookie : 0; | 1506 print_pages_params() ? print_pages_params()->params.document_cookie : 0; |
| 1514 PrintMsg_PrintPages_Params settings; | 1507 PrintMsg_PrintPages_Params settings; |
| 1515 Send(new PrintHostMsg_UpdatePrintSettings(routing_id(), cookie, *job_settings, | 1508 bool canceled = false; |
| 1516 &settings)); | 1509 Send(new PrintHostMsg_UpdatePrintSettings( |
| 1517 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); | 1510 routing_id(), cookie, *job_settings, &settings, &canceled)); |
| 1518 | 1511 if (canceled) { |
| 1519 if (!PrintMsg_Print_Params_IsValid(settings.params)) { | 1512 notify_browser_of_print_failure_ = false; |
| 1520 if (!print_for_preview_) | |
| 1521 print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS); | |
| 1522 else | |
| 1523 Send(new PrintHostMsg_ShowInvalidPrinterSettingsError(routing_id())); | |
| 1524 | |
| 1525 return false; | 1513 return false; |
| 1526 } | 1514 } |
| 1527 | 1515 |
| 1528 if (settings.params.dpi < kMinDpi || !settings.params.document_cookie) { | |
| 1529 print_preview_context_.set_error(PREVIEW_ERROR_UPDATING_PRINT_SETTINGS); | |
| 1530 return false; | |
| 1531 } | |
| 1532 | |
| 1533 if (!job_settings->GetInteger(kPreviewUIID, &settings.params.preview_ui_id)) { | 1516 if (!job_settings->GetInteger(kPreviewUIID, &settings.params.preview_ui_id)) { |
| 1534 NOTREACHED(); | 1517 NOTREACHED(); |
| 1535 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); | 1518 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); |
| 1536 return false; | 1519 return false; |
| 1537 } | 1520 } |
| 1538 | 1521 |
| 1539 if (!print_for_preview_) { | 1522 if (!print_for_preview_) { |
| 1540 // Validate expected print preview settings. | 1523 // Validate expected print preview settings. |
| 1541 if (!job_settings->GetInteger(kPreviewRequestID, | 1524 if (!job_settings->GetInteger(kPreviewRequestID, |
| 1542 &settings.params.preview_request_id) || | 1525 &settings.params.preview_request_id) || |
| 1543 !job_settings->GetBoolean(kIsFirstRequest, | 1526 !job_settings->GetBoolean(kIsFirstRequest, |
| 1544 &settings.params.is_first_request)) { | 1527 &settings.params.is_first_request)) { |
| 1545 NOTREACHED(); | 1528 NOTREACHED(); |
| 1546 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); | 1529 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); |
| 1547 return false; | 1530 return false; |
| 1548 } | 1531 } |
| 1532 } | |
| 1549 | 1533 |
| 1534 if (!print_for_preview_) { | |
|
Noam Samuel
2014/08/20 00:04:17
Why separate two of the same if?
Vitaly Buka (NO REVIEWS)
2014/08/20 02:42:55
Done.
| |
| 1550 settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings); | 1535 settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings); |
| 1551 UpdateFrameMarginsCssInfo(*job_settings); | 1536 UpdateFrameMarginsCssInfo(*job_settings); |
| 1552 settings.params.print_scaling_option = GetPrintScalingOption( | 1537 settings.params.print_scaling_option = GetPrintScalingOption( |
| 1553 frame, node, source_is_html, *job_settings, settings.params); | 1538 frame, node, source_is_html, *job_settings, settings.params); |
| 1554 | 1539 |
| 1555 // Header/Footer: Set |header_footer_info_|. | 1540 // Header/Footer: Set |header_footer_info_|. |
| 1556 if (settings.params.display_header_footer) { | 1541 if (settings.params.display_header_footer) { |
| 1557 header_footer_info_.reset(new base::DictionaryValue()); | 1542 header_footer_info_.reset(new base::DictionaryValue()); |
| 1558 header_footer_info_->SetDouble(kSettingHeaderFooterDate, | 1543 header_footer_info_->SetDouble(kSettingHeaderFooterDate, |
| 1559 base::Time::Now().ToJsTime()); | 1544 base::Time::Now().ToJsTime()); |
| 1560 header_footer_info_->SetString(kSettingHeaderFooterURL, | 1545 header_footer_info_->SetString(kSettingHeaderFooterURL, |
| 1561 settings.params.url); | 1546 settings.params.url); |
| 1562 header_footer_info_->SetString(kSettingHeaderFooterTitle, | 1547 header_footer_info_->SetString(kSettingHeaderFooterTitle, |
| 1563 settings.params.title); | 1548 settings.params.title); |
| 1564 } | 1549 } |
| 1565 } | 1550 } |
| 1566 | 1551 |
| 1567 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); | 1552 SetPrintPagesParams(settings); |
| 1568 Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), | 1553 |
| 1569 settings.params.document_cookie)); | 1554 if (CheckForCancel()) |
| 1555 return false; | |
| 1556 | |
| 1557 if (!PrintMsg_Print_Params_IsValid(settings.params)) { | |
| 1558 if (!print_for_preview_) | |
| 1559 print_preview_context_.set_error(PREVIEW_ERROR_INVALID_PRINTER_SETTINGS); | |
| 1560 else | |
| 1561 Send(new PrintHostMsg_ShowInvalidPrinterSettingsError(routing_id())); | |
| 1562 | |
| 1563 return false; | |
| 1564 } | |
| 1570 | 1565 |
| 1571 return true; | 1566 return true; |
| 1572 } | 1567 } |
| 1573 | 1568 |
| 1574 bool PrintWebViewHelper::GetPrintSettingsFromUser(blink::WebFrame* frame, | 1569 bool PrintWebViewHelper::GetPrintSettingsFromUser(blink::WebFrame* frame, |
| 1575 const blink::WebNode& node, | 1570 const blink::WebNode& node, |
| 1576 int expected_pages_count) { | 1571 int expected_pages_count) { |
| 1577 PrintHostMsg_ScriptedPrint_Params params; | 1572 PrintHostMsg_ScriptedPrint_Params params; |
| 1578 PrintMsg_PrintPages_Params print_settings; | 1573 PrintMsg_PrintPages_Params print_settings; |
| 1579 | 1574 |
| 1580 params.cookie = print_pages_params_->params.document_cookie; | 1575 params.cookie = print_pages_params()->params.document_cookie; |
| 1581 params.has_selection = frame->hasSelection(); | 1576 params.has_selection = frame->hasSelection(); |
| 1582 params.expected_pages_count = expected_pages_count; | 1577 params.expected_pages_count = expected_pages_count; |
| 1583 MarginType margin_type = DEFAULT_MARGINS; | 1578 MarginType margin_type = DEFAULT_MARGINS; |
| 1584 if (PrintingNodeOrPdfFrame(frame, node)) | 1579 if (PrintingNodeOrPdfFrame(frame, node)) |
| 1585 margin_type = GetMarginsForPdf(frame, node); | 1580 margin_type = GetMarginsForPdf(frame, node); |
| 1586 params.margin_type = margin_type; | 1581 params.margin_type = margin_type; |
| 1587 | 1582 |
| 1588 Send(new PrintHostMsg_DidShowPrintDialog(routing_id())); | 1583 Send(new PrintHostMsg_DidShowPrintDialog(routing_id())); |
| 1589 | 1584 |
| 1590 // PrintHostMsg_ScriptedPrint will reset print_scaling_option, so we save the | 1585 // PrintHostMsg_ScriptedPrint will reset print_scaling_option, so we save the |
| 1591 // value before and restore it afterwards. | 1586 // value before and restore it afterwards. |
| 1592 blink::WebPrintScalingOption scaling_option = | 1587 blink::WebPrintScalingOption scaling_option = |
| 1593 print_pages_params_->params.print_scaling_option; | 1588 print_pages_params()->params.print_scaling_option; |
| 1594 | 1589 |
| 1595 print_pages_params_.reset(); | 1590 print_pages_params_.reset(); |
| 1596 IPC::SyncMessage* msg = | 1591 IPC::SyncMessage* msg = |
| 1597 new PrintHostMsg_ScriptedPrint(routing_id(), params, &print_settings); | 1592 new PrintHostMsg_ScriptedPrint(routing_id(), params, &print_settings); |
| 1598 msg->EnableMessagePumping(); | 1593 msg->EnableMessagePumping(); |
| 1599 Send(msg); | 1594 Send(msg); |
| 1600 print_pages_params_.reset(new PrintMsg_PrintPages_Params(print_settings)); | 1595 print_settings.params.print_scaling_option = scaling_option; |
| 1601 | 1596 SetPrintPagesParams(print_settings); |
| 1602 print_pages_params_->params.print_scaling_option = scaling_option; | |
| 1603 return (print_settings.params.dpi && print_settings.params.document_cookie); | 1597 return (print_settings.params.dpi && print_settings.params.document_cookie); |
| 1604 } | 1598 } |
| 1605 | 1599 |
| 1606 bool PrintWebViewHelper::RenderPagesForPrint(blink::WebLocalFrame* frame, | 1600 bool PrintWebViewHelper::RenderPagesForPrint(blink::WebLocalFrame* frame, |
| 1607 const blink::WebNode& node) { | 1601 const blink::WebNode& node) { |
| 1608 if (!frame || prep_frame_view_) | 1602 if (!frame || prep_frame_view_) |
| 1609 return false; | 1603 return false; |
| 1610 const PrintMsg_PrintPages_Params& params = *print_pages_params_; | 1604 const PrintMsg_PrintPages_Params& params = *print_pages_params(); |
| 1611 const PrintMsg_Print_Params& print_params = params.params; | 1605 const PrintMsg_Print_Params& print_params = params.params; |
| 1612 prep_frame_view_.reset(new PrepareFrameAndViewForPrint( | 1606 prep_frame_view_.reset(new PrepareFrameAndViewForPrint( |
| 1613 print_params, frame, node, ignore_css_margins_)); | 1607 print_params, frame, node, ignore_css_margins_)); |
| 1614 DCHECK(!print_pages_params_->params.selection_only || | 1608 DCHECK(!print_pages_params()->params.selection_only || |
| 1615 print_pages_params_->pages.empty()); | 1609 print_pages_params()->pages.empty()); |
| 1616 prep_frame_view_->CopySelectionIfNeeded( | 1610 prep_frame_view_->CopySelectionIfNeeded( |
| 1617 render_view()->GetWebkitPreferences(), | 1611 render_view()->GetWebkitPreferences(), |
| 1618 base::Bind(&PrintWebViewHelper::OnFramePreparedForPrintPages, | 1612 base::Bind(&PrintWebViewHelper::OnFramePreparedForPrintPages, |
| 1619 base::Unretained(this))); | 1613 base::Unretained(this))); |
| 1620 return true; | 1614 return true; |
| 1621 } | 1615 } |
| 1622 | 1616 |
| 1623 #if defined(OS_POSIX) | 1617 #if defined(OS_POSIX) |
| 1624 bool PrintWebViewHelper::CopyMetafileDataToSharedMem( | 1618 bool PrintWebViewHelper::CopyMetafileDataToSharedMem( |
| 1625 Metafile* metafile, | 1619 Metafile* metafile, |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1764 } | 1758 } |
| 1765 default: { | 1759 default: { |
| 1766 NOTREACHED(); | 1760 NOTREACHED(); |
| 1767 return; | 1761 return; |
| 1768 } | 1762 } |
| 1769 } | 1763 } |
| 1770 Send(new PrintHostMsg_RequestPrintPreview(routing_id(), params)); | 1764 Send(new PrintHostMsg_RequestPrintPreview(routing_id(), params)); |
| 1771 } | 1765 } |
| 1772 | 1766 |
| 1773 bool PrintWebViewHelper::CheckForCancel() { | 1767 bool PrintWebViewHelper::CheckForCancel() { |
| 1774 const PrintMsg_Print_Params& print_params = print_pages_params_->params; | 1768 const PrintMsg_Print_Params& print_params = print_pages_params()->params; |
| 1775 bool cancel = false; | 1769 bool cancel = false; |
| 1776 Send(new PrintHostMsg_CheckForCancel(routing_id(), | 1770 Send(new PrintHostMsg_CheckForCancel(routing_id(), |
| 1777 print_params.preview_ui_id, | 1771 print_params.preview_ui_id, |
| 1778 print_params.preview_request_id, | 1772 print_params.preview_request_id, |
| 1779 &cancel)); | 1773 &cancel)); |
| 1780 if (cancel) | 1774 if (cancel) |
| 1781 notify_browser_of_print_failure_ = false; | 1775 notify_browser_of_print_failure_ = false; |
| 1782 return cancel; | 1776 return cancel; |
| 1783 } | 1777 } |
| 1784 | 1778 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 1808 DCHECK_GT(buf_size, 0u); | 1802 DCHECK_GT(buf_size, 0u); |
| 1809 if (!CopyMetafileDataToSharedMem( | 1803 if (!CopyMetafileDataToSharedMem( |
| 1810 metafile, &(preview_page_params.metafile_data_handle))) { | 1804 metafile, &(preview_page_params.metafile_data_handle))) { |
| 1811 LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; | 1805 LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; |
| 1812 print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); | 1806 print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); |
| 1813 return false; | 1807 return false; |
| 1814 } | 1808 } |
| 1815 preview_page_params.data_size = buf_size; | 1809 preview_page_params.data_size = buf_size; |
| 1816 preview_page_params.page_number = page_number; | 1810 preview_page_params.page_number = page_number; |
| 1817 preview_page_params.preview_request_id = | 1811 preview_page_params.preview_request_id = |
| 1818 print_pages_params_->params.preview_request_id; | 1812 print_pages_params()->params.preview_request_id; |
| 1819 | 1813 |
| 1820 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); | 1814 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); |
| 1821 return true; | 1815 return true; |
| 1822 } | 1816 } |
| 1823 | 1817 |
| 1824 PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext() | 1818 PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext() |
| 1825 : total_page_count_(0), | 1819 : total_page_count_(0), |
| 1826 current_page_index_(0), | 1820 current_page_index_(0), |
| 1827 generate_draft_pages_(true), | 1821 generate_draft_pages_(true), |
| 1828 print_ready_metafile_page_count_(0), | 1822 print_ready_metafile_page_count_(0), |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2056 return prep_frame_view_->GetPrintCanvasSize(); | 2050 return prep_frame_view_->GetPrintCanvasSize(); |
| 2057 } | 2051 } |
| 2058 | 2052 |
| 2059 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { | 2053 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
| 2060 prep_frame_view_.reset(); | 2054 prep_frame_view_.reset(); |
| 2061 metafile_.reset(); | 2055 metafile_.reset(); |
| 2062 pages_to_render_.clear(); | 2056 pages_to_render_.clear(); |
| 2063 error_ = PREVIEW_ERROR_NONE; | 2057 error_ = PREVIEW_ERROR_NONE; |
| 2064 } | 2058 } |
| 2065 | 2059 |
| 2060 void PrintWebViewHelper::SetPrintPagesParams( | |
| 2061 const PrintMsg_PrintPages_Params& settings) { | |
| 2062 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); | |
| 2063 Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), | |
| 2064 settings.params.document_cookie)); | |
| 2065 } | |
| 2066 | |
| 2066 } // namespace printing | 2067 } // namespace printing |
| OLD | NEW |