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

Side by Side Diff: chrome/renderer/print_web_view_helper_browsertest.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: Fix style nit Created 8 years, 11 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) 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/common/chrome_switches.h" 5 #include "chrome/common/chrome_switches.h"
6 #include "chrome/common/print_messages.h" 6 #include "chrome/common/print_messages.h"
7 #include "chrome/renderer/print_web_view_helper.h" 7 #include "chrome/renderer/print_web_view_helper.h"
8 #include "chrome/test/base/chrome_render_view_test.h" 8 #include "chrome/test/base/chrome_render_view_test.h"
9 #include "content/public/renderer/render_view.h" 9 #include "content/public/renderer/render_view.h"
10 #include "printing/print_job_constants.h" 10 #include "printing/print_job_constants.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
13 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" 13 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
15 15
16 #if defined(OS_WIN) || defined(OS_MACOSX) 16 #if defined(OS_WIN) || defined(OS_MACOSX)
17 #include "base/file_util.h" 17 #include "base/file_util.h"
18 #include "printing/image.h" 18 #include "printing/image.h"
19 19
20 using WebKit::WebFrame; 20 using WebKit::WebFrame;
21 using WebKit::WebString; 21 using WebKit::WebString;
22 #endif 22 #endif
23 23
24 namespace { 24 namespace {
25 25
26 // A simple web page. 26 // A simple web page.
27 const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>"; 27 const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>";
28 28
29 // A simple web page with print page size css.
30 const char kHTMLWithPageSizeCss[] =
31 "<html><head><style>"
32 "@media print {"
33 " @page {"
34 " size: 4in 4in;"
35 " }"
36 "}"
37 "</style></head>"
38 "<body>Lorem Ipsum:"
39 "</body></html>";
40
29 // A simple webpage that prints itself. 41 // A simple webpage that prints itself.
30 const char kPrintWithJSHTML[] = 42 const char kPrintWithJSHTML[] =
31 "<body>Hello<script>window.print()</script>World</body>"; 43 "<body>Hello<script>window.print()</script>World</body>";
32 44
33 // A longer web page. 45 // A longer web page.
34 const char kLongPageHTML[] = 46 const char kLongPageHTML[] =
35 "<body><img src=\"\" width=10 height=10000 /></body>"; 47 "<body><img src=\"\" width=10 height=10000 /></body>";
36 48
37 // A web page to simulate the print preview page. 49 // A web page to simulate the print preview page.
38 const char kPrintPreviewHTML[] = 50 const char kPrintPreviewHTML[] =
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 " http-equiv=\"Content-Type\"" 247 " http-equiv=\"Content-Type\""
236 " content=\"text/html; charset=utf-8\"/>" 248 " content=\"text/html; charset=utf-8\"/>"
237 "<title>Test 1</title>" 249 "<title>Test 1</title>"
238 "</head>" 250 "</head>"
239 "<body style=\"background-color: white;\">" 251 "<body style=\"background-color: white;\">"
240 "<p style=\"font-family: arial;\">Hello World!</p>" 252 "<p style=\"font-family: arial;\">Hello World!</p>"
241 "</body>", 253 "</body>",
242 #if defined(OS_MACOSX) 254 #if defined(OS_MACOSX)
243 // Mac printing code compensates for the WebKit scale factor while generating 255 // Mac printing code compensates for the WebKit scale factor while generating
244 // the metafile, so we expect smaller pages. 256 // the metafile, so we expect smaller pages.
245 1, 540, 720, 257 1, 600, 780,
246 #else 258 #else
247 1, 675, 900, 259 1, 675, 900,
248 #endif 260 #endif
249 NULL, 261 NULL,
250 NULL, 262 NULL,
251 }, 263 },
252 }; 264 };
253 } // namespace 265 } // namespace
254 266
255 // TODO(estade): need to port MockPrinter to get this on Linux. This involves 267 // TODO(estade): need to port MockPrinter to get this on Linux. This involves
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 EXPECT_NE(0U, page_param.a.data_size); 394 EXPECT_NE(0U, page_param.a.data_size);
383 else 395 else
384 EXPECT_EQ(0U, page_param.a.data_size); 396 EXPECT_EQ(0U, page_param.a.data_size);
385 break; 397 break;
386 } 398 }
387 } 399 }
388 } 400 }
389 ASSERT_EQ(generate_draft_pages, msg_found); 401 ASSERT_EQ(generate_draft_pages, msg_found);
390 } 402 }
391 403
404 void VerifyDefaultPageLayout(int expected_width, int expected_height,
vandebo (ex-Chrome) 2012/01/10 00:59:55 nit: content_width, content_height
kmadhusu 2012/01/10 17:35:45 Done.
405 int margin_top, int margin_bottom,
406 int margin_left, int margin_right,
407 bool page_has_print_css) {
408 const IPC::Message* default_page_layout_msg =
409 render_thread_->sink().GetUniqueMessageMatching(
410 PrintHostMsg_DidGetDefaultPageLayout::ID);
411 bool did_get_default_page_layout_msg = (NULL != default_page_layout_msg);
412 if (did_get_default_page_layout_msg) {
413 PrintHostMsg_DidGetDefaultPageLayout::Param param;
414 PrintHostMsg_DidGetDefaultPageLayout::Read(default_page_layout_msg,
415 &param);
416 EXPECT_EQ(expected_width, param.a.content_width);
417 EXPECT_EQ(expected_height, param.a.content_height);
418 EXPECT_EQ(margin_top, param.a.margin_top);
419 EXPECT_EQ(margin_right, param.a.margin_right);
420 EXPECT_EQ(margin_left, param.a.margin_left);
421 EXPECT_EQ(margin_bottom, param.a.margin_bottom);
422 EXPECT_EQ(page_has_print_css, param.b);
423 }
424 }
425
392 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperPreviewTest); 426 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperPreviewTest);
393 }; 427 };
394 428
395 // Tests that print preview work and sending and receiving messages through 429 // Tests that print preview work and sending and receiving messages through
396 // that channel all works. 430 // that channel all works.
397 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreview) { 431 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreview) {
398 LoadHTML(kHelloWorldHTML); 432 LoadHTML(kHelloWorldHTML);
399 433
400 // Fill in some dummy values. 434 // Fill in some dummy values.
401 DictionaryValue dict; 435 DictionaryValue dict;
402 CreatePrintSettingsDictionary(&dict); 436 CreatePrintSettingsDictionary(&dict);
403 OnPrintPreview(dict); 437 OnPrintPreview(dict);
404 438
405 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 439 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
440 VerifyDefaultPageLayout(540, 720, 36, 36, 36, 36, false);
406 VerifyPrintPreviewCancelled(false); 441 VerifyPrintPreviewCancelled(false);
407 VerifyPrintPreviewFailed(false); 442 VerifyPrintPreviewFailed(false);
408 VerifyPrintPreviewGenerated(true); 443 VerifyPrintPreviewGenerated(true);
409 VerifyPagesPrinted(false); 444 VerifyPagesPrinted(false);
410 } 445 }
411 446
447 TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewHTMLWithPageMarginsCss) {
448 // A simple web page with print margins css.
449 const char kHTMLWithPageMarginsCss[] =
450 "<html><head><style>"
451 "@media print {"
452 " @page {"
453 " margin: 3in 1in 2in 0.3in;"
454 " }"
455 "}"
456 "</style></head>"
457 "<body>Lorem Ipsum:"
458 "</body></html>";
459 LoadHTML(kHTMLWithPageMarginsCss);
460
461 // Fill in some dummy values.
462 DictionaryValue dict;
463 CreatePrintSettingsDictionary(&dict);
464 dict.SetBoolean(printing::kSettingPrintToPDF, false);
465 dict.SetInteger(printing::kSettingMarginsType, printing::DEFAULT_MARGINS);
466 OnPrintPreview(dict);
467
468 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
469 VerifyDefaultPageLayout(519, 432, 216, 144, 21, 72, false);
470 VerifyPrintPreviewCancelled(false);
471 VerifyPrintPreviewFailed(false);
472 VerifyPrintPreviewGenerated(true);
473 VerifyPagesPrinted(false);
474 }
475
476 // Test to verify that print preview ignores print media css when non-default
477 // margin is selected.
478 TEST_F(PrintWebViewHelperPreviewTest, NonDefaultMarginsSelectedIgnorePrintCss) {
479 LoadHTML(kHTMLWithPageSizeCss);
480
481 // Fill in some dummy values.
482 DictionaryValue dict;
483 CreatePrintSettingsDictionary(&dict);
484 dict.SetBoolean(printing::kSettingPrintToPDF, false);
485 dict.SetInteger(printing::kSettingMarginsType, printing::NO_MARGINS);
486 OnPrintPreview(dict);
487
488 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
489 VerifyDefaultPageLayout(612, 792, 0, 0, 0, 0, true);
490 VerifyPrintPreviewCancelled(false);
491 VerifyPrintPreviewFailed(false);
492 VerifyPrintPreviewGenerated(true);
493 VerifyPagesPrinted(false);
494 }
495
496 // Test to verify that print preview honor print media size css when
497 // PRINT_TO_PDF is selected and doesn't fit to printer default paper size.
498 TEST_F(PrintWebViewHelperPreviewTest, PrintToPDFSelectedHonorPrintCss) {
499 LoadHTML(kHTMLWithPageSizeCss);
500
501 // Fill in some dummy values.
502 DictionaryValue dict;
503 CreatePrintSettingsDictionary(&dict);
504 dict.SetBoolean(printing::kSettingPrintToPDF, true);
505 dict.SetInteger(printing::kSettingMarginsType,
506 printing::PRINTABLE_AREA_MARGINS);
507 OnPrintPreview(dict);
508
509 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
510 // Since PRINT_TO_PDF is selected, pdf page size is equal to print media page
511 // size.
512 VerifyDefaultPageLayout(252, 252, 18, 18, 18, 18, true);
513 VerifyPrintPreviewCancelled(false);
514 VerifyPrintPreviewFailed(false);
515 }
516
517 // Test to verify that print preview honor print margin css when PRINT_TO_PDF
518 // is selected and doesn't fit to printer default paper size.
519 TEST_F(PrintWebViewHelperPreviewTest, PrintToPDFSelectedHonorPageMarginsCss) {
520 // A simple web page with print margins css.
521 const char kHTMLWithPageCss[] =
522 "<html><head><style>"
523 "@media print {"
524 " @page {"
525 " margin: 3in 1in 2in 0.3in;"
526 " size: 14in 14in;"
527 " }"
528 "}"
529 "</style></head>"
530 "<body>Lorem Ipsum:"
531 "</body></html>";
532 LoadHTML(kHTMLWithPageCss);
533
534 // Fill in some dummy values.
535 DictionaryValue dict;
536 CreatePrintSettingsDictionary(&dict);
537 dict.SetBoolean(printing::kSettingPrintToPDF, true);
538 dict.SetInteger(printing::kSettingMarginsType, printing::DEFAULT_MARGINS);
539 OnPrintPreview(dict);
540
541 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
542 // Since PRINT_TO_PDF is selected, pdf page size is equal to print media page
543 // size.
544 VerifyDefaultPageLayout(915, 648, 216, 144, 21, 72, true);
545 VerifyPrintPreviewCancelled(false);
546 VerifyPrintPreviewFailed(false);
547 }
548
549 // Test to verify that print preview fit to page works when the html
550 // has a print media css.
551 TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewFitToPage) {
552 LoadHTML(kHTMLWithPageSizeCss);
553
554 // Fill in some dummy values.
555 DictionaryValue dict;
556 CreatePrintSettingsDictionary(&dict);
557 dict.SetBoolean(printing::kSettingPrintToPDF, false);
558 dict.SetInteger(printing::kSettingMarginsType, printing::DEFAULT_MARGINS);
559 OnPrintPreview(dict);
560
561 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
562 VerifyDefaultPageLayout(288, 288, 252, 252, 162, 162, true);
563 VerifyPrintPreviewCancelled(false);
564 VerifyPrintPreviewFailed(false);
565 VerifyPrintPreviewGenerated(true);
566 }
vandebo (ex-Chrome) 2012/01/10 00:59:55 How about a test with CSS page size larger than th
kmadhusu 2012/01/10 17:35:45 sure. Done.
567
412 // Test to verify that complete metafile is generated for a subset of pages 568 // Test to verify that complete metafile is generated for a subset of pages
413 // without creating draft pages. 569 // without creating draft pages.
414 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) { 570 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) {
415 LoadHTML(kHelloWorldHTML); 571 LoadHTML(kHelloWorldHTML);
416 572
417 // Fill in some dummy values. 573 // Fill in some dummy values.
418 DictionaryValue dict; 574 DictionaryValue dict;
419 CreatePrintSettingsDictionary(&dict); 575 CreatePrintSettingsDictionary(&dict);
420 576
421 // Set a page range and update the dictionary to generate only the complete 577 // Set a page range and update the dictionary to generate only the complete
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 // Fill in some dummy values. 692 // Fill in some dummy values.
537 DictionaryValue dict; 693 DictionaryValue dict;
538 CreatePrintSettingsDictionary(&dict); 694 CreatePrintSettingsDictionary(&dict);
539 OnPrintForPrintPreview(dict); 695 OnPrintForPrintPreview(dict);
540 696
541 VerifyPrintFailed(true); 697 VerifyPrintFailed(true);
542 VerifyPagesPrinted(false); 698 VerifyPagesPrinted(false);
543 } 699 }
544 700
545 #endif // !defined(OS_CHROMEOS) 701 #endif // !defined(OS_CHROMEOS)
OLDNEW
« no previous file with comments | « chrome/renderer/print_web_view_helper.cc ('k') | chrome/renderer/print_web_view_helper_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698