Index: chrome/renderer/printing/print_web_view_helper_browsertest.cc |
diff --git a/chrome/renderer/printing/print_web_view_helper_browsertest.cc b/chrome/renderer/printing/print_web_view_helper_browsertest.cc |
index 07cc657083ed3ab5403f6da62eee4ca0574dbefa..acd929fbab081bc7f121d3daa1446ba6bb6e0f95 100644 |
--- a/chrome/renderer/printing/print_web_view_helper_browsertest.cc |
+++ b/chrome/renderer/printing/print_web_view_helper_browsertest.cc |
@@ -13,6 +13,7 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebRange.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
#if defined(OS_WIN) || defined(OS_MACOSX) |
@@ -30,6 +31,17 @@ namespace { |
// A simple web page. |
const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>"; |
+// HTML with 3 pages. |
+const char kMultipageHTML[] = |
+ "<html><head><style>" |
+ ".break { page-break-after: always; }" |
+ "</style></head>" |
+ "<body>" |
+ "<div class='break'>page1</div>" |
+ "<div class='break'>page2</div>" |
+ "<div>page3</div>" |
+ "</body></html>"; |
+ |
// A simple web page with print page size css. |
const char kHTMLWithPageSizeCss[] = |
"<html><head><style>" |
@@ -87,6 +99,8 @@ void CreatePrintSettingsDictionary(DictionaryValue* dict) { |
dict->SetBoolean(kSettingPreviewModifiable, false); |
dict->SetBoolean(kSettingHeaderFooterEnabled, false); |
dict->SetBoolean(kSettingGenerateDraftData, true); |
+ dict->SetBoolean(kSettingShouldPrintBackgrounds, false); |
+ dict->SetBoolean(kSettingShouldPrintSelectionOnly, false); |
} |
} // namespace |
@@ -101,7 +115,6 @@ class PrintWebViewHelperTestBase : public ChromeRenderViewTest { |
// according to the specified settings defined in the mock render thread. |
// Verify the page count is correct. |
void VerifyPageCount(int count) { |
- ProcessPendingMessages(); |
#if defined(OS_CHROMEOS) |
// The DidGetPrintedPagesCount message isn't sent on ChromeOS. Right now we |
// always print all pages, and there are checks to that effect built into |
@@ -118,9 +131,22 @@ class PrintWebViewHelperTestBase : public ChromeRenderViewTest { |
#endif // defined(OS_CHROMEOS) |
} |
+ // The renderer should be done calculating the number of rendered pages |
+ // according to the specified settings defined in the mock render thread. |
+ // Verify the page count is correct. |
+ void VerifyPreviewPageCount(int count) { |
+ const IPC::Message* page_cnt_msg = |
+ render_thread_->sink().GetUniqueMessageMatching( |
+ PrintHostMsg_DidGetPreviewPageCount::ID); |
+ ASSERT_TRUE(page_cnt_msg); |
+ PrintHostMsg_DidGetPreviewPageCount::Param post_page_count_param; |
+ PrintHostMsg_DidGetPreviewPageCount::Read(page_cnt_msg, |
+ &post_page_count_param); |
+ EXPECT_EQ(count, post_page_count_param.a.page_count); |
+ } |
+ |
// Verifies whether the pages printed or not. |
void VerifyPagesPrinted(bool printed) { |
- ProcessPendingMessages(); |
#if defined(OS_CHROMEOS) |
bool did_print_msg = (render_thread_->sink().GetUniqueMessageMatching( |
PrintHostMsg_TempFileForPrintingWritten::ID) != NULL); |
@@ -138,15 +164,21 @@ class PrintWebViewHelperTestBase : public ChromeRenderViewTest { |
} |
#endif // defined(OS_CHROMEOS) |
} |
+ void OnPrintPages() { |
+ PrintWebViewHelper::Get(view_)->OnPrintPages(); |
+ ProcessPendingMessages(); |
+ } |
void OnPrintPreview(const DictionaryValue& dict) { |
PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); |
print_web_view_helper->OnInitiatePrintPreview(); |
print_web_view_helper->OnPrintPreview(dict); |
+ ProcessPendingMessages(); |
} |
void OnPrintForPrintPreview(const DictionaryValue& dict) { |
PrintWebViewHelper::Get(view_)->OnPrintForPrintPreview(dict); |
+ ProcessPendingMessages(); |
} |
DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperTestBase); |
@@ -169,7 +201,7 @@ class PrintWebViewHelperTest : public PrintWebViewHelperTestBase { |
// that channel all works. |
TEST_F(PrintWebViewHelperTest, OnPrintPages) { |
LoadHTML(kHelloWorldHTML); |
- PrintWebViewHelper::Get(view_)->OnPrintPages(); |
+ OnPrintPages(); |
VerifyPageCount(1); |
VerifyPagesPrinted(true); |
@@ -241,6 +273,7 @@ TEST_F(PrintWebViewHelperTest, AllowUserOriginatedPrinting) { |
SendWebMouseEvent(mouse_event); |
mouse_event.type = WebKit::WebInputEvent::MouseUp; |
SendWebMouseEvent(mouse_event); |
+ ProcessPendingMessages(); |
VerifyPageCount(1); |
VerifyPagesPrinted(true); |
@@ -285,7 +318,7 @@ TEST_F(PrintWebViewHelperTest, PrintWithIframe) { |
view_->GetWebView()->mainFrame()); |
// Initiate printing. |
- PrintWebViewHelper::Get(view_)->OnPrintPages(); |
+ OnPrintPages(); |
VerifyPagesPrinted(true); |
// Verify output through MockPrinter. |
@@ -350,7 +383,7 @@ TEST_F(PrintWebViewHelperTest, PrintLayoutTest) { |
for (size_t i = 0; i < arraysize(kTestPages); ++i) { |
// Load an HTML page and print it. |
LoadHTML(kTestPages[i].page); |
- PrintWebViewHelper::Get(view_)->OnPrintPages(); |
+ OnPrintPages(); |
VerifyPagesPrinted(true); |
// MockRenderThread::Send() just calls MockRenderThread::OnReceived(). |
@@ -443,7 +476,6 @@ class PrintWebViewHelperPreviewTest : public PrintWebViewHelperTestBase { |
} |
void VerifyPrintFailed(bool did_fail) { |
- ProcessPendingMessages(); |
bool print_failed = (render_thread_->sink().GetUniqueMessageMatching( |
PrintHostMsg_PrintingFailed::ID) != NULL); |
EXPECT_EQ(did_fail, print_failed); |
@@ -710,7 +742,7 @@ TEST_F(PrintWebViewHelperPreviewTest, PrintToPDFSelectedHonorOrientationCss) { |
// Test to verify that complete metafile is generated for a subset of pages |
// without creating draft pages. |
TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) { |
- LoadHTML(kHelloWorldHTML); |
+ LoadHTML(kMultipageHTML); |
// Fill in some dummy values. |
DictionaryValue dict; |
@@ -720,8 +752,8 @@ TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) { |
// metafile with the selected pages. Page numbers used in the dictionary |
// are 1-based. |
DictionaryValue* page_range = new DictionaryValue(); |
- page_range->SetInteger(kSettingPageRangeFrom, 1); |
- page_range->SetInteger(kSettingPageRangeTo, 1); |
+ page_range->SetInteger(kSettingPageRangeFrom, 2); |
+ page_range->SetInteger(kSettingPageRangeTo, 3); |
ListValue* page_range_array = new ListValue(); |
page_range_array->Append(page_range); |
@@ -731,9 +763,30 @@ TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) { |
OnPrintPreview(dict); |
- // Verify that we did not create the draft metafile for the first page. |
VerifyDidPreviewPage(false, 0); |
+ VerifyDidPreviewPage(false, 1); |
+ VerifyDidPreviewPage(false, 2); |
+ VerifyPreviewPageCount(3); |
+ VerifyPrintPreviewCancelled(false); |
+ VerifyPrintPreviewFailed(false); |
+ VerifyPrintPreviewGenerated(true); |
+ VerifyPagesPrinted(false); |
+} |
+ |
+// Test to verify that preview generated only for one page. |
+TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedText) { |
+ LoadHTML(kMultipageHTML); |
+ GetMainFrame()->selectRange( |
+ WebKit::WebRange::fromDocumentRange(GetMainFrame(), 1, 3)); |
+ |
+ // Fill in some dummy values. |
+ DictionaryValue dict; |
+ CreatePrintSettingsDictionary(&dict); |
+ dict.SetBoolean(kSettingShouldPrintSelectionOnly, true); |
+ |
+ OnPrintPreview(dict); |
+ VerifyPreviewPageCount(1); |
VerifyPrintPreviewCancelled(false); |
VerifyPrintPreviewFailed(false); |
VerifyPrintPreviewGenerated(true); |