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

Unified Diff: chrome/renderer/printing/print_web_view_helper.cc

Issue 12288011: WebKit::WebFrame::printEnd on linux should be called before metafile is closed. (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 side-by-side diff with in-line comments
Download patch
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;
}
« no previous file with comments | « chrome/renderer/printing/print_web_view_helper.h ('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