| 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 |