summaryrefslogtreecommitdiffstats
path: root/printing
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-11 00:49:49 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-11 00:49:49 +0000
commit2b364bebf11285aaf97e3f4e97c46e96aeaf91f5 (patch)
treef399e636f8d2636e1c3905197a0ca740c870a7ac /printing
parent5f34923604562a6b0043106bde992fc25a64cfba (diff)
downloadchromium_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')
-rw-r--r--printing/backend/print_backend_win.cc21
-rw-r--r--printing/backend/win_helper.cc53
-rw-r--r--printing/backend/win_helper.h11
-rw-r--r--printing/printing_context_win.cc8
4 files changed, 49 insertions, 44 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
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
index 78dd47f..547bf83 100644
--- a/printing/printing_context_win.cc
+++ b/printing/printing_context_win.cc
@@ -284,7 +284,8 @@ PrintingContext::Result PrintingContextWin::UseDefaultSettings() {
ScopedPrinterHandle printer;
if (!printer.OpenPrinter(info_2->pPrinterName))
continue;
- scoped_ptr<DEVMODE[]> dev_mode = CreateDevMode(printer, NULL);
+ scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode =
+ CreateDevMode(printer, NULL);
if (!dev_mode || !AllocateContext(info_2->pPrinterName, dev_mode.get(),
&context_)) {
continue;
@@ -345,7 +346,7 @@ PrintingContext::Result PrintingContextWin::UpdatePrinterSettings(
// Make printer changes local to Chrome.
// See MSDN documentation regarding DocumentProperties.
- scoped_ptr<DEVMODE[]> scoped_dev_mode =
+ scoped_ptr<DEVMODE, base::FreeDeleter> scoped_dev_mode =
CreateDevModeWithColor(printer, settings_.device_name(),
settings_.color() != GRAY);
if (!scoped_dev_mode)
@@ -590,7 +591,8 @@ bool PrintingContextWin::GetPrinterSettings(HANDLE printer,
const std::wstring& device_name) {
DCHECK(!in_print_job_);
- scoped_ptr<DEVMODE[]> dev_mode = CreateDevMode(printer, NULL);
+ scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode =
+ CreateDevMode(printer, NULL);
if (!dev_mode || !AllocateContext(device_name, dev_mode.get(), &context_)) {
ResetSettings();