Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Unified Diff: chrome/browser/printing/print_system_task_proxy.cc

Issue 8572036: CUPS: Add a regression test for duplex detection. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/printing/print_system_task_proxy.cc
===================================================================
--- chrome/browser/printing/print_system_task_proxy.cc (revision 110345)
+++ chrome/browser/printing/print_system_task_proxy.cc (working copy)
@@ -14,6 +14,7 @@
#include "base/string_split.h"
#include "base/string_util.h"
#include "base/values.h"
+#include "chrome/browser/ui/webui/print_preview_handler.h"
#include "printing/backend/print_backend.h"
#include "printing/print_job_constants.h"
#include "printing/print_settings.h"
@@ -311,6 +312,12 @@
has_logged_printers_count_(has_logged_printers_count) {
}
+#if defined(UNIT_TEST) && defined(USE_CUPS)
+// Only used for testing.
+PrintSystemTaskProxy::PrintSystemTaskProxy() {
+}
+#endif
+
PrintSystemTaskProxy::~PrintSystemTaskProxy() {
}
@@ -387,26 +394,18 @@
delete printers;
}
-void PrintSystemTaskProxy::GetPrinterCapabilities(
- const std::string& printer_name) {
- VLOG(1) << "Get printer capabilities start for " << printer_name;
- printing::PrinterCapsAndDefaults printer_info;
-
- bool set_color_as_default = false;
- bool disable_color_options = true;
- bool set_duplex_as_default = false;
- int printer_color_space_for_color = printing::UNKNOWN_COLOR_MODEL;
- int printer_color_space_for_black = printing::UNKNOWN_COLOR_MODEL;
- int default_duplex_setting_value = printing::UNKNOWN_DUPLEX_MODE;
- if (!print_backend_->GetPrinterCapsAndDefaults(printer_name,
- &printer_info)) {
- return;
- }
-
#if defined(USE_CUPS)
+bool PrintSystemTaskProxy::GetPrinterCapabilitiesCUPS(
+ const printing::PrinterCapsAndDefaults& printer_info,
+ const std::string& printer_name,
+ bool* set_color_as_default,
+ int* printer_color_space_for_color,
+ int* printer_color_space_for_black,
+ bool* set_duplex_as_default,
+ int* default_duplex_setting_value) {
FilePath ppd_file_path;
if (!file_util::CreateTemporaryFile(&ppd_file_path))
- return;
+ return false;
int data_size = printer_info.printer_capabilities.length();
if (data_size != file_util::WriteFile(
@@ -414,7 +413,7 @@
printer_info.printer_capabilities.data(),
data_size)) {
file_util::Delete(ppd_file_path, false);
- return;
+ return false;
}
ppd_file_t* ppd = ppdOpenFile(ppd_file_path.value().c_str());
@@ -431,10 +430,10 @@
if (duplex_choice) {
if (base::strcasecmp(duplex_choice->choice, kDuplexNone) != 0) {
- set_duplex_as_default = true;
- default_duplex_setting_value = printing::LONG_EDGE;
+ *set_duplex_as_default = true;
+ *default_duplex_setting_value = printing::LONG_EDGE;
} else {
- default_duplex_setting_value = printing::SIMPLEX;
+ *default_duplex_setting_value = printing::SIMPLEX;
}
}
@@ -442,47 +441,57 @@
ppd_attr_t* attr = ppdFindAttr(ppd, kColorDevice, NULL);
if (attr && attr->value)
is_color_device = ppd->color_device;
- disable_color_options = !is_color_device;
- set_color_as_default = is_color_device;
+ *set_color_as_default = is_color_device;
if (!((is_color_device && getBasicColorModelSettings(
- ppd, &printer_color_space_for_black,
- &printer_color_space_for_color, &set_color_as_default)) ||
+ ppd, printer_color_space_for_black,
+ printer_color_space_for_color, set_color_as_default)) ||
getPrintOutModeColorSettings(
- ppd, &printer_color_space_for_black,
- &printer_color_space_for_color, &set_color_as_default) ||
+ ppd, printer_color_space_for_black,
+ printer_color_space_for_color, set_color_as_default) ||
getColorModeSettings(
- ppd, &printer_color_space_for_black,
- &printer_color_space_for_color, &set_color_as_default) ||
+ ppd, printer_color_space_for_black,
+ printer_color_space_for_color, set_color_as_default) ||
getHPColorSettings(
- ppd, &printer_color_space_for_black,
- &printer_color_space_for_color, &set_color_as_default) ||
+ ppd, printer_color_space_for_black,
+ printer_color_space_for_color, set_color_as_default) ||
getProcessColorModelSettings(
- ppd, &printer_color_space_for_black,
- &printer_color_space_for_color, &set_color_as_default))) {
+ ppd, printer_color_space_for_black,
+ printer_color_space_for_color, set_color_as_default))) {
VLOG(1) << "Unknown printer color model";
}
ppdClose(ppd);
}
file_util::Delete(ppd_file_path, false);
-#elif defined(OS_WIN)
+ return true;
+}
+#endif // defined(USE_CUPS)
+
+#if defined(OS_WIN)
+void PrintSystemTaskProxy::GetPrinterCapabilitiesWin(
+ const printing::PrinterCapsAndDefaults& printer_info,
+ bool* set_color_as_default,
+ int* printer_color_space_for_color,
+ int* printer_color_space_for_black,
+ bool* set_duplex_as_default,
+ int* default_duplex_setting_value) {
// According to XPS 1.0 spec, only color printers have psk:Color.
// Therefore we don't need to parse the whole XML file, we just need to
// search the string. The spec can be found at:
// http://msdn.microsoft.com/en-us/windows/hardware/gg463431.
if (printer_info.printer_capabilities.find(kPskColor) != std::string::npos)
- printer_color_space_for_color = printing::COLOR;
+ *printer_color_space_for_color = printing::COLOR;
if ((printer_info.printer_capabilities.find(kPskGray) !=
std::string::npos) ||
(printer_info.printer_capabilities.find(kPskMonochrome) !=
std::string::npos)) {
- printer_color_space_for_black = printing::GRAY;
+ *printer_color_space_for_black = printing::GRAY;
}
- set_color_as_default =
+ *set_color_as_default =
(printer_info.printer_defaults.find(kPskColor) != std::string::npos);
- set_duplex_as_default =
+ *set_duplex_as_default =
(printer_info.printer_defaults.find(kPskDuplexFeature) !=
std::string::npos) &&
(printer_info.printer_defaults.find(kPskTwoSided) !=
@@ -492,18 +501,53 @@
std::string::npos) {
if (printer_info.printer_defaults.find(kPskTwoSided) !=
std::string::npos) {
- default_duplex_setting_value = printing::LONG_EDGE;
+ *default_duplex_setting_value = printing::LONG_EDGE;
} else {
- default_duplex_setting_value = printing::SIMPLEX;
+ *default_duplex_setting_value = printing::SIMPLEX;
}
}
+}
+#endif // defined(OS_WIN)
+
+void PrintSystemTaskProxy::GetPrinterCapabilities(
+ const std::string& printer_name) {
+ VLOG(1) << "Get printer capabilities start for " << printer_name;
+ printing::PrinterCapsAndDefaults printer_info;
+ if (!print_backend_->GetPrinterCapsAndDefaults(printer_name,
+ &printer_info)) {
+ return;
+ }
+
+ bool set_color_as_default = false;
+ bool set_duplex_as_default = false;
+ int printer_color_space_for_color = printing::UNKNOWN_COLOR_MODEL;
+ int printer_color_space_for_black = printing::UNKNOWN_COLOR_MODEL;
+ int default_duplex_setting_value = printing::UNKNOWN_DUPLEX_MODE;
+
+#if defined(USE_CUPS)
+ if (!GetPrinterCapabilitiesCUPS(printer_info,
+ printer_name,
+ &set_color_as_default,
+ &printer_color_space_for_color,
+ &printer_color_space_for_black,
+ &set_duplex_as_default,
+ &default_duplex_setting_value)) {
+ return;
+ }
+#elif defined(OS_WIN)
+ GetPrinterCapabilitiesWin(printer_info,
+ &set_color_as_default,
+ &printer_color_space_for_color,
+ &printer_color_space_for_black,
+ &set_duplex_as_default,
+ &default_duplex_setting_value);
#else
NOTIMPLEMENTED();
#endif
- disable_color_options = !printer_color_space_for_color ||
- !printer_color_space_for_black ||
- (printer_color_space_for_color ==
- printer_color_space_for_black);
+ bool disable_color_options = (!printer_color_space_for_color ||
+ !printer_color_space_for_black ||
+ (printer_color_space_for_color ==
+ printer_color_space_for_black));
DictionaryValue settings_info;
settings_info.SetBoolean(kDisableColorOption, disable_color_options);
« no previous file with comments | « chrome/browser/printing/print_system_task_proxy.h ('k') | chrome/browser/printing/print_system_task_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698