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

Side by Side Diff: printing/backend/print_backend_win.cc

Issue 1863223002: Convert //printing to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 | « no previous file | printing/backend/printing_info_win.h » ('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/backend/print_backend.h" 5 #include "printing/backend/print_backend.h"
6 6
7 #include <objidl.h> 7 #include <objidl.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <winspool.h> 9 #include <winspool.h>
10 10
11 #include <memory>
12
11 #include "base/memory/free_deleter.h" 13 #include "base/memory/free_deleter.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/numerics/safe_conversions.h" 14 #include "base/numerics/safe_conversions.h"
14 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_piece.h" 16 #include "base/strings/string_piece.h"
16 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
17 #include "base/win/scoped_bstr.h" 18 #include "base/win/scoped_bstr.h"
18 #include "base/win/scoped_comptr.h" 19 #include "base/win/scoped_comptr.h"
19 #include "base/win/scoped_hglobal.h" 20 #include "base/win/scoped_hglobal.h"
20 #include "printing/backend/print_backend_consts.h" 21 #include "printing/backend/print_backend_consts.h"
21 #include "printing/backend/printing_info_win.h" 22 #include "printing/backend/printing_info_win.h"
22 #include "printing/backend/win_helper.h" 23 #include "printing/backend/win_helper.h"
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 178
178 bool PrintBackendWin::EnumeratePrinters(PrinterList* printer_list) { 179 bool PrintBackendWin::EnumeratePrinters(PrinterList* printer_list) {
179 DCHECK(printer_list); 180 DCHECK(printer_list);
180 DWORD bytes_needed = 0; 181 DWORD bytes_needed = 0;
181 DWORD count_returned = 0; 182 DWORD count_returned = 0;
182 const DWORD kLevel = 4; 183 const DWORD kLevel = 4;
183 BOOL ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, 184 BOOL ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL,
184 kLevel, NULL, 0, &bytes_needed, &count_returned); 185 kLevel, NULL, 0, &bytes_needed, &count_returned);
185 if (!bytes_needed) 186 if (!bytes_needed)
186 return false; 187 return false;
187 scoped_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]); 188 std::unique_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]);
188 ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, kLevel, 189 ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, kLevel,
189 printer_info_buffer.get(), bytes_needed, &bytes_needed, 190 printer_info_buffer.get(), bytes_needed, &bytes_needed,
190 &count_returned); 191 &count_returned);
191 DCHECK(ret); 192 DCHECK(ret);
192 if (!ret) 193 if (!ret)
193 return false; 194 return false;
194 195
195 std::string default_printer = GetDefaultPrinterName(); 196 std::string default_printer = GetDefaultPrinterName();
196 PRINTER_INFO_4* printer_info = 197 PRINTER_INFO_4* printer_info =
197 reinterpret_cast<PRINTER_INFO_4*>(printer_info_buffer.get()); 198 reinterpret_cast<PRINTER_INFO_4*>(printer_info_buffer.get());
(...skipping 28 matching lines...) Expand all
226 227
227 PrinterInfo5 info_5; 228 PrinterInfo5 info_5;
228 if (!info_5.Init(printer_handle.Get())) 229 if (!info_5.Init(printer_handle.Get()))
229 return false; 230 return false;
230 const wchar_t* name = info_5.get()->pPrinterName; 231 const wchar_t* name = info_5.get()->pPrinterName;
231 const wchar_t* port = info_5.get()->pPortName; 232 const wchar_t* port = info_5.get()->pPortName;
232 DCHECK_EQ(name, base::UTF8ToUTF16(printer_name)); 233 DCHECK_EQ(name, base::UTF8ToUTF16(printer_name));
233 234
234 PrinterSemanticCapsAndDefaults caps; 235 PrinterSemanticCapsAndDefaults caps;
235 236
236 scoped_ptr<DEVMODE, base::FreeDeleter> user_settings = 237 std::unique_ptr<DEVMODE, base::FreeDeleter> user_settings =
237 CreateDevMode(printer_handle.Get(), NULL); 238 CreateDevMode(printer_handle.Get(), NULL);
238 if (user_settings) { 239 if (user_settings) {
239 if (user_settings->dmFields & DM_COLOR) 240 if (user_settings->dmFields & DM_COLOR)
240 caps.color_default = (user_settings->dmColor == DMCOLOR_COLOR); 241 caps.color_default = (user_settings->dmColor == DMCOLOR_COLOR);
241 242
242 if (user_settings->dmFields & DM_DUPLEX) { 243 if (user_settings->dmFields & DM_DUPLEX) {
243 switch (user_settings->dmDuplex) { 244 switch (user_settings->dmDuplex) {
244 case DMDUP_SIMPLEX: 245 case DMDUP_SIMPLEX:
245 caps.duplex_default = SIMPLEX; 246 caps.duplex_default = SIMPLEX;
246 break; 247 break;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 if (FAILED(hr)) { 315 if (FAILED(hr)) {
315 return false; 316 return false;
316 } 317 }
317 hr = StreamOnHGlobalToString(print_capabilities_stream.get(), 318 hr = StreamOnHGlobalToString(print_capabilities_stream.get(),
318 &printer_info->printer_capabilities); 319 &printer_info->printer_capabilities);
319 DCHECK(SUCCEEDED(hr)); 320 DCHECK(SUCCEEDED(hr));
320 printer_info->caps_mime_type = "text/xml"; 321 printer_info->caps_mime_type = "text/xml";
321 } 322 }
322 ScopedPrinterHandle printer_handle; 323 ScopedPrinterHandle printer_handle;
323 if (printer_handle.OpenPrinter(printer_name_wide.c_str())) { 324 if (printer_handle.OpenPrinter(printer_name_wide.c_str())) {
324 scoped_ptr<DEVMODE, base::FreeDeleter> devmode_out( 325 std::unique_ptr<DEVMODE, base::FreeDeleter> devmode_out(
325 CreateDevMode(printer_handle.Get(), NULL)); 326 CreateDevMode(printer_handle.Get(), NULL));
326 if (!devmode_out) 327 if (!devmode_out)
327 return false; 328 return false;
328 base::win::ScopedComPtr<IStream> printer_defaults_stream; 329 base::win::ScopedComPtr<IStream> printer_defaults_stream;
329 hr = CreateStreamOnHGlobal(NULL, TRUE, 330 hr = CreateStreamOnHGlobal(NULL, TRUE,
330 printer_defaults_stream.Receive()); 331 printer_defaults_stream.Receive());
331 DCHECK(SUCCEEDED(hr)); 332 DCHECK(SUCCEEDED(hr));
332 if (printer_defaults_stream.get()) { 333 if (printer_defaults_stream.get()) {
333 DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra; 334 DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra;
334 hr = XPSModule::ConvertDevModeToPrintTicket( 335 hr = XPSModule::ConvertDevModeToPrintTicket(
(...skipping 27 matching lines...) Expand all
362 ScopedPrinterHandle printer_handle; 363 ScopedPrinterHandle printer_handle;
363 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); 364 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str());
364 } 365 }
365 366
366 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( 367 scoped_refptr<PrintBackend> PrintBackend::CreateInstance(
367 const base::DictionaryValue* print_backend_settings) { 368 const base::DictionaryValue* print_backend_settings) {
368 return new PrintBackendWin; 369 return new PrintBackendWin;
369 } 370 }
370 371
371 } // namespace printing 372 } // namespace printing
OLDNEW
« no previous file with comments | « no previous file | printing/backend/printing_info_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698