Skip to content

Commit

Permalink
Revert 76553 - Applying factory pattern (through NativeMetafileFactor…
Browse files Browse the repository at this point in the history
…y class). It is used to retrieve different printing contexts (based on the platform and user preferences).

BUG=NONE
TEST=NONE

Review URL: http://codereview.chromium.org/6544028

TBR=dpapad@chromium.org
Review URL: http://codereview.chromium.org/6594121

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76555 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
jam@chromium.org committed Mar 2, 2011
1 parent f3e9d6e commit 7756e5b
Show file tree
Hide file tree
Showing 30 changed files with 213 additions and 620 deletions.
3 changes: 1 addition & 2 deletions chrome/browser/printing/print_view_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
#include "content/browser/tab_contents/navigation_entry.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "grit/generated_resources.h"
#include "printing/native_metafile_factory.h"
#include "printing/native_metafile.h"
#include "printing/printed_document.h"
#include "ui/base/l10n/l10n_util.h"
Expand Down Expand Up @@ -131,7 +130,7 @@ void PrintViewManager::OnDidPrintPage(
}
}

scoped_ptr<NativeMetafile> metafile(NativeMetafileFactory::CreateMetafile());
scoped_ptr<NativeMetafile> metafile(new NativeMetafile());
if (metafile_must_be_valid) {
if (!metafile->Init(shared_buf.memory(), params.data_size)) {
NOTREACHED() << "Invalid metafile header";
Expand Down
39 changes: 16 additions & 23 deletions chrome/common/common_param_traits_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,12 @@
#include "ipc/ipc_message_utils.h"
#include "net/base/host_port_pair.h"
#include "printing/backend/print_backend.h"
#include "printing/native_metafile.h"
#include "printing/page_range.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/rect.h"

#if defined(OS_WIN)
#include "printing/native_metafile_factory.h"
#include "printing/native_metafile.h"
#endif

// Tests that serialize/deserialize correctly understand each other
TEST(IPCMessageTest, Serialize) {
const char* serialize_cases[] = {
Expand Down Expand Up @@ -231,45 +227,42 @@ TEST(IPCMessageTest, PageRange) {
EXPECT_TRUE(input == output);
}

// Tests printing::Emf serialization.
// Tests printing::NativeMetafile serialization.
// TODO(sanjeevr): Make this test meaningful for non-Windows platforms. We
// need to initialize the metafile using alternate means on the other OSes.
#if defined(OS_WIN)
TEST(IPCMessageTest, Metafile) {
scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
printing::NativeMetafile metafile;
RECT test_rect = {0, 0, 100, 100};
// Create a metafile using the screen DC as a reference.
metafile->CreateDc(NULL, NULL);
metafile->CloseDc();
// Create a metsfile using the screen DC as a reference.
metafile.CreateDc(NULL, NULL);
metafile.CloseDc();

IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<printing::NativeMetafile>::Write(&msg, *metafile);
IPC::ParamTraits<printing::NativeMetafile>::Write(&msg, metafile);

scoped_ptr<printing::NativeMetafile> output(
printing::NativeMetafileFactory::CreateMetafile());
printing::NativeMetafile output;
void* iter = NULL;
EXPECT_TRUE(IPC::ParamTraits<printing::NativeMetafile>::Read(
&msg, &iter, output.get()));
&msg, &iter, &output));

EXPECT_EQ(metafile->GetDataSize(), output->GetDataSize());
EXPECT_EQ(metafile->GetBounds(), output->GetBounds());
EXPECT_EQ(::GetDeviceCaps(metafile->hdc(), LOGPIXELSX),
::GetDeviceCaps(output->hdc(), LOGPIXELSX));
EXPECT_EQ(metafile.GetDataSize(), output.GetDataSize());
EXPECT_EQ(metafile.GetBounds(), output.GetBounds());
EXPECT_EQ(::GetDeviceCaps(metafile.hdc(), LOGPIXELSX),
::GetDeviceCaps(output.hdc(), LOGPIXELSX));

// Also test the corrupt case.
IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL);
// Write some bogus metafile data.
const size_t bogus_data_size = metafile->GetDataSize() * 2;
const size_t bogus_data_size = metafile.GetDataSize() * 2;
scoped_array<char> bogus_data(new char[bogus_data_size]);
memset(bogus_data.get(), 'B', bogus_data_size);
bad_msg.WriteData(bogus_data.get(), bogus_data_size);
// Make sure we don't read out the metafile!
scoped_ptr<printing::NativeMetafile> bad_output(
printing::NativeMetafileFactory::CreateMetafile());
printing::NativeMetafile bad_output;
iter = NULL;
EXPECT_FALSE(IPC::ParamTraits<printing::NativeMetafile>::Read(
&bad_msg, &iter, bad_output.get()));
&bad_msg, &iter, &bad_output));
}
#endif // defined(OS_WIN)

