| 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/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 845 // PDF printer device supports alpha blending. | 845 // PDF printer device supports alpha blending. |
| 846 print_pages_params_->params.supports_alpha_blend = true; | 846 print_pages_params_->params.supports_alpha_blend = true; |
| 847 | 847 |
| 848 bool generate_draft_pages = false; | 848 bool generate_draft_pages = false; |
| 849 if (!settings.GetBoolean(printing::kSettingGenerateDraftData, | 849 if (!settings.GetBoolean(printing::kSettingGenerateDraftData, |
| 850 &generate_draft_pages)) { | 850 &generate_draft_pages)) { |
| 851 NOTREACHED(); | 851 NOTREACHED(); |
| 852 } | 852 } |
| 853 print_preview_context_.set_generate_draft_pages(generate_draft_pages); | 853 print_preview_context_.set_generate_draft_pages(generate_draft_pages); |
| 854 | 854 |
| 855 if (CreatePreviewDocument()) { | 855 int margins_type = 0; |
| 856 if (!settings.GetInteger(printing::kSettingMarginsType, &margins_type)) |
| 857 margins_type = printing::DEFAULT_MARGINS; |
| 858 |
| 859 if (CreatePreviewDocument(margins_type)) { |
| 856 DidFinishPrinting(OK); | 860 DidFinishPrinting(OK); |
| 857 } else { | 861 } else { |
| 858 if (notify_browser_of_print_failure_) | 862 if (notify_browser_of_print_failure_) |
| 859 LOG(ERROR) << "CreatePreviewDocument failed"; | 863 LOG(ERROR) << "CreatePreviewDocument failed"; |
| 860 DidFinishPrinting(FAIL_PREVIEW); | 864 DidFinishPrinting(FAIL_PREVIEW); |
| 861 } | 865 } |
| 862 } | 866 } |
| 863 | 867 |
| 864 bool PrintWebViewHelper::CreatePreviewDocument() { | 868 bool PrintWebViewHelper::CreatePreviewDocument(int margins_type) { |
| 865 PrintMsg_Print_Params print_params = print_pages_params_->params; | 869 PrintMsg_Print_Params print_params = print_pages_params_->params; |
| 866 const std::vector<int>& pages = print_pages_params_->pages; | 870 const std::vector<int>& pages = print_pages_params_->pages; |
| 867 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages, | 871 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages, |
| 868 ignore_css_margins_, | 872 ignore_css_margins_, |
| 869 fit_to_page_)) { | 873 fit_to_page_)) { |
| 870 return false; | 874 return false; |
| 871 } | 875 } |
| 872 | 876 |
| 873 PageSizeMargins default_page_layout; | 877 PageSizeMargins default_page_layout; |
| 874 ComputePageLayoutInPointsForCss(print_preview_context_.frame(), 0, | 878 ComputePageLayoutInPointsForCss(print_preview_context_.frame(), 0, |
| 875 print_params, ignore_css_margins_, | 879 print_params, ignore_css_margins_, |
| 876 fit_to_page_, NULL, &default_page_layout); | 880 fit_to_page_, NULL, &default_page_layout); |
| 881 |
| 882 bool preview_is_modifiable = print_preview_context_.IsModifiable(); |
| 877 if (!old_print_pages_params_.get() || | 883 if (!old_print_pages_params_.get() || |
| 878 !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) { | 884 !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) { |
| 879 bool has_page_size_style = PrintingFrameHasPageSizeStyle( | 885 bool has_page_size_style = PrintingFrameHasPageSizeStyle( |
| 880 print_preview_context_.frame(), | 886 print_preview_context_.frame(), |
| 881 print_preview_context_.total_page_count()); | 887 print_preview_context_.total_page_count()); |
| 888 |
| 889 bool header_footer_applies = true; |
| 890 if (!preview_is_modifiable || margins_type == printing::NO_MARGINS) { |
| 891 header_footer_applies = false; |
| 892 } else if (margins_type != printing::PRINTABLE_AREA_MARGINS) { |
| 893 #if defined(OS_LINUX) |
| 894 header_footer_applies = |
| 895 (default_page_layout.margin_top > 0) || |
| 896 (default_page_layout.margin_bottom > 0); |
| 897 #else |
| 898 int dpi = GetDPI(&print_params); |
| 899 int non_printable_area_top = ConvertUnit( |
| 900 print_pages_params_->params.printable_area.y(), |
| 901 dpi, printing::kPointsPerInch); |
| 902 int non_printable_area_bottom = ConvertUnit( |
| 903 print_pages_params_->params.page_size.height() - |
| 904 print_pages_params_->params.printable_area.y() - |
| 905 print_pages_params_->params.printable_area.height(), |
| 906 dpi, printing::kPointsPerInch); |
| 907 header_footer_applies = |
| 908 (default_page_layout.margin_top > non_printable_area_top) || |
| 909 (default_page_layout.margin_bottom > non_printable_area_bottom); |
| 910 #endif |
| 911 } |
| 882 // Margins: Send default page layout to browser process. | 912 // Margins: Send default page layout to browser process. |
| 883 Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(), | 913 Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(), |
| 884 default_page_layout, | 914 default_page_layout, |
| 885 has_page_size_style)); | 915 has_page_size_style, |
| 916 header_footer_applies)); |
| 886 } | 917 } |
| 887 | 918 |
| 888 PrintHostMsg_DidGetPreviewPageCount_Params params; | 919 PrintHostMsg_DidGetPreviewPageCount_Params params; |
| 889 params.page_count = print_preview_context_.total_page_count(); | 920 params.page_count = print_preview_context_.total_page_count(); |
| 890 params.is_modifiable = print_preview_context_.IsModifiable(); | 921 params.is_modifiable = preview_is_modifiable; |
| 891 params.document_cookie = print_pages_params_->params.document_cookie; | 922 params.document_cookie = print_pages_params_->params.document_cookie; |
| 892 params.preview_request_id = print_pages_params_->params.preview_request_id; | 923 params.preview_request_id = print_pages_params_->params.preview_request_id; |
| 893 params.clear_preview_data = print_preview_context_.generate_draft_pages(); | 924 params.clear_preview_data = print_preview_context_.generate_draft_pages(); |
| 894 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params)); | 925 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params)); |
| 895 if (CheckForCancel()) | 926 if (CheckForCancel()) |
| 896 return false; | 927 return false; |
| 897 | 928 |
| 898 while (!print_preview_context_.IsFinalPageRendered()) { | 929 while (!print_preview_context_.IsFinalPageRendered()) { |
| 899 int page_number = print_preview_context_.GetNextPageNumber(); | 930 int page_number = print_preview_context_.GetNextPageNumber(); |
| 900 DCHECK_GE(page_number, 0); | 931 DCHECK_GE(page_number, 0); |
| (...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1766 DCHECK(IsRendering()); | 1797 DCHECK(IsRendering()); |
| 1767 return prep_frame_view_->GetPrintCanvasSize(); | 1798 return prep_frame_view_->GetPrintCanvasSize(); |
| 1768 } | 1799 } |
| 1769 | 1800 |
| 1770 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { | 1801 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
| 1771 prep_frame_view_.reset(); | 1802 prep_frame_view_.reset(); |
| 1772 metafile_.reset(); | 1803 metafile_.reset(); |
| 1773 pages_to_render_.clear(); | 1804 pages_to_render_.clear(); |
| 1774 error_ = PREVIEW_ERROR_NONE; | 1805 error_ = PREVIEW_ERROR_NONE; |
| 1775 } | 1806 } |
| OLD | NEW |