| Index: chrome/renderer/print_web_view_helper_win.cc
|
| diff --git a/chrome/renderer/print_web_view_helper_win.cc b/chrome/renderer/print_web_view_helper_win.cc
|
| index 8badae0ffa53566a5df9dfd715c94cd96dc714ff..b43c22f6fc85f3d9c69d55abfa9736c119cdb2f8 100644
|
| --- a/chrome/renderer/print_web_view_helper_win.cc
|
| +++ b/chrome/renderer/print_web_view_helper_win.cc
|
| @@ -90,8 +90,8 @@ void PrintWebViewHelper::PrintPageInternal(
|
| params.params.dpi);
|
|
|
| // Render page for printing.
|
| - RenderPage(params.params, &scale_factor, page_number, false, frame,
|
| - &metafile);
|
| + metafile.reset(RenderPage(params.params, &scale_factor, page_number, false,
|
| + frame, metafile.get()));
|
|
|
| // Close the device context to retrieve the compiled metafile.
|
| if (!metafile->FinishDocument())
|
| @@ -127,19 +127,17 @@ void PrintWebViewHelper::RenderPreviewPage(int page_number) {
|
| float scale_factor = static_cast<float>(print_params.desired_dpi /
|
| print_params.dpi);
|
|
|
| - // |metafile| is needed for RenderPage() below. |metafile| will not take the
|
| - // ownership of |print_preview_context_| metafile.
|
| - scoped_ptr<Metafile> metafile(print_preview_context_.metafile());
|
| -
|
| base::TimeTicks begin_time = base::TimeTicks::Now();
|
| - RenderPage(print_params, &scale_factor, page_number, true,
|
| - print_preview_context_.frame(), &metafile);
|
| + printing::Metafile* render_page_result =
|
| + RenderPage(print_params, &scale_factor, page_number, true,
|
| + print_preview_context_.frame(),
|
| + print_preview_context_.metafile());
|
| + // In the preview flow, RenderPage will never return a new metafile.
|
| + DCHECK_EQ(render_page_result, print_preview_context_.metafile());
|
|
|
| print_preview_context_.RenderedPreviewPage(
|
| base::TimeTicks::Now() - begin_time);
|
|
|
| - // Release since |print_preview_context_| is the real owner.
|
| - metafile.release();
|
| scoped_ptr<printing::Metafile> page_metafile;
|
| if (print_preview_context_.IsModifiable()) {
|
| page_metafile.reset(
|
| @@ -148,9 +146,9 @@ void PrintWebViewHelper::RenderPreviewPage(int page_number) {
|
| PreviewPageRendered(page_number, page_metafile.get());
|
| }
|
|
|
| -void PrintWebViewHelper::RenderPage(
|
| +Metafile* PrintWebViewHelper::RenderPage(
|
| const PrintMsg_Print_Params& params, float* scale_factor, int page_number,
|
| - bool is_preview, WebFrame* frame, scoped_ptr<Metafile>* metafile) {
|
| + bool is_preview, WebFrame* frame, Metafile* metafile) {
|
| PageSizeMargins page_layout_in_points;
|
| GetPageSizeAndMarginsInPoints(frame, page_number, params,
|
| &page_layout_in_points);
|
| @@ -178,17 +176,15 @@ void PrintWebViewHelper::RenderPage(
|
| static_cast<int>(page_layout_in_points.margin_top),
|
| static_cast<int>(page_layout_in_points.content_width),
|
| static_cast<int>(page_layout_in_points.content_height));
|
| - SkDevice* device = (*metafile)->StartPageForVectorCanvas(
|
| + SkDevice* device = metafile->StartPageForVectorCanvas(
|
| page_size, content_area, frame->getPrintPageShrink(page_number));
|
| DCHECK(device);
|
| // The printPage method may take a reference to the canvas we pass down, so it
|
| // can't be a stack object.
|
| SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device);
|
| canvas->unref(); // SkRefPtr and new both took a reference.
|
| - if (is_preview) {
|
| - printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvas.get(),
|
| - metafile->get());
|
| - }
|
| + if (is_preview)
|
| + printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvas.get(), metafile);
|
|
|
| float webkit_scale_factor = frame->printPage(page_number, canvas.get());
|
| if (*scale_factor <= 0 || webkit_scale_factor <= 0) {
|
| @@ -199,7 +195,7 @@ void PrintWebViewHelper::RenderPage(
|
| *scale_factor /= webkit_scale_factor;
|
| }
|
|
|
| - bool result = (*metafile)->FinishPage();
|
| + bool result = metafile->FinishPage();
|
| DCHECK(result);
|
|
|
| if (!params.supports_alpha_blend) {
|
| @@ -210,10 +206,10 @@ void PrintWebViewHelper::RenderPage(
|
| if (platform_device && platform_device->AlphaBlendUsed()) {
|
| // Currently, we handle alpha blend transparency for a single page.
|
| // Therefore, expecting a metafile with page count 1.
|
| - DCHECK_EQ(1U, (*metafile)->GetPageCount());
|
| + DCHECK_EQ(1U, metafile->GetPageCount());
|
|
|
| // Close the device context to retrieve the compiled metafile.
|
| - if (!(*metafile)->FinishDocument())
|
| + if (!metafile->FinishDocument())
|
| NOTREACHED();
|
|
|
| // Page used alpha blend, but printer doesn't support it. Rewrite the
|
| @@ -235,26 +231,27 @@ void PrintWebViewHelper::RenderPage(
|
| HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
|
| FillRect(bitmap_dc, &rect, whiteBrush);
|
|
|
| - scoped_ptr<Metafile> metafile2(new printing::NativeMetafile);
|
| + Metafile* metafile2(new printing::NativeMetafile);
|
| metafile2->Init();
|
| HDC hdc = metafile2->context();
|
| DCHECK(hdc);
|
| skia::InitializeDC(hdc);
|
|
|
| - RECT metafile_bounds = (*metafile)->GetPageBounds(1).ToRECT();
|
| + RECT metafile_bounds = metafile->GetPageBounds(1).ToRECT();
|
| // Process the old metafile, placing all non-AlphaBlend calls into the
|
| // new metafile, and copying the results of all the AlphaBlend calls
|
| // from the bitmap DC.
|
| EnumEnhMetaFile(hdc,
|
| - (*metafile)->emf(),
|
| + metafile->emf(),
|
| EnhMetaFileProc,
|
| &bitmap_dc,
|
| &metafile_bounds);
|
|
|
| SelectObject(bitmap_dc, old_bitmap);
|
| - metafile->reset(metafile2.release());
|
| + return metafile2;
|
| }
|
| }
|
| + return metafile;
|
| }
|
|
|
| bool PrintWebViewHelper::CopyMetafileDataToSharedMem(
|
|
|