diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-11 00:49:49 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-11 00:49:49 +0000 |
commit | 2b364bebf11285aaf97e3f4e97c46e96aeaf91f5 (patch) | |
tree | f399e636f8d2636e1c3905197a0ca740c870a7ac /printing/backend | |
parent | 5f34923604562a6b0043106bde992fc25a64cfba (diff) | |
download | chromium_src-2b364bebf11285aaf97e3f4e97c46e96aeaf91f5.zip chromium_src-2b364bebf11285aaf97e3f4e97c46e96aeaf91f5.tar.gz chromium_src-2b364bebf11285aaf97e3f4e97c46e96aeaf91f5.tar.bz2 |
scoped_ptr<DEVMODE[]> replaced with scoped_ptr<DEVMODE, base::FreeDeleter>.
NOTRY=true
Review URL: https://codereview.chromium.org/191913002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@256087 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing/backend')
-rw-r--r-- | printing/backend/print_backend_win.cc | 21 | ||||
-rw-r--r-- | printing/backend/win_helper.cc | 53 | ||||
-rw-r--r-- | printing/backend/win_helper.h | 11 |
3 files changed, 44 insertions, 41 deletions
diff --git a/printing/backend/print_backend_win.cc b/printing/backend/print_backend_win.cc index 06bd5c9..75c562a 100644 --- a/printing/backend/print_backend_win.cc +++ b/printing/backend/print_backend_win.cc @@ -233,13 +233,14 @@ bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults( PrinterSemanticCapsAndDefaults caps; - scoped_ptr<DEVMODE[]> user_settings = CreateDevMode(printer_handle, NULL); + scoped_ptr<DEVMODE, base::FreeDeleter> user_settings = + CreateDevMode(printer_handle, NULL); if (user_settings) { - if (user_settings.get()->dmFields & DM_COLOR) - caps.color_default = (user_settings.get()->dmColor == DMCOLOR_COLOR); + if (user_settings->dmFields & DM_COLOR) + caps.color_default = (user_settings->dmColor == DMCOLOR_COLOR); - if (user_settings.get()->dmFields & DM_DUPLEX) { - switch (user_settings.get()->dmDuplex) { + if (user_settings->dmFields & DM_DUPLEX) { + switch (user_settings->dmDuplex) { case DMDUP_SIMPLEX: caps.duplex_default = SIMPLEX; break; @@ -254,8 +255,8 @@ bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults( } } - if (user_settings.get()->dmFields & DM_COLLATE) - caps.collate_default = (user_settings.get()->dmCollate == DMCOLLATE_TRUE); + if (user_settings->dmFields & DM_COLLATE) + caps.collate_default = (user_settings->dmCollate == DMCOLLATE_TRUE); } else { LOG(WARNING) << "Fallback to color/simplex mode."; caps.color_default = caps.color_changeable; @@ -320,7 +321,8 @@ bool PrintBackendWin::GetPrinterCapsAndDefaults( } ScopedPrinterHandle printer_handle; if (printer_handle.OpenPrinter(printer_name_wide.c_str())) { - scoped_ptr<DEVMODE[]> devmode_out(CreateDevMode(printer_handle, NULL)); + scoped_ptr<DEVMODE, base::FreeDeleter> devmode_out( + CreateDevMode(printer_handle, NULL)); if (!devmode_out) return false; base::win::ScopedComPtr<IStream> printer_defaults_stream; @@ -328,8 +330,7 @@ bool PrintBackendWin::GetPrinterCapsAndDefaults( printer_defaults_stream.Receive()); DCHECK(SUCCEEDED(hr)); if (printer_defaults_stream) { - DWORD dm_size = devmode_out.get()->dmSize + - devmode_out.get()->dmDriverExtra; + DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra; hr = XPSModule::ConvertDevModeToPrintTicket(provider, dm_size, devmode_out.get(), kPTJobScope, printer_defaults_stream); DCHECK(SUCCEEDED(hr)); diff --git a/printing/backend/win_helper.cc b/printing/backend/win_helper.cc index 3405114..075913e 100644 --- a/printing/backend/win_helper.cc +++ b/printing/backend/win_helper.cc @@ -385,23 +385,24 @@ std::string GetDriverInfo(HANDLE printer) { return driver_info; } -scoped_ptr<DEVMODE[]> XpsTicketToDevMode(const base::string16& printer_name, - const std::string& print_ticket) { - scoped_ptr<DEVMODE[]> scoped_dev_mode; +scoped_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode( + const base::string16& printer_name, + const std::string& print_ticket) { + scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode; printing::ScopedXPSInitializer xps_initializer; if (!xps_initializer.initialized()) { // TODO(sanjeevr): Handle legacy proxy case (with no prntvpt.dll) - return scoped_dev_mode.Pass(); + return dev_mode.Pass(); } printing::ScopedPrinterHandle printer; if (!printer.OpenPrinter(printer_name.c_str())) - return scoped_dev_mode.Pass(); + return dev_mode.Pass(); base::win::ScopedComPtr<IStream> pt_stream; HRESULT hr = StreamFromPrintTicket(print_ticket, pt_stream.Receive()); if (FAILED(hr)) - return scoped_dev_mode.Pass(); + return dev_mode.Pass(); HPTPROVIDER provider = NULL; hr = printing::XPSModule::OpenProvider(printer_name, 1, &provider); @@ -419,28 +420,29 @@ scoped_ptr<DEVMODE[]> XpsTicketToDevMode(const base::string16& printer_name, if (SUCCEEDED(hr)) { // Correct DEVMODE using DocumentProperties. See documentation for // PTConvertPrintTicketToDevMode. - scoped_dev_mode = CreateDevMode(printer, dm); + dev_mode = CreateDevMode(printer, dm); printing::XPSModule::ReleaseMemory(dm); } printing::XPSModule::CloseProvider(provider); } - return scoped_dev_mode.Pass(); + return dev_mode.Pass(); } -scoped_ptr<DEVMODE[]> CreateDevModeWithColor(HANDLE printer, - const base::string16& printer_name, - bool color) { - scoped_ptr<DEVMODE[]> default = CreateDevMode(printer, NULL); +scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevModeWithColor( + HANDLE printer, + const base::string16& printer_name, + bool color) { + scoped_ptr<DEVMODE, base::FreeDeleter> default = CreateDevMode(printer, NULL); if (!default) return default.Pass(); - if ((default.get()->dmFields & DM_COLOR) && - ((default.get()->dmColor == DMCOLOR_COLOR) == color)) { + if ((default->dmFields & DM_COLOR) && + ((default->dmColor == DMCOLOR_COLOR) == color)) { return default.Pass(); } - default.get()->dmFields |= DM_COLOR; - default.get()->dmColor = color ? DMCOLOR_COLOR : DMCOLOR_MONOCHROME; + default->dmFields |= DM_COLOR; + default->dmColor = color ? DMCOLOR_COLOR : DMCOLOR_MONOCHROME; DriverInfo6 info_6; if (!info_6.Init(printer)) @@ -459,25 +461,24 @@ scoped_ptr<DEVMODE[]> CreateDevModeWithColor(HANDLE printer, const char* xps_color = color ? kXpsTicketColor : kXpsTicketMonochrome; std::string xps_ticket = base::StringPrintf(kXpsTicketTemplate, xps_color); - scoped_ptr<DEVMODE[]> ticket = printing::XpsTicketToDevMode(printer_name, - xps_ticket); + scoped_ptr<DEVMODE, base::FreeDeleter> ticket = + printing::XpsTicketToDevMode(printer_name, xps_ticket); if (!ticket) return default.Pass(); return ticket.Pass(); } -PRINTING_EXPORT scoped_ptr<DEVMODE[]> CreateDevMode(HANDLE printer, - DEVMODE* in) { +scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(HANDLE printer, + DEVMODE* in) { LONG buffer_size = DocumentProperties(NULL, printer, L"", NULL, NULL, 0); - if (buffer_size <= 0) - return scoped_ptr<DEVMODE[]>(); - CHECK_GE(buffer_size, static_cast<int>(sizeof(DEVMODE))); - scoped_ptr<DEVMODE[]> out( - reinterpret_cast<DEVMODE*>(new uint8[buffer_size])); + if (buffer_size < static_cast<int>(sizeof(DEVMODE))) + return scoped_ptr<DEVMODE, base::FreeDeleter>(); + scoped_ptr<DEVMODE, base::FreeDeleter> out( + reinterpret_cast<DEVMODE*>(malloc(buffer_size))); DWORD flags = (in ? (DM_IN_BUFFER) : 0) | DM_OUT_BUFFER; if (DocumentProperties(NULL, printer, L"", out.get(), in, flags) != IDOK) - return scoped_ptr<DEVMODE[]>(); + return scoped_ptr<DEVMODE, base::FreeDeleter>(); CHECK_GE(buffer_size, out.get()->dmSize + out.get()->dmDriverExtra); return out.Pass(); } diff --git a/printing/backend/win_helper.h b/printing/backend/win_helper.h index 9b998d7..18d0355 100644 --- a/printing/backend/win_helper.h +++ b/printing/backend/win_helper.h @@ -6,8 +6,8 @@ #define PRINTING_BACKEND_WIN_HELPER_H_ #include <objidl.h> -#include <winspool.h> #include <prntvpt.h> +#include <winspool.h> #include <xpsprint.h> #include <string> @@ -170,20 +170,21 @@ PRINTING_EXPORT bool InitBasicPrinterInfo(HANDLE printer, PRINTING_EXPORT std::string GetDriverInfo(HANDLE printer); -PRINTING_EXPORT scoped_ptr<DEVMODE[]> XpsTicketToDevMode( +PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode( const base::string16& printer_name, const std::string& print_ticket); // Creates default DEVMODE and sets color option. Some devices need special // workaround for color. -PRINTING_EXPORT scoped_ptr<DEVMODE[]> CreateDevModeWithColor( +PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevModeWithColor( HANDLE printer, const base::string16& printer_name, bool color); // Creates new DEVMODE. If |in| is not NULL copy settings from there. -PRINTING_EXPORT scoped_ptr<DEVMODE[]> CreateDevMode(HANDLE printer, - DEVMODE* in); +PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevMode( + HANDLE printer, + DEVMODE* in); } // namespace printing |