Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Side by Side Diff: chrome/renderer/print_web_view_helper.cc

Issue 8585017: PrintPreview: Honor the print media page size and margin values. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 print_params.desired_dpi)); 145 print_params.desired_dpi));
146 } 146 }
147 147
148 bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) { 148 bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) {
149 if (!node.isNull()) 149 if (!node.isNull())
150 return true; 150 return true;
151 std::string mime(frame->dataSource()->response().mimeType().utf8()); 151 std::string mime(frame->dataSource()->response().mimeType().utf8());
152 return mime == "application/pdf"; 152 return mime == "application/pdf";
153 } 153 }
154 154
155 bool PrintingFrameHasPageSizeStyle(WebFrame* frame) {
156 if (!frame)
157 return false;
158 return frame->hasCustomPageSizeStyle(0);
159 }
160
155 printing::MarginType GetMarginsForPdf(WebFrame* frame, const WebNode& node) { 161 printing::MarginType GetMarginsForPdf(WebFrame* frame, const WebNode& node) {
156 if (frame->isPrintScalingDisabledForPlugin(node)) 162 if (frame->isPrintScalingDisabledForPlugin(node))
157 return printing::NO_MARGINS; 163 return printing::NO_MARGINS;
158 else 164 else
159 return printing::PRINTABLE_AREA_MARGINS; 165 return printing::PRINTABLE_AREA_MARGINS;
160 } 166 }
161 167
162 // Get the (x, y) coordinate from where printing of the current text should 168 // Get the (x, y) coordinate from where printing of the current text should
163 // start depending on the horizontal alignment (LEFT, RIGHT, CENTER) and 169 // start depending on the horizontal alignment (LEFT, RIGHT, CENTER) and
164 // vertical alignment (TOP, BOTTOM). 170 // vertical alignment (TOP, BOTTOM).
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 web_frame->setScrollOffset(prev_scroll_offset_); 439 web_frame->setScrollOffset(prev_scroll_offset_);
434 } 440 }
435 } 441 }
436 442
437 PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view) 443 PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view)
438 : content::RenderViewObserver(render_view), 444 : content::RenderViewObserver(render_view),
439 content::RenderViewObserverTracker<PrintWebViewHelper>(render_view), 445 content::RenderViewObserverTracker<PrintWebViewHelper>(render_view),
440 print_web_view_(NULL), 446 print_web_view_(NULL),
441 is_preview_enabled_(switches::IsPrintPreviewEnabled()), 447 is_preview_enabled_(switches::IsPrintPreviewEnabled()),
442 is_print_ready_metafile_sent_(false), 448 is_print_ready_metafile_sent_(false),
449 default_margins_requested_(false),
vandebo (ex-Chrome) 2011/11/17 23:05:23 Should this default to true?
kmadhusu 2011/12/01 02:15:42 Done.
443 user_cancelled_scripted_print_count_(0), 450 user_cancelled_scripted_print_count_(0),
444 notify_browser_of_print_failure_(true) { 451 notify_browser_of_print_failure_(true) {
445 } 452 }
446 453
447 PrintWebViewHelper::~PrintWebViewHelper() {} 454 PrintWebViewHelper::~PrintWebViewHelper() {}
448 455
449 // Prints |frame| which called window.print(). 456 // Prints |frame| which called window.print().
450 void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame) { 457 void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame) {
451 DCHECK(frame); 458 DCHECK(frame);
452 459
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 if (!UpdatePrintSettings(pdf_frame, pdf_element, job_settings, true)) { 521 if (!UpdatePrintSettings(pdf_frame, pdf_element, job_settings, true)) {
515 LOG(ERROR) << "UpdatePrintSettings failed"; 522 LOG(ERROR) << "UpdatePrintSettings failed";
516 DidFinishPrinting(FAIL_PRINT); 523 DidFinishPrinting(FAIL_PRINT);
517 return; 524 return;
518 } 525 }
519 526
520 scoped_ptr<PrepareFrameAndViewForPrint> prepare; 527 scoped_ptr<PrepareFrameAndViewForPrint> prepare;
521 prepare.reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, 528 prepare.reset(new PrepareFrameAndViewForPrint(print_pages_params_->params,
522 pdf_frame, pdf_element)); 529 pdf_frame, pdf_element));
523 UpdatePrintableSizeInPrintParameters(pdf_frame, pdf_element, prepare.get(), 530 UpdatePrintableSizeInPrintParameters(pdf_frame, pdf_element, prepare.get(),
524 &print_pages_params_->params); 531 &print_pages_params_->params,
532 default_margins_requested_);
525 533
526 // Render Pages for printing. 534 // Render Pages for printing.
527 if (!RenderPagesForPrint(pdf_frame, pdf_element, prepare.get())) { 535 if (!RenderPagesForPrint(pdf_frame, pdf_element, prepare.get())) {
528 LOG(ERROR) << "RenderPagesForPrint failed"; 536 LOG(ERROR) << "RenderPagesForPrint failed";
529 DidFinishPrinting(FAIL_PRINT); 537 DidFinishPrinting(FAIL_PRINT);
530 } 538 }
531 } 539 }
532 540
533 bool PrintWebViewHelper::GetPrintFrame(WebKit::WebFrame** frame) { 541 bool PrintWebViewHelper::GetPrintFrame(WebKit::WebFrame** frame) {
534 DCHECK(frame); 542 DCHECK(frame);
(...skipping 18 matching lines...) Expand all
553 void PrintWebViewHelper::OnPrintForSystemDialog() { 561 void PrintWebViewHelper::OnPrintForSystemDialog() {
554 WebFrame* frame = print_preview_context_.frame(); 562 WebFrame* frame = print_preview_context_.frame();
555 if (!frame) { 563 if (!frame) {
556 NOTREACHED(); 564 NOTREACHED();
557 return; 565 return;
558 } 566 }
559 567
560 Print(frame, print_preview_context_.node()); 568 Print(frame, print_preview_context_.node());
561 } 569 }
562 570
571 void PrintWebViewHelper::UpdateDefaultMarginsRequested(
572 const DictionaryValue& settings) {
573 int margins_type = 0;
574 if (!settings.GetInteger(printing::kSettingMarginsType, &margins_type))
575 margins_type = printing::DEFAULT_MARGINS;
576 default_margins_requested_ = margins_type == printing::DEFAULT_MARGINS;
577 }
578
563 void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) { 579 void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
564 DCHECK(is_preview_enabled_); 580 DCHECK(is_preview_enabled_);
565 print_preview_context_.OnPrintPreview(); 581 print_preview_context_.OnPrintPreview();
566 582
567 if (!UpdatePrintSettings(print_preview_context_.frame(), 583 if (!UpdatePrintSettings(print_preview_context_.frame(),
568 print_preview_context_.node(), settings, false)) { 584 print_preview_context_.node(), settings, false)) {
569 if (print_preview_context_.last_error() != PREVIEW_ERROR_BAD_SETTING) { 585 if (print_preview_context_.last_error() != PREVIEW_ERROR_BAD_SETTING) {
570 Send(new PrintHostMsg_PrintPreviewInvalidPrinterSettings( 586 Send(new PrintHostMsg_PrintPreviewInvalidPrinterSettings(
571 routing_id(), print_pages_params_->params.document_cookie)); 587 routing_id(), print_pages_params_->params.document_cookie));
572 notify_browser_of_print_failure_ = false; // Already sent. 588 notify_browser_of_print_failure_ = false; // Already sent.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 } else { 629 } else {
614 if (notify_browser_of_print_failure_) 630 if (notify_browser_of_print_failure_)
615 LOG(ERROR) << "CreatePreviewDocument failed"; 631 LOG(ERROR) << "CreatePreviewDocument failed";
616 DidFinishPrinting(FAIL_PREVIEW); 632 DidFinishPrinting(FAIL_PREVIEW);
617 } 633 }
618 } 634 }
619 635
620 bool PrintWebViewHelper::CreatePreviewDocument() { 636 bool PrintWebViewHelper::CreatePreviewDocument() {
621 PrintMsg_Print_Params print_params = print_pages_params_->params; 637 PrintMsg_Print_Params print_params = print_pages_params_->params;
622 const std::vector<int>& pages = print_pages_params_->pages; 638 const std::vector<int>& pages = print_pages_params_->pages;
623 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages)) 639 if (!print_preview_context_.CreatePreviewDocument(
640 &print_params, pages, default_margins_requested_)) {
624 return false; 641 return false;
642 }
643
644 // Margins: Send default page layout to browser process.
645 PageSizeMargins default_page_layout;
646 GetPageSizeAndMarginsInPoints(print_preview_context_.frame(), 0, print_params,
647 &default_page_layout,
648 default_margins_requested_);
649 if (!old_print_pages_params_.get() ||
650 !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) {
651 Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(),
652 default_page_layout));
653 }
654
625 PrintHostMsg_DidGetPreviewPageCount_Params params; 655 PrintHostMsg_DidGetPreviewPageCount_Params params;
626 params.page_count = print_preview_context_.total_page_count(); 656 params.page_count = print_preview_context_.total_page_count();
627 params.is_modifiable = print_preview_context_.IsModifiable(); 657 params.is_modifiable = print_preview_context_.IsModifiable();
658 params.has_page_size_style = PrintingFrameHasPageSizeStyle(
vandebo (ex-Chrome) 2011/11/17 23:05:23 If we ask for the page size and margins in GetPage
kmadhusu 2011/12/01 02:15:42 (repeating our conversation for reference): This i
659 print_preview_context_.frame());
628 params.document_cookie = print_pages_params_->params.document_cookie; 660 params.document_cookie = print_pages_params_->params.document_cookie;
629 params.preview_request_id = print_pages_params_->params.preview_request_id; 661 params.preview_request_id = print_pages_params_->params.preview_request_id;
630 params.clear_preview_data = print_preview_context_.generate_draft_pages(); 662 params.clear_preview_data = print_preview_context_.generate_draft_pages();
631 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params)); 663 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params));
632 if (CheckForCancel()) 664 if (CheckForCancel())
633 return false; 665 return false;
634 666
635 while (!print_preview_context_.IsFinalPageRendered()) { 667 while (!print_preview_context_.IsFinalPageRendered()) {
636 int page_number = print_preview_context_.GetNextPageNumber(); 668 int page_number = print_preview_context_.GetNextPageNumber();
637 DCHECK_GE(page_number, 0); 669 DCHECK_GE(page_number, 0);
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 WebFrame* frame, 872 WebFrame* frame,
841 const WebNode& node, 873 const WebNode& node,
842 PrepareFrameAndViewForPrint* prepare) { 874 PrepareFrameAndViewForPrint* prepare) {
843 PrintMsg_Print_Params print_params = params.params; 875 PrintMsg_Print_Params print_params = params.params;
844 scoped_ptr<PrepareFrameAndViewForPrint> prep_frame_view; 876 scoped_ptr<PrepareFrameAndViewForPrint> prep_frame_view;
845 if (!prepare) { 877 if (!prepare) {
846 prep_frame_view.reset(new PrepareFrameAndViewForPrint(print_params, frame, 878 prep_frame_view.reset(new PrepareFrameAndViewForPrint(print_params, frame,
847 node)); 879 node));
848 prepare = prep_frame_view.get(); 880 prepare = prep_frame_view.get();
849 } 881 }
850 UpdatePrintableSizeInPrintParameters(frame, node, prepare, &print_params); 882 UpdatePrintableSizeInPrintParameters(frame, node, prepare, &print_params,
883 default_margins_requested_);
851 884
852 int page_count = prepare->GetExpectedPageCount(); 885 int page_count = prepare->GetExpectedPageCount();
853 if (!page_count) 886 if (!page_count)
854 return false; 887 return false;
855 Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(), 888 Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(),
856 print_params.document_cookie, 889 print_params.document_cookie,
857 page_count)); 890 page_count));
858 891
859 const gfx::Size& canvas_size = prepare->GetPrintCanvasSize(); 892 const gfx::Size& canvas_size = prepare->GetPrintCanvasSize();
860 PrintMsg_PrintPage_Params page_params; 893 PrintMsg_PrintPage_Params page_params;
(...skipping 19 matching lines...) Expand all
880 PrintMsg_PrintPages_Params* params = print_pages_params_.get(); 913 PrintMsg_PrintPages_Params* params = print_pages_params_.get();
881 DCHECK(params != NULL); 914 DCHECK(params != NULL);
882 PrintPages(*params, print_web_view_->mainFrame(), WebNode(), NULL); 915 PrintPages(*params, print_web_view_->mainFrame(), WebNode(), NULL);
883 } 916 }
884 917
885 // static - Not anonymous so that platform implementations can use it. 918 // static - Not anonymous so that platform implementations can use it.
886 void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( 919 void PrintWebViewHelper::GetPageSizeAndMarginsInPoints(
887 WebFrame* frame, 920 WebFrame* frame,
888 int page_index, 921 int page_index,
889 const PrintMsg_Print_Params& default_params, 922 const PrintMsg_Print_Params& default_params,
890 PageSizeMargins* page_layout_in_points) { 923 PageSizeMargins* page_layout_in_points,
924 bool default_margins_requested) {
891 int dpi = GetDPI(&default_params); 925 int dpi = GetDPI(&default_params);
892 926
893 WebSize page_size_in_pixels( 927 WebSize page_size_in_pixels(
894 ConvertUnit(default_params.page_size.width(), 928 ConvertUnit(default_params.page_size.width(),
895 dpi, printing::kPixelsPerInch), 929 dpi, printing::kPixelsPerInch),
896 ConvertUnit(default_params.page_size.height(), 930 ConvertUnit(default_params.page_size.height(),
897 dpi, printing::kPixelsPerInch)); 931 dpi, printing::kPixelsPerInch));
898 int margin_top_in_pixels = ConvertUnit( 932 int margin_top_in_pixels = ConvertUnit(
899 default_params.margin_top, 933 default_params.margin_top,
900 dpi, printing::kPixelsPerInch); 934 dpi, printing::kPixelsPerInch);
901 int margin_right_in_pixels = ConvertUnit( 935 int margin_right_in_pixels = ConvertUnit(
902 default_params.page_size.width() - 936 default_params.page_size.width() -
903 default_params.printable_size.width() - default_params.margin_left, 937 default_params.printable_size.width() - default_params.margin_left,
904 dpi, printing::kPixelsPerInch); 938 dpi, printing::kPixelsPerInch);
905 int margin_bottom_in_pixels = ConvertUnit( 939 int margin_bottom_in_pixels = ConvertUnit(
906 default_params.page_size.height() - 940 default_params.page_size.height() -
907 default_params.printable_size.height() - default_params.margin_top, 941 default_params.printable_size.height() - default_params.margin_top,
908 dpi, printing::kPixelsPerInch); 942 dpi, printing::kPixelsPerInch);
909 int margin_left_in_pixels = ConvertUnit( 943 int margin_left_in_pixels = ConvertUnit(
910 default_params.margin_left, 944 default_params.margin_left,
911 dpi, printing::kPixelsPerInch); 945 dpi, printing::kPixelsPerInch);
912 946
913 if (frame) { 947 if (frame) {
914 frame->pageSizeAndMarginsInPixels(page_index, 948 frame->pageSizeAndMarginsInPixels(page_index,
915 page_size_in_pixels, 949 page_size_in_pixels,
916 margin_top_in_pixels, 950 margin_top_in_pixels,
917 margin_right_in_pixels, 951 margin_right_in_pixels,
918 margin_bottom_in_pixels, 952 margin_bottom_in_pixels,
919 margin_left_in_pixels); 953 margin_left_in_pixels,
954 default_margins_requested);
vandebo (ex-Chrome) 2011/11/17 23:05:23 It seems like modifying webkit would be a bit much
kmadhusu 2011/12/01 02:15:42 As we discussed, I am not doing to modify |pageSiz
920 } 955 }
921 956
922 page_layout_in_points->content_width = 957 page_layout_in_points->content_width =
923 ConvertPixelsToPoint(page_size_in_pixels.width - 958 ConvertPixelsToPoint(page_size_in_pixels.width -
924 margin_left_in_pixels - 959 margin_left_in_pixels -
925 margin_right_in_pixels); 960 margin_right_in_pixels);
926 page_layout_in_points->content_height = 961 page_layout_in_points->content_height =
927 ConvertPixelsToPoint(page_size_in_pixels.height - 962 ConvertPixelsToPoint(page_size_in_pixels.height -
928 margin_top_in_pixels - 963 margin_top_in_pixels -
929 margin_bottom_in_pixels); 964 margin_bottom_in_pixels);
930 965
931 // Invalid page size and/or margins. We just use the default setting. 966 // Invalid page size and/or margins. We just use the default setting.
932 if (page_layout_in_points->content_width < 1.0 || 967 if (page_layout_in_points->content_width < 1.0 ||
933 page_layout_in_points->content_height < 1.0) { 968 page_layout_in_points->content_height < 1.0) {
934 CHECK(frame != NULL); 969 CHECK(frame != NULL);
935 GetPageSizeAndMarginsInPoints(NULL, page_index, default_params, 970 GetPageSizeAndMarginsInPoints(NULL, page_index, default_params,
936 page_layout_in_points); 971 page_layout_in_points, true);
vandebo (ex-Chrome) 2011/11/17 23:05:23 Seems like you could/should change default_margins
kmadhusu 2011/12/01 02:15:42 Done.
937 return; 972 return;
938 } 973 }
939 974
940 page_layout_in_points->margin_top = 975 page_layout_in_points->margin_top =
941 ConvertPixelsToPointDouble(margin_top_in_pixels); 976 ConvertPixelsToPointDouble(margin_top_in_pixels);
942 page_layout_in_points->margin_right = 977 page_layout_in_points->margin_right =
943 ConvertPixelsToPointDouble(margin_right_in_pixels); 978 ConvertPixelsToPointDouble(margin_right_in_pixels);
944 page_layout_in_points->margin_bottom = 979 page_layout_in_points->margin_bottom =
945 ConvertPixelsToPointDouble(margin_bottom_in_pixels); 980 ConvertPixelsToPointDouble(margin_bottom_in_pixels);
946 page_layout_in_points->margin_left = 981 page_layout_in_points->margin_left =
947 ConvertPixelsToPointDouble(margin_left_in_pixels); 982 ConvertPixelsToPointDouble(margin_left_in_pixels);
948 } 983 }
949 984
950 // static - Not anonymous so that platform implementations can use it. 985 // static - Not anonymous so that platform implementations can use it.
951 void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters( 986 void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters(
952 WebFrame* frame, 987 WebFrame* frame,
953 const WebNode& node, 988 const WebNode& node,
954 PrepareFrameAndViewForPrint* prepare, 989 PrepareFrameAndViewForPrint* prepare,
955 PrintMsg_Print_Params* params) { 990 PrintMsg_Print_Params* params,
991 bool default_margins_requested) {
956 if (PrintingNodeOrPdfFrame(frame, node)) 992 if (PrintingNodeOrPdfFrame(frame, node))
957 return; 993 return;
958 PageSizeMargins page_layout_in_points; 994 PageSizeMargins page_layout_in_points;
959 PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params, 995 PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params,
960 &page_layout_in_points); 996 &page_layout_in_points,
997 default_margins_requested);
961 int dpi = GetDPI(params); 998 int dpi = GetDPI(params);
962 params->printable_size = gfx::Size( 999 params->printable_size = gfx::Size(
963 static_cast<int>(ConvertUnitDouble( 1000 static_cast<int>(ConvertUnitDouble(
964 page_layout_in_points.content_width, 1001 page_layout_in_points.content_width,
965 printing::kPointsPerInch, dpi)), 1002 printing::kPointsPerInch, dpi)),
966 static_cast<int>(ConvertUnitDouble( 1003 static_cast<int>(ConvertUnitDouble(
967 page_layout_in_points.content_height, 1004 page_layout_in_points.content_height,
968 printing::kPointsPerInch, dpi))); 1005 printing::kPointsPerInch, dpi)));
969 1006
970 double page_width_in_points = 1007 double page_width_in_points =
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame( 1061 bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame(
1025 WebKit::WebFrame* frame, const WebKit::WebNode& node, 1062 WebKit::WebFrame* frame, const WebKit::WebNode& node,
1026 scoped_ptr<PrepareFrameAndViewForPrint>* prepare) { 1063 scoped_ptr<PrepareFrameAndViewForPrint>* prepare) {
1027 if (!InitPrintSettings(frame, node)) 1064 if (!InitPrintSettings(frame, node))
1028 return false; 1065 return false;
1029 1066
1030 DCHECK(!prepare->get()); 1067 DCHECK(!prepare->get());
1031 prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, 1068 prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params,
1032 frame, node)); 1069 frame, node));
1033 UpdatePrintableSizeInPrintParameters(frame, node, prepare->get(), 1070 UpdatePrintableSizeInPrintParameters(frame, node, prepare->get(),
1034 &print_pages_params_->params); 1071 &print_pages_params_->params,
1072 default_margins_requested_);
1035 Send(new PrintHostMsg_DidGetDocumentCookie( 1073 Send(new PrintHostMsg_DidGetDocumentCookie(
1036 routing_id(), print_pages_params_->params.document_cookie)); 1074 routing_id(), print_pages_params_->params.document_cookie));
1037 return true; 1075 return true;
1038 } 1076 }
1039 1077
1040 bool PrintWebViewHelper::UpdatePrintSettings( 1078 bool PrintWebViewHelper::UpdatePrintSettings(
1041 WebKit::WebFrame* frame, const WebKit::WebNode& node, 1079 WebKit::WebFrame* frame, const WebKit::WebNode& node,
1042 const DictionaryValue& passed_job_settings, bool print_for_preview) { 1080 const DictionaryValue& passed_job_settings, bool print_for_preview) {
1043 DCHECK(is_preview_enabled_); 1081 DCHECK(is_preview_enabled_);
1044 const DictionaryValue* job_settings = &passed_job_settings; 1082 const DictionaryValue* job_settings = &passed_job_settings;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 bool get_margins_from_pdf = false; 1116 bool get_margins_from_pdf = false;
1079 #endif 1117 #endif
1080 1118
1081 printing::MarginType margin_type = printing::NO_MARGINS; 1119 printing::MarginType margin_type = printing::NO_MARGINS;
1082 if (get_margins_from_pdf) 1120 if (get_margins_from_pdf)
1083 margin_type = GetMarginsForPdf(frame, node); 1121 margin_type = GetMarginsForPdf(frame, node);
1084 modified_job_settings.SetInteger(printing::kSettingMarginsType, 1122 modified_job_settings.SetInteger(printing::kSettingMarginsType,
1085 margin_type); 1123 margin_type);
1086 job_settings = &modified_job_settings; 1124 job_settings = &modified_job_settings;
1087 } 1125 }
1126 UpdateDefaultMarginsRequested(*job_settings);
vandebo (ex-Chrome) 2011/11/17 23:05:23 If you move default_margins_requested_ to PrintPre
kmadhusu 2011/12/01 02:15:42 Having the member variable in PrintWebViewHelper,
1088 1127
1089 // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when 1128 // Send the cookie so that UpdatePrintSettings can reuse PrinterQuery when
1090 // possible. 1129 // possible.
1091 int cookie = print_pages_params_.get() ? 1130 int cookie = print_pages_params_.get() ?
1092 print_pages_params_->params.document_cookie : 0; 1131 print_pages_params_->params.document_cookie : 0;
1093 PrintMsg_PrintPages_Params settings; 1132 PrintMsg_PrintPages_Params settings;
1094 Send(new PrintHostMsg_UpdatePrintSettings(routing_id(), 1133 Send(new PrintHostMsg_UpdatePrintSettings(routing_id(),
1095 cookie, *job_settings, &settings)); 1134 cookie, *job_settings, &settings));
1096 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); 1135 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
1097 1136
(...skipping 27 matching lines...) Expand all
1125 &(settings.params.preview_ui_addr)) || 1164 &(settings.params.preview_ui_addr)) ||
1126 !job_settings->GetInteger(printing::kPreviewRequestID, 1165 !job_settings->GetInteger(printing::kPreviewRequestID,
1127 &(settings.params.preview_request_id)) || 1166 &(settings.params.preview_request_id)) ||
1128 !job_settings->GetBoolean(printing::kIsFirstRequest, 1167 !job_settings->GetBoolean(printing::kIsFirstRequest,
1129 &(settings.params.is_first_request))) { 1168 &(settings.params.is_first_request))) {
1130 NOTREACHED(); 1169 NOTREACHED();
1131 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); 1170 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING);
1132 return false; 1171 return false;
1133 } 1172 }
1134 1173
1135 // Margins: Send default page layout to browser process.
1136 PageSizeMargins default_page_layout;
1137 GetPageSizeAndMarginsInPoints(NULL, -1, settings.params,
1138 &default_page_layout);
1139 if (!old_print_pages_params_.get() ||
1140 !PageLayoutIsEqual(*old_print_pages_params_, settings)) {
1141 Send(new PrintHostMsg_DidGetDefaultPageLayout(routing_id(),
1142 default_page_layout));
1143 }
1144
1145 // Header/Footer: Set |header_footer_info_|. 1174 // Header/Footer: Set |header_footer_info_|.
1146 if (settings.params.display_header_footer) { 1175 if (settings.params.display_header_footer) {
1147 header_footer_info_.reset(new DictionaryValue()); 1176 header_footer_info_.reset(new DictionaryValue());
1148 header_footer_info_->SetString(printing::kSettingHeaderFooterDate, 1177 header_footer_info_->SetString(printing::kSettingHeaderFooterDate,
1149 settings.params.date); 1178 settings.params.date);
1150 header_footer_info_->SetString(printing::kSettingHeaderFooterURL, 1179 header_footer_info_->SetString(printing::kSettingHeaderFooterURL,
1151 settings.params.url); 1180 settings.params.url);
1152 header_footer_info_->SetString(printing::kSettingHeaderFooterTitle, 1181 header_footer_info_->SetString(printing::kSettingHeaderFooterTitle,
1153 settings.params.title); 1182 settings.params.title);
1154 } 1183 }
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 node_ = web_node; 1401 node_ = web_node;
1373 } 1402 }
1374 1403
1375 void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() { 1404 void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() {
1376 DCHECK_EQ(INITIALIZED, state_); 1405 DCHECK_EQ(INITIALIZED, state_);
1377 ClearContext(); 1406 ClearContext();
1378 } 1407 }
1379 1408
1380 bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( 1409 bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument(
1381 PrintMsg_Print_Params* print_params, 1410 PrintMsg_Print_Params* print_params,
1382 const std::vector<int>& pages) { 1411 const std::vector<int>& pages,
1412 bool default_margins_requested) {
1383 DCHECK_EQ(INITIALIZED, state_); 1413 DCHECK_EQ(INITIALIZED, state_);
1384 state_ = RENDERING; 1414 state_ = RENDERING;
1385 1415
1386 metafile_.reset(new printing::PreviewMetafile); 1416 metafile_.reset(new printing::PreviewMetafile);
1387 if (!metafile_->Init()) { 1417 if (!metafile_->Init()) {
1388 set_error(PREVIEW_ERROR_METAFILE_INIT_FAILED); 1418 set_error(PREVIEW_ERROR_METAFILE_INIT_FAILED);
1389 LOG(ERROR) << "PreviewMetafile Init failed"; 1419 LOG(ERROR) << "PreviewMetafile Init failed";
1390 return false; 1420 return false;
1391 } 1421 }
1392 1422
1393 // Need to make sure old object gets destroyed first. 1423 // Need to make sure old object gets destroyed first.
1394 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(), 1424 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(),
1395 node())); 1425 node()));
1396 UpdatePrintableSizeInPrintParameters(frame_, node_, 1426 UpdatePrintableSizeInPrintParameters(frame_, node_,
1397 prep_frame_view_.get(), print_params); 1427 prep_frame_view_.get(), print_params,
1428 default_margins_requested);
1398 1429
1399 print_params_.reset(new PrintMsg_Print_Params(*print_params)); 1430 print_params_.reset(new PrintMsg_Print_Params(*print_params));
1400 1431
1401 total_page_count_ = prep_frame_view_->GetExpectedPageCount(); 1432 total_page_count_ = prep_frame_view_->GetExpectedPageCount();
1402 if (total_page_count_ == 0) { 1433 if (total_page_count_ == 0) {
1403 LOG(ERROR) << "CreatePreviewDocument got 0 page count"; 1434 LOG(ERROR) << "CreatePreviewDocument got 0 page count";
1404 set_error(PREVIEW_ERROR_ZERO_PAGES); 1435 set_error(PREVIEW_ERROR_ZERO_PAGES);
1405 return false; 1436 return false;
1406 } 1437 }
1407 1438
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1563 DCHECK(IsRendering()); 1594 DCHECK(IsRendering());
1564 return prep_frame_view_->GetPrintCanvasSize(); 1595 return prep_frame_view_->GetPrintCanvasSize();
1565 } 1596 }
1566 1597
1567 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { 1598 void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
1568 prep_frame_view_.reset(); 1599 prep_frame_view_.reset();
1569 metafile_.reset(); 1600 metafile_.reset();
1570 pages_to_render_.clear(); 1601 pages_to_render_.clear();
1571 error_ = PREVIEW_ERROR_NONE; 1602 error_ = PREVIEW_ERROR_NONE;
1572 } 1603 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698