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

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

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