diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-21 21:54:32 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-21 21:54:32 +0000 |
commit | 37d638846ffe96d219f873fa0fcf64f5b699ea4c (patch) | |
tree | 24edf56847bdbe57f9b3dba9f69a64196c8b31d8 /printing/backend | |
parent | 715aef65e07bb9e689a408590fbbba9b3b29ec78 (diff) | |
download | chromium_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.cc | 13 | ||||
-rw-r--r-- | printing/backend/printing_info_win.cc | 19 | ||||
-rw-r--r-- | printing/backend/printing_info_win.h | 25 | ||||
-rw-r--r-- | printing/backend/win_helper.cc | 2 | ||||
-rw-r--r-- | printing/backend/win_helper.h | 5 |
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(); |