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

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

Issue 12087005: Async frame preparation for Preview with support if selection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/command_line.h" 5 #include "base/command_line.h"
6 #include "chrome/common/chrome_switches.h" 6 #include "chrome/common/chrome_switches.h"
7 #include "chrome/common/print_messages.h" 7 #include "chrome/common/print_messages.h"
8 #include "chrome/renderer/mock_printer.h" 8 #include "chrome/renderer/mock_printer.h"
9 #include "chrome/renderer/printing/print_web_view_helper.h" 9 #include "chrome/renderer/printing/print_web_view_helper.h"
10 #include "chrome/test/base/chrome_render_view_test.h" 10 #include "chrome/test/base/chrome_render_view_test.h"
11 #include "content/public/renderer/render_view.h" 11 #include "content/public/renderer/render_view.h"
12 #include "printing/print_job_constants.h" 12 #include "printing/print_job_constants.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" 14 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRange.h"
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
17 18
18 #if defined(OS_WIN) || defined(OS_MACOSX) 19 #if defined(OS_WIN) || defined(OS_MACOSX)
19 #include "base/file_util.h" 20 #include "base/file_util.h"
20 #include "printing/image.h" 21 #include "printing/image.h"
21 22
22 using WebKit::WebFrame; 23 using WebKit::WebFrame;
23 using WebKit::WebString; 24 using WebKit::WebString;
24 #endif 25 #endif
25 26
26 namespace printing { 27 namespace printing {
27 28
28 namespace { 29 namespace {
29 30
30 // A simple web page. 31 // A simple web page.
31 const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>"; 32 const char kHelloWorldHTML[] = "<body><p>Hello World!</p></body>";
32 33
34 // HTML with 3 pages.
35 const char kMultipageHTML[] =
36 "<html><head><style>"
37 ".break { page-break-after: always; }"
38 "</style></head>"
39 "<body>"
40 "<div class='break'>page1</div>"
41 "<div class='break'>page2</div>"
42 "<div>page3</div>"
43 "</body></html>";
44
33 // A simple web page with print page size css. 45 // A simple web page with print page size css.
34 const char kHTMLWithPageSizeCss[] = 46 const char kHTMLWithPageSizeCss[] =
35 "<html><head><style>" 47 "<html><head><style>"
36 "@media print {" 48 "@media print {"
37 " @page {" 49 " @page {"
38 " size: 4in 4in;" 50 " size: 4in 4in;"
39 " }" 51 " }"
40 "}" 52 "}"
41 "</style></head>" 53 "</style></head>"
42 "<body>Lorem Ipsum:" 54 "<body>Lorem Ipsum:"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 dict->SetInteger(kSettingDuplexMode, SIMPLEX); 92 dict->SetInteger(kSettingDuplexMode, SIMPLEX);
81 dict->SetInteger(kSettingCopies, 1); 93 dict->SetInteger(kSettingCopies, 1);
82 dict->SetString(kSettingDeviceName, "dummy"); 94 dict->SetString(kSettingDeviceName, "dummy");
83 dict->SetInteger(kPreviewUIID, 4); 95 dict->SetInteger(kPreviewUIID, 4);
84 dict->SetInteger(kPreviewRequestID, 12345); 96 dict->SetInteger(kPreviewRequestID, 12345);
85 dict->SetBoolean(kIsFirstRequest, true); 97 dict->SetBoolean(kIsFirstRequest, true);
86 dict->SetInteger(kSettingMarginsType, DEFAULT_MARGINS); 98 dict->SetInteger(kSettingMarginsType, DEFAULT_MARGINS);
87 dict->SetBoolean(kSettingPreviewModifiable, false); 99 dict->SetBoolean(kSettingPreviewModifiable, false);
88 dict->SetBoolean(kSettingHeaderFooterEnabled, false); 100 dict->SetBoolean(kSettingHeaderFooterEnabled, false);
89 dict->SetBoolean(kSettingGenerateDraftData, true); 101 dict->SetBoolean(kSettingGenerateDraftData, true);
102 dict->SetBoolean(kSettingShouldPrintBackgrounds, false);
103 dict->SetBoolean(kSettingShouldPrintSelectionOnly, false);
90 } 104 }
91 105
92 } // namespace 106 } // namespace
93 107
94 class PrintWebViewHelperTestBase : public ChromeRenderViewTest { 108 class PrintWebViewHelperTestBase : public ChromeRenderViewTest {
95 public: 109 public:
96 PrintWebViewHelperTestBase() {} 110 PrintWebViewHelperTestBase() {}
97 ~PrintWebViewHelperTestBase() {} 111 ~PrintWebViewHelperTestBase() {}
98 112
99 protected: 113 protected:
100 // The renderer should be done calculating the number of rendered pages 114 // The renderer should be done calculating the number of rendered pages
101 // according to the specified settings defined in the mock render thread. 115 // according to the specified settings defined in the mock render thread.
102 // Verify the page count is correct. 116 // Verify the page count is correct.
103 void VerifyPageCount(int count) { 117 void VerifyPageCount(int count) {
104 ProcessPendingMessages();
105 #if defined(OS_CHROMEOS) 118 #if defined(OS_CHROMEOS)
106 // The DidGetPrintedPagesCount message isn't sent on ChromeOS. Right now we 119 // The DidGetPrintedPagesCount message isn't sent on ChromeOS. Right now we
107 // always print all pages, and there are checks to that effect built into 120 // always print all pages, and there are checks to that effect built into
108 // the print code. 121 // the print code.
109 #else 122 #else
110 const IPC::Message* page_cnt_msg = 123 const IPC::Message* page_cnt_msg =
111 render_thread_->sink().GetUniqueMessageMatching( 124 render_thread_->sink().GetUniqueMessageMatching(
112 PrintHostMsg_DidGetPrintedPagesCount::ID); 125 PrintHostMsg_DidGetPrintedPagesCount::ID);
113 ASSERT_TRUE(page_cnt_msg); 126 ASSERT_TRUE(page_cnt_msg);
114 PrintHostMsg_DidGetPrintedPagesCount::Param post_page_count_param; 127 PrintHostMsg_DidGetPrintedPagesCount::Param post_page_count_param;
115 PrintHostMsg_DidGetPrintedPagesCount::Read(page_cnt_msg, 128 PrintHostMsg_DidGetPrintedPagesCount::Read(page_cnt_msg,
116 &post_page_count_param); 129 &post_page_count_param);
117 EXPECT_EQ(count, post_page_count_param.b); 130 EXPECT_EQ(count, post_page_count_param.b);
118 #endif // defined(OS_CHROMEOS) 131 #endif // defined(OS_CHROMEOS)
119 } 132 }
120 133
134 // The renderer should be done calculating the number of rendered pages
135 // according to the specified settings defined in the mock render thread.
136 // Verify the page count is correct.
137 void VerifyPreviewPageCount(int count) {
138 const IPC::Message* page_cnt_msg =
139 render_thread_->sink().GetUniqueMessageMatching(
140 PrintHostMsg_DidGetPreviewPageCount::ID);
141 ASSERT_TRUE(page_cnt_msg);
142 PrintHostMsg_DidGetPreviewPageCount::Param post_page_count_param;
143 PrintHostMsg_DidGetPreviewPageCount::Read(page_cnt_msg,
144 &post_page_count_param);
145 EXPECT_EQ(count, post_page_count_param.a.page_count);
146 }
147
121 // Verifies whether the pages printed or not. 148 // Verifies whether the pages printed or not.
122 void VerifyPagesPrinted(bool printed) { 149 void VerifyPagesPrinted(bool printed) {
123 ProcessPendingMessages();
124 #if defined(OS_CHROMEOS) 150 #if defined(OS_CHROMEOS)
125 bool did_print_msg = (render_thread_->sink().GetUniqueMessageMatching( 151 bool did_print_msg = (render_thread_->sink().GetUniqueMessageMatching(
126 PrintHostMsg_TempFileForPrintingWritten::ID) != NULL); 152 PrintHostMsg_TempFileForPrintingWritten::ID) != NULL);
127 ASSERT_EQ(printed, did_print_msg); 153 ASSERT_EQ(printed, did_print_msg);
128 #else 154 #else
129 const IPC::Message* print_msg = 155 const IPC::Message* print_msg =
130 render_thread_->sink().GetUniqueMessageMatching( 156 render_thread_->sink().GetUniqueMessageMatching(
131 PrintHostMsg_DidPrintPage::ID); 157 PrintHostMsg_DidPrintPage::ID);
132 bool did_print_msg = (NULL != print_msg); 158 bool did_print_msg = (NULL != print_msg);
133 ASSERT_EQ(printed, did_print_msg); 159 ASSERT_EQ(printed, did_print_msg);
134 if (printed) { 160 if (printed) {
135 PrintHostMsg_DidPrintPage::Param post_did_print_page_param; 161 PrintHostMsg_DidPrintPage::Param post_did_print_page_param;
136 PrintHostMsg_DidPrintPage::Read(print_msg, &post_did_print_page_param); 162 PrintHostMsg_DidPrintPage::Read(print_msg, &post_did_print_page_param);
137 EXPECT_EQ(0, post_did_print_page_param.a.page_number); 163 EXPECT_EQ(0, post_did_print_page_param.a.page_number);
138 } 164 }
139 #endif // defined(OS_CHROMEOS) 165 #endif // defined(OS_CHROMEOS)
140 } 166 }
167 void OnPrintPages() {
168 PrintWebViewHelper::Get(view_)->OnPrintPages();
169 ProcessPendingMessages();
170 }
141 171
142 void OnPrintPreview(const DictionaryValue& dict) { 172 void OnPrintPreview(const DictionaryValue& dict) {
143 PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); 173 PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_);
144 print_web_view_helper->OnInitiatePrintPreview(); 174 print_web_view_helper->OnInitiatePrintPreview();
145 print_web_view_helper->OnPrintPreview(dict); 175 print_web_view_helper->OnPrintPreview(dict);
176 ProcessPendingMessages();
146 } 177 }
147 178
148 void OnPrintForPrintPreview(const DictionaryValue& dict) { 179 void OnPrintForPrintPreview(const DictionaryValue& dict) {
149 PrintWebViewHelper::Get(view_)->OnPrintForPrintPreview(dict); 180 PrintWebViewHelper::Get(view_)->OnPrintForPrintPreview(dict);
181 ProcessPendingMessages();
150 } 182 }
151 183
152 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperTestBase); 184 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperTestBase);
153 }; 185 };
154 186
155 class PrintWebViewHelperTest : public PrintWebViewHelperTestBase { 187 class PrintWebViewHelperTest : public PrintWebViewHelperTestBase {
156 public: 188 public:
157 PrintWebViewHelperTest() {} 189 PrintWebViewHelperTest() {}
158 virtual ~PrintWebViewHelperTest() {} 190 virtual ~PrintWebViewHelperTest() {}
159 191
160 virtual void SetUp() OVERRIDE { 192 virtual void SetUp() OVERRIDE {
161 ChromeRenderViewTest::SetUp(); 193 ChromeRenderViewTest::SetUp();
162 } 194 }
163 195
164 protected: 196 protected:
165 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperTest); 197 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelperTest);
166 }; 198 };
167 199
168 // Tests that printing pages work and sending and receiving messages through 200 // Tests that printing pages work and sending and receiving messages through
169 // that channel all works. 201 // that channel all works.
170 TEST_F(PrintWebViewHelperTest, OnPrintPages) { 202 TEST_F(PrintWebViewHelperTest, OnPrintPages) {
171 LoadHTML(kHelloWorldHTML); 203 LoadHTML(kHelloWorldHTML);
172 PrintWebViewHelper::Get(view_)->OnPrintPages(); 204 OnPrintPages();
173 205
174 VerifyPageCount(1); 206 VerifyPageCount(1);
175 VerifyPagesPrinted(true); 207 VerifyPagesPrinted(true);
176 } 208 }
177 209
178 // Duplicate of OnPrintPagesTest only using javascript to print. 210 // Duplicate of OnPrintPagesTest only using javascript to print.
179 TEST_F(PrintWebViewHelperTest, PrintWithJavascript) { 211 TEST_F(PrintWebViewHelperTest, PrintWithJavascript) {
180 // HTML contains a call to window.print() 212 // HTML contains a call to window.print()
181 LoadHTML(kPrintWithJSHTML); 213 LoadHTML(kPrintWithJSHTML);
182 214
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 EXPECT_FALSE(bounds.IsEmpty()); 266 EXPECT_FALSE(bounds.IsEmpty());
235 WebKit::WebMouseEvent mouse_event; 267 WebKit::WebMouseEvent mouse_event;
236 mouse_event.type = WebKit::WebInputEvent::MouseDown; 268 mouse_event.type = WebKit::WebInputEvent::MouseDown;
237 mouse_event.button = WebKit::WebMouseEvent::ButtonLeft; 269 mouse_event.button = WebKit::WebMouseEvent::ButtonLeft;
238 mouse_event.x = bounds.CenterPoint().x(); 270 mouse_event.x = bounds.CenterPoint().x();
239 mouse_event.y = bounds.CenterPoint().y(); 271 mouse_event.y = bounds.CenterPoint().y();
240 mouse_event.clickCount = 1; 272 mouse_event.clickCount = 1;
241 SendWebMouseEvent(mouse_event); 273 SendWebMouseEvent(mouse_event);
242 mouse_event.type = WebKit::WebInputEvent::MouseUp; 274 mouse_event.type = WebKit::WebInputEvent::MouseUp;
243 SendWebMouseEvent(mouse_event); 275 SendWebMouseEvent(mouse_event);
276 ProcessPendingMessages();
244 277
245 VerifyPageCount(1); 278 VerifyPageCount(1);
246 VerifyPagesPrinted(true); 279 VerifyPagesPrinted(true);
247 } 280 }
248 281
249 TEST_F(PrintWebViewHelperTest, BlockScriptInitiatedPrintingFromPopup) { 282 TEST_F(PrintWebViewHelperTest, BlockScriptInitiatedPrintingFromPopup) {
250 PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_); 283 PrintWebViewHelper* print_web_view_helper = PrintWebViewHelper::Get(view_);
251 print_web_view_helper->SetScriptedPrintBlocked(true); 284 print_web_view_helper->SetScriptedPrintBlocked(true);
252 LoadHTML(kPrintWithJSHTML); 285 LoadHTML(kPrintWithJSHTML);
253 VerifyPagesPrinted(false); 286 VerifyPagesPrinted(false);
(...skipping 24 matching lines...) Expand all
278 // Find the frame and set it as the focused one. This should mean that that 311 // Find the frame and set it as the focused one. This should mean that that
279 // the printout should only contain the contents of that frame. 312 // the printout should only contain the contents of that frame.
280 WebFrame* sub1_frame = 313 WebFrame* sub1_frame =
281 view_->GetWebView()->findFrameByName(WebString::fromUTF8("sub1")); 314 view_->GetWebView()->findFrameByName(WebString::fromUTF8("sub1"));
282 ASSERT_TRUE(sub1_frame); 315 ASSERT_TRUE(sub1_frame);
283 view_->GetWebView()->setFocusedFrame(sub1_frame); 316 view_->GetWebView()->setFocusedFrame(sub1_frame);
284 ASSERT_NE(view_->GetWebView()->focusedFrame(), 317 ASSERT_NE(view_->GetWebView()->focusedFrame(),
285 view_->GetWebView()->mainFrame()); 318 view_->GetWebView()->mainFrame());
286 319
287 // Initiate printing. 320 // Initiate printing.
288 PrintWebViewHelper::Get(view_)->OnPrintPages(); 321 OnPrintPages();
289 VerifyPagesPrinted(true); 322 VerifyPagesPrinted(true);
290 323
291 // Verify output through MockPrinter. 324 // Verify output through MockPrinter.
292 const MockPrinter* printer(chrome_render_thread_->printer()); 325 const MockPrinter* printer(chrome_render_thread_->printer());
293 ASSERT_EQ(1, printer->GetPrintedPages()); 326 ASSERT_EQ(1, printer->GetPrintedPages());
294 const Image& image1(printer->GetPrintedPage(0)->image()); 327 const Image& image1(printer->GetPrintedPage(0)->image());
295 328
296 // TODO(sverrir): Figure out a way to improve this test to actually print 329 // TODO(sverrir): Figure out a way to improve this test to actually print
297 // only the content of the iframe. Currently image1 will contain the full 330 // only the content of the iframe. Currently image1 will contain the full
298 // page. 331 // page.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 // hooking up Cairo to read a pdf stream, or accessing the cairo surface in the 376 // hooking up Cairo to read a pdf stream, or accessing the cairo surface in the
344 // metafile directly. 377 // metafile directly.
345 #if defined(OS_WIN) || defined(OS_MACOSX) 378 #if defined(OS_WIN) || defined(OS_MACOSX)
346 TEST_F(PrintWebViewHelperTest, PrintLayoutTest) { 379 TEST_F(PrintWebViewHelperTest, PrintLayoutTest) {
347 bool baseline = false; 380 bool baseline = false;
348 381
349 EXPECT_TRUE(chrome_render_thread_->printer() != NULL); 382 EXPECT_TRUE(chrome_render_thread_->printer() != NULL);
350 for (size_t i = 0; i < arraysize(kTestPages); ++i) { 383 for (size_t i = 0; i < arraysize(kTestPages); ++i) {
351 // Load an HTML page and print it. 384 // Load an HTML page and print it.
352 LoadHTML(kTestPages[i].page); 385 LoadHTML(kTestPages[i].page);
353 PrintWebViewHelper::Get(view_)->OnPrintPages(); 386 OnPrintPages();
354 VerifyPagesPrinted(true); 387 VerifyPagesPrinted(true);
355 388
356 // MockRenderThread::Send() just calls MockRenderThread::OnReceived(). 389 // MockRenderThread::Send() just calls MockRenderThread::OnReceived().
357 // So, all IPC messages sent in the above RenderView::OnPrintPages() call 390 // So, all IPC messages sent in the above RenderView::OnPrintPages() call
358 // has been handled by the MockPrinter object, i.e. this printing job 391 // has been handled by the MockPrinter object, i.e. this printing job
359 // has been already finished. 392 // has been already finished.
360 // So, we can start checking the output pages of this printing job. 393 // So, we can start checking the output pages of this printing job.
361 // Retrieve the number of pages actually printed. 394 // Retrieve the number of pages actually printed.
362 size_t pages = chrome_render_thread_->printer()->GetPrintedPages(); 395 size_t pages = chrome_render_thread_->printer()->GetPrintedPages();
363 EXPECT_EQ(kTestPages[i].printed_pages, pages); 396 EXPECT_EQ(kTestPages[i].printed_pages, pages);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 if (did_get_preview_msg) { 469 if (did_get_preview_msg) {
437 PrintHostMsg_MetafileReadyForPrinting::Param preview_param; 470 PrintHostMsg_MetafileReadyForPrinting::Param preview_param;
438 PrintHostMsg_MetafileReadyForPrinting::Read(preview_msg, &preview_param); 471 PrintHostMsg_MetafileReadyForPrinting::Read(preview_msg, &preview_param);
439 EXPECT_NE(0, preview_param.a.document_cookie); 472 EXPECT_NE(0, preview_param.a.document_cookie);
440 EXPECT_NE(0, preview_param.a.expected_pages_count); 473 EXPECT_NE(0, preview_param.a.expected_pages_count);
441 EXPECT_NE(0U, preview_param.a.data_size); 474 EXPECT_NE(0U, preview_param.a.data_size);
442 } 475 }
443 } 476 }
444 477
445 void VerifyPrintFailed(bool did_fail) { 478 void VerifyPrintFailed(bool did_fail) {
446 ProcessPendingMessages();
447 bool print_failed = (render_thread_->sink().GetUniqueMessageMatching( 479 bool print_failed = (render_thread_->sink().GetUniqueMessageMatching(
448 PrintHostMsg_PrintingFailed::ID) != NULL); 480 PrintHostMsg_PrintingFailed::ID) != NULL);
449 EXPECT_EQ(did_fail, print_failed); 481 EXPECT_EQ(did_fail, print_failed);
450 } 482 }
451 483
452 void VerifyPrintPreviewInvalidPrinterSettings(bool settings_invalid) { 484 void VerifyPrintPreviewInvalidPrinterSettings(bool settings_invalid) {
453 bool print_preview_invalid_printer_settings = 485 bool print_preview_invalid_printer_settings =
454 (render_thread_->sink().GetUniqueMessageMatching( 486 (render_thread_->sink().GetUniqueMessageMatching(
455 PrintHostMsg_PrintPreviewInvalidPrinterSettings::ID) != NULL); 487 PrintHostMsg_PrintPreviewInvalidPrinterSettings::ID) != NULL);
456 EXPECT_EQ(settings_invalid, print_preview_invalid_printer_settings); 488 EXPECT_EQ(settings_invalid, print_preview_invalid_printer_settings);
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 735
704 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining()); 736 EXPECT_EQ(0, chrome_render_thread_->print_preview_pages_remaining());
705 VerifyDefaultPageLayout(748, 568, 21, 23, 21, 23, true); 737 VerifyDefaultPageLayout(748, 568, 21, 23, 21, 23, true);
706 VerifyPrintPreviewCancelled(false); 738 VerifyPrintPreviewCancelled(false);
707 VerifyPrintPreviewFailed(false); 739 VerifyPrintPreviewFailed(false);
708 } 740 }
709 741
710 // Test to verify that complete metafile is generated for a subset of pages 742 // Test to verify that complete metafile is generated for a subset of pages
711 // without creating draft pages. 743 // without creating draft pages.
712 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) { 744 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedPages) {
713 LoadHTML(kHelloWorldHTML); 745 LoadHTML(kMultipageHTML);
714 746
715 // Fill in some dummy values. 747 // Fill in some dummy values.
716 DictionaryValue dict; 748 DictionaryValue dict;
717 CreatePrintSettingsDictionary(&dict); 749 CreatePrintSettingsDictionary(&dict);
718 750
719 // Set a page range and update the dictionary to generate only the complete 751 // Set a page range and update the dictionary to generate only the complete
720 // metafile with the selected pages. Page numbers used in the dictionary 752 // metafile with the selected pages. Page numbers used in the dictionary
721 // are 1-based. 753 // are 1-based.
722 DictionaryValue* page_range = new DictionaryValue(); 754 DictionaryValue* page_range = new DictionaryValue();
723 page_range->SetInteger(kSettingPageRangeFrom, 1); 755 page_range->SetInteger(kSettingPageRangeFrom, 2);
724 page_range->SetInteger(kSettingPageRangeTo, 1); 756 page_range->SetInteger(kSettingPageRangeTo, 3);
725 757
726 ListValue* page_range_array = new ListValue(); 758 ListValue* page_range_array = new ListValue();
727 page_range_array->Append(page_range); 759 page_range_array->Append(page_range);
728 760
729 dict.Set(kSettingPageRange, page_range_array); 761 dict.Set(kSettingPageRange, page_range_array);
730 dict.SetBoolean(kSettingGenerateDraftData, false); 762 dict.SetBoolean(kSettingGenerateDraftData, false);
731 763
732 OnPrintPreview(dict); 764 OnPrintPreview(dict);
733 765
734 // Verify that we did not create the draft metafile for the first page.
735 VerifyDidPreviewPage(false, 0); 766 VerifyDidPreviewPage(false, 0);
736 767 VerifyDidPreviewPage(false, 1);
768 VerifyDidPreviewPage(false, 2);
769 VerifyPreviewPageCount(3);
737 VerifyPrintPreviewCancelled(false); 770 VerifyPrintPreviewCancelled(false);
738 VerifyPrintPreviewFailed(false); 771 VerifyPrintPreviewFailed(false);
739 VerifyPrintPreviewGenerated(true); 772 VerifyPrintPreviewGenerated(true);
773 VerifyPagesPrinted(false);
774 }
775
776 // Test to verify that preview generated only for one page.
777 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewForSelectedText) {
778 LoadHTML(kMultipageHTML);
779 GetMainFrame()->selectRange(
780 WebKit::WebRange::fromDocumentRange(GetMainFrame(), 1, 3));
781
782 // Fill in some dummy values.
783 DictionaryValue dict;
784 CreatePrintSettingsDictionary(&dict);
785 dict.SetBoolean(kSettingShouldPrintSelectionOnly, true);
786
787 OnPrintPreview(dict);
788
789 VerifyPreviewPageCount(1);
790 VerifyPrintPreviewCancelled(false);
791 VerifyPrintPreviewFailed(false);
792 VerifyPrintPreviewGenerated(true);
740 VerifyPagesPrinted(false); 793 VerifyPagesPrinted(false);
741 } 794 }
742 795
743 // Tests that print preview fails and receiving error messages through 796 // Tests that print preview fails and receiving error messages through
744 // that channel all works. 797 // that channel all works.
745 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewFail) { 798 TEST_F(PrintWebViewHelperPreviewTest, OnPrintPreviewFail) {
746 LoadHTML(kHelloWorldHTML); 799 LoadHTML(kHelloWorldHTML);
747 800
748 // An empty dictionary should fail. 801 // An empty dictionary should fail.
749 DictionaryValue empty_dict; 802 DictionaryValue empty_dict;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 chrome_render_thread_->printer()->ResetPrinter(); 968 chrome_render_thread_->printer()->ResetPrinter();
916 VerifyPagesPrinted(false); 969 VerifyPagesPrinted(false);
917 970
918 // Pretend user will print, should not be throttled. 971 // Pretend user will print, should not be throttled.
919 chrome_render_thread_->set_print_dialog_user_response(true); 972 chrome_render_thread_->set_print_dialog_user_response(true);
920 LoadHTML(kPrintWithJSHTML); 973 LoadHTML(kPrintWithJSHTML);
921 VerifyPagesPrinted(true); 974 VerifyPagesPrinted(true);
922 } 975 }
923 976
924 } // namespace printing 977 } // namespace printing
OLDNEW
« no previous file with comments | « chrome/renderer/printing/print_web_view_helper.cc ('k') | chrome/renderer/printing/print_web_view_helper_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698