summaryrefslogtreecommitdiff
path: root/chromium/printing
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/printing
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-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')
-rw-r--r--chromium/printing/BUILD.gn1
-rw-r--r--chromium/printing/backend/cups_helper.cc95
-rw-r--r--chromium/printing/backend/cups_helper.h2
-rw-r--r--chromium/printing/backend/cups_helper_unittest.cc106
-rw-r--r--chromium/printing/backend/print_backend_cups.cc3
-rw-r--r--chromium/printing/common/metafile_utils.cc102
-rw-r--r--chromium/printing/common/metafile_utils.h20
-rw-r--r--chromium/printing/emf_win.cc3
-rw-r--r--chromium/printing/emf_win.h3
-rw-r--r--chromium/printing/emf_win_unittest.cc4
-rw-r--r--chromium/printing/image.h2
-rw-r--r--chromium/printing/image_android.cc2
-rw-r--r--chromium/printing/image_fuchsia.cc2
-rw-r--r--chromium/printing/image_linux.cc2
-rw-r--r--chromium/printing/metafile.cc1
-rw-r--r--chromium/printing/metafile.h4
-rw-r--r--chromium/printing/metafile_skia.cc44
-rw-r--r--chromium/printing/metafile_skia.h18
-rw-r--r--chromium/printing/metafile_skia_unittest.cc7
-rw-r--r--chromium/printing/mojom/print.mojom39
-rw-r--r--chromium/printing/page_number.cc2
-rw-r--r--chromium/printing/page_size_margins.h25
-rw-r--r--chromium/printing/pdf_metafile_cg_mac.cc6
-rw-r--r--chromium/printing/pdf_metafile_cg_mac.h3
-rw-r--r--chromium/printing/pdf_metafile_cg_mac_unittest.cc5
-rw-r--r--chromium/printing/print_settings.cc4
-rw-r--r--chromium/printing/print_settings.h29
-rw-r--r--chromium/printing/print_settings_conversion.cc16
-rw-r--r--chromium/printing/print_settings_conversion.h1
-rw-r--r--chromium/printing/print_settings_initializer_mac.h1
-rw-r--r--chromium/printing/print_settings_initializer_win.h1
-rw-r--r--chromium/printing/print_settings_unittest.cc12
-rw-r--r--chromium/printing/printing_context.cc1
-rw-r--r--chromium/printing/printing_context_android.cc3
-rw-r--r--chromium/printing/printing_context_linux.cc3
-rw-r--r--chromium/printing/printing_context_mac.mm58
-rw-r--r--chromium/printing/printing_context_win.cc5
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, &current_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
}