Index: chrome/renderer/printing/print_web_view_helper.cc |
diff --git a/chrome/renderer/printing/print_web_view_helper.cc b/chrome/renderer/printing/print_web_view_helper.cc |
index 952f2c9879be38cb55fa7638f4b95e61902fbed9..6c7e00f4b636f6a12267c41e19d899718a66268c 100644 |
--- a/chrome/renderer/printing/print_web_view_helper.cc |
+++ b/chrome/renderer/printing/print_web_view_helper.cc |
@@ -1250,16 +1250,17 @@ void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { |
notify_browser_of_print_failure_ = true; |
} |
+void PrintWebViewHelper::OnFramePreparedForPrintPages() { |
+ PrintPages(); |
+ FinishFramePrinting(); |
+} |
+ |
void PrintWebViewHelper::PrintPages() { |
- // Delete prep_frame_view_ on exit. |
- scoped_ptr<PrepareFrameAndViewForPrint> prep_frame_view; |
- prep_frame_view.swap(prep_frame_view_); |
- if (!prep_frame_view) // Printing is already canceled or failed. |
+ if (!prep_frame_view_) // Printing is already canceled or failed. |
return; |
+ prep_frame_view_->StartPrinting(); |
- prep_frame_view->StartPrinting(); |
- |
- int page_count = prep_frame_view->GetExpectedPageCount(); |
+ int page_count = prep_frame_view_->GetExpectedPageCount(); |
if (!page_count) { |
LOG(ERROR) << "Can't print 0 pages."; |
return DidFinishPrinting(FAIL_PRINT); |
@@ -1281,13 +1282,17 @@ void PrintWebViewHelper::PrintPages() { |
} |
#endif // !defined(OS_CHROMEOS) |
- if (!PrintPagesNative(prep_frame_view->frame(), prep_frame_view->node(), |
- page_count, prep_frame_view->GetPrintCanvasSize())) { |
+ if (!PrintPagesNative(prep_frame_view_->frame(), prep_frame_view_->node(), |
+ page_count, prep_frame_view_->GetPrintCanvasSize())) { |
LOG(ERROR) << "Printing failed."; |
return DidFinishPrinting(FAIL_PRINT); |
} |
} |
+void PrintWebViewHelper::FinishFramePrinting() { |
+ prep_frame_view_.reset(); |
+} |
+ |
#if defined(OS_MACOSX) || defined(OS_WIN) |
bool PrintWebViewHelper::PrintPagesNative(WebKit::WebFrame* frame, |
const WebKit::WebNode& node, |
@@ -1536,7 +1541,8 @@ bool PrintWebViewHelper::RenderPagesForPrint(WebKit::WebFrame* frame, |
print_pages_params_->pages.empty()); |
prep_frame_view_->CopySelectionIfNeeded( |
render_view()->GetWebkitPreferences(), |
- base::Bind(&PrintWebViewHelper::PrintPages, base::Unretained(this))); |
+ base::Bind(&PrintWebViewHelper::OnFramePreparedForPrintPages, |
+ base::Unretained(this))); |
return true; |
} |