summaryrefslogtreecommitdiffstats
path: root/printing/backend
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-21 21:54:32 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-21 21:54:32 +0000
commit37d638846ffe96d219f873fa0fcf64f5b699ea4c (patch)
tree24edf56847bdbe57f9b3dba9f69a64196c8b31d8 /printing/backend
parent715aef65e07bb9e689a408590fbbba9b3b29ec78 (diff)
downloadchromium_src-37d638846ffe96d219f873fa0fcf64f5b699ea4c.zip
chromium_src-37d638846ffe96d219f873fa0fcf64f5b699ea4c.tar.gz
chromium_src-37d638846ffe96d219f873fa0fcf64f5b699ea4c.tar.bz2
Revert 252221 "Use DocumentProperties to get default DEVMODE ins..."
> Use DocumentProperties to get default DEVMODE instead of PRINTER_INFO_*. > Fixed ScopedPrinterHandle::OpenPrinter interface. > > Review URL: https://codereview.chromium.org/168003002 TBR=vitalybuka@chromium.org BUG=345746 Review URL: https://codereview.chromium.org/175173005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@252658 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing/backend')
-rw-r--r--printing/backend/print_backend_win.cc13
-rw-r--r--printing/backend/printing_info_win.cc19
-rw-r--r--printing/backend/printing_info_win.h25
-rw-r--r--printing/backend/win_helper.cc2
-rw-r--r--printing/backend/win_helper.h5
5 files changed, 53 insertions, 11 deletions
diff --git a/printing/backend/print_backend_win.cc b/printing/backend/print_backend_win.cc
index ec52c99..b23407c 100644
--- a/printing/backend/print_backend_win.cc
+++ b/printing/backend/print_backend_win.cc
@@ -213,7 +213,7 @@ bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults(
const std::string& printer_name,
PrinterSemanticCapsAndDefaults* printer_info) {
ScopedPrinterHandle printer_handle;
- if (!printer_handle.OpenPrinter(base::UTF8ToWide(printer_name))) {
+ if (!printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str())) {
LOG(WARNING) << "Failed to open printer, error = " << GetLastError();
return false;
}
@@ -226,9 +226,8 @@ bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults(
DCHECK_EQ(name, base::UTF8ToUTF16(printer_name));
PrinterSemanticCapsAndDefaults caps;
-
- scoped_ptr<DEVMODE[]> user_settings = CreateDevMode(printer_handle, NULL);
- if (user_settings) {
+ UserDefaultDevMode user_settings;
+ if (user_settings.Init(printer_handle)) {
if (user_settings.get()->dmFields & DM_COLOR)
caps.color_default = (user_settings.get()->dmColor == DMCOLOR_COLOR);
@@ -313,7 +312,7 @@ bool PrintBackendWin::GetPrinterCapsAndDefaults(
printer_info->caps_mime_type = "text/xml";
}
ScopedPrinterHandle printer_handle;
- if (printer_handle.OpenPrinter(printer_name_wide)) {
+ if (printer_handle.OpenPrinter(printer_name_wide.c_str())) {
scoped_ptr<DEVMODE[]> devmode_out(CreateDevMode(printer_handle, NULL));
if (!devmode_out)
return false;
@@ -344,7 +343,7 @@ bool PrintBackendWin::GetPrinterCapsAndDefaults(
std::string PrintBackendWin::GetPrinterDriverInfo(
const std::string& printer_name) {
ScopedPrinterHandle printer;
- if (!printer.OpenPrinter(base::UTF8ToWide(printer_name))) {
+ if (!printer.OpenPrinter(base::UTF8ToWide(printer_name).c_str())) {
return std::string();
}
return GetDriverInfo(printer);
@@ -352,7 +351,7 @@ std::string PrintBackendWin::GetPrinterDriverInfo(
bool PrintBackendWin::IsValidPrinter(const std::string& printer_name) {
ScopedPrinterHandle printer_handle;
- return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name));
+ return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str());
}
scoped_refptr<PrintBackend> PrintBackend::CreateInstance(
diff --git a/printing/backend/printing_info_win.cc b/printing/backend/printing_info_win.cc
index e759639..0e45094 100644
--- a/printing/backend/printing_info_win.cc
+++ b/printing/backend/printing_info_win.cc
@@ -44,4 +44,23 @@ uint8* GetPrinterInfo(HANDLE printer, int level) {
} // namespace internal
+UserDefaultDevMode::UserDefaultDevMode() : dev_mode_(NULL) {
+}
+
+bool UserDefaultDevMode::Init(HANDLE printer) {
+ if (info_9_.Init(printer))
+ dev_mode_ = info_9_.get()->pDevMode;
+
+ if (!dev_mode_ && info_8_.Init(printer))
+ dev_mode_ = info_8_.get()->pDevMode;
+
+ if (!dev_mode_ && info_2_.Init(printer))
+ dev_mode_ = info_2_.get()->pDevMode;
+
+ return dev_mode_ != NULL;
+}
+
+UserDefaultDevMode::~UserDefaultDevMode() {
+}
+
} // namespace printing
diff --git a/printing/backend/printing_info_win.h b/printing/backend/printing_info_win.h
index 1134194..931ae6d 100644
--- a/printing/backend/printing_info_win.h
+++ b/printing/backend/printing_info_win.h
@@ -58,9 +58,34 @@ class DriverInfo {
typedef internal::PrinterInfo<PRINTER_INFO_2, 2> PrinterInfo2;
typedef internal::PrinterInfo<PRINTER_INFO_5, 5> PrinterInfo5;
+typedef internal::PrinterInfo<PRINTER_INFO_8, 8> PrinterInfo8;
+typedef internal::PrinterInfo<PRINTER_INFO_9, 9> PrinterInfo9;
typedef internal::DriverInfo<DRIVER_INFO_6, 6> DriverInfo6;
+// Retrieves DEVMODE from PRINTER_INFO_* structures.
+// Requests in following order:
+// 9 (user-default),
+// 8 (admin-default),
+// 2 (printer-default).
+class PRINTING_EXPORT UserDefaultDevMode {
+ public:
+ UserDefaultDevMode();
+ ~UserDefaultDevMode();
+
+ bool Init(HANDLE printer);
+
+ const DEVMODE* get() const {
+ return dev_mode_;
+ }
+
+ private:
+ PrinterInfo2 info_2_;
+ PrinterInfo8 info_8_;
+ PrinterInfo9 info_9_;
+ const DEVMODE* dev_mode_;
+};
+
} // namespace printing
#endif // PRINTING_BACKEND_PRINTING_INFO_WIN_H_
diff --git a/printing/backend/win_helper.cc b/printing/backend/win_helper.cc
index 53ccf58..a16228b 100644
--- a/printing/backend/win_helper.cc
+++ b/printing/backend/win_helper.cc
@@ -395,7 +395,7 @@ scoped_ptr<DEVMODE[]> XpsTicketToDevMode(const base::string16& printer_name,
}
printing::ScopedPrinterHandle printer;
- if (!printer.OpenPrinter(printer_name))
+ if (!printer.OpenPrinter(printer_name.c_str()))
return scoped_dev_mode.Pass();
base::win::ScopedComPtr<IStream> pt_stream;
diff --git a/printing/backend/win_helper.h b/printing/backend/win_helper.h
index ef407b3..9b998d7 100644
--- a/printing/backend/win_helper.h
+++ b/printing/backend/win_helper.h
@@ -46,11 +46,10 @@ class ScopedPrinterHandle
: public base::win::GenericScopedHandle<PrinterHandleTraits,
base::win::VerifierTraits> {
public:
- bool OpenPrinter(const base::string16& printer) {
+ bool OpenPrinter(const wchar_t* printer) {
HANDLE temp_handle;
// ::OpenPrinter may return error but assign some value into handle.
- if (::OpenPrinter(const_cast<wchar_t*>(printer.c_str()), &temp_handle,
- NULL)) {
+ if (::OpenPrinter(const_cast<LPTSTR>(printer), &temp_handle, NULL)) {
Set(temp_handle);
}
return IsValid();