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

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

Issue 10168013: [Print Preview] Modified PrepareFrameAndViewPrint class to call the new printBegin function to supp… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rename WebPrintScalingOptions to WebPrintScalingOption Created 8 years, 8 months 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) 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/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 // Swap the |width| and |height| values. 295 // Swap the |width| and |height| values.
296 page_params->page_size.SetSize(page_params->page_size.height(), 296 page_params->page_size.SetSize(page_params->page_size.height(),
297 page_params->page_size.width()); 297 page_params->page_size.width());
298 page_params->content_size.SetSize(page_params->content_size.height(), 298 page_params->content_size.SetSize(page_params->content_size.height(),
299 page_params->content_size.width()); 299 page_params->content_size.width());
300 page_params->printable_area.set_size( 300 page_params->printable_area.set_size(
301 gfx::Size(page_params->printable_area.height(), 301 gfx::Size(page_params->printable_area.height(),
302 page_params->printable_area.width())); 302 page_params->printable_area.width()));
303 } 303 }
304 304
305 void CalculatePrintCanvasSize(const PrintMsg_Print_Params& print_params, 305 void ComputePrintParamsInDesiredDpi(const PrintMsg_Print_Params& print_params,
306 gfx::Size* result) { 306 gfx::Size* content_size,
307 gfx::Rect* printable_area,
308 gfx::Size* paper_size) {
307 int dpi = GetDPI(&print_params); 309 int dpi = GetDPI(&print_params);
308 result->set_width(ConvertUnit(print_params.content_size.width(), dpi, 310 content_size->set_width(ConvertUnit(print_params.content_size.width(), dpi,
309 print_params.desired_dpi)); 311 print_params.desired_dpi));
310 312
311 result->set_height(ConvertUnit(print_params.content_size.height(), dpi, 313 content_size->set_height(ConvertUnit(print_params.content_size.height(), dpi,
312 print_params.desired_dpi)); 314 print_params.desired_dpi));
315
316 printable_area->SetRect(ConvertUnit(print_params.printable_area.x(), dpi,
317 print_params.desired_dpi),
318 ConvertUnit(print_params.printable_area.y(), dpi,
319 print_params.desired_dpi),
320 ConvertUnit(print_params.printable_area.width(), dpi,
321 print_params.desired_dpi),
322 ConvertUnit(print_params.printable_area.height(), dpi,
323 print_params.desired_dpi));
324 paper_size->SetSize(ConvertUnit(print_params.page_size.width(), dpi,
325 print_params.desired_dpi),
326 ConvertUnit(print_params.page_size.height(), dpi,
327 print_params.desired_dpi));
313 } 328 }
314 329
315 bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) { 330 bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) {
316 if (!node.isNull()) 331 if (!node.isNull())
317 return true; 332 return true;
318 if (!frame->document().isPluginDocument()) 333 if (!frame->document().isPluginDocument())
319 return false; 334 return false;
320 WebPlugin* plugin = frame->document().to<WebPluginDocument>().plugin(); 335 WebPlugin* plugin = frame->document().to<WebPluginDocument>().plugin();
321 return plugin && plugin->supportsPaginatedPrint(); 336 return plugin && plugin->supportsPaginatedPrint();
322 } 337 }
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 } 608 }
594 609
595 #if defined(USE_SKIA) 610 #if defined(USE_SKIA)
596 device->setDrawingArea(SkPDFDevice::kContent_DrawingArea); 611 device->setDrawingArea(SkPDFDevice::kContent_DrawingArea);
597 #endif 612 #endif
598 } 613 }
599 614
600 PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint( 615 PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint(
601 const PrintMsg_Print_Params& print_params, 616 const PrintMsg_Print_Params& print_params,
602 WebFrame* frame, 617 WebFrame* frame,
603 const WebNode& node) 618 const WebNode& node,
619 WebKit::WebPrintScalingOption scaling_option)
604 : frame_(frame), 620 : frame_(frame),
605 node_to_print_(node), 621 node_to_print_(node),
606 web_view_(frame->view()), 622 web_view_(frame->view()),
607 dpi_(static_cast<int>(print_params.dpi)), 623 dpi_(static_cast<int>(print_params.dpi)),
608 expected_pages_count_(0), 624 expected_pages_count_(0),
609 use_browser_overlays_(true), 625 use_browser_overlays_(true),
626 print_scaling_option_(scaling_option),
610 finished_(false) { 627 finished_(false) {
611 gfx::Size canvas_size; 628 gfx::Size canvas_size;
612 CalculatePrintCanvasSize(print_params, &canvas_size); 629 gfx::Rect printable_area;
630 gfx::Size paper_size;
631 ComputePrintParamsInDesiredDpi(print_params, &canvas_size, &printable_area,
632 &paper_size);
613 633
614 if (WebFrame* web_frame = web_view_->mainFrame()) 634 if (WebFrame* web_frame = web_view_->mainFrame())
615 prev_scroll_offset_ = web_frame->scrollOffset(); 635 prev_scroll_offset_ = web_frame->scrollOffset();
616 prev_view_size_ = web_view_->size(); 636 prev_view_size_ = web_view_->size();
617 637
618 StartPrinting(canvas_size); 638 StartPrinting(canvas_size, printable_area, paper_size);
619 } 639 }
620 640
621 PrepareFrameAndViewForPrint::~PrepareFrameAndViewForPrint() { 641 PrepareFrameAndViewForPrint::~PrepareFrameAndViewForPrint() {
622 FinishPrinting(); 642 FinishPrinting();
623 } 643 }
624 644
625 void PrepareFrameAndViewForPrint::UpdatePrintParams( 645 void PrepareFrameAndViewForPrint::UpdatePrintParams(
626 const PrintMsg_Print_Params& print_params) { 646 const PrintMsg_Print_Params& print_params) {
627 DCHECK(!finished_); 647 DCHECK(!finished_);
628 gfx::Size canvas_size; 648 gfx::Size canvas_size;
629 CalculatePrintCanvasSize(print_params, &canvas_size); 649 gfx::Rect printable_area;
630 if (canvas_size == print_canvas_size_) 650 gfx::Size paper_size;
651 ComputePrintParamsInDesiredDpi(print_params, &canvas_size, &printable_area,
652 &paper_size);
653 if (canvas_size == print_canvas_size_ &&
654 printable_area == printable_area_ &&
655 paper_size == paper_size_) {
631 return; 656 return;
657 }
632 658
633 frame_->printEnd(); 659 frame_->printEnd();
634 dpi_ = static_cast<int>(print_params.dpi); 660 dpi_ = static_cast<int>(print_params.dpi);
635 StartPrinting(canvas_size); 661 StartPrinting(canvas_size, printable_area, paper_size);
636 } 662 }
637 663
638 void PrepareFrameAndViewForPrint::StartPrinting( 664 void PrepareFrameAndViewForPrint::StartPrinting(
639 const gfx::Size& print_canvas_size) { 665 const gfx::Size& print_canvas_size,
666 const gfx::Rect& printable_area,
667 const gfx::Size& paper_size) {
640 print_canvas_size_ = print_canvas_size; 668 print_canvas_size_ = print_canvas_size;
669 printable_area_ = printable_area;
670 paper_size_ = paper_size;
641 671
642 // Layout page according to printer page size. Since WebKit shrinks the 672 // Layout page according to printer page size. Since WebKit shrinks the
643 // size of the page automatically (from 125% to 200%) we trick it to 673 // size of the page automatically (from 125% to 200%) we trick it to
644 // think the page is 125% larger so the size of the page is correct for 674 // think the page is 125% larger so the size of the page is correct for
645 // minimum (default) scaling. 675 // minimum (default) scaling.
646 // This is important for sites that try to fill the page. 676 // This is important for sites that try to fill the page.
647 gfx::Size print_layout_size(print_canvas_size_); 677 gfx::Size print_layout_size(print_canvas_size_);
648 print_layout_size.set_height(static_cast<int>( 678 print_layout_size.set_height(static_cast<int>(
649 static_cast<double>(print_layout_size.height()) * 1.25)); 679 static_cast<double>(print_layout_size.height()) * 1.25));
650 680
651 web_view_->resize(print_layout_size); 681 web_view_->resize(print_layout_size);
652 682
653 expected_pages_count_ = frame_->printBegin(print_canvas_size_, node_to_print_, 683 expected_pages_count_ = frame_->printBegin(print_canvas_size_,
654 dpi_, &use_browser_overlays_); 684 printable_area_,
685 paper_size_,
686 node_to_print_,
687 dpi_,
688 print_scaling_option_,
689 &use_browser_overlays_);
655 } 690 }
656 691
657 void PrepareFrameAndViewForPrint::FinishPrinting() { 692 void PrepareFrameAndViewForPrint::FinishPrinting() {
658 if (!finished_) { 693 if (!finished_) {
659 finished_ = true; 694 finished_ = true;
660 frame_->printEnd(); 695 frame_->printEnd();
661 web_view_->resize(prev_view_size_); 696 web_view_->resize(prev_view_size_);
662 if (WebFrame* web_frame = web_view_->mainFrame()) 697 if (WebFrame* web_frame = web_view_->mainFrame())
663 web_frame->setScrollOffset(prev_scroll_offset_); 698 web_frame->setScrollOffset(prev_scroll_offset_);
664 } 699 }
665 } 700 }
666 701
667 PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view) 702 PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view)
668 : content::RenderViewObserver(render_view), 703 : content::RenderViewObserver(render_view),
669 content::RenderViewObserverTracker<PrintWebViewHelper>(render_view), 704 content::RenderViewObserverTracker<PrintWebViewHelper>(render_view),
670 print_web_view_(NULL), 705 print_web_view_(NULL),
671 is_preview_enabled_(IsPrintPreviewEnabled()), 706 is_preview_enabled_(IsPrintPreviewEnabled()),
672 is_print_ready_metafile_sent_(false), 707 is_print_ready_metafile_sent_(false),
673 ignore_css_margins_(false), 708 ignore_css_margins_(false),
674 user_cancelled_scripted_print_count_(0), 709 user_cancelled_scripted_print_count_(0),
675 is_scripted_printing_blocked_(false), 710 is_scripted_printing_blocked_(false),
676 notify_browser_of_print_failure_(true), 711 notify_browser_of_print_failure_(true),
677 print_for_preview_(false) { 712 print_for_preview_(false),
713 print_scaling_option_(WebKit::WebPrintFitToPrintableArea) {
678 } 714 }
679 715
680 PrintWebViewHelper::~PrintWebViewHelper() {} 716 PrintWebViewHelper::~PrintWebViewHelper() {}
681 717
682 bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed( 718 bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed(
683 WebKit::WebFrame* frame) { 719 WebKit::WebFrame* frame) {
684 if (is_scripted_printing_blocked_) 720 if (is_scripted_printing_blocked_)
685 return false; 721 return false;
686 return !IsScriptInitiatedPrintTooFrequent(frame); 722 return !IsScriptInitiatedPrintTooFrequent(frame);
687 } 723 }
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 if (notify_browser_of_print_failure_) 923 if (notify_browser_of_print_failure_)
888 LOG(ERROR) << "CreatePreviewDocument failed"; 924 LOG(ERROR) << "CreatePreviewDocument failed";
889 DidFinishPrinting(FAIL_PREVIEW); 925 DidFinishPrinting(FAIL_PREVIEW);
890 } 926 }
891 } 927 }
892 928
893 bool PrintWebViewHelper::CreatePreviewDocument() { 929 bool PrintWebViewHelper::CreatePreviewDocument() {
894 PrintMsg_Print_Params print_params = print_pages_params_->params; 930 PrintMsg_Print_Params print_params = print_pages_params_->params;
895 const std::vector<int>& pages = print_pages_params_->pages; 931 const std::vector<int>& pages = print_pages_params_->pages;
896 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages, 932 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages,
897 ignore_css_margins_)) { 933 ignore_css_margins_,
934 print_scaling_option_)) {
898 return false; 935 return false;
899 } 936 }
900 937
901 PageSizeMargins default_page_layout; 938 PageSizeMargins default_page_layout;
902 ComputePageLayoutInPointsForCss(print_preview_context_.frame(), 0, 939 ComputePageLayoutInPointsForCss(print_preview_context_.frame(), 0,
903 print_params, ignore_css_margins_, NULL, 940 print_params, ignore_css_margins_, NULL,
904 &default_page_layout); 941 &default_page_layout);
905 942
906 if (!old_print_pages_params_.get() || 943 if (!old_print_pages_params_.get() ||
907 !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) { 944 !PageLayoutIsEqual(*old_print_pages_params_, *print_pages_params_)) {
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 // actual printing. 1199 // actual printing.
1163 print_web_view_->mainFrame()->loadRequest(WebURLRequest(url)); 1200 print_web_view_->mainFrame()->loadRequest(WebURLRequest(url));
1164 1201
1165 return true; 1202 return true;
1166 } 1203 }
1167 1204
1168 #if defined(OS_MACOSX) || defined(OS_WIN) 1205 #if defined(OS_MACOSX) || defined(OS_WIN)
1169 bool PrintWebViewHelper::PrintPages(WebFrame* frame, const WebNode& node) { 1206 bool PrintWebViewHelper::PrintPages(WebFrame* frame, const WebNode& node) {
1170 const PrintMsg_PrintPages_Params& params = *print_pages_params_; 1207 const PrintMsg_PrintPages_Params& params = *print_pages_params_;
1171 const PrintMsg_Print_Params& print_params = params.params; 1208 const PrintMsg_Print_Params& print_params = params.params;
1172 PrepareFrameAndViewForPrint prep_frame_view(print_params, frame, node); 1209 PrepareFrameAndViewForPrint prep_frame_view(print_params, frame, node,
1210 print_scaling_option_);
1173 UpdateFrameAndViewFromCssPageLayout(frame, node, &prep_frame_view, 1211 UpdateFrameAndViewFromCssPageLayout(frame, node, &prep_frame_view,
1174 print_params, ignore_css_margins_); 1212 print_params, ignore_css_margins_);
1175 1213
1176 int page_count = prep_frame_view.GetExpectedPageCount(); 1214 int page_count = prep_frame_view.GetExpectedPageCount();
1177 if (!page_count) 1215 if (!page_count)
1178 return false; 1216 return false;
1179 Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(), 1217 Send(new PrintHostMsg_DidGetPrintedPagesCount(routing_id(),
1180 print_params.document_cookie, 1218 print_params.document_cookie,
1181 page_count)); 1219 page_count));
1182 1220
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 const PrintMsg_Print_Params& params, 1264 const PrintMsg_Print_Params& params,
1227 bool ignore_css_margins) { 1265 bool ignore_css_margins) {
1228 if (PrintingNodeOrPdfFrame(frame, node)) 1266 if (PrintingNodeOrPdfFrame(frame, node))
1229 return; 1267 return;
1230 PrintMsg_Print_Params print_params = CalculatePrintParamsForCss( 1268 PrintMsg_Print_Params print_params = CalculatePrintParamsForCss(
1231 frame, 0, params, ignore_css_margins, 1269 frame, 0, params, ignore_css_margins,
1232 ignore_css_margins && params.fit_to_paper_size, NULL); 1270 ignore_css_margins && params.fit_to_paper_size, NULL);
1233 prepare->UpdatePrintParams(print_params); 1271 prepare->UpdatePrintParams(print_params);
1234 } 1272 }
1235 1273
1236 bool PrintWebViewHelper::InitPrintSettings() { 1274 bool PrintWebViewHelper::InitPrintSettings(bool fit_to_paper_size) {
1237 PrintMsg_PrintPages_Params settings; 1275 PrintMsg_PrintPages_Params settings;
1238 Send(new PrintHostMsg_GetDefaultPrintSettings(routing_id(), 1276 Send(new PrintHostMsg_GetDefaultPrintSettings(routing_id(),
1239 &settings.params)); 1277 &settings.params));
1240 // Check if the printer returned any settings, if the settings is empty, we 1278 // Check if the printer returned any settings, if the settings is empty, we
1241 // can safely assume there are no printer drivers configured. So we safely 1279 // can safely assume there are no printer drivers configured. So we safely
1242 // terminate. 1280 // terminate.
1243 bool result = true; 1281 bool result = true;
1244 if (!PrintMsg_Print_Params_IsValid(settings.params)) 1282 if (!PrintMsg_Print_Params_IsValid(settings.params))
1245 result = false; 1283 result = false;
1246 1284
1247 if (result && 1285 if (result &&
1248 (settings.params.dpi < kMinDpi || settings.params.document_cookie == 0)) { 1286 (settings.params.dpi < kMinDpi || settings.params.document_cookie == 0)) {
1249 // Invalid print page settings. 1287 // Invalid print page settings.
1250 NOTREACHED(); 1288 NOTREACHED();
1251 result = false; 1289 result = false;
1252 } 1290 }
1253 1291
1254 // Reset to default values. 1292 // Reset to default values.
1255 ignore_css_margins_ = false; 1293 ignore_css_margins_ = false;
1256 settings.params.fit_to_paper_size = true;
1257 settings.pages.clear(); 1294 settings.pages.clear();
1295 settings.params.fit_to_paper_size = fit_to_paper_size;
1296
1297 // Update the print scaling option.
1298 print_scaling_option_ = static_cast<WebKit::WebPrintScalingOption>(
vandebo (ex-Chrome) 2012/04/20 23:26:11 This cast is pretty ugly. A conditional or trinar
kmadhusu 2012/04/23 17:39:10 Done... Removed print_scaling_option_ from PrintWe
1299 fit_to_paper_size);
1258 1300
1259 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); 1301 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
1260 return result; 1302 return result;
1261 } 1303 }
1262 1304
1263 bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame( 1305 bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame(
1264 WebKit::WebFrame* frame, const WebKit::WebNode& node, 1306 WebKit::WebFrame* frame, const WebKit::WebNode& node,
1265 scoped_ptr<PrepareFrameAndViewForPrint>* prepare) { 1307 scoped_ptr<PrepareFrameAndViewForPrint>* prepare) {
1266 DCHECK(frame); 1308 DCHECK(frame);
1267 if (!InitPrintSettings()) { 1309 bool fit_to_paper_size = !(PrintingNodeOrPdfFrame(frame, node) &&
1310 frame->isPrintScalingDisabledForPlugin(node));
1311 if (!InitPrintSettings(fit_to_paper_size)) {
1268 notify_browser_of_print_failure_ = false; 1312 notify_browser_of_print_failure_ = false;
1269 render_view()->RunModalAlertDialog( 1313 render_view()->RunModalAlertDialog(
1270 frame, 1314 frame,
1271 l10n_util::GetStringUTF16(IDS_PRINT_PREVIEW_INVALID_PRINTER_SETTINGS)); 1315 l10n_util::GetStringUTF16(IDS_PRINT_PREVIEW_INVALID_PRINTER_SETTINGS));
1272 return false; 1316 return false;
1273 } 1317 }
1274 1318
1275 DCHECK(!prepare->get()); 1319 DCHECK(!prepare->get());
1276 prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, 1320 prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params,
1277 frame, node)); 1321 frame, node,
1322 print_scaling_option_));
1278 UpdateFrameAndViewFromCssPageLayout(frame, node, prepare->get(), 1323 UpdateFrameAndViewFromCssPageLayout(frame, node, prepare->get(),
1279 print_pages_params_->params, 1324 print_pages_params_->params,
1280 ignore_css_margins_); 1325 ignore_css_margins_);
1281 Send(new PrintHostMsg_DidGetDocumentCookie( 1326 Send(new PrintHostMsg_DidGetDocumentCookie(
1282 routing_id(), print_pages_params_->params.document_cookie)); 1327 routing_id(), print_pages_params_->params.document_cookie));
1283 return true; 1328 return true;
1284 } 1329 }
1285 1330
1286 bool PrintWebViewHelper::UpdatePrintSettings( 1331 bool PrintWebViewHelper::UpdatePrintSettings(
1287 WebKit::WebFrame* frame, const WebKit::WebNode& node, 1332 WebKit::WebFrame* frame, const WebKit::WebNode& node,
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1375 &(settings.params.is_first_request))) { 1420 &(settings.params.is_first_request))) {
1376 NOTREACHED(); 1421 NOTREACHED();
1377 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); 1422 print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING);
1378 return false; 1423 return false;
1379 } 1424 }
1380 1425
1381 settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings); 1426 settings.params.print_to_pdf = IsPrintToPdfRequested(*job_settings);
1382 UpdateFrameMarginsCssInfo(*job_settings); 1427 UpdateFrameMarginsCssInfo(*job_settings);
1383 1428
1384 // Fit to paper size. 1429 // Fit to paper size.
1385 settings.params.fit_to_paper_size = source_is_html && 1430 settings.params.fit_to_paper_size =
vandebo (ex-Chrome) 2012/04/20 23:26:11 At this point, it might be clearer to use an if or
kmadhusu 2012/04/23 17:39:10 Done.
1386 !IsPrintToPdfRequested(*job_settings); 1431 !(print_for_preview_ || settings.params.print_to_pdf ||
1432 (PrintingNodeOrPdfFrame(frame, node) &&
1433 frame->isPrintScalingDisabledForPlugin(node)));
1434
1435 // Update the print scaling option.
1436 print_scaling_option_ = (print_for_preview_ ||
1437 settings.params.print_to_pdf) ?
1438 WebKit::WebPrintActualSize :
1439 static_cast<WebKit::WebPrintScalingOption>(
1440 settings.params.fit_to_paper_size);
1387 1441
1388 // Header/Footer: Set |header_footer_info_|. 1442 // Header/Footer: Set |header_footer_info_|.
1389 if (settings.params.display_header_footer) { 1443 if (settings.params.display_header_footer) {
1390 header_footer_info_.reset(new DictionaryValue()); 1444 header_footer_info_.reset(new DictionaryValue());
1391 header_footer_info_->SetString(printing::kSettingHeaderFooterDate, 1445 header_footer_info_->SetString(printing::kSettingHeaderFooterDate,
1392 settings.params.date); 1446 settings.params.date);
1393 header_footer_info_->SetString(printing::kSettingHeaderFooterURL, 1447 header_footer_info_->SetString(printing::kSettingHeaderFooterURL,
1394 settings.params.url); 1448 settings.params.url);
1395 header_footer_info_->SetString(printing::kSettingHeaderFooterTitle, 1449 header_footer_info_->SetString(printing::kSettingHeaderFooterTitle,
1396 settings.params.title); 1450 settings.params.title);
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1630 } 1684 }
1631 1685
1632 void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() { 1686 void PrintWebViewHelper::PrintPreviewContext::OnPrintPreview() {
1633 DCHECK_EQ(INITIALIZED, state_); 1687 DCHECK_EQ(INITIALIZED, state_);
1634 ClearContext(); 1688 ClearContext();
1635 } 1689 }
1636 1690
1637 bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( 1691 bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument(
1638 PrintMsg_Print_Params* print_params, 1692 PrintMsg_Print_Params* print_params,
1639 const std::vector<int>& pages, 1693 const std::vector<int>& pages,
1640 bool ignore_css_margins) { 1694 bool ignore_css_margins,
1695 WebKit::WebPrintScalingOption print_scaling_option) {
1641 DCHECK_EQ(INITIALIZED, state_); 1696 DCHECK_EQ(INITIALIZED, state_);
1642 state_ = RENDERING; 1697 state_ = RENDERING;
1643 1698
1644 metafile_.reset(new printing::PreviewMetafile); 1699 metafile_.reset(new printing::PreviewMetafile);
1645 if (!metafile_->Init()) { 1700 if (!metafile_->Init()) {
1646 set_error(PREVIEW_ERROR_METAFILE_INIT_FAILED); 1701 set_error(PREVIEW_ERROR_METAFILE_INIT_FAILED);
1647 LOG(ERROR) << "PreviewMetafile Init failed"; 1702 LOG(ERROR) << "PreviewMetafile Init failed";
1648 return false; 1703 return false;
1649 } 1704 }
1650 1705
1651 // Need to make sure old object gets destroyed first. 1706 // Need to make sure old object gets destroyed first.
1652 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(), 1707 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(),
1653 node())); 1708 node(),
1709 print_scaling_option));
1654 UpdateFrameAndViewFromCssPageLayout(frame_, node_, prep_frame_view_.get(), 1710 UpdateFrameAndViewFromCssPageLayout(frame_, node_, prep_frame_view_.get(),
1655 *print_params, ignore_css_margins); 1711 *print_params, ignore_css_margins);
1656 1712
1657 print_params_.reset(new PrintMsg_Print_Params(*print_params)); 1713 print_params_.reset(new PrintMsg_Print_Params(*print_params));
1658 1714
1659 total_page_count_ = prep_frame_view_->GetExpectedPageCount(); 1715 total_page_count_ = prep_frame_view_->GetExpectedPageCount();
1660 if (total_page_count_ == 0) { 1716 if (total_page_count_ == 0) {
1661 LOG(ERROR) << "CreatePreviewDocument got 0 page count"; 1717 LOG(ERROR) << "CreatePreviewDocument got 0 page count";
1662 set_error(PREVIEW_ERROR_ZERO_PAGES); 1718 set_error(PREVIEW_ERROR_ZERO_PAGES);
1663 return false; 1719 return false;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1820 DCHECK(IsRendering()); 1876 DCHECK(IsRendering());
1821 return prep_frame_view_->GetPrintCanvasSize(); 1877 return prep_frame_view_->GetPrintCanvasSize();
1822 } 1878 }
1823 1879
1824 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { 1880 void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
1825 prep_frame_view_.reset(); 1881 prep_frame_view_.reset();
1826 metafile_.reset(); 1882 metafile_.reset();
1827 pages_to_render_.clear(); 1883 pages_to_render_.clear();
1828 error_ = PREVIEW_ERROR_NONE; 1884 error_ = PREVIEW_ERROR_NONE;
1829 } 1885 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698