OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #if defined(OS_MACOSX) && !defined(USE_SKIA) | 7 #if defined(OS_MACOSX) && !defined(USE_SKIA) |
8 #include <CoreGraphics/CGContext.h> | 8 #include <CoreGraphics/CGContext.h> |
9 #endif | 9 #endif |
10 | 10 |
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 } | 570 } |
571 | 571 |
572 WebFrame* pdf_frame = pdf_element.document().frame(); | 572 WebFrame* pdf_frame = pdf_element.document().frame(); |
573 scoped_ptr<PrepareFrameAndViewForPrint> prepare; | 573 scoped_ptr<PrepareFrameAndViewForPrint> prepare; |
574 if (!InitPrintSettingsAndPrepareFrame(pdf_frame, &pdf_element, &prepare)) { | 574 if (!InitPrintSettingsAndPrepareFrame(pdf_frame, &pdf_element, &prepare)) { |
575 NOTREACHED() << "Failed to initialize print page settings"; | 575 NOTREACHED() << "Failed to initialize print page settings"; |
576 return; | 576 return; |
577 } | 577 } |
578 | 578 |
579 if (!UpdatePrintSettings(job_settings, false)) { | 579 if (!UpdatePrintSettings(job_settings, false)) { |
| 580 LOG(ERROR) << "UpdatePrintSettings failed"; |
580 DidFinishPrinting(FAIL_PRINT); | 581 DidFinishPrinting(FAIL_PRINT); |
581 return; | 582 return; |
582 } | 583 } |
583 | 584 |
584 // Render Pages for printing. | 585 // Render Pages for printing. |
585 if (!RenderPagesForPrint(pdf_frame, &pdf_element, prepare.get())) | 586 if (!RenderPagesForPrint(pdf_frame, &pdf_element, prepare.get())) { |
| 587 LOG(ERROR) << "RenderPagesForPrint failed"; |
586 DidFinishPrinting(FAIL_PRINT); | 588 DidFinishPrinting(FAIL_PRINT); |
| 589 } |
587 } | 590 } |
588 | 591 |
589 bool PrintWebViewHelper::GetPrintFrame(WebKit::WebFrame** frame) { | 592 bool PrintWebViewHelper::GetPrintFrame(WebKit::WebFrame** frame) { |
590 DCHECK(frame); | 593 DCHECK(frame); |
591 DCHECK(render_view()->webview()); | 594 DCHECK(render_view()->webview()); |
592 if (!render_view()->webview()) | 595 if (!render_view()->webview()) |
593 return false; | 596 return false; |
594 | 597 |
595 // If the user has selected text in the currently focused frame we print | 598 // If the user has selected text in the currently focused frame we print |
596 // only that frame (this makes print selection work for multiple frames). | 599 // only that frame (this makes print selection work for multiple frames). |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 DCHECK(is_preview_); | 631 DCHECK(is_preview_); |
629 print_preview_context_.OnPrintPreview(); | 632 print_preview_context_.OnPrintPreview(); |
630 | 633 |
631 if (!InitPrintSettings(print_preview_context_.frame(), | 634 if (!InitPrintSettings(print_preview_context_.frame(), |
632 print_preview_context_.node())) { | 635 print_preview_context_.node())) { |
633 NOTREACHED(); | 636 NOTREACHED(); |
634 return; | 637 return; |
635 } | 638 } |
636 | 639 |
637 if (!UpdatePrintSettings(settings, true)) { | 640 if (!UpdatePrintSettings(settings, true)) { |
| 641 LOG(ERROR) << "UpdatePrintSettings failed"; |
638 DidFinishPrinting(FAIL_PREVIEW); | 642 DidFinishPrinting(FAIL_PREVIEW); |
639 return; | 643 return; |
640 } | 644 } |
641 | 645 |
642 if (!print_pages_params_->params.is_first_request && | 646 if (!print_pages_params_->params.is_first_request && |
643 old_print_pages_params_.get() && | 647 old_print_pages_params_.get() && |
644 PrintMsg_Print_Params_IsEqual(*old_print_pages_params_, | 648 PrintMsg_Print_Params_IsEqual(*old_print_pages_params_, |
645 *print_pages_params_)) { | 649 *print_pages_params_)) { |
646 PrintHostMsg_DidPreviewDocument_Params preview_params; | 650 PrintHostMsg_DidPreviewDocument_Params preview_params; |
647 preview_params.reuse_existing_data = true; | 651 preview_params.reuse_existing_data = true; |
648 preview_params.data_size = 0; | 652 preview_params.data_size = 0; |
649 preview_params.document_cookie = | 653 preview_params.document_cookie = |
650 print_pages_params_->params.document_cookie; | 654 print_pages_params_->params.document_cookie; |
651 preview_params.expected_pages_count = | 655 preview_params.expected_pages_count = |
652 print_preview_context_.total_page_count(); | 656 print_preview_context_.total_page_count(); |
653 preview_params.modifiable = print_preview_context_.IsModifiable(); | 657 preview_params.modifiable = print_preview_context_.IsModifiable(); |
654 preview_params.preview_request_id = | 658 preview_params.preview_request_id = |
655 print_pages_params_->params.preview_request_id; | 659 print_pages_params_->params.preview_request_id; |
656 | 660 |
657 Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params)); | 661 Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params)); |
658 return; | 662 return; |
659 } | 663 } |
660 // Always clear |old_print_pages_params_| before rendering the pages. | 664 // Always clear |old_print_pages_params_| before rendering the pages. |
661 old_print_pages_params_.reset(); | 665 old_print_pages_params_.reset(); |
662 | 666 |
663 // PDF printer device supports alpha blending. | 667 // PDF printer device supports alpha blending. |
664 print_pages_params_->params.supports_alpha_blend = true; | 668 print_pages_params_->params.supports_alpha_blend = true; |
665 if (CreatePreviewDocument()) | 669 if (CreatePreviewDocument()) { |
666 DidFinishPrinting(OK); | 670 DidFinishPrinting(OK); |
667 else | 671 } else { |
| 672 if (notify_browser_of_print_failure_) |
| 673 LOG(ERROR) << "CreatePreviewDocument failed"; |
668 DidFinishPrinting(FAIL_PREVIEW); | 674 DidFinishPrinting(FAIL_PREVIEW); |
| 675 } |
669 } | 676 } |
670 | 677 |
671 bool PrintWebViewHelper::CreatePreviewDocument() { | 678 bool PrintWebViewHelper::CreatePreviewDocument() { |
672 PrintMsg_Print_Params print_params = print_pages_params_->params; | 679 PrintMsg_Print_Params print_params = print_pages_params_->params; |
673 const std::vector<int>& pages = print_pages_params_->pages; | 680 const std::vector<int>& pages = print_pages_params_->pages; |
674 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages)) | 681 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages)) |
675 return false; | 682 return false; |
676 PrintHostMsg_DidGetPreviewPageCount_Params params; | 683 PrintHostMsg_DidGetPreviewPageCount_Params params; |
677 params.page_count = print_preview_context_.total_page_count(); | 684 params.page_count = print_preview_context_.total_page_count(); |
678 params.is_modifiable = print_preview_context_.IsModifiable(); | 685 params.is_modifiable = print_preview_context_.IsModifiable(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 preview_params.document_cookie = print_pages_params_->params.document_cookie; | 718 preview_params.document_cookie = print_pages_params_->params.document_cookie; |
712 preview_params.expected_pages_count = | 719 preview_params.expected_pages_count = |
713 print_preview_context_.total_page_count(); | 720 print_preview_context_.total_page_count(); |
714 preview_params.modifiable = print_preview_context_.IsModifiable(); | 721 preview_params.modifiable = print_preview_context_.IsModifiable(); |
715 preview_params.preview_request_id = | 722 preview_params.preview_request_id = |
716 print_pages_params_->params.preview_request_id; | 723 print_pages_params_->params.preview_request_id; |
717 | 724 |
718 // Ask the browser to create the shared memory for us. | 725 // Ask the browser to create the shared memory for us. |
719 if (!CopyMetafileDataToSharedMem(metafile, | 726 if (!CopyMetafileDataToSharedMem(metafile, |
720 &(preview_params.metafile_data_handle))) { | 727 &(preview_params.metafile_data_handle))) { |
| 728 LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; |
721 return false; | 729 return false; |
722 } | 730 } |
723 Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params)); | 731 Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params)); |
724 return true; | 732 return true; |
725 } | 733 } |
726 | 734 |
727 void PrintWebViewHelper::OnPrintingDone(bool success) { | 735 void PrintWebViewHelper::OnPrintingDone(bool success) { |
728 notify_browser_of_print_failure_ = false; | 736 notify_browser_of_print_failure_ = false; |
| 737 if (success == FAIL_PRINT) |
| 738 LOG(ERROR) << "Failure in OnPrintingDone"; |
729 DidFinishPrinting(success ? OK : FAIL_PRINT); | 739 DidFinishPrinting(success ? OK : FAIL_PRINT); |
730 } | 740 } |
731 | 741 |
732 void PrintWebViewHelper::OnPrintNodeUnderContextMenu() { | 742 void PrintWebViewHelper::OnPrintNodeUnderContextMenu() { |
733 const WebNode& context_menu_node = render_view()->context_menu_node(); | 743 const WebNode& context_menu_node = render_view()->context_menu_node(); |
734 if (context_menu_node.isNull()) { | 744 if (context_menu_node.isNull()) { |
735 NOTREACHED(); | 745 NOTREACHED(); |
736 return; | 746 return; |
737 } | 747 } |
738 | 748 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
784 } | 794 } |
785 | 795 |
786 // Ask the browser to show UI to retrieve the final print settings. | 796 // Ask the browser to show UI to retrieve the final print settings. |
787 if (!GetPrintSettingsFromUser(frame, expected_page_count, | 797 if (!GetPrintSettingsFromUser(frame, expected_page_count, |
788 use_browser_overlays)) { | 798 use_browser_overlays)) { |
789 DidFinishPrinting(OK); // Release resources and fail silently. | 799 DidFinishPrinting(OK); // Release resources and fail silently. |
790 return; | 800 return; |
791 } | 801 } |
792 | 802 |
793 // Render Pages for printing. | 803 // Render Pages for printing. |
794 if (!RenderPagesForPrint(frame, node, NULL)) | 804 if (!RenderPagesForPrint(frame, node, NULL)) { |
| 805 LOG(ERROR) << "RenderPagesForPrint failed"; |
795 DidFinishPrinting(FAIL_PRINT); | 806 DidFinishPrinting(FAIL_PRINT); |
| 807 } |
796 ResetScriptedPrintCount(); | 808 ResetScriptedPrintCount(); |
797 } | 809 } |
798 | 810 |
799 void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { | 811 void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { |
800 bool store_print_pages_params = true; | 812 bool store_print_pages_params = true; |
801 if (result == FAIL_PRINT) { | 813 if (result == FAIL_PRINT) { |
802 DisplayPrintJobError(); | 814 DisplayPrintJobError(); |
803 | 815 |
804 if (notify_browser_of_print_failure_) { | 816 if (notify_browser_of_print_failure_ && print_pages_params_.get()) { |
805 int cookie = print_pages_params_->params.document_cookie; | 817 int cookie = print_pages_params_->params.document_cookie; |
806 Send(new PrintHostMsg_PrintingFailed(routing_id(), cookie)); | 818 Send(new PrintHostMsg_PrintingFailed(routing_id(), cookie)); |
807 } | 819 } |
808 } else if (result == FAIL_PREVIEW) { | 820 } else if (result == FAIL_PREVIEW) { |
809 DCHECK(is_preview_); | 821 DCHECK(is_preview_); |
810 store_print_pages_params = false; | 822 store_print_pages_params = false; |
811 int cookie = print_pages_params_->params.document_cookie; | 823 int cookie = print_pages_params_->params.document_cookie; |
812 if (notify_browser_of_print_failure_) | 824 if (notify_browser_of_print_failure_) |
813 Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie)); | 825 Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie)); |
814 else | 826 else |
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1253 NOTREACHED(); | 1265 NOTREACHED(); |
1254 return false; | 1266 return false; |
1255 } | 1267 } |
1256 | 1268 |
1257 PrintHostMsg_DidPreviewPage_Params preview_page_params; | 1269 PrintHostMsg_DidPreviewPage_Params preview_page_params; |
1258 // Get the size of the resulting metafile. | 1270 // Get the size of the resulting metafile. |
1259 uint32 buf_size = metafile->GetDataSize(); | 1271 uint32 buf_size = metafile->GetDataSize(); |
1260 DCHECK_GT(buf_size, 0u); | 1272 DCHECK_GT(buf_size, 0u); |
1261 if (!CopyMetafileDataToSharedMem( | 1273 if (!CopyMetafileDataToSharedMem( |
1262 metafile, &(preview_page_params.metafile_data_handle))) { | 1274 metafile, &(preview_page_params.metafile_data_handle))) { |
| 1275 LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; |
1263 return false; | 1276 return false; |
1264 } | 1277 } |
1265 preview_page_params.data_size = buf_size; | 1278 preview_page_params.data_size = buf_size; |
1266 preview_page_params.page_number = page_number; | 1279 preview_page_params.page_number = page_number; |
1267 preview_page_params.preview_request_id = | 1280 preview_page_params.preview_request_id = |
1268 print_pages_params_->params.preview_request_id; | 1281 print_pages_params_->params.preview_request_id; |
1269 | 1282 |
1270 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); | 1283 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); |
1271 return true; | 1284 return true; |
1272 } | 1285 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1305 | 1318 |
1306 bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( | 1319 bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( |
1307 PrintMsg_Print_Params* print_params, | 1320 PrintMsg_Print_Params* print_params, |
1308 const std::vector<int>& pages) { | 1321 const std::vector<int>& pages) { |
1309 DCHECK(IsReadyToRender()); | 1322 DCHECK(IsReadyToRender()); |
1310 state_ = RENDERING; | 1323 state_ = RENDERING; |
1311 | 1324 |
1312 print_params_.reset(new PrintMsg_Print_Params(*print_params)); | 1325 print_params_.reset(new PrintMsg_Print_Params(*print_params)); |
1313 | 1326 |
1314 metafile_.reset(new printing::PreviewMetafile); | 1327 metafile_.reset(new printing::PreviewMetafile); |
1315 if (!metafile_->Init()) | 1328 if (!metafile_->Init()) { |
| 1329 LOG(ERROR) << "PreviewMetafile Init failed"; |
1316 return false; | 1330 return false; |
| 1331 } |
1317 | 1332 |
1318 // Need to make sure old object gets destroyed first. | 1333 // Need to make sure old object gets destroyed first. |
1319 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(), | 1334 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(), |
1320 node())); | 1335 node())); |
1321 UpdatePrintableSizeInPrintParameters(frame_, node_.get(), | 1336 UpdatePrintableSizeInPrintParameters(frame_, node_.get(), |
1322 prep_frame_view_.get(), print_params); | 1337 prep_frame_view_.get(), print_params); |
1323 | 1338 |
1324 total_page_count_ = prep_frame_view_->GetExpectedPageCount(); | 1339 total_page_count_ = prep_frame_view_->GetExpectedPageCount(); |
1325 if (total_page_count_ == 0) | 1340 if (total_page_count_ == 0) { |
| 1341 LOG(ERROR) << "CreatePreviewDocument got 0 page count"; |
1326 return false; | 1342 return false; |
| 1343 } |
1327 | 1344 |
1328 current_page_index_ = 0; | 1345 current_page_index_ = 0; |
1329 if (pages.empty()) { | 1346 if (pages.empty()) { |
1330 actual_page_count_ = total_page_count_; | 1347 actual_page_count_ = total_page_count_; |
1331 for (int i = 0; i < actual_page_count_; ++i) | 1348 for (int i = 0; i < actual_page_count_; ++i) |
1332 pages_to_render_.push_back(i); | 1349 pages_to_render_.push_back(i); |
1333 } else { | 1350 } else { |
1334 actual_page_count_ = pages.size(); | 1351 actual_page_count_ = pages.size(); |
1335 for (int i = 0; i < actual_page_count_; ++i) { | 1352 for (int i = 0; i < actual_page_count_; ++i) { |
1336 int page_number = pages[i]; | 1353 int page_number = pages[i]; |
1337 if (page_number < printing::FIRST_PAGE_INDEX || | 1354 if (page_number < printing::FIRST_PAGE_INDEX || |
1338 page_number >= total_page_count_) { | 1355 page_number >= total_page_count_) { |
| 1356 LOG(ERROR) << "CreatePreviewDocument got invalid page count " |
| 1357 << page_number << " at index " << i; |
1339 return false; | 1358 return false; |
1340 } | 1359 } |
1341 pages_to_render_.push_back(page_number); | 1360 pages_to_render_.push_back(page_number); |
1342 } | 1361 } |
1343 } | 1362 } |
1344 | 1363 |
1345 document_render_time_ = base::TimeDelta(); | 1364 document_render_time_ = base::TimeDelta(); |
1346 begin_time_ = base::TimeTicks::Now(); | 1365 begin_time_ = base::TimeTicks::Now(); |
1347 | 1366 |
1348 return true; | 1367 return true; |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1437 const gfx::Size& | 1456 const gfx::Size& |
1438 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { | 1457 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { |
1439 return prep_frame_view_->GetPrintCanvasSize(); | 1458 return prep_frame_view_->GetPrintCanvasSize(); |
1440 } | 1459 } |
1441 | 1460 |
1442 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { | 1461 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
1443 prep_frame_view_.reset(); | 1462 prep_frame_view_.reset(); |
1444 metafile_.reset(); | 1463 metafile_.reset(); |
1445 pages_to_render_.clear(); | 1464 pages_to_render_.clear(); |
1446 } | 1465 } |
OLD | NEW |