diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-11 21:24:26 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-11 21:24:26 +0000 |
commit | 4fb4a895d3b238cd8a7860295a419b130db488ba (patch) | |
tree | 10986d6c8eb60d2aea752016ba1379227b3fcc06 /printing | |
parent | bbdd1b20b8dc94340793f2edafad228054a9e5ff (diff) | |
download | chromium_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.cc | 56 |
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; |