summaryrefslogtreecommitdiff
path: root/chromium/printing
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-17 13:57:45 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-19 13:44:40 +0000
commit6ec7b8da05d21a3878bd21c691b41e675d74bb1c (patch)
treeb87f250bc19413750b9bb9cdbf2da20ef5014820 /chromium/printing
parentec02ee4181c49b61fce1c8fb99292dbb8139cc90 (diff)
downloadqtwebengine-chromium-6ec7b8da05d21a3878bd21c691b41e675d74bb1c.tar.gz
BASELINE: Update Chromium to 60.0.3112.70
Change-Id: I9911c2280a014d4632f254857876a395d4baed2d Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/printing')
-rw-r--r--chromium/printing/BUILD.gn2
-rw-r--r--chromium/printing/backend/cups_connection.cc6
-rw-r--r--chromium/printing/backend/cups_connection.h4
-rw-r--r--chromium/printing/backend/cups_jobs.cc12
-rw-r--r--chromium/printing/backend/cups_jobs.h10
-rw-r--r--chromium/printing/backend/print_backend_win.cc16
-rw-r--r--chromium/printing/backend/win_helper.cc4
-rw-r--r--chromium/printing/common/BUILD.gn15
-rw-r--r--chromium/printing/common/pdf_metafile_utils.cc46
-rw-r--r--chromium/printing/common/pdf_metafile_utils.h28
-rw-r--r--chromium/printing/emf_win.cc200
-rw-r--r--chromium/printing/emf_win.h16
-rw-r--r--chromium/printing/emf_win_unittest.cc26
-rw-r--r--chromium/printing/pdf_metafile_skia.cc34
-rw-r--r--chromium/printing/pdf_metafile_skia.h7
-rw-r--r--chromium/printing/printing_context.cc2
-rw-r--r--chromium/printing/printing_context_win.cc1
17 files changed, 138 insertions, 291 deletions
diff --git a/chromium/printing/BUILD.gn b/chromium/printing/BUILD.gn
index f051b0064d2..eb1fb5abfa7 100644
--- a/chromium/printing/BUILD.gn
+++ b/chromium/printing/BUILD.gn
@@ -43,6 +43,7 @@ component("printing") {
"metafile.h",
"metafile_skia_wrapper.cc",
"metafile_skia_wrapper.h",
+ "native_drawing_context.h",
"page_number.cc",
"page_number.h",
"page_range.cc",
@@ -94,6 +95,7 @@ component("printing") {
"//base:i18n",
"//base/third_party/dynamic_annotations",
"//cc/paint",
+ "//printing/common",
"//skia",
"//third_party/icu",
"//ui/gfx",
diff --git a/chromium/printing/backend/cups_connection.cc b/chromium/printing/backend/cups_connection.cc
index 867e0dcd392..b68d85a3d1b 100644
--- a/chromium/printing/backend/cups_connection.cc
+++ b/chromium/printing/backend/cups_connection.cc
@@ -59,6 +59,12 @@ class DestinationEnumerator {
} // namespace
+QueueStatus::QueueStatus() = default;
+
+QueueStatus::QueueStatus(const QueueStatus& other) = default;
+
+QueueStatus::~QueueStatus() = default;
+
CupsConnection::CupsConnection(const GURL& print_server_url,
http_encryption_t encryption,
bool blocking)
diff --git a/chromium/printing/backend/cups_connection.h b/chromium/printing/backend/cups_connection.h
index 0f0475e405c..c7deb452a9e 100644
--- a/chromium/printing/backend/cups_connection.h
+++ b/chromium/printing/backend/cups_connection.h
@@ -23,6 +23,10 @@ namespace printing {
// Represents the status of a printer queue.
struct PRINTING_EXPORT QueueStatus {
+ QueueStatus();
+ QueueStatus(const QueueStatus& other);
+ ~QueueStatus();
+
PrinterStatus printer_status;
std::vector<CupsJob> jobs;
};
diff --git a/chromium/printing/backend/cups_jobs.cc b/chromium/printing/backend/cups_jobs.cc
index 8faf86a8f39..e73ae8fb331 100644
--- a/chromium/printing/backend/cups_jobs.cc
+++ b/chromium/printing/backend/cups_jobs.cc
@@ -283,6 +283,18 @@ std::string PrinterUriFromName(const std::string& id) {
} // namespace
+CupsJob::CupsJob() = default;
+
+CupsJob::CupsJob(const CupsJob& other) = default;
+
+CupsJob::~CupsJob() = default;
+
+PrinterStatus::PrinterStatus() = default;
+
+PrinterStatus::PrinterStatus(const PrinterStatus& other) = default;
+
+PrinterStatus::~PrinterStatus() = default;
+
void ParseJobsResponse(ipp_t* response,
const std::string& printer_id,
std::vector<CupsJob>* jobs) {
diff --git a/chromium/printing/backend/cups_jobs.h b/chromium/printing/backend/cups_jobs.h
index 12c2d513f43..b1ca693c828 100644
--- a/chromium/printing/backend/cups_jobs.h
+++ b/chromium/printing/backend/cups_jobs.h
@@ -30,6 +30,10 @@ struct PRINTING_EXPORT CupsJob {
ABORTED // an error occurred causing the printer to give up
};
+ CupsJob();
+ CupsJob(const CupsJob& other);
+ ~CupsJob();
+
// job id
int id = -1;
// printer name in CUPS
@@ -47,7 +51,7 @@ struct PRINTING_EXPORT CupsJob {
// Represents the status of a printer containing the properties printer-state,
// printer-state-reasons, and printer-state-message.
-struct PrinterStatus {
+struct PRINTING_EXPORT PrinterStatus {
struct PrinterReason {
// Standardized reasons from RFC2911.
enum Reason {
@@ -94,6 +98,10 @@ struct PrinterStatus {
Severity severity;
};
+ PrinterStatus();
+ PrinterStatus(const PrinterStatus& other);
+ ~PrinterStatus();
+
// printer-state
ipp_pstate_t state;
// printer-state-reasons
diff --git a/chromium/printing/backend/print_backend_win.cc b/chromium/printing/backend/print_backend_win.cc
index 39760867b86..7a657142f59 100644
--- a/chromium/printing/backend/print_backend_win.cc
+++ b/chromium/printing/backend/print_backend_win.cc
@@ -322,17 +322,17 @@ bool PrintBackendWin::GetPrinterCapsAndDefaults(
if (provider) {
base::win::ScopedComPtr<IStream> print_capabilities_stream;
hr = CreateStreamOnHGlobal(NULL, TRUE,
- print_capabilities_stream.Receive());
+ print_capabilities_stream.GetAddressOf());
DCHECK(SUCCEEDED(hr));
- if (print_capabilities_stream.get()) {
+ if (print_capabilities_stream.Get()) {
base::win::ScopedBstr error;
hr = XPSModule::GetPrintCapabilities(
- provider, NULL, print_capabilities_stream.get(), error.Receive());
+ provider, NULL, print_capabilities_stream.Get(), error.Receive());
DCHECK(SUCCEEDED(hr));
if (FAILED(hr)) {
return false;
}
- hr = StreamOnHGlobalToString(print_capabilities_stream.get(),
+ hr = StreamOnHGlobalToString(print_capabilities_stream.Get(),
&printer_info->printer_capabilities);
DCHECK(SUCCEEDED(hr));
printer_info->caps_mime_type = "text/xml";
@@ -345,16 +345,16 @@ bool PrintBackendWin::GetPrinterCapsAndDefaults(
return false;
base::win::ScopedComPtr<IStream> printer_defaults_stream;
hr = CreateStreamOnHGlobal(NULL, TRUE,
- printer_defaults_stream.Receive());
+ printer_defaults_stream.GetAddressOf());
DCHECK(SUCCEEDED(hr));
- if (printer_defaults_stream.get()) {
+ if (printer_defaults_stream.Get()) {
DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra;
hr = XPSModule::ConvertDevModeToPrintTicket(
provider, dm_size, devmode_out.get(), kPTJobScope,
- printer_defaults_stream.get());
+ printer_defaults_stream.Get());
DCHECK(SUCCEEDED(hr));
if (SUCCEEDED(hr)) {
- hr = StreamOnHGlobalToString(printer_defaults_stream.get(),
+ hr = StreamOnHGlobalToString(printer_defaults_stream.Get(),
&printer_info->printer_defaults);
DCHECK(SUCCEEDED(hr));
printer_info->defaults_mime_type = "text/xml";
diff --git a/chromium/printing/backend/win_helper.cc b/chromium/printing/backend/win_helper.cc
index c96e123c7d2..6a248890c9d 100644
--- a/chromium/printing/backend/win_helper.cc
+++ b/chromium/printing/backend/win_helper.cc
@@ -404,7 +404,7 @@ std::unique_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode(
return dev_mode;
base::win::ScopedComPtr<IStream> pt_stream;
- HRESULT hr = StreamFromPrintTicket(print_ticket, pt_stream.Receive());
+ HRESULT hr = StreamFromPrintTicket(print_ticket, pt_stream.GetAddressOf());
if (FAILED(hr))
return dev_mode;
@@ -415,7 +415,7 @@ std::unique_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode(
DEVMODE* dm = NULL;
// Use kPTJobScope, because kPTDocumentScope breaks duplex.
hr = printing::XPSModule::ConvertPrintTicketToDevMode(
- provider, pt_stream.get(), kUserDefaultDevmode, kPTJobScope, &size, &dm,
+ provider, pt_stream.Get(), kUserDefaultDevmode, kPTJobScope, &size, &dm,
NULL);
if (SUCCEEDED(hr)) {
// Correct DEVMODE using DocumentProperties. See documentation for
diff --git a/chromium/printing/common/BUILD.gn b/chromium/printing/common/BUILD.gn
new file mode 100644
index 00000000000..d1b74bb7a43
--- /dev/null
+++ b/chromium/printing/common/BUILD.gn
@@ -0,0 +1,15 @@
+# Copyright 2017 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.
+
+source_set("common") {
+ sources = [
+ "pdf_metafile_utils.cc",
+ "pdf_metafile_utils.h",
+ ]
+
+ deps = [
+ "//base",
+ "//skia",
+ ]
+}
diff --git a/chromium/printing/common/pdf_metafile_utils.cc b/chromium/printing/common/pdf_metafile_utils.cc
new file mode 100644
index 00000000000..3a30ad0018d
--- /dev/null
+++ b/chromium/printing/common/pdf_metafile_utils.cc
@@ -0,0 +1,46 @@
+// Copyright 2017 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/common/pdf_metafile_utils.h"
+
+#include "base/time/time.h"
+#include "third_party/skia/include/core/SkTime.h"
+
+namespace {
+
+SkTime::DateTime TimeToSkTime(base::Time time) {
+ base::Time::Exploded exploded;
+ time.UTCExplode(&exploded);
+ SkTime::DateTime skdate;
+ skdate.fTimeZoneMinutes = 0;
+ skdate.fYear = exploded.year;
+ skdate.fMonth = exploded.month;
+ skdate.fDayOfWeek = exploded.day_of_week;
+ skdate.fDay = exploded.day_of_month;
+ skdate.fHour = exploded.hour;
+ skdate.fMinute = exploded.minute;
+ skdate.fSecond = exploded.second;
+ return skdate;
+}
+
+} // namespace
+
+namespace printing {
+
+sk_sp<SkDocument> MakePdfDocument(const std::string& creator,
+ SkWStream* stream) {
+ SkDocument::PDFMetadata metadata;
+ SkTime::DateTime now = TimeToSkTime(base::Time::Now());
+ metadata.fCreation.fEnabled = true;
+ metadata.fCreation.fDateTime = now;
+ metadata.fModified.fEnabled = true;
+ metadata.fModified.fDateTime = now;
+ metadata.fCreator = creator.empty()
+ ? SkString("Chromium")
+ : SkString(creator.c_str(), creator.size());
+ return SkDocument::MakePDF(stream, SK_ScalarDefaultRasterDPI, metadata,
+ nullptr, false);
+}
+
+} // namespace printing
diff --git a/chromium/printing/common/pdf_metafile_utils.h b/chromium/printing/common/pdf_metafile_utils.h
new file mode 100644
index 00000000000..78d2b530f31
--- /dev/null
+++ b/chromium/printing/common/pdf_metafile_utils.h
@@ -0,0 +1,28 @@
+// Copyright 2017 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_COMMON_PDF_METAFILE_UTILS_H_
+#define PRINTING_COMMON_PDF_METAFILE_UTILS_H_
+
+#include <string>
+
+#include "skia/ext/platform_canvas.h"
+#include "third_party/skia/include/core/SkDocument.h"
+#include "third_party/skia/include/core/SkRefCnt.h"
+#include "third_party/skia/include/core/SkStream.h"
+
+namespace printing {
+
+enum SkiaDocumentType {
+ PDF_SKIA_DOCUMENT_TYPE,
+ // MSKP is an experimental, fragile, and diagnostic-only document type.
+ MSKP_SKIA_DOCUMENT_TYPE,
+};
+
+sk_sp<SkDocument> MakePdfDocument(const std::string& creator,
+ SkWStream* stream);
+
+} // namespace printing
+
+#endif // PRINTING_COMMON_PDF_METAFILE_UTILS_H_
diff --git a/chromium/printing/emf_win.cc b/chromium/printing/emf_win.cc
index 1bcc75d946f..0008ab031a4 100644
--- a/chromium/printing/emf_win.cc
+++ b/chromium/printing/emf_win.cc
@@ -15,9 +15,6 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/numerics/safe_conversions.h"
-#include "base/win/scoped_gdi_object.h"
-#include "base/win/scoped_hdc.h"
-#include "base/win/scoped_select_object.h"
#include "skia/ext/skia_utils_win.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/codec/jpeg_codec.h"
@@ -29,116 +26,6 @@ namespace printing {
namespace {
-int CALLBACK IsAlphaBlendUsedEnumProc(HDC,
- HANDLETABLE*,
- const ENHMETARECORD *record,
- int,
- LPARAM data) {
- bool* result = reinterpret_cast<bool*>(data);
- if (!result)
- return 0;
- switch (record->iType) {
- case EMR_ALPHABLEND: {
- *result = true;
- return 0;
- break;
- }
- }
- return 1;
-}
-
-int CALLBACK RasterizeAlphaBlendProc(HDC metafile_dc,
- HANDLETABLE* handle_table,
- const ENHMETARECORD *record,
- int num_objects,
- LPARAM data) {
- HDC bitmap_dc = *reinterpret_cast<HDC*>(data);
- // Play this command to the bitmap DC.
- ::PlayEnhMetaFileRecord(bitmap_dc, handle_table, record, num_objects);
- switch (record->iType) {
- case EMR_ALPHABLEND: {
- const EMRALPHABLEND* alpha_blend =
- reinterpret_cast<const EMRALPHABLEND*>(record);
- // Don't modify transformation here.
- // Old implementation did reset transformations for DC to identity matrix.
- // That was not correct and cause some bugs, like unexpected cropping.
- // EMRALPHABLEND is rendered into bitmap and metafile contexts with
- // current transformation. If we don't touch them here BitBlt will copy
- // same areas.
- ::BitBlt(metafile_dc,
- alpha_blend->xDest,
- alpha_blend->yDest,
- alpha_blend->cxDest,
- alpha_blend->cyDest,
- bitmap_dc,
- alpha_blend->xDest,
- alpha_blend->yDest,
- SRCCOPY);
- break;
- }
- case EMR_CREATEBRUSHINDIRECT:
- case EMR_CREATECOLORSPACE:
- case EMR_CREATECOLORSPACEW:
- case EMR_CREATEDIBPATTERNBRUSHPT:
- case EMR_CREATEMONOBRUSH:
- case EMR_CREATEPALETTE:
- case EMR_CREATEPEN:
- case EMR_DELETECOLORSPACE:
- case EMR_DELETEOBJECT:
- case EMR_EXTCREATEFONTINDIRECTW:
- // Play object creation command only once.
- break;
-
- default:
- // Play this command to the metafile DC.
- ::PlayEnhMetaFileRecord(metafile_dc, handle_table, record, num_objects);
- break;
- }
- return 1; // Continue enumeration
-}
-
-// Bitmapt for rasterization.
-class RasterBitmap {
- public:
- explicit RasterBitmap(const gfx::Size& raster_size) : saved_object_(nullptr) {
- context_.Set(::CreateCompatibleDC(nullptr));
- if (!context_.IsValid()) {
- NOTREACHED() << "Bitmap DC creation failed";
- return;
- }
- ::SetGraphicsMode(context_.Get(), GM_ADVANCED);
- void* bits = nullptr;
- gfx::Rect bitmap_rect(raster_size);
- skia::CreateBitmapHeader(raster_size.width(), raster_size.height(),
- &header_.bmiHeader);
- bitmap_.reset(CreateDIBSection(context_.Get(), &header_, DIB_RGB_COLORS,
- &bits, nullptr, 0));
- if (!bitmap_.is_valid())
- NOTREACHED() << "Raster bitmap creation for printing failed";
-
- saved_object_ = ::SelectObject(context_.Get(), bitmap_.get());
- RECT rect = bitmap_rect.ToRECT();
- ::FillRect(context_.Get(), &rect,
- static_cast<HBRUSH>(::GetStockObject(WHITE_BRUSH)));
- }
-
- ~RasterBitmap() {
- ::SelectObject(context_.Get(), saved_object_);
- }
-
- HDC context() const {
- return context_.Get();
- }
-
- base::win::ScopedCreateDC context_;
- BITMAPINFO header_;
- base::win::ScopedBitmap bitmap_;
- HGDIOBJ saved_object_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(RasterBitmap);
-};
-
bool DIBFormatNativelySupported(HDC dc, uint32_t escape, const BYTE* bits,
int size) {
BOOL supported = FALSE;
@@ -382,7 +269,6 @@ bool Emf::Record::SafePlayback(Emf::EnumerationContext* context) const {
} else {
DCHECK(bitmap.get());
if (bitmap.get()) {
- SkAutoLockPixels lock(*bitmap.get());
DCHECK_EQ(bitmap->colorType(), kN32_SkColorType);
const uint32_t* pixels =
static_cast<const uint32_t*>(bitmap->getPixels());
@@ -515,90 +401,4 @@ int CALLBACK Emf::Enumerator::EnhMetaFileProc(HDC hdc,
return 1;
}
-bool Emf::IsAlphaBlendUsed() const {
- bool result = false;
- ::EnumEnhMetaFile(nullptr, emf(), &IsAlphaBlendUsedEnumProc, &result,
- nullptr);
- return result;
-}
-
-std::unique_ptr<Emf> Emf::RasterizeMetafile(int raster_area_in_pixels) const {
- gfx::Rect page_bounds = GetPageBounds(1);
- gfx::Size page_size(page_bounds.size());
- if (page_size.GetArea() <= 0) {
- NOTREACHED() << "Metafile is empty";
- page_bounds = gfx::Rect(1, 1);
- }
-
- float scale = sqrt(
- static_cast<float>(raster_area_in_pixels) / page_size.GetArea());
- page_size.set_width(std::max<int>(1, page_size.width() * scale));
- page_size.set_height(std::max<int>(1, page_size.height() * scale));
-
-
- RasterBitmap bitmap(page_size);
-
- gfx::Rect bitmap_rect(page_size);
- RECT rect = bitmap_rect.ToRECT();
- Playback(bitmap.context(), &rect);
-
- std::unique_ptr<Emf> result = base::MakeUnique<Emf>();
- result->Init();
- HDC hdc = result->context();
- DCHECK(hdc);
- skia::InitializeDC(hdc);
-
- // Params are ignored.
- result->StartPage(page_bounds.size(), page_bounds, 1);
-
- ::ModifyWorldTransform(hdc, nullptr, MWT_IDENTITY);
- XFORM xform = {
- static_cast<float>(page_bounds.width()) / bitmap_rect.width(),
- 0,
- 0,
- static_cast<float>(page_bounds.height()) / bitmap_rect.height(),
- static_cast<float>(page_bounds.x()),
- static_cast<float>(page_bounds.y()),
- };
- ::SetWorldTransform(hdc, &xform);
- ::BitBlt(hdc, 0, 0, bitmap_rect.width(), bitmap_rect.height(),
- bitmap.context(), bitmap_rect.x(), bitmap_rect.y(), SRCCOPY);
-
- result->FinishPage();
- result->FinishDocument();
- return result;
-}
-
-std::unique_ptr<Emf> Emf::RasterizeAlphaBlend() const {
- gfx::Rect page_bounds = GetPageBounds(1);
- if (page_bounds.size().GetArea() <= 0) {
- NOTREACHED() << "Metafile is empty";
- page_bounds = gfx::Rect(1, 1);
- }
-
- RasterBitmap bitmap(page_bounds.size());
-
- // Map metafile page_bounds.x(), page_bounds.y() to bitmap 0, 0.
- XFORM xform = {1,
- 0,
- 0,
- 1,
- static_cast<float>(-page_bounds.x()),
- static_cast<float>(-page_bounds.y())};
- ::SetWorldTransform(bitmap.context(), &xform);
-
- std::unique_ptr<Emf> result = base::MakeUnique<Emf>();
- result->Init();
- HDC hdc = result->context();
- DCHECK(hdc);
- skia::InitializeDC(hdc);
-
- HDC bitmap_dc = bitmap.context();
- RECT rect = page_bounds.ToRECT();
- ::EnumEnhMetaFile(hdc, emf(), &RasterizeAlphaBlendProc, &bitmap_dc, &rect);
-
- result->FinishDocument();
- return result;
-}
-
} // namespace printing
diff --git a/chromium/printing/emf_win.h b/chromium/printing/emf_win.h
index c66e9f24b98..9bb423264bb 100644
--- a/chromium/printing/emf_win.h
+++ b/chromium/printing/emf_win.h
@@ -28,11 +28,6 @@ class Size;
namespace printing {
-// http://msdn2.microsoft.com/en-us/library/ms535522.aspx
-// Windows 2000/XP: When a page in a spooled file exceeds approximately 350
-// MB, it can fail to print and not send an error message.
-const size_t kMetafileMaxSize = 350*1024*1024;
-
// Simple wrapper class that manage an EMF data stream and its virtual HDC.
class PRINTING_EXPORT Emf : public Metafile {
public:
@@ -82,17 +77,6 @@ class PRINTING_EXPORT Emf : public Metafile {
HENHMETAFILE emf() const { return emf_; }
- // Returns true if metafile contains alpha blend.
- bool IsAlphaBlendUsed() const;
-
- // Returns new metafile with only bitmap created by playback of the current
- // metafile. Returns NULL if fails.
- std::unique_ptr<Emf> RasterizeMetafile(int raster_area_in_pixels) const;
-
- // Returns new metafile where AlphaBlend replaced by bitmaps. Returns NULL
- // if fails.
- std::unique_ptr<Emf> RasterizeAlphaBlend() const;
-
private:
FRIEND_TEST_ALL_PREFIXES(EmfTest, DC);
FRIEND_TEST_ALL_PREFIXES(EmfPrintingTest, PageBreak);
diff --git a/chromium/printing/emf_win_unittest.cc b/chromium/printing/emf_win_unittest.cc
index d8b3121ad7d..e98b628a079 100644
--- a/chromium/printing/emf_win_unittest.cc
+++ b/chromium/printing/emf_win_unittest.cc
@@ -47,7 +47,6 @@ class EmfPrintingTest : public testing::Test, public PrintingContext::Delegate {
};
const uint32_t EMF_HEADER_SIZE = 128;
-const int ONE_MB = 1024 * 1024;
} // namespace
@@ -211,29 +210,4 @@ TEST(EmfTest, FileBackedEmf) {
EXPECT_TRUE(DeleteDC(hdc));
}
-TEST(EmfTest, RasterizeMetafile) {
- Emf emf;
- EXPECT_TRUE(emf.Init());
- EXPECT_TRUE(emf.context());
- HBRUSH brush = static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));
- for (int i = 0; i < 4; ++i) {
- RECT rect = { 5 + i, 5 + i, 5 + i + 1, 5 + i + 2};
- FillRect(emf.context(), &rect, brush);
- }
- EXPECT_TRUE(emf.FinishDocument());
-
- std::unique_ptr<Emf> raster(emf.RasterizeMetafile(1));
- // Just 1px bitmap but should be stretched to the same bounds.
- EXPECT_EQ(emf.GetPageBounds(1), raster->GetPageBounds(1));
-
- raster = emf.RasterizeMetafile(20);
- EXPECT_EQ(emf.GetPageBounds(1), raster->GetPageBounds(1));
-
- raster = emf.RasterizeMetafile(16 * ONE_MB);
- // Expected size about 64MB.
- EXPECT_LE(abs(static_cast<int>(raster->GetDataSize()) - 64 * ONE_MB), ONE_MB);
- // Bounds should still be the same.
- EXPECT_EQ(emf.GetPageBounds(1), raster->GetPageBounds(1));
-}
-
} // namespace printing
diff --git a/chromium/printing/pdf_metafile_skia.cc b/chromium/printing/pdf_metafile_skia.cc
index dd9149483fa..2e3b07b2c3c 100644
--- a/chromium/printing/pdf_metafile_skia.cc
+++ b/chromium/printing/pdf_metafile_skia.cc
@@ -12,11 +12,10 @@
#include "base/files/file.h"
#include "base/memory/ptr_util.h"
#include "base/time/time.h"
-#include "cc/paint/paint_canvas.h"
#include "cc/paint/paint_record.h"
#include "cc/paint/paint_recorder.h"
+#include "cc/paint/skia_paint_canvas.h"
#include "printing/print_settings.h"
-#include "third_party/skia/include/core/SkDocument.h"
#include "third_party/skia/include/core/SkStream.h"
// Note that headers in third_party/skia/src are fragile. This is
// an experimental, fragile, and diagnostic-only document type.
@@ -45,35 +44,6 @@ bool WriteAssetToBuffer(const SkStreamAsset* asset,
return (length == assetCopy->read(buffer, length));
}
-SkTime::DateTime TimeToSkTime(base::Time time) {
- base::Time::Exploded exploded;
- time.UTCExplode(&exploded);
- SkTime::DateTime skdate;
- skdate.fTimeZoneMinutes = 0;
- skdate.fYear = exploded.year;
- skdate.fMonth = exploded.month;
- skdate.fDayOfWeek = exploded.day_of_week;
- skdate.fDay = exploded.day_of_month;
- skdate.fHour = exploded.hour;
- skdate.fMinute = exploded.minute;
- skdate.fSecond = exploded.second;
- return skdate;
-}
-
-sk_sp<SkDocument> MakePdfDocument(SkWStream* wStream) {
- SkDocument::PDFMetadata metadata;
- SkTime::DateTime now = TimeToSkTime(base::Time::Now());
- metadata.fCreation.fEnabled = true;
- metadata.fCreation.fDateTime = now;
- metadata.fModified.fEnabled = true;
- metadata.fModified.fDateTime = now;
- const std::string& agent = printing::GetAgent();
- metadata.fCreator = agent.empty() ? SkString("Chromium")
- : SkString(agent.c_str(), agent.size());
- return SkDocument::MakePDF(wStream, SK_ScalarDefaultRasterDPI, metadata,
- nullptr, false);
-}
-
} // namespace
namespace printing {
@@ -192,7 +162,7 @@ bool PdfMetafileSkia::FinishDocument() {
sk_sp<SkDocument> doc;
switch (data_->type_) {
case PDF_SKIA_DOCUMENT_TYPE:
- doc = MakePdfDocument(&stream);
+ doc = MakePdfDocument(printing::GetAgent(), &stream);
break;
case MSKP_SKIA_DOCUMENT_TYPE:
doc = SkMakeMultiPictureDocument(&stream);
diff --git a/chromium/printing/pdf_metafile_skia.h b/chromium/printing/pdf_metafile_skia.h
index 948e27f45e0..dacd1a74cb0 100644
--- a/chromium/printing/pdf_metafile_skia.h
+++ b/chromium/printing/pdf_metafile_skia.h
@@ -12,6 +12,7 @@
#include "base/macros.h"
#include "build/build_config.h"
#include "cc/paint/paint_canvas.h"
+#include "printing/common/pdf_metafile_utils.h"
#include "printing/metafile.h"
#include "skia/ext/platform_canvas.h"
@@ -21,12 +22,6 @@
namespace printing {
-enum SkiaDocumentType {
- PDF_SKIA_DOCUMENT_TYPE,
- // MSKP is an experimental, fragile, and diagnostic-only document type.
- MSKP_SKIA_DOCUMENT_TYPE,
-};
-
struct PdfMetafileSkiaData;
// This class uses Skia graphics library to generate a PDF document.
diff --git a/chromium/printing/printing_context.cc b/chromium/printing/printing_context.cc
index e317924f247..b570da0afc8 100644
--- a/chromium/printing/printing_context.cc
+++ b/chromium/printing/printing_context.cc
@@ -65,6 +65,8 @@ PrintingContext::Result PrintingContext::UsePdfSettings() {
pdf_settings->SetBoolean(kSettingCollate, true);
pdf_settings->SetInteger(kSettingCopies, 1);
pdf_settings->SetInteger(kSettingColor, printing::COLOR);
+ pdf_settings->SetInteger(kSettingDpiHorizontal, kPointsPerInch);
+ pdf_settings->SetInteger(kSettingDpiVertical, kPointsPerInch);
pdf_settings->SetInteger(kSettingDuplexMode, printing::SIMPLEX);
pdf_settings->SetBoolean(kSettingLandscape, false);
pdf_settings->SetString(kSettingDeviceName, "");
diff --git a/chromium/printing/printing_context_win.cc b/chromium/printing/printing_context_win.cc
index 5cd5c99f514..cc48c782634 100644
--- a/chromium/printing/printing_context_win.cc
+++ b/chromium/printing/printing_context_win.cc
@@ -10,6 +10,7 @@
#include "base/bind.h"
#include "base/memory/free_deleter.h"
#include "base/memory/ptr_util.h"
+#include "base/message_loop/message_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "printing/backend/print_backend.h"