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

Side by Side Diff: printing/printing_context_win.cc

Issue 605563002: Remove implicit HANDLE conversions from printing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 unified diff | Download patch
« no previous file with comments | « printing/image_win.cc ('k') | printing/printing_context_win_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 PrintingContext::Result PrintingContextWin::UseDefaultSettings() { 52 PrintingContext::Result PrintingContextWin::UseDefaultSettings() {
53 DCHECK(!in_print_job_); 53 DCHECK(!in_print_job_);
54 54
55 scoped_refptr<PrintBackend> backend = PrintBackend::CreateInstance(NULL); 55 scoped_refptr<PrintBackend> backend = PrintBackend::CreateInstance(NULL);
56 base::string16 default_printer = 56 base::string16 default_printer =
57 base::UTF8ToWide(backend->GetDefaultPrinterName()); 57 base::UTF8ToWide(backend->GetDefaultPrinterName());
58 if (!default_printer.empty()) { 58 if (!default_printer.empty()) {
59 ScopedPrinterHandle printer; 59 ScopedPrinterHandle printer;
60 if (printer.OpenPrinter(default_printer.c_str())) { 60 if (printer.OpenPrinter(default_printer.c_str())) {
61 scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode = 61 scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode =
62 CreateDevMode(printer, NULL); 62 CreateDevMode(printer.Get(), NULL);
63 if (InitializeSettings(default_printer, dev_mode.get()) == OK) 63 if (InitializeSettings(default_printer, dev_mode.get()) == OK)
64 return OK; 64 return OK;
65 } 65 }
66 } 66 }
67 67
68 ReleaseContext(); 68 ReleaseContext();
69 69
70 // No default printer configured, do we have any printers at all? 70 // No default printer configured, do we have any printers at all?
71 DWORD bytes_needed = 0; 71 DWORD bytes_needed = 0;
72 DWORD count_returned = 0; 72 DWORD count_returned = 0;
73 (void)::EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, 73 (void)::EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS,
74 NULL, 2, NULL, 0, &bytes_needed, &count_returned); 74 NULL, 2, NULL, 0, &bytes_needed, &count_returned);
75 if (bytes_needed) { 75 if (bytes_needed) {
76 DCHECK_GE(bytes_needed, count_returned * sizeof(PRINTER_INFO_2)); 76 DCHECK_GE(bytes_needed, count_returned * sizeof(PRINTER_INFO_2));
77 scoped_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]); 77 scoped_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]);
78 BOOL ret = ::EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, 78 BOOL ret = ::EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS,
79 NULL, 2, printer_info_buffer.get(), 79 NULL, 2, printer_info_buffer.get(),
80 bytes_needed, &bytes_needed, 80 bytes_needed, &bytes_needed,
81 &count_returned); 81 &count_returned);
82 if (ret && count_returned) { // have printers 82 if (ret && count_returned) { // have printers
83 // Open the first successfully found printer. 83 // Open the first successfully found printer.
84 const PRINTER_INFO_2* info_2 = 84 const PRINTER_INFO_2* info_2 =
85 reinterpret_cast<PRINTER_INFO_2*>(printer_info_buffer.get()); 85 reinterpret_cast<PRINTER_INFO_2*>(printer_info_buffer.get());
86 const PRINTER_INFO_2* info_2_end = info_2 + count_returned; 86 const PRINTER_INFO_2* info_2_end = info_2 + count_returned;
87 for (; info_2 < info_2_end; ++info_2) { 87 for (; info_2 < info_2_end; ++info_2) {
88 ScopedPrinterHandle printer; 88 ScopedPrinterHandle printer;
89 if (!printer.OpenPrinter(info_2->pPrinterName)) 89 if (!printer.OpenPrinter(info_2->pPrinterName))
90 continue; 90 continue;
91 scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode = 91 scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode =
92 CreateDevMode(printer, NULL); 92 CreateDevMode(printer.Get(), NULL);
93 if (InitializeSettings(info_2->pPrinterName, dev_mode.get()) == OK) 93 if (InitializeSettings(info_2->pPrinterName, dev_mode.get()) == OK)
94 return OK; 94 return OK;
95 } 95 }
96 if (context_) 96 if (context_)
97 return OK; 97 return OK;
98 } 98 }
99 } 99 }
100 100
101 return OnError(); 101 return OnError();
102 } 102 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 DCHECK(!in_print_job_); 137 DCHECK(!in_print_job_);
138 DCHECK(!external_preview) << "Not implemented"; 138 DCHECK(!external_preview) << "Not implemented";
139 139
140 ScopedPrinterHandle printer; 140 ScopedPrinterHandle printer;
141 if (!printer.OpenPrinter(settings_.device_name().c_str())) 141 if (!printer.OpenPrinter(settings_.device_name().c_str()))
142 return OnError(); 142 return OnError();
143 143
144 // Make printer changes local to Chrome. 144 // Make printer changes local to Chrome.
145 // See MSDN documentation regarding DocumentProperties. 145 // See MSDN documentation regarding DocumentProperties.
146 scoped_ptr<DEVMODE, base::FreeDeleter> scoped_dev_mode = 146 scoped_ptr<DEVMODE, base::FreeDeleter> scoped_dev_mode =
147 CreateDevModeWithColor(printer, settings_.device_name(), 147 CreateDevModeWithColor(printer.Get(), settings_.device_name(),
148 settings_.color() != GRAY); 148 settings_.color() != GRAY);
149 if (!scoped_dev_mode) 149 if (!scoped_dev_mode)
150 return OnError(); 150 return OnError();
151 151
152 { 152 {
153 DEVMODE* dev_mode = scoped_dev_mode.get(); 153 DEVMODE* dev_mode = scoped_dev_mode.get();
154 dev_mode->dmCopies = std::max(settings_.copies(), 1); 154 dev_mode->dmCopies = std::max(settings_.copies(), 1);
155 if (dev_mode->dmCopies > 1) { // do not change unless multiple copies 155 if (dev_mode->dmCopies > 1) { // do not change unless multiple copies
156 dev_mode->dmFields |= DM_COPIES; 156 dev_mode->dmFields |= DM_COPIES;
157 dev_mode->dmCollate = settings_.collate() ? DMCOLLATE_TRUE : 157 dev_mode->dmCollate = settings_.collate() ? DMCOLLATE_TRUE :
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 dev_mode->dmFields |= DM_PAPERWIDTH; 192 dev_mode->dmFields |= DM_PAPERWIDTH;
193 dev_mode->dmPaperWidth = width; 193 dev_mode->dmPaperWidth = width;
194 dev_mode->dmFields |= DM_PAPERLENGTH; 194 dev_mode->dmFields |= DM_PAPERLENGTH;
195 dev_mode->dmPaperLength = height; 195 dev_mode->dmPaperLength = height;
196 } 196 }
197 } 197 }
198 198
199 // Update data using DocumentProperties. 199 // Update data using DocumentProperties.
200 if (show_system_dialog) { 200 if (show_system_dialog) {
201 scoped_dev_mode = ShowPrintDialog( 201 scoped_dev_mode = ShowPrintDialog(
202 printer, delegate_->GetParentView(), scoped_dev_mode.get()); 202 printer.Get(), delegate_->GetParentView(), scoped_dev_mode.get());
203 } else { 203 } else {
204 scoped_dev_mode = CreateDevMode(printer, scoped_dev_mode.get()); 204 scoped_dev_mode = CreateDevMode(printer.Get(), scoped_dev_mode.get());
205 } 205 }
206 // Set printer then refresh printer settings. 206 // Set printer then refresh printer settings.
207 return InitializeSettings(settings_.device_name(), scoped_dev_mode.get()); 207 return InitializeSettings(settings_.device_name(), scoped_dev_mode.get());
208 } 208 }
209 209
210 PrintingContext::Result PrintingContextWin::InitWithSettings( 210 PrintingContext::Result PrintingContextWin::InitWithSettings(
211 const PrintSettings& settings) { 211 const PrintSettings& settings) {
212 DCHECK(!in_print_job_); 212 DCHECK(!in_print_job_);
213 213
214 settings_ = settings; 214 settings_ = settings;
215 215
216 // TODO(maruel): settings_.ToDEVMODE() 216 // TODO(maruel): settings_.ToDEVMODE()
217 ScopedPrinterHandle printer; 217 ScopedPrinterHandle printer;
218 if (!printer.OpenPrinter(settings_.device_name().c_str())) 218 if (!printer.OpenPrinter(settings_.device_name().c_str()))
219 return FAILED; 219 return FAILED;
220 220
221 scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode = 221 scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode =
222 CreateDevMode(printer, NULL); 222 CreateDevMode(printer.Get(), NULL);
223 223
224 return InitializeSettings(settings_.device_name(), dev_mode.get()); 224 return InitializeSettings(settings_.device_name(), dev_mode.get());
225 } 225 }
226 226
227 PrintingContext::Result PrintingContextWin::NewDocument( 227 PrintingContext::Result PrintingContextWin::NewDocument(
228 const base::string16& document_name) { 228 const base::string16& document_name) {
229 DCHECK(!in_print_job_); 229 DCHECK(!in_print_job_);
230 if (!context_) 230 if (!context_)
231 return OnError(); 231 return OnError();
232 232
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 389
390 if (canceled) { 390 if (canceled) {
391 result.reset(); 391 result.reset();
392 abort_printing_ = true; 392 abort_printing_ = true;
393 } 393 }
394 394
395 return result.Pass(); 395 return result.Pass();
396 } 396 }
397 397
398 } // namespace printing 398 } // namespace printing
OLDNEW
« no previous file with comments | « printing/image_win.cc ('k') | printing/printing_context_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698