Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Unified Diff: printing/printing_context_win.cc

Issue 168003002: Use DocumentProperties to get default DEVMODE instead of PRINTER_INFO_*. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « printing/backend/printing_info_win.cc ('k') | printing/printing_context_win_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: printing/printing_context_win.cc
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
index fbadfe4f6b7ae842217fe52880409074ebe9e802..4ba013eddcbfbe280fe8be8708e824e6bfafdb22 100644
--- a/printing/printing_context_win.cc
+++ b/printing/printing_context_win.cc
@@ -269,7 +269,7 @@ PrintingContext::Result PrintingContextWin::UseDefaultSettings() {
(void)::EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS,
NULL, 2, NULL, 0, &bytes_needed, &count_returned);
if (bytes_needed) {
- DCHECK(bytes_needed >= count_returned * sizeof(PRINTER_INFO_2));
+ DCHECK_GE(bytes_needed, count_returned * sizeof(PRINTER_INFO_2));
scoped_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]);
BOOL ret = ::EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS,
NULL, 2, printer_info_buffer.get(),
@@ -277,17 +277,21 @@ PrintingContext::Result PrintingContextWin::UseDefaultSettings() {
&count_returned);
if (ret && count_returned) { // have printers
// Open the first successfully found printer.
- for (DWORD count = 0; count < count_returned; ++count) {
- PRINTER_INFO_2* info_2 = reinterpret_cast<PRINTER_INFO_2*>(
- printer_info_buffer.get() + count * sizeof(PRINTER_INFO_2));
- std::wstring printer_name = info_2->pPrinterName;
- if (info_2->pDevMode == NULL || printer_name.length() == 0)
+ const PRINTER_INFO_2* info_2 =
+ reinterpret_cast<PRINTER_INFO_2*>(printer_info_buffer.get());
+ const PRINTER_INFO_2* info_2_end = info_2 + count_returned;
+ for (; info_2 < info_2_end; ++info_2) {
+ ScopedPrinterHandle printer;
+ if (!printer.OpenPrinter(info_2->pPrinterName))
continue;
- if (!AllocateContext(printer_name, info_2->pDevMode, &context_))
- break;
- if (InitializeSettings(*info_2->pDevMode, printer_name,
- NULL, 0, false)) {
- break;
+ scoped_ptr<DEVMODE[]> dev_mode = CreateDevMode(printer, NULL);
+ if (!dev_mode || !AllocateContext(info_2->pPrinterName, dev_mode.get(),
+ &context_)) {
+ continue;
+ }
+ if (InitializeSettings(*dev_mode.get(), info_2->pPrinterName, NULL, 0,
+ false)) {
+ return OK;
}
ReleaseContext();
}
@@ -336,15 +340,13 @@ PrintingContext::Result PrintingContextWin::UpdatePrinterSettings(
DCHECK(!external_preview) << "Not implemented";
ScopedPrinterHandle printer;
- LPWSTR device_name_wide =
- const_cast<wchar_t*>(settings_.device_name().c_str());
- if (!printer.OpenPrinter(device_name_wide))
+ if (!printer.OpenPrinter(settings_.device_name().c_str()))
return OnError();
// Make printer changes local to Chrome.
// See MSDN documentation regarding DocumentProperties.
scoped_ptr<DEVMODE[]> scoped_dev_mode =
- CreateDevModeWithColor(printer, device_name_wide,
+ CreateDevModeWithColor(printer, settings_.device_name(),
settings_.color() != GRAY);
if (!scoped_dev_mode)
return OnError();
@@ -588,15 +590,14 @@ bool PrintingContextWin::GetPrinterSettings(HANDLE printer,
const std::wstring& device_name) {
DCHECK(!in_print_job_);
- UserDefaultDevMode user_settings;
+ scoped_ptr<DEVMODE[]> dev_mode = CreateDevMode(printer, NULL);
- if (!user_settings.Init(printer) ||
- !AllocateContext(device_name, user_settings.get(), &context_)) {
+ if (!dev_mode || !AllocateContext(device_name, dev_mode.get(), &context_)) {
ResetSettings();
return false;
}
- return InitializeSettings(*user_settings.get(), device_name, NULL, 0, false);
+ return InitializeSettings(*dev_mode.get(), device_name, NULL, 0, false);
}
// static
« no previous file with comments | « printing/backend/printing_info_win.cc ('k') | printing/printing_context_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698