Commit ced128f4 authored by Lei Zhang's avatar Lei Zhang Committed by Commit Bot

Improve PPD color parsing for some HP printers.

Some HP printers use the "HPColorMode" attribute instead of the "Color"
attribute.

Bug: 1035009
Change-Id: I75804e86680e3e50f9456f414bfc5bb13ef3956a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1972057Reviewed-by: default avatarLuum Habtemariam <luum@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#729538}
parent b6bcac1a
......@@ -50,6 +50,11 @@ constexpr char kBrotherDuplex[] = "BRDuplex";
constexpr char kBrotherMonoColor[] = "BRMonoColor";
constexpr char kBrotherPrintQuality[] = "BRPrintQuality";
// HP printer specific options.
constexpr char kHpColorMode[] = "HPColorMode";
constexpr char kHpColorPrint[] = "ColorPrint";
constexpr char kHpGrayscalePrint[] = "GrayscalePrint";
// Samsung printer specific options.
constexpr char kSamsungColorTrue[] = "True";
constexpr char kSamsungColorFalse[] = "False";
......@@ -318,7 +323,7 @@ bool GetHPColorSettings(ppd_file_t* ppd,
ColorModel* color_model_for_black,
ColorModel* color_model_for_color,
bool* color_is_default) {
// HP printers use "Color/Color Model" attribute in their PPDs.
// Some HP printers use "Color/Color Model" attribute in their PPDs.
ppd_option_t* color_mode_option = ppdFindOption(ppd, kColor);
if (!color_mode_option)
return false;
......@@ -339,6 +344,32 @@ bool GetHPColorSettings(ppd_file_t* ppd,
return true;
}
bool GetHPColorModeSettings(ppd_file_t* ppd,
ColorModel* color_model_for_black,
ColorModel* color_model_for_color,
bool* color_is_default) {
// Some HP printers use "HPColorMode/Mode" attribute in their PPDs.
ppd_option_t* color_mode_option = ppdFindOption(ppd, kHpColorMode);
if (!color_mode_option)
return false;
if (ppdFindChoice(color_mode_option, kHpColorPrint))
*color_model_for_color = HP_COLOR_COLOR;
if (ppdFindChoice(color_mode_option, kHpGrayscalePrint))
*color_model_for_black = HP_COLOR_BLACK;
ppd_choice_t* mode_choice = ppdFindMarkedChoice(ppd, kHpColorMode);
if (!mode_choice) {
mode_choice =
ppdFindChoice(color_mode_option, color_mode_option->defchoice);
}
if (mode_choice) {
*color_is_default =
EqualsCaseInsensitiveASCII(mode_choice->choice, kHpColorPrint);
}
return true;
}
bool GetProcessColorModelSettings(ppd_file_t* ppd,
ColorModel* color_model_for_black,
ColorModel* color_model_for_color,
......@@ -384,6 +415,7 @@ bool GetColorModelSettings(ppd_file_t* ppd,
GetPrintOutModeColorSettings(ppd, cm_black, cm_color, is_color) ||
GetColorModeSettings(ppd, cm_black, cm_color, is_color) ||
GetHPColorSettings(ppd, cm_black, cm_color, is_color) ||
GetHPColorModeSettings(ppd, cm_black, cm_color, is_color) ||
GetBrotherColorSettings(ppd, cm_black, cm_color, is_color) ||
GetProcessColorModelSettings(ppd, cm_black, cm_color, is_color);
}
......
......@@ -318,6 +318,28 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingBrotherPrinters) {
}
}
TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) {
{
constexpr char kTestPpdData[] =
R"(*PPD-Adobe: "4.3"
*ColorDevice: True
*OpenUI *HPColorMode/Mode: PickOne
*DefaultHPColorMode: ColorPrint
*HPColorMode ColorPrint/Color: "
<< /ProcessColorModel /DeviceCMYK >> setpagedevice"
*HPColorMode GrayscalePrint/Grayscale: "
<< /ProcessColorModel /DeviceGray >> setpagedevice"
*CloseUI: *HPColorMode)";
PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps));
EXPECT_TRUE(caps.color_changeable);
EXPECT_TRUE(caps.color_default);
EXPECT_EQ(HP_COLOR_COLOR, caps.color_model);
EXPECT_EQ(HP_COLOR_BLACK, caps.bw_model);
}
}
TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) {
{
constexpr char kTestPpdData[] =
......
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