diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-07-17 13:57:45 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-07-19 13:44:40 +0000 |
commit | 6ec7b8da05d21a3878bd21c691b41e675d74bb1c (patch) | |
tree | b87f250bc19413750b9bb9cdbf2da20ef5014820 /chromium/printing | |
parent | ec02ee4181c49b61fce1c8fb99292dbb8139cc90 (diff) | |
download | qtwebengine-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.gn | 2 | ||||
-rw-r--r-- | chromium/printing/backend/cups_connection.cc | 6 | ||||
-rw-r--r-- | chromium/printing/backend/cups_connection.h | 4 | ||||
-rw-r--r-- | chromium/printing/backend/cups_jobs.cc | 12 | ||||
-rw-r--r-- | chromium/printing/backend/cups_jobs.h | 10 | ||||
-rw-r--r-- | chromium/printing/backend/print_backend_win.cc | 16 | ||||
-rw-r--r-- | chromium/printing/backend/win_helper.cc | 4 | ||||
-rw-r--r-- | chromium/printing/common/BUILD.gn | 15 | ||||
-rw-r--r-- | chromium/printing/common/pdf_metafile_utils.cc | 46 | ||||
-rw-r--r-- | chromium/printing/common/pdf_metafile_utils.h | 28 | ||||
-rw-r--r-- | chromium/printing/emf_win.cc | 200 | ||||
-rw-r--r-- | chromium/printing/emf_win.h | 16 | ||||
-rw-r--r-- | chromium/printing/emf_win_unittest.cc | 26 | ||||
-rw-r--r-- | chromium/printing/pdf_metafile_skia.cc | 34 | ||||
-rw-r--r-- | chromium/printing/pdf_metafile_skia.h | 7 | ||||
-rw-r--r-- | chromium/printing/printing_context.cc | 2 | ||||
-rw-r--r-- | chromium/printing/printing_context_win.cc | 1 |
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" |