OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "printing/printing_context_win.h" | 5 #include "printing/printing_context_win.h" |
6 | 6 |
7 #include <winspool.h> | 7 #include <winspool.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 &count_returned); | 277 &count_returned); |
278 if (ret && count_returned) { // have printers | 278 if (ret && count_returned) { // have printers |
279 // Open the first successfully found printer. | 279 // Open the first successfully found printer. |
280 const PRINTER_INFO_2* info_2 = | 280 const PRINTER_INFO_2* info_2 = |
281 reinterpret_cast<PRINTER_INFO_2*>(printer_info_buffer.get()); | 281 reinterpret_cast<PRINTER_INFO_2*>(printer_info_buffer.get()); |
282 const PRINTER_INFO_2* info_2_end = info_2 + count_returned; | 282 const PRINTER_INFO_2* info_2_end = info_2 + count_returned; |
283 for (; info_2 < info_2_end; ++info_2) { | 283 for (; info_2 < info_2_end; ++info_2) { |
284 ScopedPrinterHandle printer; | 284 ScopedPrinterHandle printer; |
285 if (!printer.OpenPrinter(info_2->pPrinterName)) | 285 if (!printer.OpenPrinter(info_2->pPrinterName)) |
286 continue; | 286 continue; |
287 scoped_ptr<DEVMODE[]> dev_mode = CreateDevMode(printer, NULL); | 287 scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode = |
| 288 CreateDevMode(printer, NULL); |
288 if (!dev_mode || !AllocateContext(info_2->pPrinterName, dev_mode.get(), | 289 if (!dev_mode || !AllocateContext(info_2->pPrinterName, dev_mode.get(), |
289 &context_)) { | 290 &context_)) { |
290 continue; | 291 continue; |
291 } | 292 } |
292 if (InitializeSettings(*dev_mode.get(), info_2->pPrinterName, NULL, 0, | 293 if (InitializeSettings(*dev_mode.get(), info_2->pPrinterName, NULL, 0, |
293 false)) { | 294 false)) { |
294 return OK; | 295 return OK; |
295 } | 296 } |
296 ReleaseContext(); | 297 ReleaseContext(); |
297 } | 298 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 bool external_preview) { | 339 bool external_preview) { |
339 DCHECK(!in_print_job_); | 340 DCHECK(!in_print_job_); |
340 DCHECK(!external_preview) << "Not implemented"; | 341 DCHECK(!external_preview) << "Not implemented"; |
341 | 342 |
342 ScopedPrinterHandle printer; | 343 ScopedPrinterHandle printer; |
343 if (!printer.OpenPrinter(settings_.device_name().c_str())) | 344 if (!printer.OpenPrinter(settings_.device_name().c_str())) |
344 return OnError(); | 345 return OnError(); |
345 | 346 |
346 // Make printer changes local to Chrome. | 347 // Make printer changes local to Chrome. |
347 // See MSDN documentation regarding DocumentProperties. | 348 // See MSDN documentation regarding DocumentProperties. |
348 scoped_ptr<DEVMODE[]> scoped_dev_mode = | 349 scoped_ptr<DEVMODE, base::FreeDeleter> scoped_dev_mode = |
349 CreateDevModeWithColor(printer, settings_.device_name(), | 350 CreateDevModeWithColor(printer, settings_.device_name(), |
350 settings_.color() != GRAY); | 351 settings_.color() != GRAY); |
351 if (!scoped_dev_mode) | 352 if (!scoped_dev_mode) |
352 return OnError(); | 353 return OnError(); |
353 | 354 |
354 { | 355 { |
355 DEVMODE* dev_mode = scoped_dev_mode.get(); | 356 DEVMODE* dev_mode = scoped_dev_mode.get(); |
356 dev_mode->dmCopies = std::max(settings_.copies(), 1); | 357 dev_mode->dmCopies = std::max(settings_.copies(), 1); |
357 if (dev_mode->dmCopies > 1) { // do not change unless multiple copies | 358 if (dev_mode->dmCopies > 1) { // do not change unless multiple copies |
358 dev_mode->dmFields |= DM_COPIES; | 359 dev_mode->dmFields |= DM_COPIES; |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 PrintSettingsInitializerWin::InitPrintSettings(context_, dev_mode, | 584 PrintSettingsInitializerWin::InitPrintSettings(context_, dev_mode, |
584 &settings_); | 585 &settings_); |
585 | 586 |
586 return true; | 587 return true; |
587 } | 588 } |
588 | 589 |
589 bool PrintingContextWin::GetPrinterSettings(HANDLE printer, | 590 bool PrintingContextWin::GetPrinterSettings(HANDLE printer, |
590 const std::wstring& device_name) { | 591 const std::wstring& device_name) { |
591 DCHECK(!in_print_job_); | 592 DCHECK(!in_print_job_); |
592 | 593 |
593 scoped_ptr<DEVMODE[]> dev_mode = CreateDevMode(printer, NULL); | 594 scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode = |
| 595 CreateDevMode(printer, NULL); |
594 | 596 |
595 if (!dev_mode || !AllocateContext(device_name, dev_mode.get(), &context_)) { | 597 if (!dev_mode || !AllocateContext(device_name, dev_mode.get(), &context_)) { |
596 ResetSettings(); | 598 ResetSettings(); |
597 return false; | 599 return false; |
598 } | 600 } |
599 | 601 |
600 return InitializeSettings(*dev_mode.get(), device_name, NULL, 0, false); | 602 return InitializeSettings(*dev_mode.get(), device_name, NULL, 0, false); |
601 } | 603 } |
602 | 604 |
603 // static | 605 // static |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 | 732 |
731 if (dialog_options.hDevMode != NULL) | 733 if (dialog_options.hDevMode != NULL) |
732 GlobalFree(dialog_options.hDevMode); | 734 GlobalFree(dialog_options.hDevMode); |
733 if (dialog_options.hDevNames != NULL) | 735 if (dialog_options.hDevNames != NULL) |
734 GlobalFree(dialog_options.hDevNames); | 736 GlobalFree(dialog_options.hDevNames); |
735 | 737 |
736 return context_ ? OK : FAILED; | 738 return context_ ? OK : FAILED; |
737 } | 739 } |
738 | 740 |
739 } // namespace printing | 741 } // namespace printing |
OLD | NEW |