Commit 75c782b7 authored by Daniel Hosseinian's avatar Daniel Hosseinian Committed by Commit Bot

Re-enable Epson color printing on Linux

Capitalize Epson CUPS color values to potentially fix a problem where
the Epson filter is not detecting the color mode and prints data
intended for color in monochrome.

Bug: 1081705
Change-Id: Ic192d9809dca2101988fe00da7decc5b1002de1b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2285180
Commit-Queue: Daniel Hosseinian <dhoss@chromium.org>
Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#786182}
parent 3ec9e2cc
......@@ -48,10 +48,6 @@ 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";
......@@ -68,6 +64,11 @@ constexpr char kBrotherDuplex[] = "BRDuplex";
constexpr char kBrotherMonoColor[] = "BRMonoColor";
constexpr char kBrotherPrintQuality[] = "BRPrintQuality";
// Epson printer specific options.
constexpr char kEpsonInk[] = "Ink";
constexpr char kEpsonColor[] = "COLOR";
constexpr char kEpsonMono[] = "MONO";
// HP printer specific options.
constexpr char kHpColorMode[] = "HPColorMode";
constexpr char kHpColorPrint[] = "ColorPrint";
......@@ -333,23 +334,21 @@ 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,
bool* color_is_default) {
// Epson printers use "Ink" attribute in their PPDs.
ppd_option_t* color_mode_option = ppdFindOption(ppd, kInk);
ppd_option_t* color_mode_option = ppdFindOption(ppd, kEpsonInk);
if (!color_mode_option)
return false;
if (ppdFindChoice(color_mode_option, kColor))
if (ppdFindChoice(color_mode_option, kEpsonColor))
*color_model_for_color = EPSON_INK_COLOR;
if (ppdFindChoice(color_mode_option, kMono))
if (ppdFindChoice(color_mode_option, kEpsonMono))
*color_model_for_black = EPSON_INK_MONO;
ppd_choice_t* mode_choice = ppdFindMarkedChoice(ppd, kInk);
ppd_choice_t* mode_choice = ppdFindMarkedChoice(ppd, kEpsonInk);
if (!mode_choice) {
mode_choice =
ppdFindChoice(color_mode_option, color_mode_option->defchoice);
......@@ -360,7 +359,6 @@ bool GetEpsonInkSettings(ppd_file_t* ppd,
}
return true;
}
#endif // !defined(OS_LINUX)
bool GetSharpARCModeSettings(ppd_file_t* ppd,
ColorModel* color_model_for_black,
......@@ -465,10 +463,7 @@ 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);
......
......@@ -375,13 +375,7 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) {
VerifyCapabilityColorModels(caps);
}
// 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) {
TEST(PrintBackendCupsHelperTest, TestPpdParsingEpsonPrinters) {
constexpr char kTestPpdData[] =
R"(*PPD-Adobe: "4.3"
*ColorDevice: True
......
......@@ -216,6 +216,8 @@ const char kKCMY[] = "KCMY";
const char kCMY_K[] = "CMY+K";
const char kCMY[] = "CMY";
const char kColor[] = "Color";
const char kEpsonColor[] = "COLOR";
const char kEpsonMono[] = "MONO";
const char kFullColor[] = "FullColor";
const char kGray[] = "Gray";
const char kGrayscale[] = "Grayscale";
......
......@@ -88,6 +88,8 @@ PRINTING_EXPORT extern const char kKCMY[];
PRINTING_EXPORT extern const char kCMY_K[];
PRINTING_EXPORT extern const char kCMY[];
PRINTING_EXPORT extern const char kColor[];
PRINTING_EXPORT extern const char kEpsonColor[];
PRINTING_EXPORT extern const char kEpsonMono[];
PRINTING_EXPORT extern const char kFullColor[];
PRINTING_EXPORT extern const char kGray[];
PRINTING_EXPORT extern const char kGrayscale[];
......
......@@ -41,9 +41,9 @@ void GetColorModelForMode(int color_mode,
constexpr char kCUPSColorModel[] = "ColorModel";
constexpr char kCUPSPrintoutMode[] = "PrintoutMode";
constexpr char kCUPSProcessColorModel[] = "ProcessColorModel";
constexpr char kCUPSInk[] = "Ink";
constexpr char kCUPSBrotherMonoColor[] = "BRMonoColor";
constexpr char kCUPSBrotherPrintQuality[] = "BRPrintQuality";
constexpr char kCUPSEpsonInk[] = "Ink";
constexpr char kCUPSSharpARCMode[] = "ARCMode";
constexpr char kCUPSXeroxXRXColor[] = "XRXColor";
#else
......@@ -51,9 +51,9 @@ void GetColorModelForMode(int color_mode,
constexpr char kCUPSColorModel[] = "cups-ColorModel";
constexpr char kCUPSPrintoutMode[] = "cups-PrintoutMode";
constexpr char kCUPSProcessColorModel[] = "cups-ProcessColorModel";
constexpr char kCUPSInk[] = "cups-Ink";
constexpr char kCUPSBrotherMonoColor[] = "cups-BRMonoColor";
constexpr char kCUPSBrotherPrintQuality[] = "cups-BRPrintQuality";
constexpr char kCUPSEpsonInk[] = "cups-Ink";
constexpr char kCUPSSharpARCMode[] = "cups-ARCMode";
constexpr char kCUPSXeroxXRXColor[] = "cups-XRXColor";
#endif // defined(OS_MACOSX)
......@@ -156,12 +156,12 @@ void GetColorModelForMode(int color_mode,
*color_value = kBlack;
break;
case EPSON_INK_COLOR:
*color_setting_name = kCUPSInk;
*color_value = kColor;
*color_setting_name = kCUPSEpsonInk;
*color_value = kEpsonColor;
break;
case EPSON_INK_MONO:
*color_setting_name = kCUPSInk;
*color_value = kMono;
*color_setting_name = kCUPSEpsonInk;
*color_value = kEpsonMono;
break;
case SHARP_ARCMODE_CMCOLOR:
*color_setting_name = kCUPSSharpARCMode;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment