summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/print_web_view_helper_browsertest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/print_web_view_helper_browsertest.cc')
-rw-r--r--chrome/renderer/print_web_view_helper_browsertest.cc187
1 files changed, 186 insertions, 1 deletions
diff --git a/chrome/renderer/print_web_view_helper_browsertest.cc b/chrome/renderer/print_web_view_helper_browsertest.cc
index 2b72538..5d4610c 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 content_width, int content_height,
+ 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(content_width, param.a.content_width);
+ EXPECT_EQ(content_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,163 @@ 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 workflow center the html page contents to
+// fit the page size.
+TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewCenterToFitPage) {
+ 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);
+}
+
+// Test to verify that print preview workflow scale the html page contents to
+// fit the page size.
+TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewShrinkToFitPage) {
+ // A simple web page with print margins css.
+ const char kHTMLWithPageCss[] =
+ "<html><head><style>"
+ "@media print {"
+ " @page {"
+ " size: 15in 17in;"
+ " }"
+ "}"
+ "</style></head>"
+ "<body>Lorem Ipsum:"
+ "</body></html>";
+ LoadHTML(kHTMLWithPageCss);
+
+ // 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(576, 652, 69, 71, 18, 18, true);
+ VerifyPrintPreviewCancelled(false);
+ VerifyPrintPreviewFailed(false);
+}
+
// Test to verify that complete metafile is generated for a subset of pages
// without creating draft pages.
TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) {