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

Side by Side Diff: chrome/renderer/printing/print_web_view_helper_browsertest.cc

Issue 488853002: Removed --disable-print-preview switch and policy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "chrome/common/chrome_switches.h" 7 #include "chrome/common/chrome_switches.h"
8 #include "chrome/common/print_messages.h" 8 #include "chrome/common/print_messages.h"
9 #include "chrome/renderer/printing/mock_printer.h" 9 #include "chrome/renderer/printing/mock_printer.h"
10 #include "chrome/renderer/printing/print_web_view_helper.h" 10 #include "chrome/renderer/printing/print_web_view_helper.h"
(...skipping 16 matching lines...) Expand all
27 using blink::WebString; 27 using blink::WebString;
28 #endif 28 #endif
29 29
30 namespace printing { 30 namespace printing {
31 31
32 namespace { 32 namespace {
33 33
34 // A simple web page. 34 // A simple web page.
35 const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>"; 35 const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>";
36 36
37 #if !defined(OS_CHROMEOS)
38
37 // A simple webpage with a button to print itself with. 39 // A simple webpage with a button to print itself with.
38 const char kPrintOnUserAction[] = 40 const char kPrintOnUserAction[] =
39 "<body>" 41 "<body>"
40 " <button id=\"print\" onclick=\"window.print();\">Hello World!</button>" 42 " <button id=\"print\" onclick=\"window.print();\">Hello World!</button>"
41 "</body>"; 43 "</body>";
42 44
43 #if !defined(OS_CHROMEOS)
44 // HTML with 3 pages. 45 // HTML with 3 pages.
45 const char kMultipageHTML[] = 46 const char kMultipageHTML[] =
46 "<html><head><style>" 47 "<html><head><style>"
47 ".break { page-break-after: always; }" 48 ".break { page-break-after: always; }"
48 "</style></head>" 49 "</style></head>"
49 "<body>" 50 "<body>"
50 "<div class='break'>page1</div>" 51 "<div class='break'>page1</div>"
51 "<div class='break'>page2</div>" 52 "<div class='break'>page2</div>"
52 "<div>page3</div>" 53 "<div>page3</div>"
53 "</body></html>"; 54 "</body></html>";
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 PrintHostMsg_DidPrintPage::Read(print_msg, &post_did_print_page_param); 186 PrintHostMsg_DidPrintPage::Read(print_msg, &post_did_print_page_param);
186 EXPECT_EQ(0, post_did_print_page_param.a.page_number); 187 EXPECT_EQ(0, post_did_print_page_param.a.page_number);
187 } 188 }
188 #endif // defined(OS_CHROMEOS) 189 #endif // defined(OS_CHROMEOS)
189 } 190 }
190 void OnPrintPages() { 191 void OnPrintPages() {
191 PrintWebViewHelper::Get(view_)->OnPrintPages(); 192 PrintWebViewHelper::Get(view_)->OnPrintPages();
192 ProcessPendingMessages(); 193 ProcessPendingMessages();
193 } 194 }
194 195
196 void VerifyPreviewRequest(bool requested) {
197 const IPC::Message* print_msg =
198 render_thread_->sink().GetUniqueMessageMatching(
199 PrintHostMsg_SetupScriptedPrintPreview::ID);
200 bool did_print_msg = (NULL != print_msg);
201 ASSERT_EQ(requested, did_print_msg);
202 }
203
195 void OnPrintPreview(const base::DictionaryValue& dict) { 204 void OnPrintPreview(const base::DictionaryValue& dict) {
196 PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); 205 PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_);
197 print_web_view_helper->OnInitiatePrintPreview(false); 206 print_web_view_helper->OnInitiatePrintPreview(false);
198 base::RunLoop run_loop; 207 base::RunLoop run_loop;
199 DidPreviewPageListener filter(&run_loop); 208 DidPreviewPageListener filter(&run_loop);
200 render_thread_->sink().AddFilter(&filter); 209 render_thread_->sink().AddFilter(&filter);
201 print_web_view_helper->OnPrintPreview(dict); 210 print_web_view_helper->OnPrintPreview(dict);
202 run_loop.Run(); 211 run_loop.Run();
203 render_thread_->sink().RemoveFilter(&filter); 212 render_thread_->sink().RemoveFilter(&filter);
204 } 213 }
(...skipping 22 matching lines...) Expand all
227 // Tests that printing pages work and sending and receiving messages through 236 // Tests that printing pages work and sending and receiving messages through
228 // that channel all works. 237 // that channel all works.
229 TEST_F(PrintWebViewHelperTest, OnPrintPages) { 238 TEST_F(PrintWebViewHelperTest, OnPrintPages) {
230 LoadHTML(kHelloWorldHTML); 239 LoadHTML(kHelloWorldHTML);
231 OnPrintPages(); 240 OnPrintPages();
232 241
233 VerifyPageCount(1); 242 VerifyPageCount(1);
234 VerifyPagesPrinted(true); 243 VerifyPagesPrinted(true);
235 } 244 }
236 245
237 // Duplicate of OnPrintPagesTest only using javascript to print.
238 TEST_F(PrintWebViewHelperTest, PrintWithJavascript) {
239 PrintWithJavaScript();
240
241 VerifyPageCount(1);
242 VerifyPagesPrinted(true);
243 }
244
245 // Tests that the renderer blocks window.print() calls if they occur too
246 // frequently.
247 TEST_F(PrintWebViewHelperTest, BlockScriptInitiatedPrinting) {
248 // Pretend user will cancel printing.
249 chrome_render_thread_->set_print_dialog_user_response(false);
250 // Try to print with window.print() a few times.
251 PrintWithJavaScript();
252 PrintWithJavaScript();
253 PrintWithJavaScript();
254 VerifyPagesPrinted(false);
255
256 // Pretend user will print. (but printing is blocked.)
257 chrome_render_thread_->set_print_dialog_user_response(true);
258 PrintWithJavaScript();
259 VerifyPagesPrinted(false);
260
261 // Unblock script initiated printing and verify printing works.
262 PrintWebViewHelper::Get(view_)->ResetScriptedPrintCount();
263 chrome_render_thread_->printer()->ResetPrinter();
264 PrintWithJavaScript();
265 VerifyPageCount(1);
266 VerifyPagesPrinted(true);
267 }
268
269 // Tests that the renderer always allows window.print() calls if they are user
270 // initiated.
271 TEST_F(PrintWebViewHelperTest, AllowUserOriginatedPrinting) {
272 // Pretend user will cancel printing.
273 chrome_render_thread_->set_print_dialog_user_response(false);
274 // Try to print with window.print() a few times.
275 PrintWithJavaScript();
276 PrintWithJavaScript();
277 PrintWithJavaScript();
278 VerifyPagesPrinted(false);
279
280 // Pretend user will print. (but printing is blocked.)
281 chrome_render_thread_->set_print_dialog_user_response(true);
282 PrintWithJavaScript();
283 VerifyPagesPrinted(false);
284
285 // Try again as if user initiated, without resetting the print count.
286 chrome_render_thread_->printer()->ResetPrinter();
287 LoadHTML(kPrintOnUserAction);
288 gfx::Size new_size(200, 100);
289 Resize(new_size, gfx::Rect(), false);
290
291 gfx::Rect bounds = GetElementBounds("print");
292 EXPECT_FALSE(bounds.IsEmpty());
293 blink::WebMouseEvent mouse_event;
294 mouse_event.type = blink::WebInputEvent::MouseDown;
295 mouse_event.button = blink::WebMouseEvent::ButtonLeft;
296 mouse_event.x = bounds.CenterPoint().x();
297 mouse_event.y = bounds.CenterPoint().y();
298 mouse_event.clickCount = 1;
299 SendWebMouseEvent(mouse_event);
300 mouse_event.type = blink::WebInputEvent::MouseUp;
301 SendWebMouseEvent(mouse_event);
302 ProcessPendingMessages();
303
304 VerifyPageCount(1);
305 VerifyPagesPrinted(true);
306 }
307
308 TEST_F(PrintWebViewHelperTest, BlockScriptInitiatedPrintingFromPopup) {
309 PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_);
310 print_web_view_helper->SetScriptedPrintBlocked(true);
311 PrintWithJavaScript();
312 VerifyPagesPrinted(false);
313
314 print_web_view_helper->SetScriptedPrintBlocked(false);
315 PrintWithJavaScript();
316 VerifyPageCount(1);
317 VerifyPagesPrinted(true);
318 }
319
320 #if (defined(OS_WIN) && !WIN_PDF_METAFILE_FOR_PRINTING) || defined(OS_MACOSX) 246 #if (defined(OS_WIN) && !WIN_PDF_METAFILE_FOR_PRINTING) || defined(OS_MACOSX)
321 // TODO(estade): I don't think this test is worth porting to Linux. We will have 247 // TODO(estade): I don't think this test is worth porting to Linux. We will have
322 // to rip out and replace most of the IPC code if we ever plan to improve 248 // to rip out and replace most of the IPC code if we ever plan to improve
323 // printing, and the comment below by sverrir suggests that it doesn't do much 249 // printing, and the comment below by sverrir suggests that it doesn't do much
324 // for us anyway. 250 // for us anyway.
325 TEST_F(PrintWebViewHelperTest, PrintWithIframe) { 251 TEST_F(PrintWebViewHelperTest, PrintWithIframe) {
326 // Document that populates an iframe. 252 // Document that populates an iframe.
327 const char html[] = 253 const char html[] =
328 "<html><body>Lorem Ipsum:" 254 "<html><body>Lorem Ipsum:"
329 "<iframe name=\"sub1\" id=\"sub1\"></iframe><script>" 255 "<iframe name=\"sub1\" id=\"sub1\"></iframe><script>"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 } 385 }
460 #endif 386 #endif
461 387
462 // These print preview tests do not work on Chrome OS yet. 388 // These print preview tests do not work on Chrome OS yet.
463 #if !defined(OS_CHROMEOS) 389 #if !defined(OS_CHROMEOS)
464 class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase { 390 class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase {
465 public: 391 public:
466 PrintWebViewHelperPreviewTest() {} 392 PrintWebViewHelperPreviewTest() {}
467 virtual ~PrintWebViewHelperPreviewTest() {} 393 virtual ~PrintWebViewHelperPreviewTest() {}
468 394
469 virtual void SetUp() OVERRIDE {
470 // Append the print preview switch before creating the PrintWebViewHelper.
471 CommandLine::ForCurrentProcess()->AppendSwitch(
472 switches::kRendererPrintPreview);
473
474 ChromeRenderViewTest::SetUp();
475 }
476
477 protected: 395 protected:
478 void VerifyPrintPreviewCancelled(bool did_cancel) { 396 void VerifyPrintPreviewCancelled(bool did_cancel) {
479 bool print_preview_cancelled = 397 bool print_preview_cancelled =
480 (render_thread_->sink().GetUniqueMessageMatching( 398 (render_thread_->sink().GetUniqueMessageMatching(
481 PrintHostMsg_PrintPreviewCancelled::ID) != NULL); 399 PrintHostMsg_PrintPreviewCancelled::ID) != NULL);
482 EXPECT_EQ(did_cancel, print_preview_cancelled); 400 EXPECT_EQ(did_cancel, print_preview_cancelled);
483 } 401 }
484 402
485 void VerifyPrintPreviewFailed(bool did_fail) { 403 void VerifyPrintPreviewFailed(bool did_fail) {
486 bool print_preview_failed = 404 bool print_preview_failed =
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 EXPECT_EQ(margin_right, param.a.margin_right); 475 EXPECT_EQ(margin_right, param.a.margin_right);
558 EXPECT_EQ(margin_left, param.a.margin_left); 476 EXPECT_EQ(margin_left, param.a.margin_left);
559 EXPECT_EQ(margin_bottom, param.a.margin_bottom); 477 EXPECT_EQ(margin_bottom, param.a.margin_bottom);
560 EXPECT_EQ(page_has_print_css, param.c); 478 EXPECT_EQ(page_has_print_css, param.c);
561 } 479 }
562 } 480 }
563 481
564 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperPreviewTest); 482 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperPreviewTest);
565 }; 483 };
566 484
485 TEST_F(PrintWebViewHelperPreviewTest, BlockScriptInitiatedPrinting) {
486 PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_);
487 print_web_view_helper->SetScriptedPrintBlocked(true);
488 PrintWithJavaScript();
489 VerifyPreviewRequest(false);
490
491 print_web_view_helper->SetScriptedPrintBlocked(false);
492 PrintWithJavaScript();
493 VerifyPreviewRequest(true);
494 }
495
496 TEST_F(PrintWebViewHelperPreviewTest, PrintWithJavaScript) {
497 LoadHTML(kPrintOnUserAction);
498 gfx::Size new_size(200, 100);
499 Resize(new_size, gfx::Rect(), false);
500
501 gfx::Rect bounds = GetElementBounds("print");
502 EXPECT_FALSE(bounds.IsEmpty());
503 blink::WebMouseEvent mouse_event;
504 mouse_event.type = blink::WebInputEvent::MouseDown;
505 mouse_event.button = blink::WebMouseEvent::ButtonLeft;
506 mouse_event.x = bounds.CenterPoint().x();
507 mouse_event.y = bounds.CenterPoint().y();
508 mouse_event.clickCount = 1;
509 SendWebMouseEvent(mouse_event);
510 mouse_event.type = blink::WebInputEvent::MouseUp;
511 SendWebMouseEvent(mouse_event);
512
513 VerifyPreviewRequest(true);
514 }
515
567 // Tests that print preview work and sending and receiving messages through 516 // Tests that print preview work and sending and receiving messages through
568 // that channel all works. 517 // that channel all works.
569 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreview) { 518 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreview) {
570 LoadHTML(kHelloWorldHTML); 519 LoadHTML(kHelloWorldHTML);
571 520
572 // Fill in some dummy values. 521 // Fill in some dummy values.
573 base::DictionaryValue dict; 522 base::DictionaryValue dict;
574 CreatePrintSettingsDictionary(&dict); 523 CreatePrintSettingsDictionary(&dict);
575 OnPrintPreview(dict); 524 OnPrintPreview(dict);
576 525
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 base::DictionaryValue dict; 906 base::DictionaryValue dict;
958 CreatePrintSettingsDictionary(&dict); 907 CreatePrintSettingsDictionary(&dict);
959 OnPrintForPrintPreview(dict); 908 OnPrintForPrintPreview(dict);
960 909
961 VerifyPrintFailed(true); 910 VerifyPrintFailed(true);
962 VerifyPagesPrinted(false); 911 VerifyPagesPrinted(false);
963 } 912 }
964 913
965 #endif // !defined(OS_CHROMEOS) 914 #endif // !defined(OS_CHROMEOS)
966 915
967 class PrintWebViewHelperKioskTest : public PrintWebViewHelperTestBase {
968 public:
969 PrintWebViewHelperKioskTest() {}
970 virtual ~PrintWebViewHelperKioskTest() {}
971
972 virtual void SetUp() OVERRIDE {
973 // Append the throttling disable switch before creating the
974 // PrintWebViewHelper.
975 CommandLine::ForCurrentProcess()->AppendSwitch(
976 switches::kDisableScriptedPrintThrottling);
977
978 ChromeRenderViewTest::SetUp();
979 }
980
981 protected:
982 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperKioskTest);
983 };
984
985 // Tests that the switch overrides the throttling that blocks window.print()
986 // calls if they occur too frequently. Compare with
987 // PrintWebViewHelperTest.BlockScriptInitiatedPrinting above.
988 TEST_F(PrintWebViewHelperKioskTest, DontBlockScriptInitiatedPrinting) {
989 // Pretend user will cancel printing.
990 chrome_render_thread_->set_print_dialog_user_response(false);
991 // Try to print with window.print() a few times.
992 PrintWithJavaScript();
993 chrome_render_thread_->printer()->ResetPrinter();
994 PrintWithJavaScript();
995 chrome_render_thread_->printer()->ResetPrinter();
996 PrintWithJavaScript();
997 chrome_render_thread_->printer()->ResetPrinter();
998 VerifyPagesPrinted(false);
999
1000 // Pretend user will print, should not be throttled.
1001 chrome_render_thread_->set_print_dialog_user_response(true);
1002 PrintWithJavaScript();
1003 VerifyPagesPrinted(true);
1004 }
1005
1006 } // namespace printing 916 } // namespace printing
OLDNEW
« no previous file with comments | « chrome/renderer/printing/print_web_view_helper.cc ('k') | components/policy/resources/policy_templates.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698