summaryrefslogtreecommitdiffstats
path: root/printing
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-11 21:24:26 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-11 21:24:26 +0000
commit4fb4a895d3b238cd8a7860295a419b130db488ba (patch)
tree10986d6c8eb60d2aea752016ba1379227b3fcc06 /printing
parentbbdd1b20b8dc94340793f2edafad228054a9e5ff (diff)
downloadchromium_src-4fb4a895d3b238cd8a7860295a419b130db488ba.zip
chromium_src-4fb4a895d3b238cd8a7860295a419b130db488ba.tar.gz
chromium_src-4fb4a895d3b238cd8a7860295a419b130db488ba.tar.bz2
Improving reliability of PrintBackendWin::GetPrinterSemanticCapsAndDefaults. Try fallback to PRINTER_INFO_2 and return predefined values.
BUG=161772 Review URL: https://chromiumcodereview.appspot.com/11531003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172404 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing')
-rw-r--r--printing/backend/print_backend_win.cc56
1 files changed, 35 insertions, 21 deletions
diff --git a/printing/backend/print_backend_win.cc b/printing/backend/print_backend_win.cc
index 9189c52..cc6b223 100644
--- a/printing/backend/print_backend_win.cc
+++ b/printing/backend/print_backend_win.cc
@@ -154,7 +154,7 @@ bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults(
NULL) == 1);
DEVMODE* devmode = NULL;
- // PRINTER_INFO_9 retrieves current user settings.
+ // Retrieves user defaults.
PrinterInfo<PRINTER_INFO_9> info_9;
if (info_9.GetPrinterInfo(printer_handle, 9)) {
devmode = info_9.get()->pDevMode;
@@ -162,8 +162,7 @@ bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults(
LOG(WARNING) << "Failed to get PRINTER_INFO_9, error = " << GetLastError();
}
- // Sometimes user settings are not available (have not been setted up yet).
- // Use printer default settings (PRINTER_INFO_8) in this case.
+ // Retrieves admin defaults.
PrinterInfo<PRINTER_INFO_8> info_8;
if (!devmode) {
if (info_8.GetPrinterInfo(printer_handle, 8)) {
@@ -173,29 +172,44 @@ bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults(
GetLastError();
}
}
- if (!devmode)
- return false;
+
+ // Retrieves printer defaults.
+ PrinterInfo<PRINTER_INFO_2> info_2;
+ if (!devmode) {
+ if (info_2.GetPrinterInfo(printer_handle, 2)) {
+ devmode = info_2.get()->pDevMode;
+ } else {
+ LOG(WARNING) << "Failed to get PRINTER_INFO_2, error = " <<
+ GetLastError();
+ }
+ }
PrinterSemanticCapsAndDefaults caps;
caps.color_capable = color_supported;
- if ((devmode->dmFields & DM_COLOR) == DM_COLOR)
- caps.color_default = (devmode->dmColor == DMCOLOR_COLOR);
-
caps.duplex_capable = duplex_supported;
- if ((devmode->dmFields & DM_DUPLEX) == DM_DUPLEX) {
- switch (devmode->dmDuplex) {
- case DMDUP_SIMPLEX:
- caps.duplex_default = SIMPLEX;
- break;
- case DMDUP_VERTICAL:
- caps.duplex_default = LONG_EDGE;
- break;
- case DMDUP_HORIZONTAL:
- caps.duplex_default = SHORT_EDGE;
- break;
- default:
- NOTREACHED();
+
+ if (devmode) {
+ if ((devmode->dmFields & DM_COLOR) == DM_COLOR)
+ caps.color_default = (devmode->dmColor == DMCOLOR_COLOR);
+ if ((devmode->dmFields & DM_DUPLEX) == DM_DUPLEX) {
+ switch (devmode->dmDuplex) {
+ case DMDUP_SIMPLEX:
+ caps.duplex_default = SIMPLEX;
+ break;
+ case DMDUP_VERTICAL:
+ caps.duplex_default = LONG_EDGE;
+ break;
+ case DMDUP_HORIZONTAL:
+ caps.duplex_default = SHORT_EDGE;
+ break;
+ default:
+ NOTREACHED();
+ }
}
+ } else {
+ LOG(WARNING) << "Fallback to color/simplex mode.";
+ caps.color_default = caps.color_capable;
+ caps.duplex_default = SIMPLEX;
}
*printer_info = caps;