15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/run_loop.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/print_messages.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/renderer/printing/mock_printer.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/renderer/printing/print_web_view_helper.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/chrome_render_view_test.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ipc/ipc_listener.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "printing/print_job_constants.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h" 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/WebKit/public/web/WebLocalFrame.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebRange.h" 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "printing/image.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFrame; 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochusing blink::WebLocalFrame; 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace printing { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A simple web page. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>"; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// A simple webpage with a button to print itself with. 388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)const char kPrintOnUserAction[] = 398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "<body>" 408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) " <button id=\"print\" onclick=\"window.print();\">Hello World!</button>" 418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "</body>"; 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_CHROMEOS) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// HTML with 3 pages. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kMultipageHTML[] = 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<html><head><style>" 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ".break { page-break-after: always; }" 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "</style></head>" 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<body>" 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<div class='break'>page1</div>" 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<div class='break'>page2</div>" 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "<div>page3</div>" 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "</body></html>"; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A simple web page with print page size css. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHTMLWithPageSizeCss[] = 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head><style>" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "@media print {" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " @page {" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " size: 4in 4in;" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</style></head>" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body>Lorem Ipsum:" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</body></html>"; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A simple web page with print page layout css. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHTMLWithLandscapePageCss[] = 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head><style>" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "@media print {" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " @page {" 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " size: landscape;" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</style></head>" 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body>Lorem Ipsum:" 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</body></html>"; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A longer web page. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kLongPageHTML[] = 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body><img src=\"\" width=10 height=10000 /></body>"; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A web page to simulate the print preview page. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPrintPreviewHTML[] = 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body><p id=\"pdf-viewer\">Hello World!</p></body>"; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void CreatePrintSettingsDictionary(base::DictionaryValue* dict) { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kSettingLandscape, false); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kSettingCollate, false); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetInteger(kSettingColor, GRAY); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kSettingPrintToPDF, true); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetInteger(kSettingDuplexMode, SIMPLEX); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetInteger(kSettingCopies, 1); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetString(kSettingDeviceName, "dummy"); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetInteger(kPreviewUIID, 4); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetInteger(kPreviewRequestID, 12345); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kIsFirstRequest, true); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetInteger(kSettingMarginsType, DEFAULT_MARGINS); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kSettingPreviewModifiable, false); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kSettingHeaderFooterEnabled, false); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kSettingGenerateDraftData, true); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kSettingShouldPrintBackgrounds, false); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict->SetBoolean(kSettingShouldPrintSelectionOnly, false); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // !defined(OS_CHROMEOS) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class DidPreviewPageListener : public IPC::Listener { 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) explicit DidPreviewPageListener(base::RunLoop* run_loop) 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : run_loop_(run_loop) {} 111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { 113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (message.type() == PrintHostMsg_MetafileReadyForPrinting::ID || 114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) message.type() == PrintHostMsg_PrintPreviewFailed::ID || 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) message.type() == PrintHostMsg_PrintPreviewCancelled::ID) 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) run_loop_->Quit(); 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return false; 118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private: 121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::RunLoop* const run_loop_; 122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DidPreviewPageListener); 123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrintWebViewHelperTestBase : public ChromeRenderViewTest { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintWebViewHelperTestBase() {} 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~PrintWebViewHelperTestBase() {} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PrintWithJavaScript() { 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExecuteJavaScript("window.print();"); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessPendingMessages(); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The renderer should be done calculating the number of rendered pages 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // according to the specified settings defined in the mock render thread. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the page count is correct. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyPageCount(int count) { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The DidGetPrintedPagesCount message isn't sent on ChromeOS. Right now we 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // always print all pages, and there are checks to that effect built into 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the print code. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message* page_cnt_msg = 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_thread_->sink().GetUniqueMessageMatching( 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidGetPrintedPagesCount::ID); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(page_cnt_msg); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidGetPrintedPagesCount::Param post_page_count_param; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidGetPrintedPagesCount::Read(page_cnt_msg, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &post_page_count_param); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(count, post_page_count_param.b); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The renderer should be done calculating the number of rendered pages 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // according to the specified settings defined in the mock render thread. 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify the page count is correct. 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void VerifyPreviewPageCount(int count) { 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const IPC::Message* page_cnt_msg = 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_thread_->sink().GetUniqueMessageMatching( 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintHostMsg_DidGetPreviewPageCount::ID); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(page_cnt_msg); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintHostMsg_DidGetPreviewPageCount::Param post_page_count_param; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintHostMsg_DidGetPreviewPageCount::Read(page_cnt_msg, 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &post_page_count_param); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(count, post_page_count_param.a.page_count); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verifies whether the pages printed or not. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyPagesPrinted(bool printed) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_print_msg = (render_thread_->sink().GetUniqueMessageMatching( 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_TempFileForPrintingWritten::ID) != NULL); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(printed, did_print_msg); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message* print_msg = 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_thread_->sink().GetUniqueMessageMatching( 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidPrintPage::ID); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_print_msg = (NULL != print_msg); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(printed, did_print_msg); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (printed) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidPrintPage::Param post_did_print_page_param; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidPrintPage::Read(print_msg, &post_did_print_page_param); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, post_did_print_page_param.a.page_number); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnPrintPages() { 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWebViewHelper::Get(view_)->OnPrintPages(); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessPendingMessages(); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnPrintPreview(const base::DictionaryValue& dict) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) print_web_view_helper->OnInitiatePrintPreview(false); 198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::RunLoop run_loop; 199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DidPreviewPageListener filter(&run_loop); 200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) render_thread_->sink().AddFilter(&filter); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_web_view_helper->OnPrintPreview(dict); 202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) run_loop.Run(); 203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) render_thread_->sink().RemoveFilter(&filter); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnPrintForPrintPreview(const base::DictionaryValue& dict) { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintWebViewHelper::Get(view_)->OnPrintForPrintPreview(dict); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessPendingMessages(); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperTestBase); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrintWebViewHelperTest : public PrintWebViewHelperTestBase { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintWebViewHelperTest() {} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PrintWebViewHelperTest() {} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewTest::SetUp(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperTest); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that printing pages work and sending and receiving messages through 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that channel all works. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperTest, OnPrintPages) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHelloWorldHTML); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnPrintPages(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageCount(1); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(true); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Duplicate of OnPrintPagesTest only using javascript to print. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperTest, PrintWithJavascript) { 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageCount(1); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(true); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the renderer blocks window.print() calls if they occur too 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// frequently. 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperTest, BlockScriptInitiatedPrinting) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pretend user will cancel printing. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->set_print_dialog_user_response(false); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to print with window.print() a few times. 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pretend user will print. (but printing is blocked.) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->set_print_dialog_user_response(true); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unblock script initiated printing and verify printing works. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintWebViewHelper::Get(view_)->ResetScriptedPrintCount(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->ResetPrinter(); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageCount(1); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(true); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the renderer always allows window.print() calls if they are user 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// initiated. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperTest, AllowUserOriginatedPrinting) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pretend user will cancel printing. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->set_print_dialog_user_response(false); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to print with window.print() a few times. 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pretend user will print. (but printing is blocked.) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->set_print_dialog_user_response(true); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try again as if user initiated, without resetting the print count. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->ResetPrinter(); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kPrintOnUserAction); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size new_size(200, 100); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Resize(new_size, gfx::Rect(), false); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds = GetElementBounds("print"); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bounds.IsEmpty()); 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent mouse_event; 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseDown; 295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.button = blink::WebMouseEvent::ButtonLeft; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = bounds.CenterPoint().x(); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = bounds.CenterPoint().y(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendWebMouseEvent(mouse_event); 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseUp; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendWebMouseEvent(mouse_event); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProcessPendingMessages(); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageCount(1); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(true); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperTest, BlockScriptInitiatedPrintingFromPopup) { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_web_view_helper->SetScriptedPrintBlocked(true); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_web_view_helper->SetScriptedPrintBlocked(false); 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageCount(1); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(true); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if (defined(OS_WIN) && !WIN_PDF_METAFILE_FOR_PRINTING) || defined(OS_MACOSX) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(estade): I don't think this test is worth porting to Linux. We will have 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to rip out and replace most of the IPC code if we ever plan to improve 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// printing, and the comment below by sverrir suggests that it doesn't do much 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for us anyway. 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperTest, PrintWithIframe) { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Document that populates an iframe. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char html[] = 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><body>Lorem Ipsum:" 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<iframe name=\"sub1\" id=\"sub1\"></iframe><script>" 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " document.write(frames['sub1'].name);" 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " frames['sub1'].document.write(" 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " '<p>Cras tempus ante eu felis semper luctus!</p>');" 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</script></body></html>"; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(html); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the frame and set it as the focused one. This should mean that that 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the printout should only contain the contents of that frame. 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFrame* sub1_frame = 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_->GetWebView()->findFrameByName(WebString::fromUTF8("sub1")); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sub1_frame); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_->GetWebView()->setFocusedFrame(sub1_frame); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(view_->GetWebView()->focusedFrame(), 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_->GetWebView()->mainFrame()); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initiate printing. 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnPrintPages(); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyPagesPrinted(true); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify output through MockPrinter. 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MockPrinter* printer(chrome_render_thread_->printer()); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, printer->GetPrintedPages()); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Image& image1(printer->GetPrintedPage(0)->image()); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(sverrir): Figure out a way to improve this test to actually print 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only the content of the iframe. Currently image1 will contain the full 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, image1.size().width()); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, image1.size().height()); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests if we can print a page and verify its results. 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test prints HTML pages into a pseudo printer and check their outputs, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// i.e. a simplified version of the PrintingLayoutTextTest UI test. 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test cases used in this test. 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TestPageData { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* page; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t printed_pages; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int width; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int height; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* checksum; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* file; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const TestPageData kTestPages[] = { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"<html>" 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<head>" 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<meta" 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " http-equiv=\"Content-Type\"" 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " content=\"text/html; charset=utf-8\"/>" 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<title>Test 1</title>" 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</head>" 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body style=\"background-color: white;\">" 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<p style=\"font-family: arial;\">Hello World!</p>" 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</body>", 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mac printing code compensates for the WebKit scale factor while generating 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the metafile, so we expect smaller pages. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, 600, 780, 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, 675, 900, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(OS_WIN) || defined(OS_MACOSX) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(estade): need to port MockPrinter to get this on Linux. This involves 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// hooking up Cairo to read a pdf stream, or accessing the cairo surface in the 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// metafile directly. 406cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Same for printing via PDF on Windows. 407cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if (defined(OS_WIN) && !WIN_PDF_METAFILE_FOR_PRINTING) || defined(OS_MACOSX) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperTest, PrintLayoutTest) { 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool baseline = false; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(chrome_render_thread_->printer() != NULL); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kTestPages); ++i) { 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load an HTML page and print it. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kTestPages[i].page); 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnPrintPages(); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyPagesPrinted(true); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // MockRenderThread::Send() just calls MockRenderThread::OnReceived(). 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // So, all IPC messages sent in the above RenderView::OnPrintPages() call 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has been handled by the MockPrinter object, i.e. this printing job 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has been already finished. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // So, we can start checking the output pages of this printing job. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieve the number of pages actually printed. 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t pages = chrome_render_thread_->printer()->GetPrintedPages(); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kTestPages[i].printed_pages, pages); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieve the width and height of the output page. 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int width = chrome_render_thread_->printer()->GetWidth(0); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int height = chrome_render_thread_->printer()->GetHeight(0); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check with margin for error. This has been failing with a one pixel 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // offset on our buildbot. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kErrorMargin = 5; // 5% 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(kTestPages[i].width * (100 + kErrorMargin) / 100, width); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(kTestPages[i].width * (100 - kErrorMargin) / 100, width); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(kTestPages[i].height * (100 + kErrorMargin) / 100, height); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(kTestPages[i].height* (100 - kErrorMargin) / 100, height); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieve the checksum of the bitmap data from the pseudo printer and 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // compare it with the expected result. 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string bitmap_actual; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->GetBitmapChecksum(0, &bitmap_actual)); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (kTestPages[i].checksum) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kTestPages[i].checksum, bitmap_actual); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (baseline) { 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Save the source data and the bitmap data into temporary files to 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // create base-line results. 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath source_path; 451a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::CreateTemporaryFile(&source_path); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->SaveSource(0, source_path); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath bitmap_path; 455a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::CreateTemporaryFile(&bitmap_path); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->SaveBitmap(0, bitmap_path); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These print preview tests do not work on Chrome OS yet. 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase { 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintWebViewHelperPreviewTest() {} 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PrintWebViewHelperPreviewTest() {} 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Append the print preview switch before creating the PrintWebViewHelper. 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kRendererPrintPreview); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewTest::SetUp(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyPrintPreviewCancelled(bool did_cancel) { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool print_preview_cancelled = 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (render_thread_->sink().GetUniqueMessageMatching( 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_PrintPreviewCancelled::ID) != NULL); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(did_cancel, print_preview_cancelled); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyPrintPreviewFailed(bool did_fail) { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool print_preview_failed = 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (render_thread_->sink().GetUniqueMessageMatching( 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_PrintPreviewFailed::ID) != NULL); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(did_fail, print_preview_failed); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyPrintPreviewGenerated(bool generated_preview) { 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message* preview_msg = 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_thread_->sink().GetUniqueMessageMatching( 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_MetafileReadyForPrinting::ID); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_get_preview_msg = (NULL != preview_msg); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(generated_preview, did_get_preview_msg); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (did_get_preview_msg) { 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_MetafileReadyForPrinting::Param preview_param; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_MetafileReadyForPrinting::Read(preview_msg, &preview_param); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, preview_param.a.document_cookie); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0, preview_param.a.expected_pages_count); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0U, preview_param.a.data_size); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyPrintFailed(bool did_fail) { 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool print_failed = (render_thread_->sink().GetUniqueMessageMatching( 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_PrintingFailed::ID) != NULL); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(did_fail, print_failed); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyPrintPreviewInvalidPrinterSettings(bool settings_invalid) { 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool print_preview_invalid_printer_settings = 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (render_thread_->sink().GetUniqueMessageMatching( 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_PrintPreviewInvalidPrinterSettings::ID) != NULL); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(settings_invalid, print_preview_invalid_printer_settings); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |page_number| is 0-based. 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyDidPreviewPage(bool generate_draft_pages, int page_number) { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool msg_found = false; 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t msg_count = render_thread_->sink().message_count(); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < msg_count; ++i) { 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message* msg = render_thread_->sink().GetMessageAt(i); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (msg->type() == PrintHostMsg_DidPreviewPage::ID) { 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidPreviewPage::Param page_param; 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidPreviewPage::Read(msg, &page_param); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_param.a.page_number == page_number) { 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg_found = true; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (generate_draft_pages) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(0U, page_param.a.data_size); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, page_param.a.data_size); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(generate_draft_pages, msg_found); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VerifyDefaultPageLayout(int content_width, int content_height, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int margin_top, int margin_bottom, 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int margin_left, int margin_right, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool page_has_print_css) { 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message* default_page_layout_msg = 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_thread_->sink().GetUniqueMessageMatching( 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidGetDefaultPageLayout::ID); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_get_default_page_layout_msg = (NULL != default_page_layout_msg); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (did_get_default_page_layout_msg) { 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidGetDefaultPageLayout::Param param; 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHostMsg_DidGetDefaultPageLayout::Read(default_page_layout_msg, 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ¶m); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(content_width, param.a.content_width); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(content_height, param.a.content_height); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(margin_top, param.a.margin_top); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(margin_right, param.a.margin_right); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(margin_left, param.a.margin_left); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(margin_bottom, param.a.margin_bottom); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(page_has_print_css, param.c); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperPreviewTest); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that print preview work and sending and receiving messages through 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that channel all works. 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreview) { 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHelloWorldHTML); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 5737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyDefaultPageLayout(540, 720, 36, 36, 36, 36, false); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(true); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewHTMLWithPageMarginsCss) { 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A simple web page with print margins css. 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kHTMLWithPageMarginsCss[] = 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head><style>" 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "@media print {" 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " @page {" 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " margin: 3in 1in 2in 0.3in;" 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}" 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</style></head>" 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body>Lorem Ipsum:" 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</body></html>"; 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHTMLWithPageMarginsCss); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 6007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingPrintToPDF, false); 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyDefaultPageLayout(519, 432, 216, 144, 21, 72, false); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(true); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test to verify that print preview ignores print media css when non-default 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// margin is selected. 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, NonDefaultMarginsSelectedIgnorePrintCss) { 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHTMLWithPageSizeCss); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 6207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingPrintToPDF, false); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetInteger(kSettingMarginsType, NO_MARGINS); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyDefaultPageLayout(612, 792, 0, 0, 0, 0, true); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(true); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test to verify that print preview honor print media size css when 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PRINT_TO_PDF is selected and doesn't fit to printer default paper size. 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, PrintToPDFSelectedHonorPrintCss) { 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHTMLWithPageSizeCss); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 6407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingPrintToPDF, true); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetInteger(kSettingMarginsType, 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PRINTABLE_AREA_MARGINS); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Since PRINT_TO_PDF is selected, pdf page size is equal to print media page 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // size. 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyDefaultPageLayout(252, 252, 18, 18, 18, 18, true); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test to verify that print preview honor print margin css when PRINT_TO_PDF 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is selected and doesn't fit to printer default paper size. 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, PrintToPDFSelectedHonorPageMarginsCss) { 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A simple web page with print margins css. 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kHTMLWithPageCss[] = 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head><style>" 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "@media print {" 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " @page {" 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " margin: 3in 1in 2in 0.3in;" 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " size: 14in 14in;" 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}" 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</style></head>" 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body>Lorem Ipsum:" 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</body></html>"; 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHTMLWithPageCss); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 6737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingPrintToPDF, true); 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Since PRINT_TO_PDF is selected, pdf page size is equal to print media page 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // size. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyDefaultPageLayout(915, 648, 216, 144, 21, 72, true); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test to verify that print preview workflow center the html page contents to 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fit the page size. 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewCenterToFitPage) { 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHTMLWithPageSizeCss); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 6937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingPrintToPDF, false); 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 7004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) VerifyDefaultPageLayout(216, 216, 288, 288, 198, 198, true); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(true); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test to verify that print preview workflow scale the html page contents to 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fit the page size. 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewShrinkToFitPage) { 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A simple web page with print margins css. 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kHTMLWithPageCss[] = 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head><style>" 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "@media print {" 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " @page {" 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " size: 15in 17in;" 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " }" 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}" 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</style></head>" 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body>Lorem Ipsum:" 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</body></html>"; 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHTMLWithPageCss); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 7237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingPrintToPDF, false); 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 7304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) VerifyDefaultPageLayout(571, 652, 69, 71, 20, 21, true); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test to verify that print preview workflow honor the orientation settings 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// specified in css. 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, PrintPreviewHonorsOrientationCss) { 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHTMLWithLandscapePageCss); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 7417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingPrintToPDF, false); 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetInteger(kSettingMarginsType, NO_MARGINS); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyDefaultPageLayout(792, 612, 0, 0, 0, 0, true); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test to verify that print preview workflow honors the orientation settings 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// specified in css when PRINT_TO_PDF is selected. 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, PrintToPDFSelectedHonorOrientationCss) { 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHTMLWithLandscapePageCss); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 7597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingPrintToPDF, true); 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetInteger(kSettingMarginsType, CUSTOM_MARGINS); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyDefaultPageLayout(748, 568, 21, 23, 21, 23, true); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test to verify that complete metafile is generated for a subset of pages 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// without creating draft pages. 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) { 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadHTML(kMultipageHTML); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 7777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a page range and update the dictionary to generate only the complete 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // metafile with the selected pages. Page numbers used in the dictionary 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are 1-based. 7837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue* page_range = new base::DictionaryValue(); 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_range->SetInteger(kSettingPageRangeFrom, 2); 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_range->SetInteger(kSettingPageRangeTo, 3); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::ListValue* page_range_array = new base::ListValue(); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_range_array->Append(page_range); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.Set(kSettingPageRange, page_range_array); 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingGenerateDraftData, false); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyDidPreviewPage(false, 0); 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyDidPreviewPage(false, 1); 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyDidPreviewPage(false, 2); 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyPreviewPageCount(3); 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyPrintPreviewCancelled(false); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyPrintPreviewFailed(false); 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyPrintPreviewGenerated(true); 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyPagesPrinted(false); 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test to verify that preview generated only for one page. 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedText) { 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadHTML(kMultipageHTML); 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetMainFrame()->selectRange( 809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebRange::fromDocumentRange(GetMainFrame(), 1, 3)); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fill in some dummy values. 8127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreatePrintSettingsDictionary(&dict); 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dict.SetBoolean(kSettingShouldPrintSelectionOnly, true); 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnPrintPreview(dict); 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VerifyPreviewPageCount(1); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(true); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that print preview fails and receiving error messages through 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that channel all works. 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewFail) { 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kHelloWorldHTML); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An empty dictionary should fail. 8317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue empty_dict; 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(empty_dict); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(false); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(true); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(false); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that cancelling print preview works. 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewCancel) { 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kLongPageHTML); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kCancelPage = 3; 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->set_print_preview_cancel_page_number(kCancelPage); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 8487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kCancelPage, 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->print_preview_pages_remaining()); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewCancelled(true); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(false); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that printing from print preview works and sending and receiving 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// messages through that channel all works. 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, OnPrintForPrintPreview) { 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kPrintPreviewHTML); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 8667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintForPrintPreview(dict); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintFailed(false); 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(true); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that printing from print preview fails and receiving error messages 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// through that channel all works. 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, OnPrintForPrintPreviewFail) { 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kPrintPreviewHTML); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An empty dictionary should fail. 8807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue empty_dict; 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintForPrintPreview(empty_dict); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that when default printer has invalid printer settings, print preview 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// receives error message. 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreviewUsingInvalidPrinterSettings) { 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kPrintPreviewHTML); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set mock printer to provide invalid settings. 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->UseInvalidSettings(); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 8967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have received invalid printer settings from |printer_|. 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewInvalidPrinterSettings(true); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It should receive the invalid printer settings message only. 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(false); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that when the selected printer has invalid page settings, print preview 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// receives error message. 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreviewUsingInvalidPageSize) { 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kPrintPreviewHTML); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->UseInvalidPageSize(); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewInvalidPrinterSettings(true); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It should receive the invalid printer settings message only. 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(false); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that when the selected printer has invalid content settings, print 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// preview receives error message. 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreviewUsingInvalidContentSize) { 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kPrintPreviewHTML); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->UseInvalidContentSize(); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintPreview(dict); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewInvalidPrinterSettings(true); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It should receive the invalid printer settings message only. 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewFailed(false); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintPreviewGenerated(false); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperPreviewTest, 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintForPrintPreviewUsingInvalidPrinterSettings) { 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadHTML(kPrintPreviewHTML); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set mock printer to provide invalid settings. 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->UseInvalidSettings(); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill in some dummy values. 9577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::DictionaryValue dict; 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreatePrintSettingsDictionary(&dict); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPrintForPrintPreview(dict); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPrintFailed(true); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrintWebViewHelperKioskTest : public PrintWebViewHelperTestBase { 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintWebViewHelperKioskTest() {} 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PrintWebViewHelperKioskTest() {} 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Append the throttling disable switch before creating the 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PrintWebViewHelper. 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kDisableScriptedPrintThrottling); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewTest::SetUp(); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperKioskTest); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the switch overrides the throttling that blocks window.print() 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// calls if they occur too frequently. Compare with 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PrintWebViewHelperTest.BlockScriptInitiatedPrinting above. 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintWebViewHelperKioskTest, DontBlockScriptInitiatedPrinting) { 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pretend user will cancel printing. 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->set_print_dialog_user_response(false); 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to print with window.print() a few times. 9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->ResetPrinter(); 9942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->ResetPrinter(); 9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->printer()->ResetPrinter(); 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(false); 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pretend user will print, should not be throttled. 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_render_thread_->set_print_dialog_user_response(true); 10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintWithJavaScript(); 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPagesPrinted(true); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace printing 1007