diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/printing | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-c30a6232df03e1efbd9f3b226777b07e087a1122.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/printing')
37 files changed, 360 insertions, 275 deletions
diff --git a/chromium/printing/BUILD.gn b/chromium/printing/BUILD.gn index 14a62f051ab..6995990fcbe 100644 --- a/chromium/printing/BUILD.gn +++ b/chromium/printing/BUILD.gn @@ -75,7 +75,6 @@ component("printing") { "page_range.h", "page_setup.cc", "page_setup.h", - "page_size_margins.h", "pdf_render_settings.h", "print_dialog_gtk_interface.h", "print_job_constants.cc", diff --git a/chromium/printing/backend/cups_helper.cc b/chromium/printing/backend/cups_helper.cc index b4cc35afe73..251455e0cbb 100644 --- a/chromium/printing/backend/cups_helper.cc +++ b/chromium/printing/backend/cups_helper.cc @@ -4,21 +4,17 @@ #include "printing/backend/cups_helper.h" -#include <cups/ppd.h> #include <stddef.h> -#include <string> #include <vector> -#include "base/base_paths.h" #include "base/files/file_util.h" #include "base/logging.h" -#include "base/path_service.h" #include "base/strings/string_number_conversions.h" -#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/time/time.h" #include "base/values.h" +#include "build/build_config.h" #include "printing/backend/print_backend.h" #include "printing/backend/print_backend_consts.h" #include "printing/mojom/print.mojom.h" @@ -52,7 +48,10 @@ constexpr char kCupsMaxCopies[] = "cupsMaxCopies"; constexpr char kColorDevice[] = "ColorDevice"; constexpr char kColorModel[] = "ColorModel"; constexpr char kColorMode[] = "ColorMode"; +// TODO(crbug.com/1081705): Epson "Ink" attribute bloats prints on Linux. +#if !defined(OS_LINUX) constexpr char kInk[] = "Ink"; +#endif constexpr char kProcessColorModel[] = "ProcessColorModel"; constexpr char kPrintoutMode[] = "PrintoutMode"; constexpr char kDraftGray[] = "Draft.Gray"; @@ -88,81 +87,6 @@ constexpr char kXeroxXRXColor[] = "XRXColor"; constexpr char kXeroxAutomatic[] = "Automatic"; constexpr char kXeroxBW[] = "BW"; -void ParseLpOptions(const base::FilePath& filepath, - base::StringPiece printer_name, - int* num_options, - cups_option_t** options) { - std::string content; - if (!base::ReadFileToString(filepath, &content)) - return; - - const char kDest[] = "dest"; - const char kDefault[] = "default"; - const size_t kDestLen = sizeof(kDest) - 1; - const size_t kDefaultLen = sizeof(kDefault) - 1; - - for (base::StringPiece line : base::SplitStringPiece( - content, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) { - if (base::StartsWith(line, base::StringPiece(kDefault, kDefaultLen), - base::CompareCase::INSENSITIVE_ASCII) && - isspace(line[kDefaultLen])) { - line = line.substr(kDefaultLen); - } else if (base::StartsWith(line, base::StringPiece(kDest, kDestLen), - base::CompareCase::INSENSITIVE_ASCII) && - isspace(line[kDestLen])) { - line = line.substr(kDestLen); - } else { - continue; - } - - line = base::TrimWhitespaceASCII(line, base::TRIM_ALL); - if (line.empty()) - continue; - - size_t space_found = line.find(' '); - if (space_found == base::StringPiece::npos) - continue; - - base::StringPiece name = line.substr(0, space_found); - if (name.empty()) - continue; - - if (!EqualsCaseInsensitiveASCII(printer_name, name)) - continue; // This is not the required printer. - - line = line.substr(space_found + 1); - // Remove extra spaces. - line = base::TrimWhitespaceASCII(line, base::TRIM_ALL); - if (line.empty()) - continue; - - // Parse the selected printer custom options. Need to pass a - // null-terminated string. - *num_options = cupsParseOptions(line.as_string().c_str(), 0, options); - } -} - -void MarkLpOptions(base::StringPiece printer_name, ppd_file_t* ppd) { - static constexpr char kSystemLpOptionPath[] = "/etc/cups/lpoptions"; - static constexpr char kUserLpOptionPath[] = ".cups/lpoptions"; - - std::vector<base::FilePath> file_locations; - file_locations.push_back(base::FilePath(kSystemLpOptionPath)); - base::FilePath homedir; - base::PathService::Get(base::DIR_HOME, &homedir); - file_locations.push_back(base::FilePath(homedir.Append(kUserLpOptionPath))); - - for (const base::FilePath& location : file_locations) { - int num_options = 0; - cups_option_t* options = nullptr; - ParseLpOptions(location, printer_name, &num_options, &options); - if (num_options > 0 && options) { - cupsMarkOptions(ppd, num_options, options); - cupsFreeOptions(num_options, options); - } - } -} - int32_t GetCopiesMax(ppd_file_t* ppd) { ppd_attr_t* attr = ppdFindAttr(ppd, kCupsMaxCopies, nullptr); if (!attr || !attr->value) { @@ -409,6 +333,8 @@ bool GetHPColorModeSettings(ppd_file_t* ppd, return true; } +// TODO(crbug.com/1081705): Epson "Ink" attribute bloats prints on Linux. +#if !defined(OS_LINUX) bool GetEpsonInkSettings(ppd_file_t* ppd, ColorModel* color_model_for_black, ColorModel* color_model_for_color, @@ -434,6 +360,7 @@ bool GetEpsonInkSettings(ppd_file_t* ppd, } return true; } +#endif // !defined(OS_LINUX) bool GetSharpARCModeSettings(ppd_file_t* ppd, ColorModel* color_model_for_black, @@ -538,7 +465,10 @@ bool GetColorModelSettings(ppd_file_t* ppd, GetHPColorSettings(ppd, cm_black, cm_color, is_color) || GetHPColorModeSettings(ppd, cm_black, cm_color, is_color) || GetBrotherColorSettings(ppd, cm_black, cm_color, is_color) || +// TODO(crbug.com/1081705): Epson "Ink" attribute bloats prints on Linux. +#if !defined(OS_LINUX) GetEpsonInkSettings(ppd, cm_black, cm_color, is_color) || +#endif GetSharpARCModeSettings(ppd, cm_black, cm_color, is_color) || GetXeroxColorSettings(ppd, cm_black, cm_color, is_color) || GetProcessColorModelSettings(ppd, cm_black, cm_color, is_color); @@ -594,7 +524,7 @@ http_t* HttpConnectionCUPS::http() { return http_; } -bool ParsePpdCapabilities(base::StringPiece printer_name, +bool ParsePpdCapabilities(cups_dest_t* dest, base::StringPiece locale, base::StringPiece printer_capabilities, PrinterSemanticCapsAndDefaults* printer_info) { @@ -616,7 +546,8 @@ bool ParsePpdCapabilities(base::StringPiece printer_name, return false; } ppdMarkDefaults(ppd); - MarkLpOptions(printer_name, ppd); + if (dest) + cupsMarkOptions(ppd, dest->num_options, dest->options); PrinterSemanticCapsAndDefaults caps; caps.collate_capable = true; diff --git a/chromium/printing/backend/cups_helper.h b/chromium/printing/backend/cups_helper.h index 4a261e26439..8d90531e5b5 100644 --- a/chromium/printing/backend/cups_helper.h +++ b/chromium/printing/backend/cups_helper.h @@ -36,7 +36,7 @@ class PRINTING_EXPORT HttpConnectionCUPS { // Helper function to parse and convert PPD capabilitites to // semantic options. PRINTING_EXPORT bool ParsePpdCapabilities( - base::StringPiece printer_name, + cups_dest_t* dest, base::StringPiece locale, base::StringPiece printer_capabilities, PrinterSemanticCapsAndDefaults* printer_info); diff --git a/chromium/printing/backend/cups_helper_unittest.cc b/chromium/printing/backend/cups_helper_unittest.cc index 53dc4602e99..990bad663b1 100644 --- a/chromium/printing/backend/cups_helper_unittest.cc +++ b/chromium/printing/backend/cups_helper_unittest.cc @@ -4,6 +4,7 @@ #include "printing/backend/cups_helper.h" +#include "build/build_config.h" #include "printing/backend/print_backend.h" #include "printing/mojom/print.mojom.h" #include "printing/print_settings.h" @@ -56,7 +57,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingNoColorDuplexShortEdge) { *CloseGroup: General)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.collate_capable); EXPECT_TRUE(caps.collate_default); EXPECT_EQ(caps.copies_max, 9999); @@ -86,7 +88,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingNoColorDuplexSimples) { *CloseGroup: General)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.collate_capable); EXPECT_TRUE(caps.collate_default); EXPECT_EQ(caps.copies_max, 9999); @@ -113,7 +116,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingNoColorNoDuplex) { *CloseGroup: General)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.collate_capable); EXPECT_TRUE(caps.collate_default); EXPECT_EQ(caps.copies_max, 9999); @@ -146,7 +150,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingColorTrueDuplexShortEdge) { *CloseGroup: General)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.collate_capable); EXPECT_TRUE(caps.collate_default); EXPECT_EQ(caps.copies_max, 9999); @@ -188,7 +193,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingColorFalseDuplexLongEdge) { *CloseGroup: General)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.collate_capable); EXPECT_TRUE(caps.collate_default); EXPECT_EQ(caps.copies_max, 9999); @@ -220,7 +226,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingPageSize) { *CloseUI: *PageSize)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); ASSERT_EQ(2UL, caps.papers.size()); EXPECT_EQ("Letter", caps.papers[0].vendor_id); EXPECT_EQ("US Letter", caps.papers[0].display_name); @@ -261,7 +268,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingPageSizeNoDefaultSpecified) { { PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "en-US", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"en-US", + kTestPpdData, &caps)); ASSERT_EQ(4UL, caps.papers.size()); EXPECT_EQ("Letter", caps.papers[3].vendor_id); EXPECT_EQ("US Letter", caps.papers[3].display_name); @@ -271,7 +279,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingPageSizeNoDefaultSpecified) { } { PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "en-UK", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"en-UK", + kTestPpdData, &caps)); ASSERT_EQ(4UL, caps.papers.size()); EXPECT_EQ("A4", caps.papers[1].vendor_id); EXPECT_EQ("ISO A4", caps.papers[1].display_name); @@ -294,7 +303,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingBrotherPrinters) { *CloseUI: *BRPrintQuality)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); EXPECT_EQ(BROTHER_BRSCRIPT3_COLOR, caps.color_model); @@ -313,7 +323,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingBrotherPrinters) { *CloseUI: *BRMonoColor)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); EXPECT_EQ(BROTHER_CUPS_COLOR, caps.color_model); @@ -332,7 +343,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingBrotherPrinters) { *CloseUI: *BRDuplex)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_THAT(caps.duplex_modes, testing::UnorderedElementsAre(mojom::DuplexMode::kSimplex, mojom::DuplexMode::kLongEdge, @@ -354,7 +366,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) { *CloseUI: *HPColorMode)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); EXPECT_EQ(HP_COLOR_COLOR, caps.color_model); @@ -362,7 +375,13 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) { VerifyCapabilityColorModels(caps); } -TEST(PrintBackendCupsHelperTest, TestPpdParsingEpsonPrinters) { +// TODO(crbug.com/1081705): Epson "Ink" attribute bloats prints on Linux. +#if defined(OS_LINUX) +#define MAYBE_TestPpdParsingEpsonPrinters DISABLED_TestPpdParsingEpsonPrinters +#else +#define MAYBE_TestPpdParsingEpsonPrinters TestPpdParsingEpsonPrinters +#endif +TEST(PrintBackendCupsHelperTest, MAYBE_TestPpdParsingEpsonPrinters) { constexpr char kTestPpdData[] = R"(*PPD-Adobe: "4.3" *ColorDevice: True @@ -377,7 +396,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingEpsonPrinters) { *CloseUI: *Ink)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); EXPECT_EQ(EPSON_INK_COLOR, caps.color_model); @@ -396,7 +416,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) { *CloseUI: *ColorMode)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); EXPECT_EQ(COLORMODE_COLOR, caps.color_model); @@ -420,7 +441,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingSharpPrinters) { *CloseUI: *ARCMode)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); EXPECT_EQ(SHARP_ARCMODE_CMCOLOR, caps.color_model); @@ -442,7 +464,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingXeroxPrinters) { *CloseUI: *XRXColor)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); EXPECT_EQ(XEROX_XRXCOLOR_AUTOMATIC, caps.color_model); @@ -460,8 +483,9 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingCupsMaxCopies) { *CloseUI: *ColorMode)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); - EXPECT_EQ(caps.copies_max, 99); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); + EXPECT_EQ(99, caps.copies_max); } { @@ -473,9 +497,49 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingCupsMaxCopies) { *CloseUI: *ColorMode)"; PrinterSemanticCapsAndDefaults caps; - EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); - EXPECT_EQ(caps.copies_max, 9999); + EXPECT_TRUE(ParsePpdCapabilities(/*dest=*/nullptr, /*locale=*/"", + kTestPpdData, &caps)); + EXPECT_EQ(9999, caps.copies_max); } } +TEST(PrintBackendCupsHelperTest, TestPpdSetsDestOptions) { + constexpr char kTestPpdData[] = + R"(*PPD-Adobe: "4.3" +*OpenUI *Duplex/2-Sided Printing: PickOne +*DefaultDuplex: DuplexTumble +*Duplex None/Off: " + <</Duplex false>>setpagedevice" +*Duplex DuplexNoTumble/LongEdge: " + </Duplex true/Tumble false>>setpagedevice" +*Duplex DuplexTumble/ShortEdge: " + <</Duplex true/Tumble true>>setpagedevice" +*CloseUI: *Duplex)"; + + cups_dest_t* dest; + int num_dests = 0; + num_dests = + cupsAddDest(/*name=*/"test_dest", /*instance=*/nullptr, num_dests, &dest); + ASSERT_EQ(1, num_dests); + + // Set long edge duplex mode in the destination options even though the PPD + // sets short edge duplex mode as the default. + cups_option_t* options = nullptr; + int num_options = 0; + num_options = + cupsAddOption("Duplex", "DuplexNoTumble", num_options, &options); + dest->num_options = num_options; + dest->options = options; + + PrinterSemanticCapsAndDefaults caps; + EXPECT_TRUE(ParsePpdCapabilities(dest, /*locale=*/"", kTestPpdData, &caps)); + EXPECT_THAT(caps.duplex_modes, + testing::UnorderedElementsAre(mojom::DuplexMode::kSimplex, + mojom::DuplexMode::kLongEdge, + mojom::DuplexMode::kShortEdge)); + EXPECT_EQ(mojom::DuplexMode::kLongEdge, caps.duplex_default); + + cupsFreeDests(num_dests, dest); +} + } // namespace printing diff --git a/chromium/printing/backend/print_backend_cups.cc b/chromium/printing/backend/print_backend_cups.cc index db324056841..0f033a350c0 100644 --- a/chromium/printing/backend/print_backend_cups.cc +++ b/chromium/printing/backend/print_backend_cups.cc @@ -164,7 +164,8 @@ bool PrintBackendCUPS::GetPrinterSemanticCapsAndDefaults( if (!GetPrinterCapsAndDefaults(printer_name, &info)) return false; - return ParsePpdCapabilities(printer_name, locale(), info.printer_capabilities, + ScopedDestination dest = GetNamedDest(printer_name); + return ParsePpdCapabilities(dest.get(), locale(), info.printer_capabilities, printer_info); } diff --git a/chromium/printing/common/metafile_utils.cc b/chromium/printing/common/metafile_utils.cc index 9dd15e58827..5ca6ab7b274 100644 --- a/chromium/printing/common/metafile_utils.cc +++ b/chromium/printing/common/metafile_utils.cc @@ -4,6 +4,7 @@ #include "printing/common/metafile_utils.h" +#include "base/strings/stringprintf.h" #include "base/time/time.h" #include "printing/buildflags/buildflags.h" #include "third_party/skia/include/core/SkCanvas.h" @@ -20,6 +21,23 @@ namespace { #if BUILDFLAG(ENABLE_TAGGED_PDF) + +// Table 333 in PDF 32000-1:2008 spec, section 14.8.4.2 +const char kPDFStructureTypeDocument[] = "Document"; +const char kPDFStructureTypeParagraph[] = "P"; +const char kPDFStructureTypeDiv[] = "Div"; +const char kPDFStructureTypeHeading[] = "H"; +const char kPDFStructureTypeLink[] = "Link"; +const char kPDFStructureTypeList[] = "L"; +const char kPDFStructureTypeListItemLabel[] = "Lbl"; +const char kPDFStructureTypeListItemBody[] = "LI"; +const char kPDFStructureTypeTable[] = "Table"; +const char kPDFStructureTypeTableRow[] = "TR"; +const char kPDFStructureTypeTableHeader[] = "TH"; +const char kPDFStructureTypeTableCell[] = "TD"; +const char kPDFStructureTypeFigure[] = "Figure"; +const char kPDFStructureTypeNonStruct[] = "NonStruct"; + // Standard attribute owners from PDF 32000-1:2008 spec, section 14.8.5.2 // (Attribute owners are kind of like "categories" for structure node // attributes.) @@ -32,6 +50,17 @@ const char kPDFTableCellRowSpanAttribute[] = "RowSpan"; const char kPDFTableHeaderScopeAttribute[] = "Scope"; const char kPDFTableHeaderScopeColumn[] = "Column"; const char kPDFTableHeaderScopeRow[] = "Row"; + +SkString GetHeadingStructureType(int heading_level) { + // From Table 333 in PDF 32000-1:2008 spec, section 14.8.4.2, + // "H1"..."H6" are valid structure types. + if (heading_level >= 1 && heading_level <= 6) + return SkString(base::StringPrintf("H%d", heading_level).c_str()); + + // If we don't have a valid heading level, use the generic heading role. + return SkString(kPDFStructureTypeHeading); +} + #endif // BUILDFLAG(ENABLE_TAGGED_PDF) SkTime::DateTime TimeToSkTime(base::Time time) { @@ -69,69 +98,69 @@ bool RecursiveBuildStructureTree(const ui::AXNode* ax_node, tag->fNodeId = ax_node->GetIntAttribute(ax::mojom::IntAttribute::kDOMNodeId); switch (ax_node->data().role) { case ax::mojom::Role::kRootWebArea: - tag->fType = SkPDF::DocumentStructureType::kDocument; + tag->fTypeString = kPDFStructureTypeDocument; break; case ax::mojom::Role::kParagraph: - tag->fType = SkPDF::DocumentStructureType::kP; + tag->fTypeString = kPDFStructureTypeParagraph; break; case ax::mojom::Role::kGenericContainer: - tag->fType = SkPDF::DocumentStructureType::kDiv; + tag->fTypeString = kPDFStructureTypeDiv; break; case ax::mojom::Role::kHeading: - // TODO(dmazzoni): heading levels. https://crbug.com/1039816 - tag->fType = SkPDF::DocumentStructureType::kH; + tag->fTypeString = GetHeadingStructureType(ax_node->GetIntAttribute( + ax::mojom::IntAttribute::kHierarchicalLevel)); + break; + case ax::mojom::Role::kLink: + tag->fTypeString = kPDFStructureTypeLink; break; case ax::mojom::Role::kList: - tag->fType = SkPDF::DocumentStructureType::kL; + tag->fTypeString = kPDFStructureTypeList; break; case ax::mojom::Role::kListMarker: - tag->fType = SkPDF::DocumentStructureType::kLbl; + tag->fTypeString = kPDFStructureTypeListItemLabel; break; case ax::mojom::Role::kListItem: - tag->fType = SkPDF::DocumentStructureType::kLI; + tag->fTypeString = kPDFStructureTypeListItemBody; break; case ax::mojom::Role::kTable: - tag->fType = SkPDF::DocumentStructureType::kTable; + tag->fTypeString = kPDFStructureTypeTable; break; case ax::mojom::Role::kRow: - tag->fType = SkPDF::DocumentStructureType::kTR; + tag->fTypeString = kPDFStructureTypeTableRow; break; case ax::mojom::Role::kColumnHeader: - tag->fType = SkPDF::DocumentStructureType::kTH; - tag->fAttributes.appendString(kPDFTableAttributeOwner, - kPDFTableHeaderScopeAttribute, - kPDFTableHeaderScopeColumn); + tag->fTypeString = kPDFStructureTypeTableHeader; + tag->fAttributes.appendName(kPDFTableAttributeOwner, + kPDFTableHeaderScopeAttribute, + kPDFTableHeaderScopeColumn); break; case ax::mojom::Role::kRowHeader: - tag->fType = SkPDF::DocumentStructureType::kTH; - tag->fAttributes.appendString(kPDFTableAttributeOwner, - kPDFTableHeaderScopeAttribute, - kPDFTableHeaderScopeRow); + tag->fTypeString = kPDFStructureTypeTableHeader; + tag->fAttributes.appendName(kPDFTableAttributeOwner, + kPDFTableHeaderScopeAttribute, + kPDFTableHeaderScopeRow); break; case ax::mojom::Role::kCell: { - tag->fType = SkPDF::DocumentStructureType::kTD; + tag->fTypeString = kPDFStructureTypeTableCell; // Append an attribute consisting of the string IDs of all of the // header cells that correspond to this table cell. std::vector<ui::AXNode*> header_nodes; ax_node->GetTableCellColHeaders(&header_nodes); ax_node->GetTableCellRowHeaders(&header_nodes); - std::vector<SkString> header_id_strs; - header_id_strs.reserve(header_nodes.size()); + std::vector<int> header_ids; + header_ids.reserve(header_nodes.size()); for (ui::AXNode* header_node : header_nodes) { - int node_id = - header_node->GetIntAttribute(ax::mojom::IntAttribute::kDOMNodeId); - header_id_strs.push_back( - SkString(base::NumberToString(node_id).c_str())); + header_ids.push_back(header_node->GetIntAttribute( + ax::mojom::IntAttribute::kDOMNodeId)); } - tag->fAttributes.appendStringArray(kPDFTableAttributeOwner, - kPDFTableCellHeadersAttribute, - header_id_strs); + tag->fAttributes.appendNodeIdArray( + kPDFTableAttributeOwner, kPDFTableCellHeadersAttribute, header_ids); break; } case ax::mojom::Role::kFigure: case ax::mojom::Role::kImage: { - tag->fType = SkPDF::DocumentStructureType::kFigure; + tag->fTypeString = kPDFStructureTypeFigure; std::string alt = ax_node->GetStringAttribute(ax::mojom::StringAttribute::kName); tag->fAlt = SkString(alt.c_str()); @@ -141,11 +170,11 @@ bool RecursiveBuildStructureTree(const ui::AXNode* ax_node, // Currently we're only marking text content, so we can't generate // a nonempty structure tree unless we have at least one kStaticText // node in the tree. - tag->fType = SkPDF::DocumentStructureType::kNonStruct; + tag->fTypeString = kPDFStructureTypeNonStruct; valid = true; break; default: - tag->fType = SkPDF::DocumentStructureType::kNonStruct; + tag->fTypeString = kPDFStructureTypeNonStruct; } if (ui::IsCellOrTableHeader(ax_node->data().role)) { @@ -233,7 +262,7 @@ sk_sp<SkPicture> DeserializeOopPicture(const void* data, } memcpy(&pic_id, data, sizeof(pic_id)); - auto* context = reinterpret_cast<DeserializationContext*>(ctx); + auto* context = reinterpret_cast<PictureDeserializationContext*>(ctx); auto iter = context->find(pic_id); if (iter == context->end() || !iter->second) { // When we don't have the out-of-process picture available, we return @@ -244,17 +273,18 @@ sk_sp<SkPicture> DeserializeOopPicture(const void* data, return iter->second; } -SkSerialProcs SerializationProcs(SerializationContext* ctx) { +SkSerialProcs SerializationProcs(PictureSerializationContext* picture_ctx) { SkSerialProcs procs; procs.fPictureProc = SerializeOopPicture; - procs.fPictureCtx = ctx; + procs.fPictureCtx = picture_ctx; return procs; } -SkDeserialProcs DeserializationProcs(DeserializationContext* ctx) { +SkDeserialProcs DeserializationProcs( + PictureDeserializationContext* picture_ctx) { SkDeserialProcs procs; procs.fPictureProc = DeserializeOopPicture; - procs.fPictureCtx = ctx; + procs.fPictureCtx = picture_ctx; return procs; } diff --git a/chromium/printing/common/metafile_utils.h b/chromium/printing/common/metafile_utils.h index 5796754fdd5..e6779d6168d 100644 --- a/chromium/printing/common/metafile_utils.h +++ b/chromium/printing/common/metafile_utils.h @@ -5,7 +5,6 @@ #ifndef PRINTING_COMMON_METAFILE_UTILS_H_ #define PRINTING_COMMON_METAFILE_UTILS_H_ -#include <map> #include <string> #include "base/containers/flat_map.h" @@ -18,29 +17,24 @@ namespace printing { -using ContentToProxyIdMap = std::map<uint32_t, int>; - -enum class SkiaDocumentType { - PDF, - // MSKP is an experimental, fragile, and diagnostic-only document type. - MSKP, - MAX = MSKP -}; +using ContentToProxyIdMap = base::flat_map<uint32_t, int>; // Stores the mapping between a content's unique id and its actual content. -using DeserializationContext = base::flat_map<uint32_t, sk_sp<SkPicture>>; +using PictureDeserializationContext = + base::flat_map<uint32_t, sk_sp<SkPicture>>; // Stores the mapping between content's unique id and its corresponding frame // proxy id. -using SerializationContext = ContentToProxyIdMap; +using PictureSerializationContext = ContentToProxyIdMap; sk_sp<SkDocument> MakePdfDocument(const std::string& creator, const ui::AXTreeUpdate& accessibility_tree, SkWStream* stream); -SkSerialProcs SerializationProcs(SerializationContext* ctx); +SkSerialProcs SerializationProcs(PictureSerializationContext* picture_ctx); -SkDeserialProcs DeserializationProcs(DeserializationContext* ctx); +SkDeserialProcs DeserializationProcs( + PictureDeserializationContext* picture_ctx); } // namespace printing diff --git a/chromium/printing/emf_win.cc b/chromium/printing/emf_win.cc index 7a950197bf5..9536b9c536f 100644 --- a/chromium/printing/emf_win.cc +++ b/chromium/printing/emf_win.cc @@ -342,7 +342,8 @@ bool Emf::Record::SafePlayback(Emf::EnumerationContext* context) const { void Emf::StartPage(const gfx::Size& /*page_size*/, const gfx::Rect& /*content_area*/, - float /*scale_factor*/) {} + float /*scale_factor*/, + mojom::PageOrientation /*page_orientation*/) {} bool Emf::FinishPage() { return true; diff --git a/chromium/printing/emf_win.h b/chromium/printing/emf_win.h index d7cc329e457..99bd8d69e89 100644 --- a/chromium/printing/emf_win.h +++ b/chromium/printing/emf_win.h @@ -60,7 +60,8 @@ class PRINTING_EXPORT Emf : public Metafile { // ignored. void StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - float scale_factor) override; + float scale_factor, + mojom::PageOrientation page_orientation) override; bool FinishPage() override; bool FinishDocument() override; diff --git a/chromium/printing/emf_win_unittest.cc b/chromium/printing/emf_win_unittest.cc index 6b1afc27bee..a8ff6741740 100644 --- a/chromium/printing/emf_win_unittest.cc +++ b/chromium/printing/emf_win_unittest.cc @@ -18,6 +18,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/path_service.h" #include "base/win/scoped_hdc.h" +#include "printing/mojom/print.mojom.h" #include "printing/printing_context.h" #include "printing/printing_context_win.h" #include "testing/gtest/include/gtest/gtest.h" @@ -145,7 +146,8 @@ TEST_F(EmfPrintingTest, PageBreak) { EXPECT_TRUE(emf.context()); int pages = 3; while (pages) { - emf.StartPage(gfx::Size(), gfx::Rect(), 1); + emf.StartPage(gfx::Size(), gfx::Rect(), 1, + mojom::PageOrientation::kUpright); ::Rectangle(emf.context(), 10, 10, 190, 190); EXPECT_TRUE(emf.FinishPage()); --pages; diff --git a/chromium/printing/image.h b/chromium/printing/image.h index 86ef53becfd..06995291f2d 100644 --- a/chromium/printing/image.h +++ b/chromium/printing/image.h @@ -11,7 +11,7 @@ #include <string> #include <vector> -#include "base/logging.h" +#include "base/check.h" #include "ui/gfx/geometry/size.h" namespace base { diff --git a/chromium/printing/image_android.cc b/chromium/printing/image_android.cc index 2ae4c3a797d..b229dd7a982 100644 --- a/chromium/printing/image_android.cc +++ b/chromium/printing/image_android.cc @@ -4,6 +4,8 @@ #include "printing/image.h" +#include "base/notreached.h" + namespace printing { bool Image::LoadMetafile(const Metafile& metafile) { diff --git a/chromium/printing/image_fuchsia.cc b/chromium/printing/image_fuchsia.cc index 5389ca27f3b..4acd39cb975 100644 --- a/chromium/printing/image_fuchsia.cc +++ b/chromium/printing/image_fuchsia.cc @@ -4,6 +4,8 @@ #include "printing/image.h" +#include "base/notreached.h" + namespace printing { bool Image::LoadMetafile(const Metafile& metafile) { diff --git a/chromium/printing/image_linux.cc b/chromium/printing/image_linux.cc index 6ccb213942d..fcab6ffdd9b 100644 --- a/chromium/printing/image_linux.cc +++ b/chromium/printing/image_linux.cc @@ -4,6 +4,8 @@ #include "printing/image.h" +#include "base/notreached.h" + namespace printing { bool Image::LoadMetafile(const Metafile& metafile) { diff --git a/chromium/printing/metafile.cc b/chromium/printing/metafile.cc index effeb2fc62d..dbb2d394696 100644 --- a/chromium/printing/metafile.cc +++ b/chromium/printing/metafile.cc @@ -9,6 +9,7 @@ #include <vector> #include "base/files/file.h" +#include "base/logging.h" #include "base/numerics/safe_conversions.h" namespace printing { diff --git a/chromium/printing/metafile.h b/chromium/printing/metafile.h index a1eac7f6f02..ee0d1a48f06 100644 --- a/chromium/printing/metafile.h +++ b/chromium/printing/metafile.h @@ -12,6 +12,7 @@ #include "base/containers/span.h" #include "base/macros.h" #include "build/build_config.h" +#include "printing/mojom/print.mojom-forward.h" #include "printing/native_drawing_context.h" #include "printing/printing_export.h" @@ -101,7 +102,8 @@ class PRINTING_EXPORT Metafile : public MetafilePlayer { // in points (=1/72 in). virtual void StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - float scale_factor) = 0; + float scale_factor, + mojom::PageOrientation page_orientation) = 0; // Closes the current page and destroys the context used in rendering that // page. The results of current page will be appended into the underlying diff --git a/chromium/printing/metafile_skia.cc b/chromium/printing/metafile_skia.cc index 67d7be5c6cb..b8ea5f766be 100644 --- a/chromium/printing/metafile_skia.cc +++ b/chromium/printing/metafile_skia.cc @@ -17,6 +17,7 @@ #include "cc/paint/paint_record.h" #include "cc/paint/paint_recorder.h" #include "cc/paint/skia_paint_canvas.h" +#include "printing/mojom/print.mojom.h" #include "printing/print_settings.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkPicture.h" @@ -82,7 +83,7 @@ struct MetafileSkiaData { // meaningful for a vector canvas as for a raster canvas. float scale_factor; SkSize size; - SkiaDocumentType type; + mojom::SkiaDocumentType type; #if defined(OS_MACOSX) PdfMetafileCg pdf_cg; @@ -90,10 +91,10 @@ struct MetafileSkiaData { }; MetafileSkia::MetafileSkia() : data_(std::make_unique<MetafileSkiaData>()) { - data_->type = SkiaDocumentType::PDF; + data_->type = mojom::SkiaDocumentType::kPDF; } -MetafileSkia::MetafileSkia(SkiaDocumentType type, int document_cookie) +MetafileSkia::MetafileSkia(mojom::SkiaDocumentType type, int document_cookie) : data_(std::make_unique<MetafileSkiaData>()) { data_->type = type; data_->document_cookie = document_cookie; @@ -116,7 +117,12 @@ bool MetafileSkia::InitFromData(base::span<const uint8_t> data) { void MetafileSkia::StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - float scale_factor) { + float scale_factor, + mojom::PageOrientation page_orientation) { + gfx::Size physical_page_size = page_size; + if (page_orientation != mojom::PageOrientation::kUpright) + physical_page_size.SetSize(page_size.height(), page_size.width()); + DCHECK_GT(page_size.width(), 0); DCHECK_GT(page_size.height(), 0); DCHECK_GT(scale_factor, 0.0f); @@ -126,17 +132,26 @@ void MetafileSkia::StartPage(const gfx::Size& page_size, float inverse_scale = 1.0 / scale_factor; cc::PaintCanvas* canvas = data_->recorder.beginRecording( - inverse_scale * page_size.width(), inverse_scale * page_size.height()); + inverse_scale * physical_page_size.width(), + inverse_scale * physical_page_size.height()); // Recording canvas is owned by the |data_->recorder|. No ref() necessary. - if (content_area != gfx::Rect(page_size)) { + if (content_area != gfx::Rect(page_size) || + page_orientation != mojom::PageOrientation::kUpright) { canvas->scale(inverse_scale, inverse_scale); + if (page_orientation == mojom::PageOrientation::kRotateLeft) { + canvas->translate(0, physical_page_size.height()); + canvas->rotate(-90); + } else if (page_orientation == mojom::PageOrientation::kRotateRight) { + canvas->translate(physical_page_size.width(), 0); + canvas->rotate(90); + } SkRect sk_content_area = gfx::RectToSkRect(content_area); canvas->clipRect(sk_content_area); canvas->translate(sk_content_area.x(), sk_content_area.y()); canvas->scale(scale_factor, scale_factor); } - data_->size = gfx::SizeFToSkSize(gfx::SizeF(page_size)); + data_->size = gfx::SizeFToSkSize(gfx::SizeF(physical_page_size)); data_->scale_factor = scale_factor; // We scale the recording canvas's size so that // canvas->getTotalMatrix() returns a value that ignores the scale @@ -147,8 +162,9 @@ void MetafileSkia::StartPage(const gfx::Size& page_size, cc::PaintCanvas* MetafileSkia::GetVectorCanvasForNewPage( const gfx::Size& page_size, const gfx::Rect& content_area, - float scale_factor) { - StartPage(page_size, content_area, scale_factor); + float scale_factor, + mojom::PageOrientation page_orientation) { + StartPage(page_size, content_area, scale_factor, page_orientation); return data_->recorder.getRecordingCanvas(); } @@ -180,10 +196,10 @@ bool MetafileSkia::FinishDocument() { sk_sp<SkDocument> doc; cc::PlaybackParams::CustomDataRasterCallback custom_callback; switch (data_->type) { - case SkiaDocumentType::PDF: + case mojom::SkiaDocumentType::kPDF: doc = MakePdfDocument(printing::GetAgent(), accessibility_tree_, &stream); break; - case SkiaDocumentType::MSKP: + case mojom::SkiaDocumentType::kMSKP: SkSerialProcs procs = SerializationProcs(&data_->subframe_content_info); doc = SkMakeMultiPictureDocument(&stream, &procs); // It is safe to use base::Unretained(this) because the callback @@ -211,7 +227,7 @@ void MetafileSkia::FinishFrameContent() { // content. DCHECK_EQ(data_->pages.size(), 1u); // Also make sure it is in skia multi-picture document format. - DCHECK_EQ(data_->type, SkiaDocumentType::MSKP); + DCHECK_EQ(data_->type, mojom::SkiaDocumentType::kMSKP); DCHECK(!data_->data_stream); cc::PlaybackParams::CustomDataRasterCallback custom_callback = @@ -344,7 +360,7 @@ bool MetafileSkia::SaveTo(base::File* file) const { #endif // defined(OS_ANDROID) std::unique_ptr<MetafileSkia> MetafileSkia::GetMetafileForCurrentPage( - SkiaDocumentType type) { + mojom::SkiaDocumentType type) { // If we only ever need the metafile for the last page, should we // only keep a handle on one PaintRecord? auto metafile = std::make_unique<MetafileSkia>(type, data_->document_cookie); @@ -416,7 +432,7 @@ void MetafileSkia::CustomDataToSkPictureCallback(SkCanvas* canvas, // Found the picture, draw it on canvas. sk_sp<SkPicture> pic = it->second; SkRect rect = pic->cullRect(); - SkMatrix matrix = SkMatrix::MakeTrans(rect.x(), rect.y()); + SkMatrix matrix = SkMatrix::Translate(rect.x(), rect.y()); canvas->drawPicture(it->second, &matrix, nullptr); } diff --git a/chromium/printing/metafile_skia.h b/chromium/printing/metafile_skia.h index c1fe84020c8..b66e675578d 100644 --- a/chromium/printing/metafile_skia.h +++ b/chromium/printing/metafile_skia.h @@ -15,6 +15,7 @@ #include "cc/paint/paint_canvas.h" #include "printing/common/metafile_utils.h" #include "printing/metafile.h" +#include "printing/mojom/print.mojom-forward.h" #include "skia/ext/platform_canvas.h" #include "ui/accessibility/ax_tree_update.h" @@ -29,11 +30,11 @@ struct MetafileSkiaData; // This class uses Skia graphics library to generate a PDF or MSKP document. class PRINTING_EXPORT MetafileSkia : public Metafile { public: - // Default constructor, for SkiaDocumentType::PDF type only. + // Default constructor, for mojom::SkiaDocumentType::kPDF type only. // TODO(weili): we should split up this use case into a different class, see // comments before InitFromData()'s implementation. MetafileSkia(); - MetafileSkia(SkiaDocumentType type, int document_cookie); + MetafileSkia(mojom::SkiaDocumentType type, int document_cookie); ~MetafileSkia() override; // Metafile methods. @@ -42,7 +43,8 @@ class PRINTING_EXPORT MetafileSkia : public Metafile { void StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - float scale_factor) override; + float scale_factor, + mojom::PageOrientation page_orientation) override; bool FinishPage() override; bool FinishDocument() override; @@ -79,7 +81,7 @@ class PRINTING_EXPORT MetafileSkia : public Metafile { // Return a new metafile containing just the current page in draft mode. std::unique_ptr<MetafileSkia> GetMetafileForCurrentPage( - SkiaDocumentType type); + mojom::SkiaDocumentType type); // This method calls StartPage and then returns an appropriate // PlatformCanvas implementation bound to the context created by @@ -87,9 +89,11 @@ class PRINTING_EXPORT MetafileSkia : public Metafile { // is returned is owned by this MetafileSkia object and does not // need to be ref()ed or unref()ed. The canvas will remain valid // until FinishPage() or FinishDocument() is called. - cc::PaintCanvas* GetVectorCanvasForNewPage(const gfx::Size& page_size, - const gfx::Rect& content_area, - float scale_factor); + cc::PaintCanvas* GetVectorCanvasForNewPage( + const gfx::Size& page_size, + const gfx::Rect& content_area, + float scale_factor, + mojom::PageOrientation page_orientation); // This is used for painting content of out-of-process subframes. // For such a subframe, since the content is in another process, we create a diff --git a/chromium/printing/metafile_skia_unittest.cc b/chromium/printing/metafile_skia_unittest.cc index c337177bc30..af6c43c45c0 100644 --- a/chromium/printing/metafile_skia_unittest.cc +++ b/chromium/printing/metafile_skia_unittest.cc @@ -6,6 +6,7 @@ #include "cc/paint/paint_record.h" #include "printing/common/metafile_utils.h" +#include "printing/mojom/print.mojom.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkPictureRecorder.h" @@ -31,7 +32,7 @@ TEST(MetafileSkiaTest, TestFrameContent) { SkSize page_size = SkSize::Make(kPageSideLen, kPageSideLen); // Finish creating the entire metafile. - MetafileSkia metafile(SkiaDocumentType::MSKP, 1); + MetafileSkia metafile(mojom::SkiaDocumentType::kMSKP, 1); metafile.AppendPage(page_size, std::move(record)); metafile.AppendSubframeInfo(content_id, 2, std::move(pic_holder)); metafile.FinishFrameContent(); @@ -43,7 +44,7 @@ TEST(MetafileSkiaTest, TestFrameContent) { SkPictureRecorder recorder; SkCanvas* canvas = recorder.beginRecording(kPictureSideLen, kPictureSideLen); SkPaint paint; - paint.setStyle(SkPaint::kStrokeAndFill_Style); + paint.setStyle(SkPaint::kFill_Style); paint.setColor(SK_ColorRED); paint.setAlpha(SK_AlphaOPAQUE); canvas->drawRect(SkRect::MakeXYWH(0, 0, kPictureSideLen, kPictureSideLen), @@ -52,7 +53,7 @@ TEST(MetafileSkiaTest, TestFrameContent) { EXPECT_TRUE(picture); // Get the complete picture by replacing the placeholder. - DeserializationContext subframes; + PictureDeserializationContext subframes; subframes[content_id] = picture; SkDeserialProcs procs = DeserializationProcs(&subframes); sk_sp<SkPicture> pic = SkPicture::MakeFromStream(metafile_stream, &procs); diff --git a/chromium/printing/mojom/print.mojom b/chromium/printing/mojom/print.mojom index 6b92411a87f..31a53811b7c 100644 --- a/chromium/printing/mojom/print.mojom +++ b/chromium/printing/mojom/print.mojom @@ -11,3 +11,42 @@ enum DuplexMode { kLongEdge, kShortEdge, }; + +// Struct that holds margin and content area sizes of a page. Units are +// arbitrary and can be chosen by the programmer. +struct PageSizeMargins { + double content_width; + double content_height; + double margin_top; + double margin_right; + double margin_bottom; + double margin_left; +}; + +// CSS @page page-orientation descriptor values. +enum PageOrientation { kUpright, kRotateLeft, kRotateRight }; + +// Describes whether to reduce/enlarge/retain the print contents to fit the +// printable area. (This is used only by plugin printing). +enum PrintScalingOption { + // Prints the upper left of a page without scaling. Crop the page contents + // that don't fit on the paper. + kNone, + // Reduces or enlarges each page to fit the printable area of the selected + // printer paper size. + kFitToPrintableArea, + // Print output page size is same as the actual source page size. Do not + // scale/center/fit to printable area. + kSourceSize, + // Reduces or enlarges each page to fit the selected printer paper size. + kFitToPaper, +}; + +// Document type that Skia graphics library generates. +enum SkiaDocumentType { + // PDF document type. + kPDF, + // MultiPictureDocument type. kMSKP is an experimental, fragile, and + // diagnostic-only document type. + kMSKP, +}; diff --git a/chromium/printing/page_number.cc b/chromium/printing/page_number.cc index adbf33083b8..14c02c476ed 100644 --- a/chromium/printing/page_number.cc +++ b/chromium/printing/page_number.cc @@ -18,7 +18,7 @@ PageNumber::PageNumber(const PrintSettings& settings, int document_page_count) { } PageNumber::PageNumber() - : ranges_(NULL), + : ranges_(nullptr), page_number_(-1), page_range_index_(-1), document_page_count_(0) {} diff --git a/chromium/printing/page_size_margins.h b/chromium/printing/page_size_margins.h deleted file mode 100644 index 478730850a3..00000000000 --- a/chromium/printing/page_size_margins.h +++ /dev/null @@ -1,25 +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_PAGE_SIZE_MARGINS_H_ -#define PRINTING_PAGE_SIZE_MARGINS_H_ - -#include "printing/printing_export.h" - -namespace printing { - -// Struct that holds margin and content area sizes of a page. Units are -// arbitrary and can be chosen by the programmer. -struct PageSizeMargins { - double content_width; - double content_height; - double margin_top; - double margin_right; - double margin_bottom; - double margin_left; -}; - -} // namespace printing - -#endif // PRINTING_PAGE_SIZE_MARGINS_H_ diff --git a/chromium/printing/pdf_metafile_cg_mac.cc b/chromium/printing/pdf_metafile_cg_mac.cc index 515f84fe232..e05b7a2b646 100644 --- a/chromium/printing/pdf_metafile_cg_mac.cc +++ b/chromium/printing/pdf_metafile_cg_mac.cc @@ -14,6 +14,7 @@ #include "base/numerics/math_constants.h" #include "base/numerics/safe_conversions.h" #include "base/strings/sys_string_conversions.h" +#include "printing/mojom/print.mojom.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" @@ -105,7 +106,10 @@ bool PdfMetafileCg::InitFromData(base::span<const uint8_t> data) { void PdfMetafileCg::StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - float scale_factor) { + float scale_factor, + mojom::PageOrientation page_orientation) { + DCHECK_EQ(page_orientation, mojom::PageOrientation::kUpright) + << "Not implemented"; DCHECK(context_.get()); DCHECK(!page_is_open_); diff --git a/chromium/printing/pdf_metafile_cg_mac.h b/chromium/printing/pdf_metafile_cg_mac.h index a7d1a152ad1..4cf1f67d228 100644 --- a/chromium/printing/pdf_metafile_cg_mac.h +++ b/chromium/printing/pdf_metafile_cg_mac.h @@ -27,7 +27,8 @@ class PRINTING_EXPORT PdfMetafileCg : public Metafile { bool InitFromData(base::span<const uint8_t> data) override; void StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - float scale_factor) override; + float scale_factor, + mojom::PageOrientation page_orientation) override; bool FinishPage() override; bool FinishDocument() override; diff --git a/chromium/printing/pdf_metafile_cg_mac_unittest.cc b/chromium/printing/pdf_metafile_cg_mac_unittest.cc index 15517fd0d23..896e78ff9c0 100644 --- a/chromium/printing/pdf_metafile_cg_mac_unittest.cc +++ b/chromium/printing/pdf_metafile_cg_mac_unittest.cc @@ -14,6 +14,7 @@ #include "base/files/file_util.h" #include "base/hash/sha1.h" #include "base/path_service.h" +#include "printing/mojom/print.mojom.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/geometry/rect.h" @@ -151,13 +152,13 @@ TEST(PdfMetafileCgTest, Pdf) { // Render page 1. constexpr gfx::Rect kRect1(10, 10, 520, 700); constexpr gfx::Size kSize1(540, 720); - pdf.StartPage(kSize1, kRect1, 1.25); + pdf.StartPage(kSize1, kRect1, 1.25, mojom::PageOrientation::kUpright); pdf.FinishPage(); // Render page 2. constexpr gfx::Rect kRect2(10, 10, 520, 700); constexpr gfx::Size kSize2(720, 540); - pdf.StartPage(kSize2, kRect2, 2.0); + pdf.StartPage(kSize2, kRect2, 2.0, mojom::PageOrientation::kUpright); pdf.FinishPage(); pdf.FinishDocument(); diff --git a/chromium/printing/print_settings.cc b/chromium/printing/print_settings.cc index 4f6df32e249..9cc1f91d734 100644 --- a/chromium/printing/print_settings.cc +++ b/chromium/printing/print_settings.cc @@ -268,11 +268,13 @@ void PrintSettings::Clear() { #endif is_modifiable_ = true; pages_per_sheet_ = 1; +#if defined(OS_LINUX) + advanced_settings_.clear(); +#endif // defined(OS_LINUX) #if defined(OS_CHROMEOS) send_user_info_ = false; username_.clear(); pin_value_.clear(); - advanced_settings_.clear(); #endif // defined(OS_CHROMEOS) } diff --git a/chromium/printing/print_settings.h b/chromium/printing/print_settings.h index 6eac8b326af..24500a6db46 100644 --- a/chromium/printing/print_settings.h +++ b/chromium/printing/print_settings.h @@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/optional.h" #include "base/strings/string16.h" +#include "build/build_config.h" #include "printing/mojom/print.mojom.h" #include "printing/page_range.h" #include "printing/page_setup.h" @@ -19,11 +20,11 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" -#if defined(OS_CHROMEOS) +#if defined(OS_LINUX) #include <map> #include "base/values.h" -#endif // defined(OS_CHROMEOS) +#endif // defined(OS_LINUX) namespace printing { @@ -68,9 +69,9 @@ class PRINTING_EXPORT PrintSettings { } }; -#if defined(OS_CHROMEOS) +#if defined(OS_LINUX) using AdvancedSettings = std::map<std::string, base::Value>; -#endif // defined(OS_CHROMEOS) +#endif // defined(OS_LINUX) PrintSettings(); ~PrintSettings(); @@ -205,6 +206,13 @@ class PRINTING_EXPORT PrintSettings { pages_per_sheet_ = pages_per_sheet; } +#if defined(OS_LINUX) + AdvancedSettings& advanced_settings() { return advanced_settings_; } + const AdvancedSettings& advanced_settings() const { + return advanced_settings_; + } +#endif // defined(OS_LINUX) + #if defined(OS_CHROMEOS) void set_send_user_info(bool send_user_info) { send_user_info_ = send_user_info; @@ -216,11 +224,6 @@ class PRINTING_EXPORT PrintSettings { void set_pin_value(const std::string& pin_value) { pin_value_ = pin_value; } const std::string& pin_value() const { return pin_value_; } - - AdvancedSettings& advanced_settings() { return advanced_settings_; } - const AdvancedSettings& advanced_settings() const { - return advanced_settings_; - } #endif // defined(OS_CHROMEOS) // Cookie generator. It is used to initialize PrintedDocument with its @@ -302,6 +305,11 @@ class PRINTING_EXPORT PrintSettings { // Number of pages per sheet. int pages_per_sheet_; +#if defined(OS_LINUX) + // Advanced settings. + AdvancedSettings advanced_settings_; +#endif // defined(OS_LINUX) + #if defined(OS_CHROMEOS) // Whether to send user info. bool send_user_info_; @@ -311,9 +319,6 @@ class PRINTING_EXPORT PrintSettings { // PIN code entered by the user. std::string pin_value_; - - // Advanced settings. - AdvancedSettings advanced_settings_; #endif DISALLOW_COPY_AND_ASSIGN(PrintSettings); diff --git a/chromium/printing/print_settings_conversion.cc b/chromium/printing/print_settings_conversion.cc index 1f90d320cf0..5fac8b41a20 100644 --- a/chromium/printing/print_settings_conversion.cc +++ b/chromium/printing/print_settings_conversion.cc @@ -208,6 +208,15 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings, #endif } +#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(USE_CUPS)) + const base::Value* advanced_settings = + job_settings.FindDictKey(kSettingAdvancedSettings); + if (advanced_settings) { + for (const auto& item : advanced_settings->DictItems()) + settings->advanced_settings().emplace(item.first, item.second.Clone()); + } +#endif // defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(USE_CUPS)) + #if defined(OS_CHROMEOS) bool send_user_info = job_settings.FindBoolKey(kSettingSendUserInfo).value_or(false); @@ -221,13 +230,6 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings, const std::string* pin_value = job_settings.FindStringKey(kSettingPinValue); if (pin_value) settings->set_pin_value(*pin_value); - - const base::Value* advanced_settings = - job_settings.FindDictKey(kSettingAdvancedSettings); - if (advanced_settings) { - for (const auto& item : advanced_settings->DictItems()) - settings->advanced_settings().emplace(item.first, item.second.Clone()); - } #endif return true; diff --git a/chromium/printing/print_settings_conversion.h b/chromium/printing/print_settings_conversion.h index b23cd261b61..b619d3defd2 100644 --- a/chromium/printing/print_settings_conversion.h +++ b/chromium/printing/print_settings_conversion.h @@ -5,7 +5,6 @@ #ifndef PRINTING_PRINT_SETTINGS_CONVERSION_H_ #define PRINTING_PRINT_SETTINGS_CONVERSION_H_ -#include "base/logging.h" #include "printing/page_range.h" #include "printing/printing_export.h" diff --git a/chromium/printing/print_settings_initializer_mac.h b/chromium/printing/print_settings_initializer_mac.h index 9356ea08fc4..3298a12a9db 100644 --- a/chromium/printing/print_settings_initializer_mac.h +++ b/chromium/printing/print_settings_initializer_mac.h @@ -7,7 +7,6 @@ #import <ApplicationServices/ApplicationServices.h> -#include "base/logging.h" #include "base/macros.h" #include "printing/page_range.h" diff --git a/chromium/printing/print_settings_initializer_win.h b/chromium/printing/print_settings_initializer_win.h index 515f8e6e7ca..b9d1a21cf2c 100644 --- a/chromium/printing/print_settings_initializer_win.h +++ b/chromium/printing/print_settings_initializer_win.h @@ -7,7 +7,6 @@ #include <string> -#include "base/logging.h" #include "base/macros.h" #include "printing/page_range.h" diff --git a/chromium/printing/print_settings_unittest.cc b/chromium/printing/print_settings_unittest.cc index e141534a8f9..0c7db4a270e 100644 --- a/chromium/printing/print_settings_unittest.cc +++ b/chromium/printing/print_settings_unittest.cc @@ -14,7 +14,7 @@ TEST(PrintSettingsTest, IsColorModelSelected) { EXPECT_TRUE(IsColorModelSelected(IsColorModelSelected(model).has_value())); } -TEST(PrintSettingsDeathTest, IsColorModelSelectedUnknown) { +TEST(PrintSettingsDeathTest, IsColorModelSelectedEdges) { ::testing::FLAGS_gtest_death_test_style = "threadsafe"; EXPECT_DCHECK_DEATH(IsColorModelSelected(UNKNOWN_COLOR_MODEL)); EXPECT_DCHECK_DEATH(IsColorModelSelected(UNKNOWN_COLOR_MODEL - 1)); @@ -33,6 +33,16 @@ TEST(PrintSettingsTest, GetColorModelForMode) { color_value.clear(); } } + +TEST(PrintSettingsDeathTest, GetColorModelForModeEdges) { + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + std::string color_setting_name; + std::string color_value; + EXPECT_DCHECK_DEATH(GetColorModelForMode(UNKNOWN_COLOR_MODEL - 1, + &color_setting_name, &color_value)); + EXPECT_DCHECK_DEATH(GetColorModelForMode(COLOR_MODEL_LAST + 1, + &color_setting_name, &color_value)); +} #endif // defined(USE_CUPS) } // namespace printing diff --git a/chromium/printing/printing_context.cc b/chromium/printing/printing_context.cc index 69ac356a04c..ad26397af46 100644 --- a/chromium/printing/printing_context.cc +++ b/chromium/printing/printing_context.cc @@ -10,7 +10,6 @@ #include "base/notreached.h" #include "printing/mojom/print.mojom.h" #include "printing/page_setup.h" -#include "printing/page_size_margins.h" #include "printing/print_job_constants.h" #include "printing/print_settings_conversion.h" #include "printing/units.h" diff --git a/chromium/printing/printing_context_android.cc b/chromium/printing/printing_context_android.cc index 961bb37b28d..00337c62374 100644 --- a/chromium/printing/printing_context_android.cc +++ b/chromium/printing/printing_context_android.cc @@ -15,7 +15,6 @@ #include "base/android/jni_string.h" #include "base/files/file.h" #include "base/logging.h" -#include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "base/values.h" #include "printing/metafile.h" @@ -62,7 +61,7 @@ void GetPageRanges(JNIEnv* env, // static std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) { - return base::WrapUnique(new PrintingContextAndroid(delegate)); + return std::make_unique<PrintingContextAndroid>(delegate); } // static diff --git a/chromium/printing/printing_context_linux.cc b/chromium/printing/printing_context_linux.cc index f84a88213e9..c6c13662100 100644 --- a/chromium/printing/printing_context_linux.cc +++ b/chromium/printing/printing_context_linux.cc @@ -8,7 +8,6 @@ #include <utility> #include "base/check.h" -#include "base/memory/ptr_util.h" #include "base/notreached.h" #include "base/values.h" #include "printing/metafile.h" @@ -32,7 +31,7 @@ gfx::Size (*get_pdf_paper_size_)(PrintingContextLinux* context) = nullptr; // static std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) { - return base::WrapUnique(new PrintingContextLinux(delegate)); + return std::make_unique<PrintingContextLinux>(delegate); } PrintingContextLinux::PrintingContextLinux(Delegate* delegate) diff --git a/chromium/printing/printing_context_mac.mm b/chromium/printing/printing_context_mac.mm index 3930c0ec050..93438609a3a 100644 --- a/chromium/printing/printing_context_mac.mm +++ b/chromium/printing/printing_context_mac.mm @@ -12,7 +12,6 @@ #include "base/check.h" #include "base/mac/scoped_cftyperef.h" -#include "base/memory/ptr_util.h" #include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" @@ -27,7 +26,7 @@ const int kMaxPaperSizeDiffereceInPoints = 2; // Return true if PPD name of paper is equal. bool IsPaperNameEqual(CFStringRef name1, const PMPaper& paper2) { - CFStringRef name2 = NULL; + CFStringRef name2 = nullptr; return (name1 && PMPaperGetPPDPaperName(paper2, &name2) == noErr) && (CFStringCompare(name1, name2, kCFCompareCaseInsensitive) == kCFCompareEqualTo); @@ -38,7 +37,7 @@ PMPaper MatchPaper(CFArrayRef paper_list, double width, double height) { double best_match = std::numeric_limits<double>::max(); - PMPaper best_matching_paper = NULL; + PMPaper best_matching_paper = nullptr; int num_papers = CFArrayGetCount(paper_list); for (int i = 0; i < num_papers; ++i) { PMPaper paper = (PMPaper)[(NSArray*)paper_list objectAtIndex:i]; @@ -68,13 +67,13 @@ PMPaper MatchPaper(CFArrayRef paper_list, // static std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) { - return base::WrapUnique(new PrintingContextMac(delegate)); + return std::make_unique<PrintingContextMac>(delegate); } PrintingContextMac::PrintingContextMac(Delegate* delegate) : PrintingContext(delegate), print_info_([[NSPrintInfo sharedPrintInfo] copy]), - context_(NULL) {} + context_(nullptr) {} PrintingContextMac::~PrintingContextMac() { ReleaseContext(); @@ -97,7 +96,7 @@ void PrintingContextMac::AskUserForSettings(int max_pages, // adding a new custom view to the panel on 10.5; 10.6 has // NSPrintPanelShowsPrintSelection). NSPrintPanel* panel = [NSPrintPanel printPanel]; - NSPrintInfo* printInfo = print_info_.get(); + NSPrintInfo* print_info = print_info_.get(); NSPrintPanelOptions options = [panel options]; options |= NSPrintPanelShowsPaperSize; @@ -110,10 +109,10 @@ void PrintingContextMac::AskUserForSettings(int max_pages, if (parent_view) { NSString* job_title = [[parent_view.GetNativeNSView() window] title]; if (job_title) { - PMPrintSettings printSettings = - (PMPrintSettings)[printInfo PMPrintSettings]; - PMPrintSettingsSetJobName(printSettings, (CFStringRef)job_title); - [printInfo updateFromPMPrintSettings]; + PMPrintSettings print_settings = + (PMPrintSettings)[print_info PMPrintSettings]; + PMPrintSettingsSetJobName(print_settings, (CFStringRef)job_title); + [print_info updateFromPMPrintSettings]; } } @@ -126,7 +125,7 @@ void PrintingContextMac::AskUserForSettings(int max_pages, // after the current transaction. See https://crbug.com/849538. __block auto block_callback = std::move(callback); [CATransaction setCompletionBlock:^{ - NSInteger selection = [panel runModalWithPrintInfo:printInfo]; + NSInteger selection = [panel runModalWithPrintInfo:print_info]; if (selection == NSOKButton) { print_info_.reset([[panel printInfo] retain]); settings_->set_ranges(GetPageRangesFromPrintInfo()); @@ -209,7 +208,8 @@ bool PrintingContextMac::SetPrintPreviewJob() { PMPrintSettings print_settings = static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]); return PMSessionSetDestination(print_session, print_settings, - kPMDestinationPreview, NULL, NULL) == noErr; + kPMDestinationPreview, nullptr, + nullptr) == noErr; } void PrintingContextMac::InitPrintSettingsFromPrintInfo() { @@ -262,7 +262,7 @@ bool PrintingContextMac::UpdatePageFormatWithPaperInfo() { PMPageFormat default_page_format = static_cast<PMPageFormat>([print_info_.get() PMPageFormat]); - PMPrinter current_printer = NULL; + PMPrinter current_printer = nullptr; if (PMSessionGetCurrentPrinter(print_session, ¤t_printer) != noErr) return false; @@ -281,7 +281,7 @@ bool PrintingContextMac::UpdatePageFormatWithPaperInfo() { } // Ignore result, because we can continue without following. - CFStringRef tmp_paper_name = NULL; + CFStringRef tmp_paper_name = nullptr; PMPaperGetPPDPaperName(default_paper, &tmp_paper_name); PMPaperGetMargins(default_paper, &margins); paper_name.reset(tmp_paper_name, base::scoped_policy::RETAIN); @@ -293,7 +293,7 @@ bool PrintingContextMac::UpdatePageFormatWithPaperInfo() { paper_name.reset(base::SysUTF8ToCFStringRef(media.vendor_id)); } - CFArrayRef paper_list = NULL; + CFArrayRef paper_list = nullptr; if (PMPrinterGetPaperList(current_printer, &paper_list) != noErr) return false; @@ -307,7 +307,7 @@ bool PrintingContextMac::UpdatePageFormatWithPaperInfo() { if (media.IsDefault()) return true; - PMPaper paper = NULL; + PMPaper paper = nullptr; if (PMPaperCreateCustom(current_printer, CFSTR("Custom paper ID"), CFSTR("Custom paper"), page_width, page_height, &margins, &paper) != noErr) { @@ -320,7 +320,7 @@ bool PrintingContextMac::UpdatePageFormatWithPaperInfo() { bool PrintingContextMac::UpdatePageFormatWithPaper(PMPaper paper, PMPageFormat page_format) { - PMPageFormat new_format = NULL; + PMPageFormat new_format = nullptr; if (PMCreatePageFormatWithPMPaper(&new_format, paper) != noErr) return false; // Copy over the original format with the new page format. @@ -334,15 +334,15 @@ bool PrintingContextMac::SetCopiesInPrintSettings(int copies) { if (copies < 1) return false; - PMPrintSettings pmPrintSettings = + PMPrintSettings print_settings = static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]); - return PMSetCopies(pmPrintSettings, copies, false) == noErr; + return PMSetCopies(print_settings, copies, false) == noErr; } bool PrintingContextMac::SetCollateInPrintSettings(bool collate) { - PMPrintSettings pmPrintSettings = + PMPrintSettings print_settings = static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]); - return PMSetCollate(pmPrintSettings, collate) == noErr; + return PMSetCollate(print_settings, collate) == noErr; } bool PrintingContextMac::SetOrientationIsLandscape(bool landscape) { @@ -379,13 +379,13 @@ bool PrintingContextMac::SetDuplexModeInPrintSettings(mojom::DuplexMode mode) { return true; } - PMPrintSettings pmPrintSettings = + PMPrintSettings print_settings = static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]); - return PMSetDuplex(pmPrintSettings, duplexSetting) == noErr; + return PMSetDuplex(print_settings, duplexSetting) == noErr; } bool PrintingContextMac::SetOutputColor(int color_mode) { - PMPrintSettings pmPrintSettings = + PMPrintSettings print_settings = static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]); std::string color_setting_name; std::string color_value; @@ -395,7 +395,7 @@ bool PrintingContextMac::SetOutputColor(int color_mode) { base::ScopedCFTypeRef<CFStringRef> output_color( base::SysUTF8ToCFStringRef(color_value)); - return PMPrintSettingsSetValue(pmPrintSettings, color_setting.get(), + return PMPrintSettingsSetValue(print_settings, color_setting.get(), output_color.get(), false) == noErr; } @@ -447,7 +447,7 @@ PrintingContext::Result PrintingContextMac::NewPage() { PMPageFormat page_format = static_cast<PMPageFormat>([print_info_.get() PMPageFormat]); OSStatus status; - status = PMSessionBeginPageNoDialog(print_session, page_format, NULL); + status = PMSessionBeginPageNoDialog(print_session, page_format, nullptr); if (status != noErr) return OnError(); status = PMSessionGetCGGraphicsContext(print_session, &context_); @@ -468,7 +468,7 @@ PrintingContext::Result PrintingContextMac::PageDone() { OSStatus status = PMSessionEndPageNoDialog(print_session); if (status != noErr) OnError(); - context_ = NULL; + context_ = nullptr; return OK; } @@ -491,7 +491,7 @@ PrintingContext::Result PrintingContextMac::DocumentDone() { void PrintingContextMac::Cancel() { abort_printing_ = true; in_print_job_ = false; - context_ = NULL; + context_ = nullptr; PMPrintSession print_session = static_cast<PMPrintSession>([print_info_.get() PMPrintSession]); @@ -500,7 +500,7 @@ void PrintingContextMac::Cancel() { void PrintingContextMac::ReleaseContext() { print_info_.reset(); - context_ = NULL; + context_ = nullptr; } printing::NativeDrawingContext PrintingContextMac::context() const { diff --git a/chromium/printing/printing_context_win.cc b/chromium/printing/printing_context_win.cc index 414cacf2a70..02e8981c49f 100644 --- a/chromium/printing/printing_context_win.cc +++ b/chromium/printing/printing_context_win.cc @@ -13,7 +13,6 @@ #include "base/bind.h" #include "base/memory/free_deleter.h" -#include "base/memory/ptr_util.h" #include "base/message_loop/message_loop_current.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" @@ -45,12 +44,12 @@ void AssignResult(PrintingContext::Result* out, PrintingContext::Result in) { // static std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) { #if BUILDFLAG(ENABLE_PRINTING) - return base::WrapUnique(new PrintingContextSystemDialogWin(delegate)); + return std::make_unique<PrintingContextSystemDialogWin>(delegate); #else // The code in printing/ is still built when the GN |enable_basic_printing| // variable is set to false. Just return PrintingContextWin as a dummy // context. - return base::WrapUnique(new PrintingContextWin(delegate)); + return std::make_unique<PrintingContextWin>(delegate); #endif } |