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

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

Issue 7822014: Fix the print preview regression bug caused by r98926. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refactored the code as per comments. Created 9 years, 3 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
« no previous file with comments | « chrome/renderer/print_web_view_helper.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 PrintHostMsg_DidGetPreviewPageCount_Params params; 695 PrintHostMsg_DidGetPreviewPageCount_Params params;
696 params.page_count = print_preview_context_.total_page_count(); 696 params.page_count = print_preview_context_.total_page_count();
697 params.is_modifiable = print_preview_context_.IsModifiable(); 697 params.is_modifiable = print_preview_context_.IsModifiable();
698 params.document_cookie = print_pages_params_->params.document_cookie; 698 params.document_cookie = print_pages_params_->params.document_cookie;
699 params.preview_request_id = print_pages_params_->params.preview_request_id; 699 params.preview_request_id = print_pages_params_->params.preview_request_id;
700 params.clear_preview_data = print_preview_context_.generate_draft_pages(); 700 params.clear_preview_data = print_preview_context_.generate_draft_pages();
701 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params)); 701 Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params));
702 if (CheckForCancel()) 702 if (CheckForCancel())
703 return false; 703 return false;
704 704
705 int page_number; 705 while (!print_preview_context_.IsFinalPageRendered()) {
kmadhusu 2011/09/01 18:40:20 GetNextPageNumber() function needs to be called wh
706 while ((page_number = print_preview_context_.GetNextPageNumber()) >= 0) { 706 int page_number = print_preview_context_.GetNextPageNumber();
707 DCHECK(page_number >= 0);
707 if (!RenderPreviewPage(page_number)) 708 if (!RenderPreviewPage(page_number))
708 return false; 709 return false;
710
709 if (CheckForCancel()) 711 if (CheckForCancel())
710 return false; 712 return false;
713
714 // AllPagesRendered() will be called only once i.e., after rendering the
vandebo (ex-Chrome) 2011/09/01 18:53:56 I wouldn't include the second part of this comment
kmadhusu 2011/09/01 20:07:14 Done..
715 // required pages. This code is here because if we are previewing a PDF
716 // file, we need to invoke PrepareFrameAndViewForPrint::FinishPrinting()
717 // before calling PreviewMetafile::FinishDocument().
718 //
719 // This function call ordering is not required if we are previewing a
720 // normal html page. We can invoke PreviewMetafile::FinishDocument() as
721 // soon as the print ready doucment is available.
722 if (print_preview_context_.IsFinalPageRendered())
723 print_preview_context_.AllPagesRendered();
724
711 if (print_preview_context_.IsLastPageOfPrintReadyMetafile()) { 725 if (print_preview_context_.IsLastPageOfPrintReadyMetafile()) {
vandebo (ex-Chrome) 2011/09/01 18:53:56 To help enforce the comment, you can add a DCHECK
kmadhusu 2011/09/01 20:07:14 Done.
712 // Finished generating preview. Finalize the document.
713 if (!FinalizePrintReadyDocument()) 726 if (!FinalizePrintReadyDocument())
714 return false; 727 return false;
715 } 728 }
716 } 729 }
717 print_preview_context_.AllPagesRendered();
718 print_preview_context_.Finished(); 730 print_preview_context_.Finished();
719 return true; 731 return true;
720 } 732 }
721 733
722 bool PrintWebViewHelper::FinalizePrintReadyDocument() { 734 bool PrintWebViewHelper::FinalizePrintReadyDocument() {
723 DCHECK(!is_print_ready_metafile_sent_); 735 DCHECK(!is_print_ready_metafile_sent_);
724 print_preview_context_.FinalizePrintReadyDocument(); 736 print_preview_context_.FinalizePrintReadyDocument();
725 737
726 // Get the size of the resulting metafile. 738 // Get the size of the resulting metafile.
727 printing::PreviewMetafile* metafile = print_preview_context_.metafile(); 739 printing::PreviewMetafile* metafile = print_preview_context_.metafile();
(...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after
1463 return false; 1475 return false;
1464 std::string mime(frame()->dataSource()->response().mimeType().utf8()); 1476 std::string mime(frame()->dataSource()->response().mimeType().utf8());
1465 return mime != "application/pdf"; 1477 return mime != "application/pdf";
1466 } 1478 }
1467 1479
1468 bool PrintWebViewHelper::PrintPreviewContext::IsLastPageOfPrintReadyMetafile() 1480 bool PrintWebViewHelper::PrintPreviewContext::IsLastPageOfPrintReadyMetafile()
1469 const { 1481 const {
1470 return current_page_index_ == print_ready_metafile_page_count_; 1482 return current_page_index_ == print_ready_metafile_page_count_;
1471 } 1483 }
1472 1484
1485 bool PrintWebViewHelper::PrintPreviewContext::IsFinalPageRendered() const {
1486 return (size_t)current_page_index_ == pages_to_render_.size();
vandebo (ex-Chrome) 2011/09/01 18:53:56 static_cast<size_t>
kmadhusu 2011/09/01 20:07:14 Done.
1487 }
1488
1473 void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages( 1489 void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages(
1474 bool generate_draft_pages) { 1490 bool generate_draft_pages) {
1475 generate_draft_pages_ = generate_draft_pages; 1491 generate_draft_pages_ = generate_draft_pages;
1476 } 1492 }
1477 1493
1478 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const { 1494 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const {
1479 return frame_; 1495 return frame_;
1480 } 1496 }
1481 1497
1482 WebKit::WebNode* PrintWebViewHelper::PrintPreviewContext::node() const { 1498 WebKit::WebNode* PrintWebViewHelper::PrintPreviewContext::node() const {
(...skipping 22 matching lines...) Expand all
1505 const gfx::Size& 1521 const gfx::Size&
1506 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { 1522 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const {
1507 return prep_frame_view_->GetPrintCanvasSize(); 1523 return prep_frame_view_->GetPrintCanvasSize();
1508 } 1524 }
1509 1525
1510 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { 1526 void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
1511 prep_frame_view_.reset(); 1527 prep_frame_view_.reset();
1512 metafile_.reset(); 1528 metafile_.reset();
1513 pages_to_render_.clear(); 1529 pages_to_render_.clear();
1514 } 1530 }
OLDNEW
« no previous file with comments | « chrome/renderer/print_web_view_helper.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698