Commit f42aff05 authored by Daniel Hosseinian's avatar Daniel Hosseinian Committed by Commit Bot

Support Epson PPD color parsing

Epson printers use the "Ink" attribute instead of other commonly used
attributes like "ColorModel".

Remove unnecessary scoping in some unit tests.

Bug: 1043255
Change-Id: I3a71c0354de266cf41b99d06372e883e8b200eb8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2014101Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Reviewed-by: default avatarSean Kau <skau@chromium.org>
Commit-Queue: Daniel Hosseinian <dhoss@chromium.org>
Cr-Commit-Position: refs/heads/master@{#734136}
parent d5252bd9
...@@ -31,13 +31,14 @@ namespace printing { ...@@ -31,13 +31,14 @@ namespace printing {
// This section contains helper code for PPD parsing for semantic capabilities. // This section contains helper code for PPD parsing for semantic capabilities.
namespace { namespace {
const char kColorDevice[] = "ColorDevice"; constexpr char kColorDevice[] = "ColorDevice";
const char kColorModel[] = "ColorModel"; constexpr char kColorModel[] = "ColorModel";
const char kColorMode[] = "ColorMode"; constexpr char kColorMode[] = "ColorMode";
const char kProcessColorModel[] = "ProcessColorModel"; constexpr char kInk[] = "Ink";
const char kPrintoutMode[] = "PrintoutMode"; constexpr char kProcessColorModel[] = "ProcessColorModel";
const char kDraftGray[] = "Draft.Gray"; constexpr char kPrintoutMode[] = "PrintoutMode";
const char kHighGray[] = "High.Gray"; constexpr char kDraftGray[] = "Draft.Gray";
constexpr char kHighGray[] = "High.Gray";
constexpr char kDuplex[] = "Duplex"; constexpr char kDuplex[] = "Duplex";
constexpr char kDuplexNone[] = "None"; constexpr char kDuplexNone[] = "None";
...@@ -370,6 +371,32 @@ bool GetHPColorModeSettings(ppd_file_t* ppd, ...@@ -370,6 +371,32 @@ bool GetHPColorModeSettings(ppd_file_t* ppd,
return true; return true;
} }
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);
if (!color_mode_option)
return false;
if (ppdFindChoice(color_mode_option, kColor))
*color_model_for_color = EPSON_INK_COLOR;
if (ppdFindChoice(color_mode_option, kMono))
*color_model_for_black = EPSON_INK_MONO;
ppd_choice_t* mode_choice = ppdFindMarkedChoice(ppd, kInk);
if (!mode_choice) {
mode_choice =
ppdFindChoice(color_mode_option, color_mode_option->defchoice);
}
if (mode_choice) {
*color_is_default = EqualsCaseInsensitiveASCII(mode_choice->choice, kColor);
}
return true;
}
bool GetProcessColorModelSettings(ppd_file_t* ppd, bool GetProcessColorModelSettings(ppd_file_t* ppd,
ColorModel* color_model_for_black, ColorModel* color_model_for_black,
ColorModel* color_model_for_color, ColorModel* color_model_for_color,
...@@ -417,6 +444,7 @@ bool GetColorModelSettings(ppd_file_t* ppd, ...@@ -417,6 +444,7 @@ bool GetColorModelSettings(ppd_file_t* ppd,
GetHPColorSettings(ppd, cm_black, cm_color, is_color) || GetHPColorSettings(ppd, cm_black, cm_color, is_color) ||
GetHPColorModeSettings(ppd, cm_black, cm_color, is_color) || GetHPColorModeSettings(ppd, cm_black, cm_color, is_color) ||
GetBrotherColorSettings(ppd, cm_black, cm_color, is_color) || GetBrotherColorSettings(ppd, cm_black, cm_color, is_color) ||
GetEpsonInkSettings(ppd, cm_black, cm_color, is_color) ||
GetProcessColorModelSettings(ppd, cm_black, cm_color, is_color); GetProcessColorModelSettings(ppd, cm_black, cm_color, is_color);
} }
......
...@@ -319,9 +319,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingBrotherPrinters) { ...@@ -319,9 +319,8 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingBrotherPrinters) {
} }
TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) { TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) {
{ constexpr char kTestPpdData[] =
constexpr char kTestPpdData[] = R"(*PPD-Adobe: "4.3"
R"(*PPD-Adobe: "4.3"
*ColorDevice: True *ColorDevice: True
*OpenUI *HPColorMode/Mode: PickOne *OpenUI *HPColorMode/Mode: PickOne
*DefaultHPColorMode: ColorPrint *DefaultHPColorMode: ColorPrint
...@@ -331,19 +330,39 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) { ...@@ -331,19 +330,39 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingHpPrinters) {
<< /ProcessColorModel /DeviceGray >> setpagedevice" << /ProcessColorModel /DeviceGray >> setpagedevice"
*CloseUI: *HPColorMode)"; *CloseUI: *HPColorMode)";
PrinterSemanticCapsAndDefaults caps; PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps));
EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_changeable);
EXPECT_TRUE(caps.color_default); EXPECT_TRUE(caps.color_default);
EXPECT_EQ(HP_COLOR_COLOR, caps.color_model); EXPECT_EQ(HP_COLOR_COLOR, caps.color_model);
EXPECT_EQ(HP_COLOR_BLACK, caps.bw_model); EXPECT_EQ(HP_COLOR_BLACK, caps.bw_model);
} }
TEST(PrintBackendCupsHelperTest, TestPpdParsingEpsonPrinters) {
constexpr char kTestPpdData[] =
R"(*PPD-Adobe: "4.3"
*ColorDevice: True
*OpenUI *Ink/Ink: PickOne
*DefaultInk: COLOR
*Ink COLOR/Color: "
<</cupsBitsPerColor 8 /cupsColorOrder 0
/cupsColorSpace 1 /cupsCompression 1>> setpagedevice"
*Ink MONO/Monochrome: "
<</cupsBitsPerColor 8 /cupsColorOrder 0
/cupsColorSpace 0 /cupsCompression 1>> setpagedevice"
*CloseUI: *Ink)";
PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps));
EXPECT_TRUE(caps.color_changeable);
EXPECT_TRUE(caps.color_default);
EXPECT_EQ(EPSON_INK_COLOR, caps.color_model);
EXPECT_EQ(EPSON_INK_MONO, caps.bw_model);
} }
TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) { TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) {
{ constexpr char kTestPpdData[] =
constexpr char kTestPpdData[] = R"(*PPD-Adobe: "4.3"
R"(*PPD-Adobe: "4.3"
*ColorDevice: True *ColorDevice: True
*OpenUI *ColorMode/Color Mode: Boolean *OpenUI *ColorMode/Color Mode: Boolean
*DefaultColorMode: True *DefaultColorMode: True
...@@ -351,13 +370,12 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) { ...@@ -351,13 +370,12 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingSamsungPrinters) {
*ColorMode True/Color: "" *ColorMode True/Color: ""
*CloseUI: *ColorMode)"; *CloseUI: *ColorMode)";
PrinterSemanticCapsAndDefaults caps; PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps)); EXPECT_TRUE(ParsePpdCapabilities("test", "", kTestPpdData, &caps));
EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_changeable);
EXPECT_TRUE(caps.color_default); EXPECT_TRUE(caps.color_default);
EXPECT_EQ(COLORMODE_COLOR, caps.color_model); EXPECT_EQ(COLORMODE_COLOR, caps.color_model);
EXPECT_EQ(COLORMODE_MONOCHROME, caps.bw_model); EXPECT_EQ(COLORMODE_MONOCHROME, caps.bw_model);
}
} }
} // namespace printing } // namespace printing
...@@ -142,6 +142,8 @@ enum ColorModel { ...@@ -142,6 +142,8 @@ enum ColorModel {
BROTHER_CUPS_MONO, // Used in Brother color laser printer PPDs. BROTHER_CUPS_MONO, // Used in Brother color laser printer PPDs.
BROTHER_BRSCRIPT3_COLOR, // Used in Brother BRScript3 color printer PPDs. BROTHER_BRSCRIPT3_COLOR, // Used in Brother BRScript3 color printer PPDs.
BROTHER_BRSCRIPT3_BLACK, // Used in Brother BRScript3 color printer PPDs. BROTHER_BRSCRIPT3_BLACK, // Used in Brother BRScript3 color printer PPDs.
EPSON_INK_COLOR, // Used in Epson printer PPDs.
EPSON_INK_MONO, // Used in Epson printer PPDs.
}; };
// What kind of margins to use. // What kind of margins to use.
......
...@@ -31,6 +31,7 @@ void GetColorModelForMode(int color_mode, ...@@ -31,6 +31,7 @@ void GetColorModelForMode(int color_mode,
constexpr char kCUPSColorModel[] = "ColorModel"; constexpr char kCUPSColorModel[] = "ColorModel";
constexpr char kCUPSPrintoutMode[] = "PrintoutMode"; constexpr char kCUPSPrintoutMode[] = "PrintoutMode";
constexpr char kCUPSProcessColorModel[] = "ProcessColorModel"; constexpr char kCUPSProcessColorModel[] = "ProcessColorModel";
constexpr char kCUPSInk[] = "Ink";
constexpr char kCUPSBrotherMonoColor[] = "BRMonoColor"; constexpr char kCUPSBrotherMonoColor[] = "BRMonoColor";
constexpr char kCUPSBrotherPrintQuality[] = "BRPrintQuality"; constexpr char kCUPSBrotherPrintQuality[] = "BRPrintQuality";
#else #else
...@@ -38,6 +39,7 @@ void GetColorModelForMode(int color_mode, ...@@ -38,6 +39,7 @@ void GetColorModelForMode(int color_mode,
constexpr char kCUPSColorModel[] = "cups-ColorModel"; constexpr char kCUPSColorModel[] = "cups-ColorModel";
constexpr char kCUPSPrintoutMode[] = "cups-PrintoutMode"; constexpr char kCUPSPrintoutMode[] = "cups-PrintoutMode";
constexpr char kCUPSProcessColorModel[] = "cups-ProcessColorModel"; constexpr char kCUPSProcessColorModel[] = "cups-ProcessColorModel";
constexpr char kCUPSInk[] = "cups-Ink";
constexpr char kCUPSBrotherMonoColor[] = "cups-BRMonoColor"; constexpr char kCUPSBrotherMonoColor[] = "cups-BRMonoColor";
constexpr char kCUPSBrotherPrintQuality[] = "cups-BRPrintQuality"; constexpr char kCUPSBrotherPrintQuality[] = "cups-BRPrintQuality";
#endif // defined(OS_MACOSX) #endif // defined(OS_MACOSX)
...@@ -129,6 +131,14 @@ void GetColorModelForMode(int color_mode, ...@@ -129,6 +131,14 @@ void GetColorModelForMode(int color_mode,
color_setting_name->assign(kCUPSBrotherPrintQuality); color_setting_name->assign(kCUPSBrotherPrintQuality);
color_value->assign(kBlack); color_value->assign(kBlack);
break; break;
case EPSON_INK_COLOR:
color_setting_name->assign(kCUPSInk);
color_value->assign(kColor);
break;
case EPSON_INK_MONO:
color_setting_name->assign(kCUPSInk);
color_value->assign(kMono);
break;
default: default:
color_value->assign(kGrayscale); color_value->assign(kGrayscale);
break; break;
......
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