summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-11 21:54:06 +0000
committervandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-11 21:54:06 +0000
commit7d748990b39550c77aa914ba6846885dd7352e10 (patch)
tree3777582ee9816b3488f218b594db1918e5ebe752
parent03e204f307255e8f39aeb002f94b8eb04137e7f9 (diff)
downloadchromium_src-7d748990b39550c77aa914ba6846885dd7352e10.zip
chromium_src-7d748990b39550c77aa914ba6846885dd7352e10.tar.gz
chromium_src-7d748990b39550c77aa914ba6846885dd7352e10.tar.bz2
Connect the right metafiles for print preview on Linux and Windows.
+ Remove the NativeMetafileFactory since we can't just use preview flag. + Update each Metafile constructor site to use PreviewMetafile or NativeMetafileImpl. + Fix misc. problems blocking pdf generation on Windows. + Rename the metafile interface. BUG=NONE TEST=NONE Review URL: http://codereview.chromium.org/6826027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@81161 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/printing/print_dialog_gtk.cc5
-rw-r--r--chrome/browser/printing/print_dialog_gtk.h10
-rw-r--r--chrome/browser/printing/print_view_manager.cc10
-rw-r--r--chrome/browser/ui/webui/print_preview_handler.cc18
-rw-r--r--chrome/common/common_param_traits_unittest.cc5
-rw-r--r--chrome/renderer/mock_printer.cc11
-rw-r--r--chrome/renderer/print_web_view_helper.cc3
-rw-r--r--chrome/renderer/print_web_view_helper.h12
-rw-r--r--chrome/renderer/print_web_view_helper_linux.cc42
-rw-r--r--chrome/renderer/print_web_view_helper_mac.mm37
-rw-r--r--chrome/renderer/print_web_view_helper_win.cc137
-rw-r--r--content/plugin/webplugin_delegate_stub.cc17
-rw-r--r--content/renderer/render_view_browsertest.cc1
-rw-r--r--content/renderer/webplugin_delegate_proxy.cc10
-rw-r--r--printing/emf_win.h6
-rw-r--r--printing/image.cc14
-rw-r--r--printing/image.h9
-rw-r--r--printing/image_cairo.cc4
-rw-r--r--printing/image_mac.cc5
-rw-r--r--printing/image_win.cc5
-rw-r--r--printing/metafile.h (renamed from printing/native_metafile.h)11
-rw-r--r--printing/metafile_impl.h33
-rw-r--r--printing/metafile_skia_wrapper.cc (renamed from printing/native_metafile_skia_wrapper.cc)24
-rw-r--r--printing/metafile_skia_wrapper.h34
-rw-r--r--printing/native_metafile_factory.cc47
-rw-r--r--printing/native_metafile_factory.h42
-rw-r--r--printing/native_metafile_skia_wrapper.h34
-rw-r--r--printing/pdf_metafile_cairo_linux.h13
-rw-r--r--printing/pdf_metafile_cg_mac.h14
-rw-r--r--printing/pdf_metafile_skia.h15
-rw-r--r--printing/print_dialog_gtk_interface.h4
-rw-r--r--printing/printed_document.cc10
-rw-r--r--printing/printed_document.h4
-rw-r--r--printing/printed_document_cairo.cc2
-rw-r--r--printing/printed_document_mac.cc6
-rw-r--r--printing/printed_document_win.cc2
-rw-r--r--printing/printed_page.cc10
-rw-r--r--printing/printed_page.h8
-rw-r--r--printing/printing.gyp9
-rw-r--r--printing/printing_context_cairo.cc3
-rw-r--r--printing/printing_context_cairo.h7
-rw-r--r--skia/ext/vector_platform_device_skia.h6
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc25
43 files changed, 308 insertions, 416 deletions
diff --git a/chrome/browser/printing/print_dialog_gtk.cc b/chrome/browser/printing/print_dialog_gtk.cc
index 24d87fb..4f549db 100644
--- a/chrome/browser/printing/print_dialog_gtk.cc
+++ b/chrome/browser/printing/print_dialog_gtk.cc
@@ -17,6 +17,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window.h"
+#include "printing/metafile.h"
#include "printing/print_settings_initializer_gtk.h"
// static
@@ -85,7 +86,7 @@ void PrintDialogGtk::ShowDialog(
gtk_widget_show(dialog_);
}
-void PrintDialogGtk::PrintDocument(const NativeMetafile* metafile,
+void PrintDialogGtk::PrintDocument(const printing::Metafile* metafile,
const string16& document_name) {
// This runs on the print worker thread, does not block the UI thread.
DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -164,7 +165,7 @@ void PrintDialogGtk::OnResponse(GtkWidget* dialog, int response_id) {
}
}
-void PrintDialogGtk::SaveDocumentToDisk(const NativeMetafile* metafile,
+void PrintDialogGtk::SaveDocumentToDisk(const printing::Metafile* metafile,
const string16& document_name) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
diff --git a/chrome/browser/printing/print_dialog_gtk.h b/chrome/browser/printing/print_dialog_gtk.h
index 79266b3..c6d999f 100644
--- a/chrome/browser/printing/print_dialog_gtk.h
+++ b/chrome/browser/printing/print_dialog_gtk.h
@@ -13,7 +13,6 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "content/browser/browser_thread.h"
-#include "printing/native_metafile.h"
#include "printing/print_dialog_gtk_interface.h"
#include "printing/printing_context_cairo.h"
#include "ui/base/gtk/gtk_signal.h"
@@ -22,7 +21,10 @@ namespace base {
class WaitableEvent;
}
-using printing::NativeMetafile;
+namespace printing {
+class Metafile;
+}
+
using printing::PrintingContextCairo;
// Needs to be freed on the UI thread to clean up its GTK members variables.
@@ -38,7 +40,7 @@ class PrintDialogGtk
// printing::PrintDialogGtkInterface implementation.
virtual void ShowDialog(
PrintingContextCairo::PrintSettingsCallback* callback);
- virtual void PrintDocument(const NativeMetafile* metafile,
+ virtual void PrintDocument(const printing::Metafile* metafile,
const string16& document_name);
virtual void AddRefToDialog();
virtual void ReleaseDialog();
@@ -54,7 +56,7 @@ class PrintDialogGtk
CHROMEGTK_CALLBACK_1(PrintDialogGtk, void, OnResponse, int);
// Saves data in |metafile| to disk for document named |document_name|.
- void SaveDocumentToDisk(const NativeMetafile* metafile,
+ void SaveDocumentToDisk(const printing::Metafile* metafile,
const string16& document_name);
// Prints document named |document_name|.
diff --git a/chrome/browser/printing/print_view_manager.cc b/chrome/browser/printing/print_view_manager.cc
index 4d8cdda..fdae7ed 100644
--- a/chrome/browser/printing/print_view_manager.cc
+++ b/chrome/browser/printing/print_view_manager.cc
@@ -19,8 +19,8 @@
#include "content/common/notification_details.h"
#include "content/common/notification_source.h"
#include "grit/generated_resources.h"
-#include "printing/native_metafile.h"
-#include "printing/native_metafile_factory.h"
+#include "printing/metafile.h"
+#include "printing/metafile_impl.h"
#include "printing/printed_document.h"
#include "ui/base/l10n/l10n_util.h"
@@ -146,11 +146,9 @@ void PrintViewManager::OnDidPrintPage(
}
}
- scoped_ptr<NativeMetafile> metafile;
+ scoped_ptr<Metafile> metafile(new NativeMetafile);
if (metafile_must_be_valid) {
- metafile.reset(NativeMetafileFactory::CreateFromData(shared_buf.memory(),
- params.data_size));
- if (!metafile.get()) {
+ if (!metafile->InitFromData(shared_buf.memory(), params.data_size)) {
NOTREACHED() << "Invalid metafile header";
tab_contents()->Stop();
return;
diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc
index 08f506a..9811baf 100644
--- a/chrome/browser/ui/webui/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview_handler.cc
@@ -18,8 +18,8 @@
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "printing/backend/print_backend.h"
-#include "printing/native_metafile_factory.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
+#include "printing/metafile_impl.h"
#include "printing/print_job_constants.h"
namespace {
@@ -121,7 +121,7 @@ class EnumeratePrintersTaskProxy
class PrintToPdfTask : public Task {
public:
// Takes ownership of |metafile|.
- PrintToPdfTask(printing::NativeMetafile* metafile, const FilePath& path)
+ PrintToPdfTask(printing::Metafile* metafile, const FilePath& path)
: metafile_(metafile), path_(path) {
}
@@ -134,7 +134,7 @@ class PrintToPdfTask : public Task {
private:
// The metafile holding the PDF data.
- scoped_ptr<printing::NativeMetafile> metafile_;
+ scoped_ptr<printing::Metafile> metafile_;
// The absolute path where the file will be saved.
FilePath path_;
@@ -262,21 +262,15 @@ void PrintPreviewHandler::SelectFile() {
void PrintPreviewHandler::FileSelected(const FilePath& path,
int index, void* params) {
-#if defined(OS_POSIX)
PrintPreviewUIHTMLSource::PrintPreviewData data;
PrintPreviewUI* pp_ui = reinterpret_cast<PrintPreviewUI*>(web_ui_);
pp_ui->html_source()->GetPrintPreviewData(&data);
DCHECK(data.first != NULL);
DCHECK(data.second > 0);
- printing::NativeMetafile* metafile =
- printing::NativeMetafileFactory::CreateFromData(data.first->memory(),
- data.second);
- metafile->FinishDocument();
+ printing::PreviewMetafile* metafile = new printing::PreviewMetafile;
+ metafile->InitFromData(data.first->memory(), data.second);
PrintToPdfTask* task = new PrintToPdfTask(metafile, path);
BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task);
-#else
- NOTIMPLEMENTED();
-#endif
}
diff --git a/chrome/common/common_param_traits_unittest.cc b/chrome/common/common_param_traits_unittest.cc
index 1460986..bc47418 100644
--- a/chrome/common/common_param_traits_unittest.cc
+++ b/chrome/common/common_param_traits_unittest.cc
@@ -18,11 +18,6 @@
#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[] = {
diff --git a/chrome/renderer/mock_printer.cc b/chrome/renderer/mock_printer.cc
index a4efbfe..1a9236c 100644
--- a/chrome/renderer/mock_printer.cc
+++ b/chrome/renderer/mock_printer.cc
@@ -8,8 +8,7 @@
#include "base/shared_memory.h"
#include "chrome/common/print_messages.h"
#include "ipc/ipc_message_utils.h"
-#include "printing/native_metafile_factory.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile_impl.h"
#include "printing/units.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -137,11 +136,9 @@ void MockPrinter::PrintPage(const PrintHostMsg_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::CreateFromData(metafile_data.memory(),
- params.data_size));
- CHECK(metafile.get());
- printing::Image image(*metafile);
+ printing::NativeMetafile metafile;
+ metafile.InitFromData(metafile_data.memory(), params.data_size);
+ printing::Image image(metafile);
MockPrinterPage* page_data = new MockPrinterPage(metafile_data.memory(),
params.data_size,
image);
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc
index 5dbd07d..33ac578 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -15,6 +15,7 @@
#include "content/common/view_messages.h"
#include "content/renderer/render_view.h"
#include "grit/generated_resources.h"
+#include "printing/metafile.h"
#include "printing/units.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebConsoleMessage.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
@@ -636,7 +637,7 @@ void PrintWebViewHelper::RenderPagesForPreview(WebKit::WebFrame* frame,
#if defined(OS_POSIX)
bool PrintWebViewHelper::CopyMetafileDataToSharedMem(
- printing::NativeMetafile* metafile,
+ printing::Metafile* metafile,
base::SharedMemoryHandle* shared_mem_handle) {
uint32 buf_size = metafile->GetDataSize();
base::SharedMemoryHandle mem_handle;
diff --git a/chrome/renderer/print_web_view_helper.h b/chrome/renderer/print_web_view_helper.h
index aea048c..686e7d9 100644
--- a/chrome/renderer/print_web_view_helper.h
+++ b/chrome/renderer/print_web_view_helper.h
@@ -11,7 +11,7 @@
#include "base/time.h"
#include "content/renderer/render_view_observer.h"
#include "content/renderer/render_view_observer_tracker.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebViewClient.h"
#include "ui/gfx/size.h"
@@ -152,7 +152,7 @@ class PrintWebViewHelper : public RenderViewObserver ,
void PrintPageInternal(const PrintMsg_PrintPage_Params& params,
const gfx::Size& canvas_size,
WebKit::WebFrame* frame,
- printing::NativeMetafile* metafile,
+ printing::Metafile* metafile,
scoped_ptr<skia::VectorCanvas>* canvas);
#else
void PrintPageInternal(const PrintMsg_PrintPage_Params& params,
@@ -177,25 +177,25 @@ class PrintWebViewHelper : public RenderViewObserver ,
#if defined(OS_WIN)
void RenderPage(const PrintMsg_Print_Params& params, float* scale_factor,
int page_number, WebKit::WebFrame* frame,
- scoped_ptr<printing::NativeMetafile>* metafile);
+ scoped_ptr<printing::Metafile>* metafile);
#elif defined(OS_MACOSX)
void RenderPage(const gfx::Size& page_size, const gfx::Point& content_origin,
const float& scale_factor, int page_number,
- WebKit::WebFrame* frame, printing::NativeMetafile* metafile);
+ WebKit::WebFrame* frame, printing::Metafile* metafile);
#elif defined(OS_POSIX)
bool RenderPages(const PrintMsg_PrintPages_Params& params,
WebKit::WebFrame* frame,
WebKit::WebNode* node,
bool send_expected_page_count,
int* page_count,
- printing::NativeMetafile* metafile);
+ printing::Metafile* metafile);
#endif // defined(OS_WIN)
// Helper methods -----------------------------------------------------------
bool CopyAndPrint(WebKit::WebFrame* web_frame);
- bool CopyMetafileDataToSharedMem(printing::NativeMetafile* metafile,
+ bool CopyMetafileDataToSharedMem(printing::Metafile* metafile,
base::SharedMemoryHandle* shared_mem_handle);
static void GetPageSizeAndMarginsInPoints(
diff --git a/chrome/renderer/print_web_view_helper_linux.cc b/chrome/renderer/print_web_view_helper_linux.cc
index 30ddb6b..ecb7b7b 100644
--- a/chrome/renderer/print_web_view_helper_linux.cc
+++ b/chrome/renderer/print_web_view_helper_linux.cc
@@ -9,9 +9,9 @@
#include "base/memory/scoped_ptr.h"
#include "chrome/common/print_messages.h"
#include "content/common/view_messages.h"
-#include "printing/native_metafile_factory.h"
-#include "printing/native_metafile_skia_wrapper.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
+#include "printing/metafile_impl.h"
+#include "printing/metafile_skia_wrapper.h"
#include "skia/ext/vector_canvas.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
#include "ui/gfx/point.h"
@@ -26,17 +26,16 @@ using WebKit::WebNode;
void PrintWebViewHelper::CreatePreviewDocument(
const PrintMsg_PrintPages_Params& params, WebKit::WebFrame* frame,
WebKit::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::Create());
int page_count = 0;
+ printing::PreviewMetafile metafile;
+ if (!metafile.Init())
+ return;
- if (!RenderPages(params, frame, node, false, &page_count, metafile.get()))
+ if (!RenderPages(params, frame, node, 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);
PrintHostMsg_DidPreviewDocument_Params preview_params;
@@ -44,7 +43,7 @@ void PrintWebViewHelper::CreatePreviewDocument(
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;
@@ -55,10 +54,6 @@ void PrintWebViewHelper::CreatePreviewDocument(
void PrintWebViewHelper::PrintPages(const PrintMsg_PrintPages_Params& params,
WebFrame* frame,
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::Create());
int page_count = 0;
bool send_expected_page_count =
#if defined(OS_CHROMEOS)
@@ -67,13 +62,17 @@ void PrintWebViewHelper::PrintPages(const PrintMsg_PrintPages_Params& params,
true;
#endif // defined(OS_CHROMEOS)
+ printing::NativeMetafile metafile;
+ if (!metafile.Init())
+ return;
+
if (!RenderPages(params, frame, node, 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)
@@ -85,7 +84,7 @@ void PrintWebViewHelper::PrintPages(const PrintMsg_PrintPages_Params& params,
&sequence_number))) {
return;
}
- if (!metafile->SaveToFD(fd))
+ if (!metafile.SaveToFD(fd))
return;
// Tell the browser we've finished writing the file.
@@ -112,7 +111,7 @@ void PrintWebViewHelper::PrintPages(const PrintMsg_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));
@@ -149,7 +148,7 @@ bool PrintWebViewHelper::RenderPages(const PrintMsg_PrintPages_Params& params,
WebKit::WebNode* node,
bool send_expected_page_count,
int* page_count,
- printing::NativeMetafile* metafile) {
+ printing::Metafile* metafile) {
PrintMsg_Print_Params printParams = params.params;
scoped_ptr<skia::VectorCanvas> canvas;
@@ -197,7 +196,7 @@ void PrintWebViewHelper::PrintPageInternal(
const PrintMsg_PrintPage_Params& params,
const gfx::Size& canvas_size,
WebFrame* frame,
- printing::NativeMetafile* metafile,
+ printing::Metafile* metafile,
scoped_ptr<skia::VectorCanvas>* canvas) {
double content_width_in_points;
double content_height_in_points;
@@ -228,8 +227,7 @@ void PrintWebViewHelper::PrintPageInternal(
return;
canvas->reset(new skia::VectorCanvas(device));
- printing::NativeMetafileSkiaWrapper::SetMetafileOnCanvas(canvas->get(),
- metafile);
+ printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvas->get(), metafile);
frame->printPage(params.page_number, canvas->get());
// TODO(myhuang): We should handle transformation for paper margins.
diff --git a/chrome/renderer/print_web_view_helper_mac.mm b/chrome/renderer/print_web_view_helper_mac.mm
index b5c8b29..759cb6c 100644
--- a/chrome/renderer/print_web_view_helper_mac.mm
+++ b/chrome/renderer/print_web_view_helper_mac.mm
@@ -7,10 +7,9 @@
#import <AppKit/AppKit.h>
#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
#include "chrome/common/print_messages.h"
-#include "printing/native_metafile_factory.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
+#include "printing/metafile_impl.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
using WebKit::WebFrame;
@@ -19,9 +18,8 @@ void PrintWebViewHelper::PrintPageInternal(
const PrintMsg_PrintPage_Params& params,
const gfx::Size& canvas_size,
WebFrame* frame) {
- scoped_ptr<printing::NativeMetafile> metafile(
- printing::NativeMetafileFactory::Create());
- if(!metafile.get())
+ printing::NativeMetafile metafile;
+ if (!metafile.Init())
return;
float scale_factor = frame->getPrintPageShrink(params.page_number);
@@ -30,11 +28,11 @@ void PrintWebViewHelper::PrintPageInternal(
// 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->FinishDocument();
+ frame, &metafile);
+ metafile.FinishDocument();
PrintHostMsg_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;
@@ -45,7 +43,7 @@ void PrintWebViewHelper::PrintPageInternal(
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;
}
@@ -66,9 +64,8 @@ void PrintWebViewHelper::CreatePreviewDocument(
if (!page_count)
return;
- scoped_ptr<printing::NativeMetafile> metafile(
- printing::NativeMetafileFactory::Create());
- if(!metafile.get())
+ printing::PreviewMetafile metafile;
+ if (!metafile.Init())
return;
float scale_factor = frame->getPrintPageShrink(0);
@@ -76,26 +73,26 @@ void PrintWebViewHelper::CreatePreviewDocument(
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->FinishDocument();
+ metafile.FinishDocument();
PrintHostMsg_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(),
- &(preview_params.metafile_data_handle))) {
+ if (!CopyMetafileDataToSharedMem(&metafile,
+ &(preview_params.metafile_data_handle))) {
preview_params.data_size = 0;
preview_params.expected_pages_count = 0;
}
@@ -105,7 +102,7 @@ void PrintWebViewHelper::CreatePreviewDocument(
void PrintWebViewHelper::RenderPage(
const gfx::Size& page_size, const gfx::Point& content_origin,
const float& scale_factor, int page_number, WebFrame* frame,
- printing::NativeMetafile* metafile) {
+ printing::Metafile* metafile) {
bool success = metafile->StartPage(page_size, content_origin, scale_factor);
DCHECK(success);
diff --git a/chrome/renderer/print_web_view_helper_win.cc b/chrome/renderer/print_web_view_helper_win.cc
index 0652cfc..d7ebaf5 100644
--- a/chrome/renderer/print_web_view_helper_win.cc
+++ b/chrome/renderer/print_web_view_helper_win.cc
@@ -6,9 +6,10 @@
#include "base/logging.h"
#include "base/process_util.h"
+#include "base/scoped_ptr.h"
#include "chrome/common/print_messages.h"
-#include "printing/native_metafile_factory.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
+#include "printing/metafile_impl.h"
#include "printing/units.h"
#include "skia/ext/vector_canvas.h"
#include "skia/ext/vector_platform_device_emf_win.h"
@@ -72,8 +73,8 @@ void PrintWebViewHelper::PrintPageInternal(
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::Create());
+ scoped_ptr<printing::Metafile> metafile(new printing::NativeMetafile);
+ metafile->Init();
DCHECK(metafile->context());
skia::PlatformDevice::InitializeDC(metafile->context());
@@ -131,38 +132,28 @@ void PrintWebViewHelper::CreatePreviewDocument(
if (!page_count)
return;
- // NOTE: This is an enhanced-format metafile(EMF) which has an appearance of
- // single page metafile. For print preview, we need a metafile with multiple
- // pages.
- // TODO(kmadhusu): Use a PDF metafile to support multiple pages. After "Skia
- // 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::Create());
- DCHECK(metafile->context());
- skia::PlatformDevice::InitializeDC(metafile->context());
+ scoped_ptr<printing::Metafile> metafile(new printing::PreviewMetafile);
+ metafile->Init();
// Calculate the dpi adjustment.
- float shrink = static_cast<float>(params.params.desired_dpi /
- params.params.dpi);
+ float shrink = static_cast<float>(print_params.desired_dpi /
+ print_params.dpi);
if (params.pages.empty()) {
for (int i = 0; i < page_count; ++i) {
float scale_factor = shrink;
- RenderPage(params.params, &scale_factor, i, frame, &metafile);
+ RenderPage(print_params, &scale_factor, i, frame, &metafile);
}
} else {
for (size_t i = 0; i < params.pages.size(); ++i) {
if (params.pages[i] >= page_count)
break;
float scale_factor = shrink;
- RenderPage(params.params, &scale_factor,
+ RenderPage(print_params, &scale_factor,
static_cast<int>(params.pages[i]), frame, &metafile);
}
}
- // Close the device context to retrieve the compiled metafile.
if (!metafile->FinishDocument())
NOTREACHED();
@@ -192,9 +183,7 @@ void PrintWebViewHelper::CreatePreviewDocument(
void PrintWebViewHelper::RenderPage(
const PrintMsg_Print_Params& params, float* scale_factor, int page_number,
- WebFrame* frame, scoped_ptr<printing::NativeMetafile>* metafile) {
- DCHECK(metafile->get()->context());
-
+ WebFrame* frame, scoped_ptr<printing::Metafile>* metafile) {
double content_width_in_points;
double content_height_in_points;
double margin_top_in_points;
@@ -231,59 +220,63 @@ void PrintWebViewHelper::RenderPage(
bool result = (*metafile)->FinishPage();
DCHECK(result);
- skia::VectorPlatformDeviceEmf* platform_device =
- static_cast<skia::VectorPlatformDeviceEmf*>(device);
- if (platform_device->alpha_blend_used() && !params.supports_alpha_blend) {
- // Currently, we handle alpha blend transparency for a single page.
- // Therefore, expecting a metafile with page count 1.
- DCHECK((*metafile)->GetPageCount() == 1);
-
- // Close the device context to retrieve the compiled metafile.
- if (!(*metafile)->FinishDocument())
- NOTREACHED();
-
- scoped_ptr<printing::NativeMetafile> metafile2(
- printing::NativeMetafileFactory::Create());
- // Page used alpha blend, but printer doesn't support it. Rewrite the
- // metafile and flatten out the transparency.
- HDC bitmap_dc = CreateCompatibleDC(GetDC(NULL));
- if (!bitmap_dc)
- NOTREACHED() << "Bitmap DC creation failed";
- SetGraphicsMode(bitmap_dc, GM_ADVANCED);
- void* bits = NULL;
- BITMAPINFO hdr;
- gfx::CreateBitmapHeader(width, height, &hdr.bmiHeader);
- HBITMAP hbitmap = CreateDIBSection(
- bitmap_dc, &hdr, DIB_RGB_COLORS, &bits, NULL, 0);
- if (!hbitmap)
- NOTREACHED() << "Raster bitmap creation for printing failed";
-
- HGDIOBJ old_bitmap = SelectObject(bitmap_dc, hbitmap);
- RECT rect = {0, 0, width, height };
- HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
- FillRect(bitmap_dc, &rect, whiteBrush);
-
- HDC hdc = metafile2->context();
- DCHECK(hdc);
- skia::PlatformDevice::InitializeDC(hdc);
-
- 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(),
- EnhMetaFileProc,
- &bitmap_dc,
- &metafile_bounds);
-
- SelectObject(bitmap_dc, old_bitmap);
- metafile->reset(metafile2.release());
+ if (!params.supports_alpha_blend) {
+ // PreviewMetafile (PDF) supports alpha blend, so we only hit this case
+ // for NativeMetafile.
+ skia::VectorPlatformDeviceEmf* platform_device =
+ static_cast<skia::VectorPlatformDeviceEmf*>(device);
+ if (platform_device->alpha_blend_used()) {
+ // Currently, we handle alpha blend transparency for a single page.
+ // Therefore, expecting a metafile with page count 1.
+ DCHECK_EQ(1U, (*metafile)->GetPageCount());
+
+ // Close the device context to retrieve the compiled metafile.
+ if (!(*metafile)->FinishDocument())
+ NOTREACHED();
+
+ // Page used alpha blend, but printer doesn't support it. Rewrite the
+ // metafile and flatten out the transparency.
+ HDC bitmap_dc = CreateCompatibleDC(GetDC(NULL));
+ if (!bitmap_dc)
+ NOTREACHED() << "Bitmap DC creation failed";
+ SetGraphicsMode(bitmap_dc, GM_ADVANCED);
+ void* bits = NULL;
+ BITMAPINFO hdr;
+ gfx::CreateBitmapHeader(width, height, &hdr.bmiHeader);
+ HBITMAP hbitmap = CreateDIBSection(
+ bitmap_dc, &hdr, DIB_RGB_COLORS, &bits, NULL, 0);
+ if (!hbitmap)
+ NOTREACHED() << "Raster bitmap creation for printing failed";
+
+ HGDIOBJ old_bitmap = SelectObject(bitmap_dc, hbitmap);
+ RECT rect = {0, 0, width, height };
+ HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
+ FillRect(bitmap_dc, &rect, whiteBrush);
+
+ scoped_ptr<printing::Metafile> metafile2(new printing::NativeMetafile);
+ metafile2->Init();
+ HDC hdc = metafile2->context();
+ DCHECK(hdc);
+ skia::PlatformDevice::InitializeDC(hdc);
+
+ 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(),
+ EnhMetaFileProc,
+ &bitmap_dc,
+ &metafile_bounds);
+
+ SelectObject(bitmap_dc, old_bitmap);
+ metafile->reset(metafile2.release());
+ }
}
}
bool PrintWebViewHelper::CopyMetafileDataToSharedMem(
- printing::NativeMetafile* metafile,
+ printing::Metafile* metafile,
base::SharedMemoryHandle* shared_mem_handle) {
uint32 buf_size = metafile->GetDataSize();
base::SharedMemory shared_buf;
diff --git a/content/plugin/webplugin_delegate_stub.cc b/content/plugin/webplugin_delegate_stub.cc
index 3b1e680..73a46ad 100644
--- a/content/plugin/webplugin_delegate_stub.cc
+++ b/content/plugin/webplugin_delegate_stub.cc
@@ -23,9 +23,7 @@
#include "webkit/glue/webcursor.h"
#if defined(OS_WIN)
-#include "base/memory/scoped_ptr.h"
-#include "printing/native_metafile_factory.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile_impl.h"
#endif // defined(OS_WIN)
using WebKit::WebBindings;
@@ -271,27 +269,26 @@ void WebPluginDelegateStub::OnDidPaint() {
void WebPluginDelegateStub::OnPrint(base::SharedMemoryHandle* shared_memory,
uint32* size) {
#if defined(OS_WIN)
- scoped_ptr<printing::NativeMetafile> metafile(
- printing::NativeMetafileFactory::Create());
- if (!metafile->Init()) {
+ printing::NativeMetafile metafile;
+ if (!metafile.Init()) {
NOTREACHED();
return;
}
- HDC hdc = metafile->context();
+ HDC hdc = metafile.context();
skia::PlatformDevice::InitializeDC(hdc);
delegate_->Print(hdc);
- if (!metafile->FinishDocument()) {
+ if (!metafile.FinishDocument()) {
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.
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index 93925c4..c9a9e4a 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -17,7 +17,6 @@
#include "content/common/view_messages.h"
#include "net/base/net_errors.h"
#include "printing/image.h"
-#include "printing/native_metafile.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h"
diff --git a/content/renderer/webplugin_delegate_proxy.cc b/content/renderer/webplugin_delegate_proxy.cc
index 617928d..01ed651 100644
--- a/content/renderer/webplugin_delegate_proxy.cc
+++ b/content/renderer/webplugin_delegate_proxy.cc
@@ -54,8 +54,7 @@
#endif
#if defined(OS_WIN)
-#include "printing/native_metafile_factory.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile_impl.h"
#endif
using WebKit::WebBindings;
@@ -923,14 +922,13 @@ void WebPluginDelegateProxy::Print(gfx::NativeDrawingContext context) {
}
#if defined(OS_WIN)
- scoped_ptr<printing::NativeMetafile> metafile(
- printing::NativeMetafileFactory::Create());
- if (!metafile->InitFromData(memory.memory(), size)) {
+ printing::NativeMetafile metafile;
+ if (!metafile.InitFromData(memory.memory(), size)) {
NOTREACHED();
return;
}
// Playback the buffer.
- metafile->Playback(context, NULL);
+ metafile.Playback(context, NULL);
#else
// TODO(port): plugin printing.
NOTIMPLEMENTED();
diff --git a/printing/emf_win.h b/printing/emf_win.h
index ecc1028..4d8302c 100644
--- a/printing/emf_win.h
+++ b/printing/emf_win.h
@@ -10,7 +10,7 @@
#include "base/basictypes.h"
#include "base/gtest_prod_util.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
class FilePath;
@@ -23,7 +23,7 @@ class Size;
namespace printing {
// Simple wrapper class that manage an EMF data stream and its virtual HDC.
-class Emf : public NativeMetafile {
+class Emf : public Metafile {
public:
class Record;
class Enumerator;
@@ -41,7 +41,7 @@ class Emf : public NativeMetafile {
// Initializes the Emf with the data in |metafile_path|.
virtual bool InitFromFile(const FilePath& metafile_path);
- // NativeMetafile methods.
+ // Metafile methods.
virtual bool Init();
virtual bool InitFromData(const void* src_buffer, uint32 src_buffer_size);
diff --git a/printing/image.cc b/printing/image.cc
index a7ae67d..062ac89 100644
--- a/printing/image.cc
+++ b/printing/image.cc
@@ -6,9 +6,9 @@
#include "base/file_util.h"
#include "base/md5.h"
-#include "base/memory/scoped_ptr.h"
#include "base/string_number_conversions.h"
-#include "printing/native_metafile_factory.h"
+#include "printing/metafile.h"
+#include "printing/metafile_impl.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/codec/png_codec.h"
@@ -34,7 +34,7 @@ Image::Image(const FilePath& path)
}
}
-Image::Image(const NativeMetafile& metafile)
+Image::Image(const Metafile& metafile)
: row_length_(0),
ignore_alpha_(true) {
LoadMetafile(metafile);
@@ -146,12 +146,10 @@ bool Image::LoadPng(const std::string& compressed) {
bool Image::LoadMetafile(const std::string& data) {
DCHECK(!data.empty());
- scoped_ptr<NativeMetafile> metafile(
- printing::NativeMetafileFactory::CreateFromData(data.data(),
- data.size()));
- if(!metafile.get())
+ printing::NativeMetafile metafile;
+ if (!metafile.InitFromData(data.data(), data.size()))
return false;
- return LoadMetafile(*metafile);
+ return LoadMetafile(metafile);
}
} // namespace printing
diff --git a/printing/image.h b/printing/image.h
index 5d84c8d..3bed218 100644
--- a/printing/image.h
+++ b/printing/image.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -10,13 +10,14 @@
#include "base/basictypes.h"
#include "base/logging.h"
-#include "printing/native_metafile.h"
#include "ui/gfx/size.h"
class FilePath;
namespace printing {
+class Metafile;
+
// Lightweight raw-bitmap management. The image, once initialized, is immutable.
// The main purpose is testing image contents.
class Image {
@@ -28,7 +29,7 @@ class Image {
// Creates the image from the metafile. Deduces bounds based on bounds in
// metafile. If loading fails size().IsEmpty() will be true.
- explicit Image(const NativeMetafile& metafile);
+ explicit Image(const Metafile& metafile);
// Copy constructor.
explicit Image(const Image& image);
@@ -73,7 +74,7 @@ class Image {
bool LoadMetafile(const std::string& data);
- bool LoadMetafile(const NativeMetafile& metafile);
+ bool LoadMetafile(const Metafile& metafile);
// Pixel dimensions of the image.
gfx::Size size_;
diff --git a/printing/image_cairo.cc b/printing/image_cairo.cc
index d19d57e..694fd7d 100644
--- a/printing/image_cairo.cc
+++ b/printing/image_cairo.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -8,7 +8,7 @@
namespace printing {
-bool Image::LoadMetafile(const NativeMetafile& metafile) {
+bool Image::LoadMetafile(const Metafile& metafile) {
NOTIMPLEMENTED();
return false;
}
diff --git a/printing/image_mac.cc b/printing/image_mac.cc
index b11757d..1ed9e0c 100644
--- a/printing/image_mac.cc
+++ b/printing/image_mac.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -7,11 +7,12 @@
#include <ApplicationServices/ApplicationServices.h>
#include "base/mac/scoped_cftyperef.h"
+#include "printing/metafile.h"
#include "ui/gfx/rect.h"
namespace printing {
-bool Image::LoadMetafile(const NativeMetafile& metafile) {
+bool Image::LoadMetafile(const Metafile& metafile) {
// The printing system uses single-page metafiles (page indexes are 1-based).
const unsigned int page_number = 1;
gfx::Rect rect(metafile.GetPageBounds(page_number));
diff --git a/printing/image_win.cc b/printing/image_win.cc
index be089dc..c9ad1fe 100644
--- a/printing/image_win.cc
+++ b/printing/image_win.cc
@@ -1,9 +1,10 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
#include "printing/image.h"
+#include "printing/metafile.h"
#include "skia/ext/platform_device.h"
#include "ui/gfx/gdi_util.h" // EMF support
#include "ui/gfx/rect.h"
@@ -44,7 +45,7 @@ class DisableFontSmoothing {
namespace printing {
-bool Image::LoadMetafile(const NativeMetafile& metafile) {
+bool Image::LoadMetafile(const Metafile& metafile) {
gfx::Rect rect(metafile.GetPageBounds(1));
DisableFontSmoothing disable_in_this_scope;
diff --git a/printing/native_metafile.h b/printing/metafile.h
index 8bb9651..264c8fe 100644
--- a/printing/native_metafile.h
+++ b/printing/metafile.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef PRINTING_NATIVE_METAFILE_H_
-#define PRINTING_NATIVE_METAFILE_H_
+#ifndef PRINTING_METAFILE_H_
+#define PRINTING_METAFILE_H_
#include "base/basictypes.h"
#include "build/build_config.h"
@@ -11,7 +11,6 @@
#if defined(OS_WIN)
#include <windows.h>
-#include <vector>
#elif defined(OS_MACOSX)
#include <ApplicationServices/ApplicationServices.h>
#include <CoreFoundation/CoreFoundation.h>
@@ -40,9 +39,9 @@ namespace printing {
// This class creates a graphics context that renders into a data stream
// (usually PDF or EMF).
-class NativeMetafile {
+class Metafile {
public:
- virtual ~NativeMetafile() {}
+ virtual ~Metafile() {}
// Initializes a fresh new metafile for rendering. Returns false on failure.
// Note: It should only be called from within the renderer process to allocate
@@ -149,4 +148,4 @@ class NativeMetafile {
} // namespace printing
-#endif // PRINTING_NATIVE_METAFILE_H_
+#endif // PRINTING_METAFILE_H_
diff --git a/printing/metafile_impl.h b/printing/metafile_impl.h
new file mode 100644
index 0000000..d25481d
--- /dev/null
+++ b/printing/metafile_impl.h
@@ -0,0 +1,33 @@
+// Copyright (c) 2011 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.
+
+#ifndef PRINTING_METAFILE_IMPL_H_
+#define PRINTING_METAFILE_IMPL_H_
+
+#if defined(OS_WIN)
+#include "printing/emf_win.h"
+#include "printing/pdf_metafile_skia.h"
+#elif defined(OS_MACOSX)
+#include "printing/pdf_metafile_cg_mac.h"
+#elif defined(OS_POSIX)
+#include "printing/pdf_metafile_cairo_linux.h"
+#include "printing/pdf_metafile_skia.h"
+#endif
+
+namespace printing {
+
+#if defined(OS_WIN)
+typedef Emf NativeMetafile;
+typedef PdfMetafileSkia PreviewMetafile;
+#elif defined(OS_MACOSX)
+typedef PdfMetafileCg NativeMetafile;
+typedef PdfMetafileCg PreviewMetafile;
+#elif defined(OS_POSIX)
+typedef PdfMetafileCairo NativeMetafile;
+typedef PdfMetafileSkia PreviewMetafile;
+#endif
+
+} // namespace printing
+
+#endif // PRINTING_METAFILE_IMPL_H_
diff --git a/printing/native_metafile_skia_wrapper.cc b/printing/metafile_skia_wrapper.cc
index 38de9df..22b58c8 100644
--- a/printing/native_metafile_skia_wrapper.cc
+++ b/printing/metafile_skia_wrapper.cc
@@ -3,7 +3,7 @@
// found in the LICENSE file.
#include "base/logging.h"
-#include "printing/native_metafile_skia_wrapper.h"
+#include "printing/metafile_skia_wrapper.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkDevice.h"
#include "third_party/skia/include/core/SkMetaData.h"
@@ -12,7 +12,7 @@ namespace printing {
namespace {
-static const char* kNativeMetafileKey = "CrNativeMetafile";
+static const char* kMetafileKey = "CrMetafile";
SkMetaData& getMetaData(SkCanvas* canvas) {
DCHECK(canvas != NULL);
@@ -24,31 +24,29 @@ SkMetaData& getMetaData(SkCanvas* canvas) {
} // namespace
-
// static
-void NativeMetafileSkiaWrapper::SetMetafileOnCanvas(SkCanvas* canvas,
- NativeMetafile* metafile) {
- NativeMetafileSkiaWrapper* wrapper = NULL;
+void MetafileSkiaWrapper::SetMetafileOnCanvas(SkCanvas* canvas,
+ Metafile* metafile) {
+ MetafileSkiaWrapper* wrapper = NULL;
if (metafile)
- wrapper = new NativeMetafileSkiaWrapper(metafile);
+ wrapper = new MetafileSkiaWrapper(metafile);
SkMetaData& meta = getMetaData(canvas);
- meta.setRefCnt(kNativeMetafileKey, wrapper);
+ meta.setRefCnt(kMetafileKey, wrapper);
SkSafeUnref(wrapper);
}
// static
-NativeMetafile* NativeMetafileSkiaWrapper::GetMetafileFromCanvas(
- SkCanvas* canvas) {
+Metafile* MetafileSkiaWrapper::GetMetafileFromCanvas(SkCanvas* canvas) {
SkMetaData& meta = getMetaData(canvas);
SkRefCnt* value;
- if (!meta.findRefCnt(kNativeMetafileKey, &value) || !value)
+ if (!meta.findRefCnt(kMetafileKey, &value) || !value)
return NULL;
- return static_cast<NativeMetafileSkiaWrapper*>(value)->metafile_;
+ return static_cast<MetafileSkiaWrapper*>(value)->metafile_;
}
-NativeMetafileSkiaWrapper::NativeMetafileSkiaWrapper(NativeMetafile* metafile)
+MetafileSkiaWrapper::MetafileSkiaWrapper(Metafile* metafile)
: metafile_(metafile) {
}
diff --git a/printing/metafile_skia_wrapper.h b/printing/metafile_skia_wrapper.h
new file mode 100644
index 0000000..751179f
--- /dev/null
+++ b/printing/metafile_skia_wrapper.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2011 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.
+
+#ifndef PRINTING_METAFILE_SKIA_WRAPPER_H_
+#define PRINTING_METAFILE_SKIA_WRAPPER_H_
+
+#include "third_party/skia/include/core/SkRefCnt.h"
+
+class SkCanvas;
+
+namespace printing {
+
+class Metafile;
+
+// A wrapper class with static methods to set and retrieve a Metafile
+// on an SkCanvas. The ownership of the metafile is not affected and it
+// is the caller's responsibility to ensure that the metafile remains valid
+// as long as the canvas.
+class MetafileSkiaWrapper : public SkRefCnt {
+ public:
+ static void SetMetafileOnCanvas(SkCanvas* canvas, Metafile* metafile);
+
+ static Metafile* GetMetafileFromCanvas(SkCanvas* canvas);
+
+ private:
+ explicit MetafileSkiaWrapper(Metafile* metafile);
+
+ Metafile* metafile_;
+};
+
+} // namespace printing
+
+#endif // PRINTING_METAFILE_SKIA_WRAPPER_H_
diff --git a/printing/native_metafile_factory.cc b/printing/native_metafile_factory.cc
deleted file mode 100644
index 5db823e..0000000
--- a/printing/native_metafile_factory.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) 2011 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.
-
-#include "printing/native_metafile_factory.h"
-
-#include "base/memory/scoped_ptr.h"
-
-#if defined(OS_WIN)
-#include "printing/emf_win.h"
-#elif defined(OS_MACOSX)
-#include "printing/pdf_metafile_cg_mac.h"
-#elif defined(OS_POSIX)
-#include "printing/pdf_metafile_cairo_linux.h"
-#endif
-
-namespace printing {
-
-// static
-NativeMetafile* NativeMetafileFactory::Create() {
- scoped_ptr<NativeMetafile> metafile(CreateNewMetafile());
- if (!metafile->Init())
- return NULL;
- return metafile.release();
-}
-
-// static
-NativeMetafile* NativeMetafileFactory::CreateFromData(
- const void* src_buffer, uint32 src_buffer_size) {
- scoped_ptr<NativeMetafile> metafile(CreateNewMetafile());
- if (!metafile->InitFromData(src_buffer, src_buffer_size))
- return NULL;
- return metafile.release();
-}
-
-// static
-NativeMetafile* NativeMetafileFactory::CreateNewMetafile(){
-#if defined(OS_WIN)
- return new printing::Emf;
-#elif defined(OS_MACOSX)
- return new printing::PdfMetafileCg;
-#elif defined(OS_POSIX)
- return new printing::PdfMetafileCairo;
-#endif
-}
-
-} // namespace printing
diff --git a/printing/native_metafile_factory.h b/printing/native_metafile_factory.h
deleted file mode 100644
index 610970f..0000000
--- a/printing/native_metafile_factory.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef PRINTING_NATIVE_METAFILE_FACTORY_H_
-#define PRINTING_NATIVE_METAFILE_FACTORY_H_
-
-#include "base/basictypes.h"
-#include "printing/native_metafile.h"
-
-namespace printing {
-
-// Various printing contexts will be supported in the future (cairo, skia, emf).
-// So this class returns the appropriate context depending on the platform and
-// user preferences.
-// (Note: For the moment there is only one option per platform.)
-class NativeMetafileFactory {
- public:
- // This method returns a pointer to the appropriate NativeMetafile object
- // according to the platform. The metafile is already initialized by invoking
- // Init() on it. NULL is returned if Init() fails.
- static printing::NativeMetafile* Create();
-
- // This method returns a pointer to the appropriate NativeMetafile object
- // according to the platform. The metafile is already initialized by invoking
- // InitFromData(src_buffer,_buffer_size) on it. NULL is returned if
- // InitiFromData() fails.
- static printing::NativeMetafile* CreateFromData(const void* src_buffer,
- uint32 src_buffer_size);
-
- private:
- NativeMetafileFactory();
-
- // Retrieves a new uninitialized metafile.
- static NativeMetafile* CreateNewMetafile();
-
- DISALLOW_COPY_AND_ASSIGN(NativeMetafileFactory);
-};
-
-} // namespace printing
-
-#endif // PRINTING_NATIVE_METAFILE_FACTORY_H_
diff --git a/printing/native_metafile_skia_wrapper.h b/printing/native_metafile_skia_wrapper.h
deleted file mode 100644
index 7eb2887..0000000
--- a/printing/native_metafile_skia_wrapper.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef PRINTING_NATIVE_METAFILE_SKIA_WRAPPER_H_
-#define PRINTING_NATIVE_METAFILE_SKIA_WRAPPER_H_
-
-#include "third_party/skia/include/core/SkRefCnt.h"
-
-class SkCanvas;
-
-namespace printing {
-
-class NativeMetafile;
-
-// A wrapper class with static methods to set and retrieve a NativeMetafile
-// on an SkCanvas. The ownership of the metafile is not affected and it
-// is the caller's responsibility to ensure that the metafile remains valid
-// as long as the canvas.
-class NativeMetafileSkiaWrapper : public SkRefCnt {
- public:
- static void SetMetafileOnCanvas(SkCanvas* canvas, NativeMetafile* metafile);
-
- static NativeMetafile* GetMetafileFromCanvas(SkCanvas* canvas);
-
- private:
- explicit NativeMetafileSkiaWrapper(NativeMetafile* metafile);
-
- NativeMetafile* metafile_;
-};
-
-} // namespace printing
-
-#endif // PRINTING_NATIVE_METAFILE_SKIA_WRAPPER_H_
diff --git a/printing/pdf_metafile_cairo_linux.h b/printing/pdf_metafile_cairo_linux.h
index f3a80aa..fe00ff6 100644
--- a/printing/pdf_metafile_cairo_linux.h
+++ b/printing/pdf_metafile_cairo_linux.h
@@ -9,7 +9,7 @@
#include "base/basictypes.h"
#include "base/gtest_prod_util.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
namespace gfx {
class Point;
@@ -23,11 +23,12 @@ namespace printing {
// This class uses Cairo graphics library to generate PDF stream and stores
// rendering results in a string buffer.
-class PdfMetafileCairo : public NativeMetafile {
+class PdfMetafileCairo : public Metafile {
public:
+ PdfMetafileCairo();
virtual ~PdfMetafileCairo();
- // NativeMetafile methods.
+ // Metafile methods.
virtual bool Init();
// Calling InitFromData() sets the data for this metafile and masks data
@@ -58,13 +59,7 @@ class PdfMetafileCairo : public NativeMetafile {
virtual bool SaveToFD(const base::FileDescriptor& fd) const;
#endif // if defined(OS_CHROMEOS)
- protected:
- PdfMetafileCairo();
-
private:
- friend class NativeMetafileFactory;
- FRIEND_TEST_ALL_PREFIXES(PdfMetafileCairoTest, Pdf);
-
// Cleans up all resources.
void CleanUpAll();
diff --git a/printing/pdf_metafile_cg_mac.h b/printing/pdf_metafile_cg_mac.h
index 0183246..616d448 100644
--- a/printing/pdf_metafile_cg_mac.h
+++ b/printing/pdf_metafile_cg_mac.h
@@ -11,7 +11,7 @@
#include "base/basictypes.h"
#include "base/gtest_prod_util.h"
#include "base/mac/scoped_cftyperef.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
class FilePath;
@@ -24,12 +24,12 @@ class Point;
namespace printing {
// This class creates a graphics context that renders into a PDF data stream.
-class PdfMetafileCg : public NativeMetafile {
+class PdfMetafileCg : public Metafile {
public:
-
+ PdfMetafileCg();
virtual ~PdfMetafileCg();
- // NativeMetafile methods.
+ // Metafile methods.
virtual bool Init();
virtual bool InitFromData(const void* src_buffer, uint32 src_buffer_size);
@@ -64,13 +64,7 @@ class PdfMetafileCg : public NativeMetafile {
bool center_horizontally,
bool center_vertically) const;
- protected:
- PdfMetafileCg();
-
private:
- friend class NativeMetafileFactory;
- FRIEND_TEST_ALL_PREFIXES(PdfMetafileCgTest, Pdf);
-
// Returns a CGPDFDocumentRef version of pdf_data_.
CGPDFDocumentRef GetPDFDocument() const;
diff --git a/printing/pdf_metafile_skia.h b/printing/pdf_metafile_skia.h
index 4e8a003..515c3a8 100644
--- a/printing/pdf_metafile_skia.h
+++ b/printing/pdf_metafile_skia.h
@@ -9,7 +9,7 @@
#include "base/logging.h"
#include "base/scoped_ptr.h"
#include "build/build_config.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
#if defined(OS_WIN)
#include <windows.h>
@@ -20,11 +20,12 @@ namespace printing {
struct PdfMetafileSkiaData;
// This class uses Skia graphics library to generate a PDF document.
-class PdfMetafileSkia : public NativeMetafile {
+class PdfMetafileSkia : public Metafile {
public:
+ PdfMetafileSkia();
virtual ~PdfMetafileSkia();
- // NativeMetafile interface
+ // Metafile methods.
virtual bool Init();
virtual bool InitFromData(const void* src_buffer, uint32 src_buffer_size);
@@ -55,15 +56,9 @@ class PdfMetafileSkia : public NativeMetafile {
#endif // if defined(OS_WIN)
#if defined(OS_CHROMEOS)
- virtual bool SaveToFD(const base::FileDescriptor& fd) const = 0;
+ virtual bool SaveToFD(const base::FileDescriptor& fd) const;
#endif // if defined(OS_CHROMEOS)
-
- protected:
- PdfMetafileSkia();
-
private:
- friend class NativeMetafileFactory;
-
scoped_ptr<PdfMetafileSkiaData> data_;
DISALLOW_COPY_AND_ASSIGN(PdfMetafileSkia);
diff --git a/printing/print_dialog_gtk_interface.h b/printing/print_dialog_gtk_interface.h
index 04198da..dab0c9c 100644
--- a/printing/print_dialog_gtk_interface.h
+++ b/printing/print_dialog_gtk_interface.h
@@ -10,6 +10,8 @@
namespace printing {
+class Metafile;
+
// An interface for GTK printing dialogs. Classes that live outside of
// printing/ can implement this interface and get threading requirements
// correct without exposing those requirements to printing/.
@@ -22,7 +24,7 @@ class PrintDialogGtkInterface {
// Prints the document named |document_name| contained in |metafile|.
// Called from the print worker thread. Once called, the
// PrintDialogGtkInterface instance should not be reused.
- virtual void PrintDocument(const NativeMetafile* metafile,
+ virtual void PrintDocument(const Metafile* metafile,
const string16& document_name) = 0;
// Same as AddRef/Release, but with different names since
diff --git a/printing/printed_document.cc b/printing/printed_document.cc
index 07eeec6d..5a85c1a 100644
--- a/printing/printed_document.cc
+++ b/printing/printed_document.cc
@@ -64,7 +64,7 @@ PrintedDocument::~PrintedDocument() {
}
void PrintedDocument::SetPage(int page_number,
- NativeMetafile* metafile,
+ Metafile* metafile,
double shrink,
const gfx::Size& paper_size,
const gfx::Rect& page_rect,
@@ -125,7 +125,7 @@ bool PrintedDocument::IsComplete() const {
PrintedPages::const_iterator itr = mutable_.pages_.find(page.ToInt());
if (itr == mutable_.pages_.end() || !itr->second.get())
return false;
- if (metafile_must_be_valid && !itr->second->native_metafile())
+ if (metafile_must_be_valid && !itr->second->metafile())
return false;
}
return true;
@@ -151,7 +151,7 @@ uint32 PrintedDocument::MemoryUsage() const {
}
uint32 total = 0;
for (size_t i = 0; i < pages_copy.size(); ++i) {
- total += pages_copy[i]->native_metafile()->GetDataSize();
+ total += pages_copy[i]->metafile()->GetDataSize();
}
return total;
}
@@ -263,11 +263,11 @@ void PrintedDocument::DebugDump(const PrintedPage& page) {
filename += ASCIIToUTF16(StringPrintf("%02d", page.page_number()));
#if defined(OS_WIN)
filename += ASCIIToUTF16("_.emf");
- page.native_metafile()->SaveTo(
+ page.metafile()->SaveTo(
g_debug_dump_info.Get().debug_dump_path.Append(filename));
#else // OS_WIN
filename += ASCIIToUTF16("_.pdf");
- page.native_metafile()->SaveTo(
+ page.metafile()->SaveTo(
g_debug_dump_info.Get().debug_dump_path.Append(UTF16ToUTF8(filename)));
#endif // OS_WIN
}
diff --git a/printing/printed_document.h b/printing/printed_document.h
index b577f47..a53b90f 100644
--- a/printing/printed_document.h
+++ b/printing/printed_document.h
@@ -24,7 +24,7 @@ class Font;
namespace printing {
-class NativeMetafile;
+class Metafile;
class PrintedPage;
class PrintedPagesSource;
class PrintingContext;
@@ -45,7 +45,7 @@ class PrintedDocument : public base::RefCountedThreadSafe<PrintedDocument> {
// Sets a page's data. 0-based. Takes metafile ownership.
// Note: locks for a short amount of time.
- void SetPage(int page_number, NativeMetafile* metafile, double shrink,
+ void SetPage(int page_number, Metafile* metafile, double shrink,
const gfx::Size& paper_size, const gfx::Rect& page_rect,
bool has_visible_overlays);
diff --git a/printing/printed_document_cairo.cc b/printing/printed_document_cairo.cc
index cb9bbd0..7675b96 100644
--- a/printing/printed_document_cairo.cc
+++ b/printing/printed_document_cairo.cc
@@ -28,7 +28,7 @@ void PrintedDocument::RenderPrintedPage(
base::AutoLock lock(lock_);
if (page.page_number() - 1 == mutable_.first_page) {
reinterpret_cast<PrintingContextCairo*>(context)->PrintDocument(
- page.native_metafile());
+ page.metafile());
}
}
#endif // !defined(OS_CHROMEOS)
diff --git a/printing/printed_document_mac.cc b/printing/printed_document_mac.cc
index 2651516..bb067c88 100644
--- a/printing/printed_document_mac.cc
+++ b/printing/printed_document_mac.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -30,8 +30,8 @@ void PrintedDocument::RenderPrintedPage(
gfx::Rect content_area;
page.GetCenteredPageContentRect(page_setup.physical_size(), &content_area);
- const printing::NativeMetafile* metafile = page.native_metafile();
- // Each NativeMetafile is a one-page PDF, and pages use 1-based indexing.
+ const printing::Metafile* metafile = page.metafile();
+ // Each Metafile is a one-page PDF, and pages use 1-based indexing.
const int page_number = 1;
metafile->RenderPage(page_number, context, content_area.ToCGRect(),
false, false, false, false);
diff --git a/printing/printed_document_win.cc b/printing/printed_document_win.cc
index a0719b4..cb25fdef 100644
--- a/printing/printed_document_win.cc
+++ b/printing/printed_document_win.cc
@@ -114,7 +114,7 @@ void PrintedDocument::RenderPrintedPage(
content_area.y() - page_setup.printable_area().y(),
mutable_.shrink_factor);
- if (!page.native_metafile()->SafePlayback(context)) {
+ if (!page.metafile()->SafePlayback(context)) {
NOTREACHED();
}
diff --git a/printing/printed_page.cc b/printing/printed_page.cc
index 1661813..ac1a2d8 100644
--- a/printing/printed_page.cc
+++ b/printing/printed_page.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -7,12 +7,12 @@
namespace printing {
PrintedPage::PrintedPage(int page_number,
- NativeMetafile* native_metafile,
+ Metafile* metafile,
const gfx::Size& page_size,
const gfx::Rect& page_content_rect,
bool has_visible_overlays)
: page_number_(page_number),
- native_metafile_(native_metafile),
+ metafile_(metafile),
page_size_(page_size),
page_content_rect_(page_content_rect),
has_visible_overlays_(has_visible_overlays) {
@@ -21,8 +21,8 @@ PrintedPage::PrintedPage(int page_number,
PrintedPage::~PrintedPage() {
}
-const NativeMetafile* PrintedPage::native_metafile() const {
- return native_metafile_.get();
+const Metafile* PrintedPage::metafile() const {
+ return metafile_.get();
}
void PrintedPage::GetCenteredPageContentRect(
diff --git a/printing/printed_page.h b/printing/printed_page.h
index 0fc9069..3771457 100644
--- a/printing/printed_page.h
+++ b/printing/printed_page.h
@@ -7,7 +7,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
-#include "printing/native_metafile.h"
+#include "printing/metafile.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/size.h"
@@ -22,14 +22,14 @@ namespace printing {
class PrintedPage : public base::RefCountedThreadSafe<PrintedPage> {
public:
PrintedPage(int page_number,
- NativeMetafile* native_metafile,
+ Metafile* metafile,
const gfx::Size& page_size,
const gfx::Rect& page_content_rect,
bool has_visible_overlays);
// Getters
int page_number() const { return page_number_; }
- const NativeMetafile* native_metafile() const;
+ const Metafile* metafile() const;
const gfx::Size& page_size() const { return page_size_; }
const gfx::Rect& page_content_rect() const { return page_content_rect_; }
bool has_visible_overlays() const { return has_visible_overlays_; }
@@ -48,7 +48,7 @@ class PrintedPage : public base::RefCountedThreadSafe<PrintedPage> {
const int page_number_;
// Actual paint data.
- const scoped_ptr<NativeMetafile> native_metafile_;
+ const scoped_ptr<Metafile> metafile_;
// The physical page size. To support multiple page formats inside on print
// job.
diff --git a/printing/printing.gyp b/printing/printing.gyp
index 6e9afcb..1a39bfd 100644
--- a/printing/printing.gyp
+++ b/printing/printing.gyp
@@ -36,9 +36,8 @@
'image_mac.cc',
'image_win.cc',
'image.h',
- 'native_metafile_factory.cc',
- 'native_metafile_factory.h',
- 'native_metafile.h',
+ 'metafile.h',
+ 'metafile_impl.h',
'page_number.cc',
'page_number.h',
'page_overlays.cc',
@@ -100,8 +99,8 @@
}],
['OS=="linux" or OS=="freebsd" or OS=="openbsd"', {
'sources': [
- 'native_metafile_skia_wrapper.cc',
- 'native_metafile_skia_wrapper.h',
+ 'metafile_skia_wrapper.cc',
+ 'metafile_skia_wrapper.h',
],
'dependencies': [
# For FT_Init_FreeType and friends.
diff --git a/printing/printing_context_cairo.cc b/printing/printing_context_cairo.cc
index 552cfbb..6b24063 100644
--- a/printing/printing_context_cairo.cc
+++ b/printing/printing_context_cairo.cc
@@ -6,6 +6,7 @@
#include "base/logging.h"
#include "base/values.h"
+#include "printing/metafile.h"
#include "printing/print_job_constants.h"
#include "printing/print_settings_initializer_gtk.h"
#include "printing/units.h"
@@ -62,7 +63,7 @@ void PrintingContextCairo::SetCreatePrintDialogFunction(
create_dialog_func_ = create_dialog_func;
}
-void PrintingContextCairo::PrintDocument(const NativeMetafile* metafile) {
+void PrintingContextCairo::PrintDocument(const Metafile* metafile) {
DCHECK(print_dialog_);
DCHECK(metafile);
print_dialog_->PrintDocument(metafile, document_name_);
diff --git a/printing/printing_context_cairo.h b/printing/printing_context_cairo.h
index 3002b06..2326dea 100644
--- a/printing/printing_context_cairo.h
+++ b/printing/printing_context_cairo.h
@@ -9,12 +9,9 @@
#include "printing/printing_context.h"
-#if !defined(OS_CHROMEOS)
-#include "printing/native_metafile.h"
-#endif
-
namespace printing {
+class Metafile;
class PrintDialogGtkInterface;
class PrintingContextCairo : public PrintingContext {
@@ -29,7 +26,7 @@ class PrintingContextCairo : public PrintingContext {
PrintingContextCairo* context));
// Prints the document contained in |metafile|.
- void PrintDocument(const NativeMetafile* metafile);
+ void PrintDocument(const Metafile* metafile);
#endif
// PrintingContext implementation.
diff --git a/skia/ext/vector_platform_device_skia.h b/skia/ext/vector_platform_device_skia.h
index 38cf0c5..48a40fe 100644
--- a/skia/ext/vector_platform_device_skia.h
+++ b/skia/ext/vector_platform_device_skia.h
@@ -31,8 +31,8 @@ class VectorPlatformDeviceSkiaFactory : public SkDeviceFactory {
class VectorPlatformDeviceSkia : public PlatformDevice {
public:
- VectorPlatformDeviceSkia(int width, int height,
- SkPDFDevice::OriginTransform flip);
+ SK_API VectorPlatformDeviceSkia(int width, int height,
+ SkPDFDevice::OriginTransform flip);
~VectorPlatformDeviceSkia();
@@ -91,7 +91,7 @@ class VectorPlatformDeviceSkia : public PlatformDevice {
// Our own methods.
// This needs to be called before anything is drawn.
- void setInitialTransform(int xOffset, int yOffset, float scale_factor);
+ SK_API void setInitialTransform(int xOffset, int yOffset, float scale_factor);
private:
SkRefPtr<SkPDFDevice> pdf_device_;
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
index fa5b9aa..cd2d59f 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
@@ -59,18 +59,15 @@
#include "webkit/plugins/ppapi/var.h"
#include "webkit/plugins/sad_plugin.h"
-#if defined(OS_POSIX)
-#include "printing/native_metafile.h"
-#endif
-
#if defined(OS_MACOSX)
#include "base/mac/mac_util.h"
#include "base/mac/scoped_cftyperef.h"
-#include "printing/native_metafile_factory.h"
+#include "printing/metafile_impl.h"
#endif
#if defined(OS_LINUX)
-#include "printing/native_metafile_skia_wrapper.h"
+#include "printing/metafile.h"
+#include "printing/metafile_skia_wrapper.h"
#endif
#if defined(OS_WIN)
@@ -1202,18 +1199,18 @@ bool PluginInstance::PrintPDFOutput(PP_Resource print_output,
bool ret = false;
#if defined(OS_LINUX)
- // On Linux we just set the final bits in the native metafile.
- printing::NativeMetafile* metafile =
- printing::NativeMetafileSkiaWrapper::GetMetafileFromCanvas(canvas);
+ // On Linux we just set the final bits in the native metafile
+ // (NativeMetafile and PreviewMetafile must have compatible formats,
+ // i.e. both PDF for this to work).
+ printing::Metafile* metafile =
+ printing::MetafileSkiaWrapper::GetMetafileFromCanvas(canvas);
DCHECK(metafile != NULL);
if (metafile)
ret = metafile->InitFromData(buffer->mapped_buffer(), buffer->size());
#elif defined(OS_MACOSX)
+ printing::NativeMetafile metafile;
// Create a PDF metafile and render from there into the passed in context.
- scoped_ptr<printing::NativeMetafile> metafile(
- printing::NativeMetafileFactory::CreateFromData(buffer->mapped_buffer(),
- buffer->size()));
- if (metafile.get() != NULL) {
+ if (metafile.InitFromData(buffer->mapped_buffer(), buffer->size())) {
// Flip the transform.
CGContextSaveGState(canvas);
CGContextTranslateCTM(canvas, 0,
@@ -1225,7 +1222,7 @@ bool PluginInstance::PrintPDFOutput(PP_Resource print_output,
page_rect.size.width = current_print_settings_.printable_area.size.width;
page_rect.size.height = current_print_settings_.printable_area.size.height;
- ret = metafile->RenderPage(1, canvas, page_rect, true, false, true, true);
+ ret = metafile.RenderPage(1, canvas, page_rect, true, false, true, true);
CGContextRestoreGState(canvas);
}
#elif defined(OS_WIN)