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

Side by Side Diff: chrome/renderer/print_web_view_helper.cc

Issue 7639023: Revert 96567 - Reland 96406 - Print preview page selection should not require a rerendering of dr... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/renderer/print_web_view_helper.h" 5 #include "chrome/renderer/print_web_view_helper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 if (WebFrame* web_frame = web_view_->mainFrame()) 170 if (WebFrame* web_frame = web_view_->mainFrame())
171 web_frame->setScrollOffset(prev_scroll_offset_); 171 web_frame->setScrollOffset(prev_scroll_offset_);
172 } 172 }
173 } 173 }
174 174
175 PrintWebViewHelper::PrintWebViewHelper(RenderView* render_view) 175 PrintWebViewHelper::PrintWebViewHelper(RenderView* render_view)
176 : RenderViewObserver(render_view), 176 : RenderViewObserver(render_view),
177 RenderViewObserverTracker<PrintWebViewHelper>(render_view), 177 RenderViewObserverTracker<PrintWebViewHelper>(render_view),
178 print_web_view_(NULL), 178 print_web_view_(NULL),
179 is_preview_(switches::IsPrintPreviewEnabled()), 179 is_preview_(switches::IsPrintPreviewEnabled()),
180 is_print_ready_metafile_sent_(false),
181 user_cancelled_scripted_print_count_(0), 180 user_cancelled_scripted_print_count_(0),
182 notify_browser_of_print_failure_(true) { 181 notify_browser_of_print_failure_(true) {
183 } 182 }
184 183
185 PrintWebViewHelper::~PrintWebViewHelper() {} 184 PrintWebViewHelper::~PrintWebViewHelper() {}
186 185
187 // Prints |frame| which called window.print(). 186 // Prints |frame| which called window.print().
188 void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame) { 187 void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame) {
189 DCHECK(frame); 188 DCHECK(frame);
190 189
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 306
308 void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) { 307 void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) {
309 DCHECK(is_preview_); 308 DCHECK(is_preview_);
310 print_preview_context_.OnPrintPreview(); 309 print_preview_context_.OnPrintPreview();
311 310
312 if (!InitPrintSettings(print_preview_context_.frame(), 311 if (!InitPrintSettings(print_preview_context_.frame(),
313 print_preview_context_.node())) { 312 print_preview_context_.node())) {
314 NOTREACHED(); 313 NOTREACHED();
315 return; 314 return;
316 } 315 }
316
317 if (!UpdatePrintSettings(settings)) { 317 if (!UpdatePrintSettings(settings)) {
318 DidFinishPrinting(FAIL_PREVIEW); 318 DidFinishPrinting(FAIL_PREVIEW);
319 return; 319 return;
320 } 320 }
321 321
322 if (print_pages_params_->params.preview_request_id != 0 && 322 if (print_pages_params_->params.preview_request_id != 0 &&
323 old_print_pages_params_.get() && 323 old_print_pages_params_.get() &&
324 PrintMsg_Print_Params_IsEqual(*old_print_pages_params_, 324 PrintMsg_Print_Params_IsEqual(*old_print_pages_params_,
325 *print_pages_params_)) { 325 *print_pages_params_)) {
326 PrintHostMsg_DidPreviewDocument_Params preview_params; 326 PrintHostMsg_DidPreviewDocument_Params preview_params;
327 preview_params.reuse_existing_data = true; 327 preview_params.reuse_existing_data = true;
328 preview_params.data_size = 0; 328 preview_params.data_size = 0;
329 preview_params.document_cookie = 329 preview_params.document_cookie =
330 print_pages_params_->params.document_cookie; 330 print_pages_params_->params.document_cookie;
331 preview_params.expected_pages_count = 331 preview_params.expected_pages_count =
332 print_preview_context_.total_page_count(); 332 print_preview_context_.total_page_count();
333 preview_params.modifiable = print_preview_context_.IsModifiable(); 333 preview_params.modifiable = print_preview_context_.IsModifiable();
334 preview_params.preview_request_id = 334 preview_params.preview_request_id =
335 print_pages_params_->params.preview_request_id; 335 print_pages_params_->params.preview_request_id;
336 336
337 Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(), 337 Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params));
338 preview_params));
339 return; 338 return;
340 } 339 }
341 // Always clear |old_print_pages_params_| before rendering the pages. 340 // Always clear |old_print_pages_params_| before rendering the pages.
342 old_print_pages_params_.reset(); 341 old_print_pages_params_.reset();
343 is_print_ready_metafile_sent_ = false;
344 342
345 // PDF printer device supports alpha blending. 343 // PDF printer device supports alpha blending.
346 print_pages_params_->params.supports_alpha_blend = true; 344 print_pages_params_->params.supports_alpha_blend = true;
347
348 bool generate_draft_pages;
349 if (!settings.GetBoolean(printing::kSettingGenerateDraftData,
350 &generate_draft_pages)) {
351 NOTREACHED();
352 }
353 print_preview_context_.set_generate_draft_pages(generate_draft_pages);
354
355 if (!CreatePreviewDocument()) 345 if (!CreatePreviewDocument())
356 DidFinishPrinting(FAIL_PREVIEW); 346 DidFinishPrinting(FAIL_PREVIEW);
357 } 347 }
358 348
359 bool PrintWebViewHelper::CreatePreviewDocument() { 349 bool PrintWebViewHelper::CreatePreviewDocument() {
360 PrintMsg_Print_Params print_params = print_pages_params_->params; 350 PrintMsg_Print_Params print_params = print_pages_params_->params;
361 const std::vector<int>& pages = print_pages_params_->pages; 351 const std::vector<int>& pages = print_pages_params_->pages;
362 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages)) 352 if (!print_preview_context_.CreatePreviewDocument(&print_params, pages))
363 return false; 353 return false;
364 int page_count = print_preview_context_.total_page_count(); 354 int page_count = print_preview_context_.total_page_count();
365 bool is_modifiable = print_preview_context_.IsModifiable(); 355 bool is_modifiable = print_preview_context_.IsModifiable();
366 int document_cookie = print_pages_params_->params.document_cookie; 356 int document_cookie = print_pages_params_->params.document_cookie;
367 Send(new PrintHostMsg_DidGetPreviewPageCount( 357 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), document_cookie,
368 routing_id(), 358 page_count, is_modifiable));
369 document_cookie,
370 page_count,
371 is_modifiable,
372 print_preview_context_.generate_draft_pages()));
373 PreviewPageRendered(printing::INVALID_PAGE_INDEX, NULL); 359 PreviewPageRendered(printing::INVALID_PAGE_INDEX, NULL);
374 return true; 360 return true;
375 } 361 }
376 362
377 void PrintWebViewHelper::OnContinuePreview() { 363 void PrintWebViewHelper::OnContinuePreview(int requested_preview_page_index) {
378 // Spurious message. We already finished/cancelled/aborted the print preview. 364 // Spurious message. We already finished/cancelled/aborted the print preview.
379 if (!print_preview_context_.IsBusy()) 365 if (!print_preview_context_.IsBusy())
380 return; 366 return;
381 int page_number = print_preview_context_.GetNextPageNumber(); 367 int page_number;
368 #if defined(USE_SKIA)
369 if (requested_preview_page_index >= printing::FIRST_PAGE_INDEX) {
370 page_number = requested_preview_page_index;
371 } else
372 #endif
373 {
374 page_number = print_preview_context_.GetNextPageNumber();
375 }
382 376
383 if (page_number >= printing::FIRST_PAGE_INDEX) { 377 if (page_number >= printing::FIRST_PAGE_INDEX) {
384 // Continue generating the print preview. 378 // Continue generating the print preview.
385 RenderPreviewPage(page_number); 379 RenderPreviewPage(page_number);
380 return;
386 } 381 }
387 382
388 if (print_preview_context_.IsFinalPageRendered()) 383 // Finished generating preview. Finalize the document.
389 print_preview_context_.AllPagesRendered(); 384 if (FinalizePreviewDocument()) {
390
391 if (print_preview_context_.IsLastPageOfPrintReadyMetafile()) {
392 // Finished generating preview. Finalize the document.
393 if (!FinalizePrintReadyDocument())
394 DidFinishPrinting(FAIL_PREVIEW);
395 }
396
397 if (page_number == printing::INVALID_PAGE_INDEX) {
398 print_preview_context_.Finished(); 385 print_preview_context_.Finished();
399 DidFinishPrinting(OK); 386 DidFinishPrinting(OK);
387 } else {
388 DidFinishPrinting(FAIL_PREVIEW);
400 } 389 }
401 } 390 }
402 391
403 void PrintWebViewHelper::OnAbortPreview() { 392 void PrintWebViewHelper::OnAbortPreview() {
404 DidFinishPrinting(ABORT_PREVIEW); 393 DidFinishPrinting(ABORT_PREVIEW);
405 return; 394 return;
406 } 395 }
407 396
408 bool PrintWebViewHelper::FinalizePrintReadyDocument() { 397 bool PrintWebViewHelper::FinalizePreviewDocument() {
409 DCHECK(!is_print_ready_metafile_sent_); 398 print_preview_context_.FinalizePreviewDocument();
410 print_preview_context_.FinalizePrintReadyDocument();
411 399
412 // Get the size of the resulting metafile. 400 // Get the size of the resulting metafile.
413 printing::PreviewMetafile* metafile = print_preview_context_.metafile(); 401 printing::PreviewMetafile* metafile = print_preview_context_.metafile();
414 uint32 buf_size = metafile->GetDataSize(); 402 uint32 buf_size = metafile->GetDataSize();
415 DCHECK_GT(buf_size, 0u); 403 DCHECK_GT(buf_size, 0u);
416 404
417 PrintHostMsg_DidPreviewDocument_Params preview_params; 405 PrintHostMsg_DidPreviewDocument_Params preview_params;
418 preview_params.reuse_existing_data = false; 406 preview_params.reuse_existing_data = false;
419 preview_params.data_size = buf_size; 407 preview_params.data_size = buf_size;
420 preview_params.document_cookie = print_pages_params_->params.document_cookie; 408 preview_params.document_cookie = print_pages_params_->params.document_cookie;
421 preview_params.expected_pages_count = 409 preview_params.expected_pages_count =
422 print_preview_context_.total_page_count(); 410 print_preview_context_.total_page_count();
423 preview_params.modifiable = print_preview_context_.IsModifiable(); 411 preview_params.modifiable = print_preview_context_.IsModifiable();
424 preview_params.preview_request_id = 412 preview_params.preview_request_id =
425 print_pages_params_->params.preview_request_id; 413 print_pages_params_->params.preview_request_id;
426 414
427 // Ask the browser to create the shared memory for us. 415 // Ask the browser to create the shared memory for us.
428 if (!CopyMetafileDataToSharedMem(metafile, 416 if (!CopyMetafileDataToSharedMem(metafile,
429 &(preview_params.metafile_data_handle))) { 417 &(preview_params.metafile_data_handle))) {
430 return false; 418 return false;
431 } 419 }
432 is_print_ready_metafile_sent_ = true; 420 Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params));
433
434 Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(), preview_params));
435 return true; 421 return true;
436 } 422 }
437 423
438 void PrintWebViewHelper::OnPrintingDone(bool success) { 424 void PrintWebViewHelper::OnPrintingDone(bool success) {
439 notify_browser_of_print_failure_ = false; 425 notify_browser_of_print_failure_ = false;
440 DidFinishPrinting(success ? OK : FAIL_PRINT); 426 DidFinishPrinting(success ? OK : FAIL_PRINT);
441 } 427 }
442 428
443 void PrintWebViewHelper::OnPrintNodeUnderContextMenu() { 429 void PrintWebViewHelper::OnPrintNodeUnderContextMenu() {
444 const WebNode& context_menu_node = render_view()->context_menu_node(); 430 const WebNode& context_menu_node = render_view()->context_menu_node();
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 904
919 void PrintWebViewHelper::RequestPrintPreview() { 905 void PrintWebViewHelper::RequestPrintPreview() {
920 old_print_pages_params_.reset(); 906 old_print_pages_params_.reset();
921 Send(new PrintHostMsg_RequestPrintPreview(routing_id())); 907 Send(new PrintHostMsg_RequestPrintPreview(routing_id()));
922 } 908 }
923 909
924 void PrintWebViewHelper::PreviewPageRendered(int page_number, 910 void PrintWebViewHelper::PreviewPageRendered(int page_number,
925 printing::Metafile* metafile) { 911 printing::Metafile* metafile) {
926 if ((page_number == printing::INVALID_PAGE_INDEX && metafile) || 912 if ((page_number == printing::INVALID_PAGE_INDEX && metafile) ||
927 (page_number >= printing::FIRST_PAGE_INDEX && !metafile && 913 (page_number >= printing::FIRST_PAGE_INDEX && !metafile &&
928 print_preview_context_.IsModifiable() && 914 print_preview_context_.IsModifiable())) {
929 print_preview_context_.generate_draft_pages())) {
930 NOTREACHED(); 915 NOTREACHED();
931 DidFinishPrinting(FAIL_PREVIEW); 916 DidFinishPrinting(FAIL_PREVIEW);
932 return; 917 return;
933 } 918 }
934 919
935 uint32 buf_size = 0; 920 uint32 buf_size = 0;
936 PrintHostMsg_DidPreviewPage_Params preview_page_params; 921 PrintHostMsg_DidPreviewPage_Params preview_page_params;
937 // Get the size of the resulting metafile. 922 // Get the size of the resulting metafile.
938 if (metafile) { 923 if (metafile) {
939 buf_size = metafile->GetDataSize(); 924 buf_size = metafile->GetDataSize();
940 DCHECK_GT(buf_size, 0u); 925 DCHECK_GT(buf_size, 0u);
941 if (!CopyMetafileDataToSharedMem( 926 if (!CopyMetafileDataToSharedMem(
942 metafile, &(preview_page_params.metafile_data_handle))) { 927 metafile, &(preview_page_params.metafile_data_handle))) {
943 DidFinishPrinting(FAIL_PREVIEW); 928 DidFinishPrinting(FAIL_PREVIEW);
944 return; 929 return;
945 } 930 }
946 } 931 }
947 preview_page_params.data_size = buf_size; 932 preview_page_params.data_size = buf_size;
948 preview_page_params.page_number = page_number; 933 preview_page_params.page_number = page_number;
949 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); 934 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params));
950 } 935 }
951 936
952 PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext() 937 PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext()
953 : frame_(NULL), 938 : frame_(NULL),
954 total_page_count_(0), 939 total_page_count_(0),
955 render_page_list_index_(-1), 940 actual_page_count_(0),
956 generate_draft_pages_(true), 941 current_page_number_(0),
957 print_ready_metafile_page_count_(0),
958 state_(UNINITIALIZED) { 942 state_(UNINITIALIZED) {
959 } 943 }
960 944
961 PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() { 945 PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() {
962 } 946 }
963 947
964 void PrintWebViewHelper::PrintPreviewContext::InitWithFrame( 948 void PrintWebViewHelper::PrintPreviewContext::InitWithFrame(
965 WebKit::WebFrame* web_frame) { 949 WebKit::WebFrame* web_frame) {
966 DCHECK(web_frame); 950 DCHECK(web_frame);
967 if (IsReadyToRender()) 951 if (IsReadyToRender())
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 // Need to make sure old object gets destroyed first. 985 // Need to make sure old object gets destroyed first.
1002 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(), 986 prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(),
1003 node())); 987 node()));
1004 UpdatePrintableSizeInPrintParameters(frame_, node_.get(), 988 UpdatePrintableSizeInPrintParameters(frame_, node_.get(),
1005 prep_frame_view_.get(), print_params); 989 prep_frame_view_.get(), print_params);
1006 990
1007 total_page_count_ = prep_frame_view_->GetExpectedPageCount(); 991 total_page_count_ = prep_frame_view_->GetExpectedPageCount();
1008 if (total_page_count_ == 0) 992 if (total_page_count_ == 0)
1009 return false; 993 return false;
1010 994
1011 int selected_page_count = pages.size(); 995 current_page_number_ = 0;
1012 render_page_list_index_ = -1; 996 if (pages.empty()) {
1013 print_ready_metafile_page_count_ = pages.empty() ? total_page_count_ : 997 actual_page_count_ = total_page_count_;
1014 selected_page_count; 998 rendered_pages_ = std::vector<PreviewPageInfo>(total_page_count_,
1015 render_page_list_ = pages; 999 std::make_pair(false, -1));
1016 if (selected_page_count == 0) { 1000 } else {
1017 // Render all pages. 1001 actual_page_count_ = pages.size();
1018 for (int i = 0; i < total_page_count_; i++) 1002 rendered_pages_ = std::vector<PreviewPageInfo>(total_page_count_,
1019 render_page_list_.push_back(i); 1003 std::make_pair(true, -1));
1020 } else if (generate_draft_pages_) { 1004 for (int i = 0; i < actual_page_count_; ++i) {
1021 int pages_index = 0; 1005 int page_number = pages[i];
1022 for (int i = 0; i < total_page_count_; i++) { 1006 if (page_number < printing::FIRST_PAGE_INDEX ||
1023 if (pages_index < selected_page_count && i == pages[pages_index]) { 1007 page_number >= total_page_count_) {
1024 pages_index++; 1008 return false;
1025 continue;
1026 } 1009 }
1027 render_page_list_.push_back(i); 1010 rendered_pages_[page_number].first = false;
1011 rendered_pages_[page_number].second = i;
1028 } 1012 }
1029 } 1013 }
1030 1014
1031 document_render_time_ = base::TimeDelta(); 1015 document_render_time_ = base::TimeDelta();
1032 begin_time_ = base::TimeTicks::Now(); 1016 begin_time_ = base::TimeTicks::Now();
1033 1017
1034 return true; 1018 return true;
1035 } 1019 }
1036 1020
1037 void PrintWebViewHelper::PrintPreviewContext::RenderedPreviewPage( 1021 void PrintWebViewHelper::PrintPreviewContext::RenderedPreviewPage(
1038 const base::TimeDelta& page_time) { 1022 const base::TimeDelta& page_time) {
1039 DCHECK_EQ(RENDERING, state_); 1023 DCHECK_EQ(RENDERING, state_);
1040 document_render_time_ += page_time; 1024 document_render_time_ += page_time;
1041 UMA_HISTOGRAM_TIMES("PrintPreview.RenderPDFPageTime", page_time); 1025 UMA_HISTOGRAM_TIMES("PrintPreview.RenderPDFPageTime", page_time);
1042 } 1026 }
1043 1027
1044 void PrintWebViewHelper::PrintPreviewContext::AllPagesRendered() { 1028 void PrintWebViewHelper::PrintPreviewContext::FinalizePreviewDocument() {
1045 DCHECK_EQ(RENDERING, state_); 1029 DCHECK_EQ(RENDERING, state_);
1046 state_ = DONE; 1030 state_ = DONE;
1047 prep_frame_view_->FinishPrinting();
1048 }
1049
1050 void PrintWebViewHelper::PrintPreviewContext::FinalizePrintReadyDocument() {
1051 if (state_ != DONE && state_ != RENDERING)
1052 NOTREACHED();
1053 1031
1054 base::TimeTicks begin_time = base::TimeTicks::Now(); 1032 base::TimeTicks begin_time = base::TimeTicks::Now();
1033
1034 prep_frame_view_->FinishPrinting();
1055 metafile_->FinishDocument(); 1035 metafile_->FinishDocument();
1056 1036
1057 if (print_ready_metafile_page_count_ <= 0) { 1037 if (actual_page_count_ <= 0) {
1058 NOTREACHED(); 1038 NOTREACHED();
1059 return; 1039 return;
1060 } 1040 }
1061 1041
1062 UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderToPDFTime", 1042 UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderToPDFTime",
1063 document_render_time_); 1043 document_render_time_);
1064 base::TimeDelta total_time = (base::TimeTicks::Now() - begin_time) + 1044 base::TimeDelta total_time = (base::TimeTicks::Now() - begin_time) +
1065 document_render_time_; 1045 document_render_time_;
1066 UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTime", 1046 UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTime",
1067 total_time); 1047 total_time);
1068 UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTimeAvgPerPage", 1048 UMA_HISTOGRAM_MEDIUM_TIMES("PrintPreview.RenderAndGeneratePDFTimeAvgPerPage",
1069 total_time / render_page_list_.size()); 1049 total_time / actual_page_count_);
1070 } 1050 }
1071 1051
1072 void PrintWebViewHelper::PrintPreviewContext::Finished() { 1052 void PrintWebViewHelper::PrintPreviewContext::Finished() {
1073 DCHECK_EQ(DONE, state_); 1053 DCHECK_EQ(DONE, state_);
1074 ClearContext(); 1054 ClearContext();
1075 } 1055 }
1076 1056
1077 void PrintWebViewHelper::PrintPreviewContext::Failed() { 1057 void PrintWebViewHelper::PrintPreviewContext::Failed() {
1078 DCHECK(IsBusy()); 1058 DCHECK(IsBusy());
1079 state_ = INITIALIZED; 1059 state_ = INITIALIZED;
1080 ClearContext(); 1060 ClearContext();
1081 } 1061 }
1082 1062
1083 void PrintWebViewHelper::PrintPreviewContext::Abort() { 1063 void PrintWebViewHelper::PrintPreviewContext::Abort() {
1084 state_ = UNINITIALIZED; 1064 state_ = UNINITIALIZED;
1085 ClearContext(); 1065 ClearContext();
1086 frame_ = NULL; 1066 frame_ = NULL;
1087 node_.reset(); 1067 node_.reset();
1088 } 1068 }
1089 1069
1090 int PrintWebViewHelper::PrintPreviewContext::GetNextPageNumber() { 1070 int PrintWebViewHelper::PrintPreviewContext::GetNextPageNumber() {
1091 DCHECK_EQ(RENDERING, state_); 1071 DCHECK_EQ(RENDERING, state_);
1092 if (IsFinalPageRendered()) 1072 for (int i = 0; i < total_page_count_; i++) {
1073 if (!rendered_pages_[current_page_number_].first)
1074 break;
1075 current_page_number_ = (current_page_number_ + 1) % total_page_count_;
1076 }
1077 if (rendered_pages_[current_page_number_].first)
1093 return printing::INVALID_PAGE_INDEX; 1078 return printing::INVALID_PAGE_INDEX;
1094 render_page_list_index_++; 1079 rendered_pages_[current_page_number_].first = true;
1095 return render_page_list_[render_page_list_index_]; 1080 return current_page_number_;
1096 } 1081 }
1097 1082
1098 bool PrintWebViewHelper::PrintPreviewContext::IsReadyToRender() const { 1083 bool PrintWebViewHelper::PrintPreviewContext::IsReadyToRender() const {
1099 return state_ != UNINITIALIZED; 1084 return state_ != UNINITIALIZED;
1100 } 1085 }
1101 1086
1102 bool PrintWebViewHelper::PrintPreviewContext::IsBusy() const { 1087 bool PrintWebViewHelper::PrintPreviewContext::IsBusy() const {
1103 return state_ == INITIALIZED || state_ == RENDERING; 1088 return state_ == INITIALIZED || state_ == RENDERING;
1104 } 1089 }
1105 1090
1106 bool PrintWebViewHelper::PrintPreviewContext::IsModifiable() const { 1091 bool PrintWebViewHelper::PrintPreviewContext::IsModifiable() const {
1107 // TODO(vandebo) I think this should only return false if the content is a 1092 // TODO(vandebo) I think this should only return false if the content is a
1108 // PDF, just because we are printing a particular node does not mean it's 1093 // PDF, just because we are printing a particular node does not mean it's
1109 // a PDF (right?), we should check the mime type of the node. 1094 // a PDF (right?), we should check the mime type of the node.
1110 if (node()) 1095 if (node())
1111 return false; 1096 return false;
1112 std::string mime(frame()->dataSource()->response().mimeType().utf8()); 1097 std::string mime(frame()->dataSource()->response().mimeType().utf8());
1113 return mime != "application/pdf"; 1098 return mime != "application/pdf";
1114 } 1099 }
1115 1100
1116 bool PrintWebViewHelper::PrintPreviewContext::IsLastPageOfPrintReadyMetafile()
1117 const {
1118 return render_page_list_index_ == print_ready_metafile_page_count_ - 1;
1119 }
1120
1121 bool PrintWebViewHelper::PrintPreviewContext::IsFinalPageRendered() const {
1122 return (size_t)(render_page_list_index_ + 1) == render_page_list_.size();
1123 }
1124
1125 void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages(
1126 bool generate_draft_pages) {
1127 generate_draft_pages_ = generate_draft_pages;
1128 }
1129
1130 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const { 1101 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const {
1131 return frame_; 1102 return frame_;
1132 } 1103 }
1133 1104
1134 WebKit::WebNode* PrintWebViewHelper::PrintPreviewContext::node() const { 1105 WebKit::WebNode* PrintWebViewHelper::PrintPreviewContext::node() const {
1135 return node_.get(); 1106 return node_.get();
1136 } 1107 }
1137 1108
1138 int PrintWebViewHelper::PrintPreviewContext::total_page_count() const { 1109 int PrintWebViewHelper::PrintPreviewContext::total_page_count() const {
1139 return total_page_count_; 1110 return total_page_count_;
1140 } 1111 }
1141 1112
1142 bool PrintWebViewHelper::PrintPreviewContext::generate_draft_pages() {
1143 return generate_draft_pages_;
1144 }
1145
1146 printing::PreviewMetafile* 1113 printing::PreviewMetafile*
1147 PrintWebViewHelper::PrintPreviewContext::metafile() const { 1114 PrintWebViewHelper::PrintPreviewContext::metafile() const {
1148 return metafile_.get(); 1115 return metafile_.get();
1149 } 1116 }
1150 1117
1151 const PrintMsg_Print_Params& 1118 const PrintMsg_Print_Params&
1152 PrintWebViewHelper::PrintPreviewContext::print_params() const { 1119 PrintWebViewHelper::PrintPreviewContext::print_params() const {
1153 return *print_params_; 1120 return *print_params_;
1154 } 1121 }
1155 1122
1156 const gfx::Size& 1123 const gfx::Size&
1157 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { 1124 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const {
1158 return prep_frame_view_->GetPrintCanvasSize(); 1125 return prep_frame_view_->GetPrintCanvasSize();
1159 } 1126 }
1160 1127
1161 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { 1128 void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
1162 prep_frame_view_.reset(); 1129 prep_frame_view_.reset();
1163 metafile_.reset(); 1130 metafile_.reset();
1164 render_page_list_.clear(); 1131 rendered_pages_.clear();
1165 } 1132 }
OLDNEW
« no previous file with comments | « chrome/renderer/print_web_view_helper.h ('k') | chrome/renderer/print_web_view_helper_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698