Chromium Code Reviews| 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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |