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 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 return; | 510 return; |
511 } | 511 } |
512 | 512 |
513 WebFrame* pdf_frame = pdf_element.document().frame(); | 513 WebFrame* pdf_frame = pdf_element.document().frame(); |
514 if (!UpdatePrintSettings(pdf_frame, pdf_element, job_settings, true)) { | 514 if (!UpdatePrintSettings(pdf_frame, pdf_element, job_settings, true)) { |
515 LOG(ERROR) << "UpdatePrintSettings failed"; | 515 LOG(ERROR) << "UpdatePrintSettings failed"; |
516 DidFinishPrinting(FAIL_PRINT); | 516 DidFinishPrinting(FAIL_PRINT); |
517 return; | 517 return; |
518 } | 518 } |
519 | 519 |
520 scoped_ptr<PrepareFrameAndViewForPrint> prepare; | |
521 prepare.reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, | |
522 pdf_frame, pdf_element)); | |
523 UpdatePrintableSizeInPrintParameters(pdf_frame, pdf_element, prepare.get(), | |
524 &print_pages_params_->params); | |
525 | |
526 // Render Pages for printing. | 520 // Render Pages for printing. |
527 if (!RenderPagesForPrint(pdf_frame, pdf_element, prepare.get())) { | 521 if (!RenderPagesForPrint(pdf_frame, pdf_element)) { |
528 LOG(ERROR) << "RenderPagesForPrint failed"; | 522 LOG(ERROR) << "RenderPagesForPrint failed"; |
529 DidFinishPrinting(FAIL_PRINT); | 523 DidFinishPrinting(FAIL_PRINT); |
530 } | 524 } |
531 } | 525 } |
532 | 526 |
533 bool PrintWebViewHelper::GetPrintFrame(WebKit::WebFrame** frame) { | 527 bool PrintWebViewHelper::GetPrintFrame(WebKit::WebFrame** frame) { |
534 DCHECK(frame); | 528 DCHECK(frame); |
535 DCHECK(render_view()->GetWebView()); | 529 DCHECK(render_view()->GetWebView()); |
536 if (!render_view()->GetWebView()) | 530 if (!render_view()->GetWebView()) |
537 return false; | 531 return false; |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 } | 753 } |
760 | 754 |
761 // Ask the browser to show UI to retrieve the final print settings. | 755 // Ask the browser to show UI to retrieve the final print settings. |
762 if (!GetPrintSettingsFromUser(frame, node, expected_page_count, | 756 if (!GetPrintSettingsFromUser(frame, node, expected_page_count, |
763 use_browser_overlays)) { | 757 use_browser_overlays)) { |
764 DidFinishPrinting(OK); // Release resources and fail silently. | 758 DidFinishPrinting(OK); // Release resources and fail silently. |
765 return; | 759 return; |
766 } | 760 } |
767 | 761 |
768 // Render Pages for printing. | 762 // Render Pages for printing. |
769 if (!RenderPagesForPrint(frame, node, NULL)) { | 763 if (!RenderPagesForPrint(frame, node)) { |
770 LOG(ERROR) << "RenderPagesForPrint failed"; | 764 LOG(ERROR) << "RenderPagesForPrint failed"; |
771 DidFinishPrinting(FAIL_PRINT); | 765 DidFinishPrinting(FAIL_PRINT); |
772 } | 766 } |
773 ResetScriptedPrintCount(); | 767 ResetScriptedPrintCount(); |
774 } | 768 } |
775 | 769 |
776 void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { | 770 void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { |
777 bool store_print_pages_params = true; | 771 bool store_print_pages_params = true; |
778 if (result == FAIL_PRINT) { | 772 if (result == FAIL_PRINT) { |
779 DisplayPrintJobError(); | 773 DisplayPrintJobError(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 // When loading is done this will call DidStopLoading that will do the | 825 // When loading is done this will call DidStopLoading that will do the |
832 // actual printing. | 826 // actual printing. |
833 print_web_view_->mainFrame()->loadRequest(WebURLRequest(url)); | 827 print_web_view_->mainFrame()->loadRequest(WebURLRequest(url)); |
834 | 828 |
835 return true; | 829 return true; |
836 } | 830 } |
837 | 831 |
838 #if defined(OS_MACOSX) || defined(OS_WIN) | 832 #if defined(OS_MACOSX) || defined(OS_WIN) |
839 bool PrintWebViewHelper::PrintPages(const PrintMsg_PrintPages_Params& params, | 833 bool PrintWebViewHelper::PrintPages(const PrintMsg_PrintPages_Params& params, |
840 WebFrame* frame, | 834 WebFrame* frame, |
841 const WebNode& node, | 835 const WebNode& node) { |
842 PrepareFrameAndViewForPrint* prepare) { | |
843 PrintMsg_Print_Params print_params = params.params; | 836 PrintMsg_Print_Params print_params = params.params; |
844 scoped_ptr<PrepareFrameAndViewForPrint> prep_frame_view; | 837 PrepareFrameAndViewForPrint prep_frame_view(print_params, frame, node); |
845 if (!prepare) { | 838 UpdatePrintableSizeInPrintParameters(frame, node, &prep_frame_view, |
846 prep_frame_view.reset(new PrepareFrameAndViewForPrint(print_params, frame, | 839 &print_params); |
847 node)); | |
848 prepare = prep_frame_view.get(); | |
849 } | |
850 UpdatePrintableSizeInPrintParameters(frame, node, prepare, &print_params); | |
851 | 840 |
852 int page_count = prepare->GetExpectedPageCount(); | 841 int page_count = prep_frame_view.GetExpectedPageCount(); |
853 if (!page_count) | 842 if (!page_count) |
854 return false; | 843 return false; |
855 Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(), | 844 Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(), |
856 print_params.document_cookie, | 845 print_params.document_cookie, |
857 page_count)); | 846 page_count)); |
858 | 847 |
859 const gfx::Size& canvas_size = prepare->GetPrintCanvasSize(); | 848 const gfx::Size& canvas_size = prep_frame_view.GetPrintCanvasSize(); |
860 PrintMsg_PrintPage_Params page_params; | 849 PrintMsg_PrintPage_Params page_params; |
861 page_params.params = print_params; | 850 page_params.params = print_params; |
862 if (params.pages.empty()) { | 851 if (params.pages.empty()) { |
863 for (int i = 0; i < page_count; ++i) { | 852 for (int i = 0; i < page_count; ++i) { |
864 page_params.page_number = i; | 853 page_params.page_number = i; |
865 PrintPageInternal(page_params, canvas_size, frame); | 854 PrintPageInternal(page_params, canvas_size, frame); |
866 } | 855 } |
867 } else { | 856 } else { |
868 for (size_t i = 0; i < params.pages.size(); ++i) { | 857 for (size_t i = 0; i < params.pages.size(); ++i) { |
869 if (params.pages[i] >= page_count) | 858 if (params.pages[i] >= page_count) |
870 break; | 859 break; |
871 page_params.page_number = params.pages[i]; | 860 page_params.page_number = params.pages[i]; |
872 PrintPageInternal(page_params, canvas_size, frame); | 861 PrintPageInternal(page_params, canvas_size, frame); |
873 } | 862 } |
874 } | 863 } |
875 return true; | 864 return true; |
876 } | 865 } |
877 #endif // OS_MACOSX || OS_WIN | 866 #endif // OS_MACOSX || OS_WIN |
878 | 867 |
879 void PrintWebViewHelper::didStopLoading() { | 868 void PrintWebViewHelper::didStopLoading() { |
880 PrintMsg_PrintPages_Params* params = print_pages_params_.get(); | 869 PrintMsg_PrintPages_Params* params = print_pages_params_.get(); |
881 DCHECK(params != NULL); | 870 DCHECK(params != NULL); |
882 PrintPages(*params, print_web_view_->mainFrame(), WebNode(), NULL); | 871 PrintPages(*params, print_web_view_->mainFrame(), WebNode()); |
883 } | 872 } |
884 | 873 |
885 // static - Not anonymous so that platform implementations can use it. | 874 // static - Not anonymous so that platform implementations can use it. |
886 void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( | 875 void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( |
887 WebFrame* frame, | 876 WebFrame* frame, |
888 int page_index, | 877 int page_index, |
889 const PrintMsg_Print_Params& default_params, | 878 const PrintMsg_Print_Params& default_params, |
890 PageSizeMargins* page_layout_in_points) { | 879 PageSizeMargins* page_layout_in_points) { |
891 int dpi = GetDPI(&default_params); | 880 int dpi = GetDPI(&default_params); |
892 | 881 |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1185 IPC::SyncMessage* msg = | 1174 IPC::SyncMessage* msg = |
1186 new PrintHostMsg_ScriptedPrint(routing_id(), params, &print_settings); | 1175 new PrintHostMsg_ScriptedPrint(routing_id(), params, &print_settings); |
1187 msg->EnableMessagePumping(); | 1176 msg->EnableMessagePumping(); |
1188 Send(msg); | 1177 Send(msg); |
1189 print_pages_params_.reset(new PrintMsg_PrintPages_Params(print_settings)); | 1178 print_pages_params_.reset(new PrintMsg_PrintPages_Params(print_settings)); |
1190 return (print_settings.params.dpi && print_settings.params.document_cookie); | 1179 return (print_settings.params.dpi && print_settings.params.document_cookie); |
1191 } | 1180 } |
1192 | 1181 |
1193 bool PrintWebViewHelper::RenderPagesForPrint( | 1182 bool PrintWebViewHelper::RenderPagesForPrint( |
1194 WebKit::WebFrame* frame, | 1183 WebKit::WebFrame* frame, |
1195 const WebKit::WebNode& node, | 1184 const WebKit::WebNode& node) { |
1196 PrepareFrameAndViewForPrint* prepare) { | |
1197 PrintMsg_PrintPages_Params print_settings = *print_pages_params_; | 1185 PrintMsg_PrintPages_Params print_settings = *print_pages_params_; |
1198 if (print_settings.params.selection_only) { | 1186 if (print_settings.params.selection_only) { |
1199 return CopyAndPrint(frame); | 1187 return CopyAndPrint(frame); |
1200 } else { | 1188 } else { |
1201 // TODO: Always copy before printing. | 1189 // TODO: Always copy before printing. |
1202 return PrintPages(print_settings, frame, node, prepare); | 1190 return PrintPages(print_settings, frame, node); |
1203 } | 1191 } |
1204 } | 1192 } |
1205 | 1193 |
1206 #if defined(OS_POSIX) | 1194 #if defined(OS_POSIX) |
1207 bool PrintWebViewHelper::CopyMetafileDataToSharedMem( | 1195 bool PrintWebViewHelper::CopyMetafileDataToSharedMem( |
1208 printing::Metafile* metafile, | 1196 printing::Metafile* metafile, |
1209 base::SharedMemoryHandle* shared_mem_handle) { | 1197 base::SharedMemoryHandle* shared_mem_handle) { |
1210 uint32 buf_size = metafile->GetDataSize(); | 1198 uint32 buf_size = metafile->GetDataSize(); |
1211 base::SharedMemoryHandle mem_handle = | 1199 base::SharedMemoryHandle mem_handle = |
1212 content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size); | 1200 content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size); |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1563 DCHECK(IsRendering()); | 1551 DCHECK(IsRendering()); |
1564 return prep_frame_view_->GetPrintCanvasSize(); | 1552 return prep_frame_view_->GetPrintCanvasSize(); |
1565 } | 1553 } |
1566 | 1554 |
1567 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { | 1555 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
1568 prep_frame_view_.reset(); | 1556 prep_frame_view_.reset(); |
1569 metafile_.reset(); | 1557 metafile_.reset(); |
1570 pages_to_render_.clear(); | 1558 pages_to_render_.clear(); |
1571 error_ = PREVIEW_ERROR_NONE; | 1559 error_ = PREVIEW_ERROR_NONE; |
1572 } | 1560 } |
OLD | NEW |