Commit 39e5d590 authored by Lei Zhang's avatar Lei Zhang Committed by Commit Bot

Add more PrintRenderFrameHelperTests.

- PrintRenderFrameHelperTest.WindowPrintBeforePrintAfterPrint covers the
  regression in bug 912966 without Print Preview.
- PrintRenderFrameHelperPreviewTest.WindowPrintBeforePrintAfterPrint
  covers the regression in bug 912966 with Print Preview.
- PrintRenderFrameHelperPreviewTest.BasicBeforePrintAfterPrint is the
  equivalent to PrintRenderFrameHelperTest.BasicBeforePrintAfterPrint,
  but for Print Preview.
- Merge common code to avoid repeats.

BUG=912966

Change-Id: I80b0ef718e4f06e2e1bd858bd1c2a39028d4a6ec
Reviewed-on: https://chromium-review.googlesource.com/c/1371211
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: default avatarKent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#615624}
parent a2e98d8b
......@@ -51,6 +51,18 @@ namespace {
// A simple web page.
const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>";
// Web page used for testing onbeforeprint/onafterprint.
const char kBeforeAfterPrintHtml[] =
"<body>"
"<script>"
"var beforePrintCount = 0;"
"var afterPrintCount = 0;"
"window.onbeforeprint = () => { ++beforePrintCount; };"
"window.onafterprint = () => { ++afterPrintCount; };"
"</script>"
"<button id=\"print\" onclick=\"window.print();\">Hello World!</button>"
"</body>";
#if !defined(OS_CHROMEOS)
// A simple webpage with a button to print itself with.
const char kPrintOnUserAction[] =
......@@ -256,6 +268,10 @@ class PrintRenderFrameHelperTestBase : public content::RenderViewTest {
run_loop.Run();
render_thread_->sink().RemoveFilter(&filter);
}
void OnClosePrintPreviewDialog() {
GetPrintRenderFrameHelper()->OnClosePrintPreviewDialog();
}
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
PrintRenderFrameHelper* GetPrintRenderFrameHelper() {
......@@ -288,6 +304,36 @@ class PrintRenderFrameHelperTestBase : public content::RenderViewTest {
SendWebMouseEvent(mouse_event);
}
void ExpectNoBeforeNoAfterPrintEvent() {
int result;
ASSERT_TRUE(ExecuteJavaScriptAndReturnIntValue(
base::ASCIIToUTF16("beforePrintCount"), &result));
EXPECT_EQ(0, result) << "beforeprint event should not be dispatched.";
ASSERT_TRUE(ExecuteJavaScriptAndReturnIntValue(
base::ASCIIToUTF16("afterPrintCount"), &result));
EXPECT_EQ(0, result) << "afterprint event should not be dispatched.";
}
void ExpectOneBeforeNoAfterPrintEvent() {
int result;
ASSERT_TRUE(ExecuteJavaScriptAndReturnIntValue(
base::ASCIIToUTF16("beforePrintCount"), &result));
EXPECT_EQ(1, result) << "beforeprint event should be dispatched once.";
ASSERT_TRUE(ExecuteJavaScriptAndReturnIntValue(
base::ASCIIToUTF16("afterPrintCount"), &result));
EXPECT_EQ(0, result) << "afterprint event should not be dispatched.";
}
void ExpectOneBeforeOneAfterPrintEvent() {
int result;
ASSERT_TRUE(ExecuteJavaScriptAndReturnIntValue(
base::ASCIIToUTF16("beforePrintCount"), &result));
EXPECT_EQ(1, result) << "beforeprint event should be dispatched once.";
ASSERT_TRUE(ExecuteJavaScriptAndReturnIntValue(
base::ASCIIToUTF16("afterPrintCount"), &result));
EXPECT_EQ(1, result) << "afterprint event should be dispatched once.";
}
PrintMockRenderThread* print_render_thread() { return print_render_thread_; }
private:
......@@ -378,6 +424,18 @@ TEST_F(MAYBE_PrintRenderFrameHelperTest, PrintWithJavascript) {
VerifyPageCount(1);
VerifyPagesPrinted(true);
}
// Regression test for https://crbug.com/912966
TEST_F(MAYBE_PrintRenderFrameHelperTest, WindowPrintBeforePrintAfterPrint) {
LoadHTML(kBeforeAfterPrintHtml);
ExpectNoBeforeNoAfterPrintEvent();
PrintWithJavaScript();
VerifyPageCount(1);
VerifyPagesPrinted(true);
ExpectOneBeforeOneAfterPrintEvent();
}
#endif // !BUILDFLAG(ENABLE_PRINT_PREVIEW)
// Tests that printing pages work and sending and receiving messages through
......@@ -391,27 +449,14 @@ TEST_F(MAYBE_PrintRenderFrameHelperTest, OnPrintPages) {
}
TEST_F(MAYBE_PrintRenderFrameHelperTest, BasicBeforePrintAfterPrint) {
static const char kHtml[] =
"<body>Hello"
"<script>"
"var beforePrintCount = 0;"
"var afterPrintCount = 0;"
"window.onbeforeprint = () => { ++beforePrintCount; };"
"window.onafterprint = () => { ++afterPrintCount; };"
"</script>"
"</body>";
LoadHTML(kBeforeAfterPrintHtml);
ExpectNoBeforeNoAfterPrintEvent();
LoadHTML(kHtml);
OnPrintPages();
VerifyPageCount(1);
VerifyPagesPrinted(true);
int result;
ASSERT_TRUE(ExecuteJavaScriptAndReturnIntValue(
base::ASCIIToUTF16("beforePrintCount"), &result));
EXPECT_EQ(1, result) << "beforeprint event should be dispatched once.";
ASSERT_TRUE(ExecuteJavaScriptAndReturnIntValue(
base::ASCIIToUTF16("afterPrintCount"), &result));
EXPECT_EQ(1, result) << "afterprint event should be dispatched once.";
ExpectOneBeforeOneAfterPrintEvent();
}
TEST_F(MAYBE_PrintRenderFrameHelperTest, BasicBeforePrintAfterPrintSubFrame) {
......@@ -1275,6 +1320,46 @@ TEST_F(MAYBE_PrintRenderFrameHelperPreviewTest,
VerifyPrintPreviewGenerated(false);
}
TEST_F(MAYBE_PrintRenderFrameHelperPreviewTest, BasicBeforePrintAfterPrint) {
LoadHTML(kBeforeAfterPrintHtml);
ExpectNoBeforeNoAfterPrintEvent();
base::DictionaryValue dict;
CreatePrintSettingsDictionary(&dict);
OnPrintPreview(dict);
EXPECT_EQ(0, print_render_thread()->print_preview_pages_remaining());
VerifyDidPreviewPage(true, 0);
VerifyPreviewPageCount(1);
VerifyDefaultPageLayout(540, 720, 36, 36, 36, 36, false);
VerifyPrintPreviewCancelled(false);
VerifyPrintPreviewFailed(false);
VerifyPrintPreviewGenerated(true);
VerifyPagesPrinted(false);
ExpectOneBeforeNoAfterPrintEvent();
OnClosePrintPreviewDialog();
ExpectOneBeforeOneAfterPrintEvent();
}
// Regression test for https://crbug.com/912966
TEST_F(MAYBE_PrintRenderFrameHelperPreviewTest,
WindowPrintBeforePrintAfterPrint) {
LoadHTML(kBeforeAfterPrintHtml);
gfx::Size new_size(200, 100);
Resize(new_size, false);
ExpectNoBeforeNoAfterPrintEvent();
gfx::Rect bounds = GetElementBounds("print");
ClickMouseButton(bounds);
VerifyPreviewRequest(true);
ExpectOneBeforeNoAfterPrintEvent();
OnClosePrintPreviewDialog();
ExpectOneBeforeOneAfterPrintEvent();
}
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
#endif // !defined(OS_CHROMEOS)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment