Index: chrome/renderer/printing/print_web_view_helper_browsertest.cc |
diff --git a/chrome/renderer/printing/print_web_view_helper_browsertest.cc b/chrome/renderer/printing/print_web_view_helper_browsertest.cc |
index aac7f4391d6ad1cd80ac0b7f49e3f9301ee41aa7..9db9ac47a7b5e89b4175642ec4a2f9b7e6a4da12 100644 |
--- a/chrome/renderer/printing/print_web_view_helper_browsertest.cc |
+++ b/chrome/renderer/printing/print_web_view_helper_browsertest.cc |
@@ -34,13 +34,14 @@ namespace { |
// A simple web page. |
const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>"; |
+#if !defined(OS_CHROMEOS) |
+ |
// A simple webpage with a button to print itself with. |
const char kPrintOnUserAction[] = |
"<body>" |
" <button id=\"print\" onclick=\"window.print();\">Hello World!</button>" |
"</body>"; |
-#if !defined(OS_CHROMEOS) |
// HTML with 3 pages. |
const char kMultipageHTML[] = |
"<html><head><style>" |
@@ -192,6 +193,14 @@ class PrintWebViewHelperTestBase : public ChromeRenderViewTest { |
ProcessPendingMessages(); |
} |
+ void VerifyPreviewRequest(bool requested) { |
+ const IPC::Message* print_msg = |
+ render_thread_->sink().GetUniqueMessageMatching( |
+ PrintHostMsg_SetupScriptedPrintPreview::ID); |
+ bool did_print_msg = (NULL != print_msg); |
+ ASSERT_EQ(requested, did_print_msg); |
+ } |
+ |
void OnPrintPreview(const base::DictionaryValue& dict) { |
PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); |
print_web_view_helper->OnInitiatePrintPreview(false); |
@@ -234,89 +243,6 @@ TEST_F(PrintWebViewHelperTest, OnPrintPages) { |
VerifyPagesPrinted(true); |
} |
-// Duplicate of OnPrintPagesTest only using javascript to print. |
-TEST_F(PrintWebViewHelperTest, PrintWithJavascript) { |
- PrintWithJavaScript(); |
- |
- VerifyPageCount(1); |
- VerifyPagesPrinted(true); |
-} |
- |
-// Tests that the renderer blocks window.print() calls if they occur too |
-// frequently. |
-TEST_F(PrintWebViewHelperTest, BlockScriptInitiatedPrinting) { |
- // Pretend user will cancel printing. |
- chrome_render_thread_->set_print_dialog_user_response(false); |
- // Try to print with window.print() a few times. |
- PrintWithJavaScript(); |
- PrintWithJavaScript(); |
- PrintWithJavaScript(); |
- VerifyPagesPrinted(false); |
- |
- // Pretend user will print. (but printing is blocked.) |
- chrome_render_thread_->set_print_dialog_user_response(true); |
- PrintWithJavaScript(); |
- VerifyPagesPrinted(false); |
- |
- // Unblock script initiated printing and verify printing works. |
- PrintWebViewHelper::Get(view_)->ResetScriptedPrintCount(); |
- chrome_render_thread_->printer()->ResetPrinter(); |
- PrintWithJavaScript(); |
- VerifyPageCount(1); |
- VerifyPagesPrinted(true); |
-} |
- |
-// Tests that the renderer always allows window.print() calls if they are user |
-// initiated. |
-TEST_F(PrintWebViewHelperTest, AllowUserOriginatedPrinting) { |
- // Pretend user will cancel printing. |
- chrome_render_thread_->set_print_dialog_user_response(false); |
- // Try to print with window.print() a few times. |
- PrintWithJavaScript(); |
- PrintWithJavaScript(); |
- PrintWithJavaScript(); |
- VerifyPagesPrinted(false); |
- |
- // Pretend user will print. (but printing is blocked.) |
- chrome_render_thread_->set_print_dialog_user_response(true); |
- PrintWithJavaScript(); |
- VerifyPagesPrinted(false); |
- |
- // Try again as if user initiated, without resetting the print count. |
- chrome_render_thread_->printer()->ResetPrinter(); |
- LoadHTML(kPrintOnUserAction); |
- gfx::Size new_size(200, 100); |
- Resize(new_size, gfx::Rect(), false); |
- |
- gfx::Rect bounds = GetElementBounds("print"); |
- EXPECT_FALSE(bounds.IsEmpty()); |
- blink::WebMouseEvent mouse_event; |
- mouse_event.type = blink::WebInputEvent::MouseDown; |
- mouse_event.button = blink::WebMouseEvent::ButtonLeft; |
- mouse_event.x = bounds.CenterPoint().x(); |
- mouse_event.y = bounds.CenterPoint().y(); |
- mouse_event.clickCount = 1; |
- SendWebMouseEvent(mouse_event); |
- mouse_event.type = blink::WebInputEvent::MouseUp; |
- SendWebMouseEvent(mouse_event); |
- ProcessPendingMessages(); |
- |
- VerifyPageCount(1); |
- VerifyPagesPrinted(true); |
-} |
- |
-TEST_F(PrintWebViewHelperTest, BlockScriptInitiatedPrintingFromPopup) { |
- PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); |
- print_web_view_helper->SetScriptedPrintBlocked(true); |
- PrintWithJavaScript(); |
- VerifyPagesPrinted(false); |
- |
- print_web_view_helper->SetScriptedPrintBlocked(false); |
- PrintWithJavaScript(); |
- VerifyPageCount(1); |
- VerifyPagesPrinted(true); |
-} |
- |
#if (defined(OS_WIN) && !WIN_PDF_METAFILE_FOR_PRINTING) || defined(OS_MACOSX) |
// TODO(estade): I don't think this test is worth porting to Linux. We will have |
// to rip out and replace most of the IPC code if we ever plan to improve |
@@ -466,14 +392,6 @@ class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase { |
PrintWebViewHelperPreviewTest() {} |
virtual ~PrintWebViewHelperPreviewTest() {} |
- virtual void SetUp() OVERRIDE { |
- // Append the print preview switch before creating the PrintWebViewHelper. |
- CommandLine::ForCurrentProcess()->AppendSwitch( |
- switches::kRendererPrintPreview); |
- |
- ChromeRenderViewTest::SetUp(); |
- } |
- |
protected: |
void VerifyPrintPreviewCancelled(bool did_cancel) { |
bool print_preview_cancelled = |
@@ -564,6 +482,37 @@ class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase { |
DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperPreviewTest); |
}; |
+TEST_F(PrintWebViewHelperPreviewTest, BlockScriptInitiatedPrinting) { |
+ PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); |
+ print_web_view_helper->SetScriptedPrintBlocked(true); |
+ PrintWithJavaScript(); |
+ VerifyPreviewRequest(false); |
+ |
+ print_web_view_helper->SetScriptedPrintBlocked(false); |
+ PrintWithJavaScript(); |
+ VerifyPreviewRequest(true); |
+} |
+ |
+TEST_F(PrintWebViewHelperPreviewTest, PrintWithJavaScript) { |
+ LoadHTML(kPrintOnUserAction); |
+ gfx::Size new_size(200, 100); |
+ Resize(new_size, gfx::Rect(), false); |
+ |
+ gfx::Rect bounds = GetElementBounds("print"); |
+ EXPECT_FALSE(bounds.IsEmpty()); |
+ blink::WebMouseEvent mouse_event; |
+ mouse_event.type = blink::WebInputEvent::MouseDown; |
+ mouse_event.button = blink::WebMouseEvent::ButtonLeft; |
+ mouse_event.x = bounds.CenterPoint().x(); |
+ mouse_event.y = bounds.CenterPoint().y(); |
+ mouse_event.clickCount = 1; |
+ SendWebMouseEvent(mouse_event); |
+ mouse_event.type = blink::WebInputEvent::MouseUp; |
+ SendWebMouseEvent(mouse_event); |
+ |
+ VerifyPreviewRequest(true); |
+} |
+ |
// Tests that print preview work and sending and receiving messages through |
// that channel all works. |
TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreview) { |
@@ -964,43 +913,4 @@ TEST_F(PrintWebViewHelperPreviewTest, |
#endif // !defined(OS_CHROMEOS) |
-class PrintWebViewHelperKioskTest : public PrintWebViewHelperTestBase { |
- public: |
- PrintWebViewHelperKioskTest() {} |
- virtual ~PrintWebViewHelperKioskTest() {} |
- |
- virtual void SetUp() OVERRIDE { |
- // Append the throttling disable switch before creating the |
- // PrintWebViewHelper. |
- CommandLine::ForCurrentProcess()->AppendSwitch( |
- switches::kDisableScriptedPrintThrottling); |
- |
- ChromeRenderViewTest::SetUp(); |
- } |
- |
- protected: |
- DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperKioskTest); |
-}; |
- |
-// Tests that the switch overrides the throttling that blocks window.print() |
-// calls if they occur too frequently. Compare with |
-// PrintWebViewHelperTest.BlockScriptInitiatedPrinting above. |
-TEST_F(PrintWebViewHelperKioskTest, DontBlockScriptInitiatedPrinting) { |
- // Pretend user will cancel printing. |
- chrome_render_thread_->set_print_dialog_user_response(false); |
- // Try to print with window.print() a few times. |
- PrintWithJavaScript(); |
- chrome_render_thread_->printer()->ResetPrinter(); |
- PrintWithJavaScript(); |
- chrome_render_thread_->printer()->ResetPrinter(); |
- PrintWithJavaScript(); |
- chrome_render_thread_->printer()->ResetPrinter(); |
- VerifyPagesPrinted(false); |
- |
- // Pretend user will print, should not be throttled. |
- chrome_render_thread_->set_print_dialog_user_response(true); |
- PrintWithJavaScript(); |
- VerifyPagesPrinted(true); |
-} |
- |
} // namespace printing |