Expand Down
22 changes: 8 additions & 14 deletions chrome/plugin/webplugin_delegate_stub.cc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

Expand All @@ -14,6 +14,7 @@
#include "chrome/plugin/plugin_channel.h"
#include "chrome/plugin/plugin_thread.h"
#include "chrome/plugin/webplugin_proxy.h"
#include "printing/native_metafile.h"
#include "third_party/npapi/bindings/npapi.h"
#include "third_party/npapi/bindings/npruntime.h"
#include "skia/ext/platform_device.h"
Expand All @@ -22,12 +23,6 @@
#include "webkit/plugins/npapi/webplugin_delegate_impl.h"
#include "webkit/glue/webcursor.h"

#if defined(OS_WIN)
#include "base/scoped_ptr.h"
#include "printing/native_metafile_factory.h"
#include "printing/native_metafile.h"
#endif // defined(OS_WIN)

#if defined(ENABLE_GPU)
#include "app/gfx/gl/gl_context.h"
#endif
Expand Down Expand Up @@ -286,27 +281,26 @@ void WebPluginDelegateStub::OnDidPaint() {
void WebPluginDelegateStub::OnPrint(base::SharedMemoryHandle* shared_memory,
uint32* size) {
#if defined(OS_WIN)
scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
if (!metafile->CreateDc(NULL, NULL)) {
printing::NativeMetafile metafile;
if (!metafile.CreateDc(NULL, NULL)) {
NOTREACHED();
return;
}
HDC hdc = metafile->hdc();
HDC hdc = metafile.hdc();
skia::PlatformDevice::InitializeDC(hdc);
delegate_->Print(hdc);
if (!metafile->CloseDc()) {
if (!metafile.CloseDc()) {
NOTREACHED();
return;
}

*size = metafile->GetDataSize();
*size = metafile.GetDataSize();
DCHECK(*size);
base::SharedMemory shared_buf;
CreateSharedBuffer(*size, &shared_buf, shared_memory);

// Retrieve a copy of the data.
bool success = metafile->GetData(shared_buf.memory(), *size);
bool success = metafile.GetData(shared_buf.memory(), *size);
DCHECK(success);
#else
// TODO(port): plugin printing.
Expand Down
9 changes: 3 additions & 6 deletions chrome/renderer/mock_printer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
#include "chrome/common/render_messages.h"
#include "chrome/common/render_messages_params.h"
#include "ipc/ipc_message_utils.h"
#include "printing/native_metafile_factory.h"
#include "printing/native_metafile.h"
#include "printing/units.h"
#include "testing/gtest/include/gtest/gtest.h"

Expand Down Expand Up @@ -133,10 +131,9 @@ void MockPrinter::PrintPage(const ViewHostMsg_DidPrintPage_Params& params) {
base::SharedMemory metafile_data(params.metafile_data_handle, true);
#endif
metafile_data.Map(params.data_size);
scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
metafile->Init(metafile_data.memory(), params.data_size);
printing::Image image(*metafile);
printing::NativeMetafile metafile;
metafile.Init(metafile_data.memory(), params.data_size);
printing::Image image(metafile);
MockPrinterPage* page_data = new MockPrinterPage(metafile_data.memory(),
params.data_size,
image);
Expand Down
20 changes: 8 additions & 12 deletions chrome/renderer/print_web_view_helper_linux.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@

#include "base/file_descriptor_posix.h"
#include "base/logging.h"
#include "base/scoped_ptr.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/render_messages_params.h"
#include "printing/native_metafile_factory.h"
#include "printing/native_metafile.h"
#include "skia/ext/vector_canvas.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
Expand All @@ -25,23 +23,22 @@ void PrintWebViewHelper::CreatePreviewDocument(
const ViewMsg_PrintPages_Params& params, WebFrame* frame) {
// We only can use PDF in the renderer because Cairo needs to create a
// temporary file for a PostScript surface.
scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
printing::NativeMetafile metafile;
int page_count = 0;

if (!RenderPages(params, frame, false, &page_count, metafile.get()))
if (!RenderPages(params, frame, false, &page_count, &metafile))
return;

// Get the size of the resulting metafile.
uint32 buf_size = metafile->GetDataSize();
uint32 buf_size = metafile.GetDataSize();
DCHECK_GT(buf_size, 0u);

ViewHostMsg_DidPreviewDocument_Params preview_params;
preview_params.document_cookie = params.params.document_cookie;
preview_params.expected_pages_count = page_count;
preview_params.data_size = buf_size;

if (!CopyMetafileDataToSharedMem(metafile.get(),
if (!CopyMetafileDataToSharedMem(&metafile,
&(preview_params.metafile_data_handle))) {
preview_params.expected_pages_count = 0;
preview_params.data_size = 0;
Expand All @@ -54,8 +51,7 @@ void PrintWebViewHelper::PrintPages(const ViewMsg_PrintPages_Params& params,
WebNode* node) {
// We only can use PDF in the renderer because Cairo needs to create a
// temporary file for a PostScript surface.
scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
printing::NativeMetafile metafile;
int page_count = 0;
bool send_expected_page_count =
#if defined(OS_CHROMEOS)
Expand All @@ -65,12 +61,12 @@ void PrintWebViewHelper::PrintPages(const ViewMsg_PrintPages_Params& params,
#endif // defined(OS_CHROMEOS)

if (!RenderPages(params, frame, send_expected_page_count, &page_count,
metafile.get())) {
&metafile)) {
return;
}

// Get the size of the resulting metafile.
uint32 buf_size = metafile->GetDataSize();
uint32 buf_size = metafile.GetDataSize();
DCHECK_GT(buf_size, 0u);

#if defined(OS_CHROMEOS)
Expand Down Expand Up @@ -109,7 +105,7 @@ void PrintWebViewHelper::PrintPages(const ViewMsg_PrintPages_Params& params,
NOTREACHED() << "Map failed";
return;
}
metafile->GetData(shared_buf.memory(), buf_size);
metafile.GetData(shared_buf.memory(), buf_size);
printed_page_params.data_size = buf_size;
shared_buf.GiveToProcess(base::GetCurrentProcessHandle(),
&(printed_page_params.metafile_data_handle));
Expand Down
31 changes: 13 additions & 18 deletions chrome/renderer/print_web_view_helper_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,17 @@
#import <AppKit/AppKit.h>

#include "base/logging.h"
#include "base/scoped_ptr.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/render_messages_params.h"
#include "printing/native_metafile_factory.h"
#include "printing/native_metafile.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"

using WebKit::WebFrame;

void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params,
const gfx::Size& canvas_size,
WebFrame* frame) {
scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
if (!metafile->Init())
printing::NativeMetafile metafile;
if (!metafile.Init())
return;

float scale_factor = frame->getPrintPageShrink(params.page_number);
Expand All @@ -30,11 +26,11 @@
// Render page for printing.
gfx::Point origin(0.0f, 0.0f);
RenderPage(params.params.printable_size, origin, scale_factor, page_number,
frame, metafile.get());
metafile->Close();
frame, &metafile);
metafile.Close();

ViewHostMsg_DidPrintPage_Params page_params;
page_params.data_size = metafile->GetDataSize();
page_params.data_size = metafile.GetDataSize();
page_params.page_number = page_number;
page_params.document_cookie = params.params.document_cookie;
page_params.actual_shrink = scale_factor;
Expand All @@ -45,7 +41,7 @@
params.params.printable_size.height());

// Ask the browser to create the shared memory for us.
if (!CopyMetafileDataToSharedMem(metafile.get(),
if (!CopyMetafileDataToSharedMem(&metafile,
&(page_params.metafile_data_handle))) {
page_params.data_size = 0;
}
Expand All @@ -65,35 +61,34 @@ PrepareFrameAndViewForPrint prep_frame_view(printParams,
if (!page_count)
return;

scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
if (!metafile->Init())
printing::NativeMetafile metafile;
if (!metafile.Init())
return;

float scale_factor = frame->getPrintPageShrink(0);
gfx::Point origin(printParams.margin_left, printParams.margin_top);
if (params.pages.empty()) {
for (int i = 0; i < page_count; ++i) {
RenderPage(printParams.page_size, origin, scale_factor, i, frame,
metafile.get());
&metafile);
}
} else {
for (size_t i = 0; i < params.pages.size(); ++i) {
if (params.pages[i] >= page_count)
break;
RenderPage(printParams.page_size, origin, scale_factor,
static_cast<int>(params.pages[i]), frame, metafile.get());
static_cast<int>(params.pages[i]), frame, &metafile);
}
}
metafile->Close();
metafile.Close();

ViewHostMsg_DidPreviewDocument_Params preview_params;
preview_params.data_size = metafile->GetDataSize();
preview_params.data_size = metafile.GetDataSize();
preview_params.document_cookie = params.params.document_cookie;
preview_params.expected_pages_count = page_count;

// Ask the browser to create the shared memory for us.
if (!CopyMetafileDataToSharedMem(metafile.get(),
if (!CopyMetafileDataToSharedMem(&metafile,
&(preview_params.metafile_data_handle))) {
preview_params.data_size = 0;
preview_params.expected_pages_count = 0;
Expand Down
10 changes: 3 additions & 7 deletions chrome/renderer/print_web_view_helper_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
#include "base/process_util.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/render_messages_params.h"
#include "printing/native_metafile_factory.h"
#include "printing/native_metafile.h"
#include "printing/units.h"
#include "skia/ext/vector_canvas.h"
#include "skia/ext/vector_platform_device.h"
Expand Down Expand Up @@ -69,8 +67,7 @@ void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params,
WebFrame* frame) {
// Generate a memory-based metafile. It will use the current screen's DPI.
// Each metafile contains a single page.
scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
scoped_ptr<printing::NativeMetafile> metafile(new printing::NativeMetafile);
metafile->CreateDc(NULL, NULL);
DCHECK(metafile->hdc());
skia::PlatformDevice::InitializeDC(metafile->hdc());
Expand Down Expand Up @@ -136,8 +133,7 @@ void PrintWebViewHelper::CreatePreviewDocument(
// PDF backend" work is completed for windows, make changes to replace this
// EMF with PDF metafile.
// http://code.google.com/p/chromium/issues/detail?id=62889
scoped_ptr<printing::NativeMetafile> metafile(
printing::NativeMetafileFactory::CreateMetafile());
scoped_ptr<printing::NativeMetafile> metafile(new printing::NativeMetafile);
metafile->CreateDc(NULL, NULL);
DCHECK(metafile->hdc());
skia::PlatformDevice::InitializeDC(metafile->hdc());
Expand Down Expand Up @@ -262,7 +258,7 @@ void PrintWebViewHelper::RenderPage(
NOTREACHED();

scoped_ptr<printing::NativeMetafile> metafile2(
printing::NativeMetafileFactory::CreateMetafile());
new printing::NativeMetafile);
// Page used alpha blend, but printer doesn't support it. Rewrite the
// metafile and flatten out the transparency.
HDC bitmap_dc = CreateCompatibleDC(GetDC(NULL));
Expand Down
Loading

0 comments on commit 7756e5b

Please sign in to comment.