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

Unified 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/print_web_view_helper_browsertest.cc
diff --git a/chrome/renderer/print_web_view_helper_browsertest.cc b/chrome/renderer/print_web_view_helper_browsertest.cc
index 2b72538e603ef55eb120bcff65a5136a97e5a44f..c049e8cc40e321d5f6481d890b8461538480eca7 100644
--- a/chrome/renderer/print_web_view_helper_browsertest.cc
+++ b/chrome/renderer/print_web_view_helper_browsertest.cc
@@ -26,6 +26,18 @@ namespace {
// A simple web page.
const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>";
+// A simple web page with print page size css.
+const char kHTMLWithPageSizeCss[] =
+ "<html><head><style>"
+ "@media print {"
+ " @page {"
+ " size: 4in 4in;"
+ " }"
+ "}"
+ "</style></head>"
+ "<body>Lorem Ipsum:"
+ "</body></html>";
+
// A simple webpage that prints itself.
const char kPrintWithJSHTML[] =
"<body>Hello<script>window.print()</script>World</body>";
@@ -242,7 +254,7 @@ const TestPageData kTestPages[] = {
#if defined(OS_MACOSX)
// Mac printing code compensates for the WebKit scale factor while generating
// the metafile, so we expect smaller pages.
- 1, 540, 720,
+ 1, 600, 780,
#else
1, 675, 900,
#endif
@@ -389,6 +401,28 @@ class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase {
ASSERT_EQ(generate_draft_pages, msg_found);
}
+ 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.
+ int margin_top, int margin_bottom,
+ int margin_left, int margin_right,
+ bool page_has_print_css) {
+ const IPC::Message* default_page_layout_msg =
+ render_thread_->sink().GetUniqueMessageMatching(
+ PrintHostMsg_DidGetDefaultPageLayout::ID);
+ bool did_get_default_page_layout_msg = (NULL != default_page_layout_msg);
+ if (did_get_default_page_layout_msg) {
+ PrintHostMsg_DidGetDefaultPageLayout::Param param;
+ PrintHostMsg_DidGetDefaultPageLayout::Read(default_page_layout_msg,
+ &param);
+ EXPECT_EQ(expected_width, param.a.content_width);
+ EXPECT_EQ(expected_height, param.a.content_height);
+ EXPECT_EQ(margin_top, param.a.margin_top);
+ EXPECT_EQ(margin_right, param.a.margin_right);
+ EXPECT_EQ(margin_left, param.a.margin_left);
+ EXPECT_EQ(margin_bottom, param.a.margin_bottom);
+ EXPECT_EQ(page_has_print_css, param.b);
+ }
+ }
+
DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperPreviewTest);
};
@@ -403,12 +437,134 @@ TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreview) {
OnPrintPreview(dict);
EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
+ VerifyDefaultPageLayout(540, 720, 36, 36, 36, 36, false);
VerifyPrintPreviewCancelled(false);
VerifyPrintPreviewFailed(false);
VerifyPrintPreviewGenerated(true);
VerifyPagesPrinted(false);
}
+TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewHTMLWithPageMarginsCss) {
+ // A simple web page with print margins css.
+ const char kHTMLWithPageMarginsCss[] =
+ "<html><head><style>"
+ "@media print {"
+ " @page {"
+ " margin: 3in 1in 2in 0.3in;"
+ " }"
+ "}"
+ "</style></head>"
+ "<body>Lorem Ipsum:"
+ "</body></html>";
+ LoadHTML(kHTMLWithPageMarginsCss);
+
+ // Fill in some dummy values.
+ DictionaryValue dict;
+ CreatePrintSettingsDictionary(&dict);
+ dict.SetBoolean(printing::kSettingPrintToPDF, false);
+ dict.SetInteger(printing::kSettingMarginsType, printing::DEFAULT_MARGINS);
+ OnPrintPreview(dict);
+
+ EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
+ VerifyDefaultPageLayout(519, 432, 216, 144, 21, 72, false);
+ VerifyPrintPreviewCancelled(false);
+ VerifyPrintPreviewFailed(false);
+ VerifyPrintPreviewGenerated(true);
+ VerifyPagesPrinted(false);
+}
+
+// Test to verify that print preview ignores print media css when non-default
+// margin is selected.
+TEST_F(PrintWebViewHelperPreviewTest, NonDefaultMarginsSelectedIgnorePrintCss) {
+ LoadHTML(kHTMLWithPageSizeCss);
+
+ // Fill in some dummy values.
+ DictionaryValue dict;
+ CreatePrintSettingsDictionary(&dict);
+ dict.SetBoolean(printing::kSettingPrintToPDF, false);
+ dict.SetInteger(printing::kSettingMarginsType, printing::NO_MARGINS);
+ OnPrintPreview(dict);
+
+ EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
+ VerifyDefaultPageLayout(612, 792, 0, 0, 0, 0, true);
+ VerifyPrintPreviewCancelled(false);
+ VerifyPrintPreviewFailed(false);
+ VerifyPrintPreviewGenerated(true);
+ VerifyPagesPrinted(false);
+}
+
+// Test to verify that print preview honor print media size css when
+// PRINT_TO_PDF is selected and doesn't fit to printer default paper size.
+TEST_F(PrintWebViewHelperPreviewTest, PrintToPDFSelectedHonorPrintCss) {
+ LoadHTML(kHTMLWithPageSizeCss);
+
+ // Fill in some dummy values.
+ DictionaryValue dict;
+ CreatePrintSettingsDictionary(&dict);
+ dict.SetBoolean(printing::kSettingPrintToPDF, true);
+ dict.SetInteger(printing::kSettingMarginsType,
+ printing::PRINTABLE_AREA_MARGINS);
+ OnPrintPreview(dict);
+
+ EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
+ // Since PRINT_TO_PDF is selected, pdf page size is equal to print media page
+ // size.
+ VerifyDefaultPageLayout(252, 252, 18, 18, 18, 18, true);
+ VerifyPrintPreviewCancelled(false);
+ VerifyPrintPreviewFailed(false);
+}
+
+// Test to verify that print preview honor print margin css when PRINT_TO_PDF
+// is selected and doesn't fit to printer default paper size.
+TEST_F(PrintWebViewHelperPreviewTest, PrintToPDFSelectedHonorPageMarginsCss) {
+ // A simple web page with print margins css.
+ const char kHTMLWithPageCss[] =
+ "<html><head><style>"
+ "@media print {"
+ " @page {"
+ " margin: 3in 1in 2in 0.3in;"
+ " size: 14in 14in;"
+ " }"
+ "}"
+ "</style></head>"
+ "<body>Lorem Ipsum:"
+ "</body></html>";
+ LoadHTML(kHTMLWithPageCss);
+
+ // Fill in some dummy values.
+ DictionaryValue dict;
+ CreatePrintSettingsDictionary(&dict);
+ dict.SetBoolean(printing::kSettingPrintToPDF, true);
+ dict.SetInteger(printing::kSettingMarginsType, printing::DEFAULT_MARGINS);
+ OnPrintPreview(dict);
+
+ EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
+ // Since PRINT_TO_PDF is selected, pdf page size is equal to print media page
+ // size.
+ VerifyDefaultPageLayout(915, 648, 216, 144, 21, 72, true);
+ VerifyPrintPreviewCancelled(false);
+ VerifyPrintPreviewFailed(false);
+}
+
+// Test to verify that print preview fit to page works when the html
+// has a print media css.
+TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewFitToPage) {
+ LoadHTML(kHTMLWithPageSizeCss);
+
+ // Fill in some dummy values.
+ DictionaryValue dict;
+ CreatePrintSettingsDictionary(&dict);
+ dict.SetBoolean(printing::kSettingPrintToPDF, false);
+ dict.SetInteger(printing::kSettingMarginsType, printing::DEFAULT_MARGINS);
+ OnPrintPreview(dict);
+
+ EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
+ VerifyDefaultPageLayout(288, 288, 252, 252, 162, 162, true);
+ VerifyPrintPreviewCancelled(false);
+ VerifyPrintPreviewFailed(false);
+ VerifyPrintPreviewGenerated(true);
+}
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.
+
// Test to verify that complete metafile is generated for a subset of pages
// without creating draft pages.
TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) {
« 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