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

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

Issue 191913002: scoped_ptr<DEVMODE[]> replaced with scoped_ptr<DEVMODE, base::FreeDeleter>. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « chrome/service/cloud_print/print_system_win.cc ('k') | printing/backend/win_helper.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 <winspool.h> 8 #include <winspool.h>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 226
227 PrinterInfo5 info_5; 227 PrinterInfo5 info_5;
228 if (!info_5.Init(printer_handle)) 228 if (!info_5.Init(printer_handle))
229 return false; 229 return false;
230 const wchar_t* name = info_5.get()->pPrinterName; 230 const wchar_t* name = info_5.get()->pPrinterName;
231 const wchar_t* port = info_5.get()->pPortName; 231 const wchar_t* port = info_5.get()->pPortName;
232 DCHECK_EQ(name, base::UTF8ToUTF16(printer_name)); 232 DCHECK_EQ(name, base::UTF8ToUTF16(printer_name));
233 233
234 PrinterSemanticCapsAndDefaults caps; 234 PrinterSemanticCapsAndDefaults caps;
235 235
236 scoped_ptr<DEVMODE[]> user_settings = CreateDevMode(printer_handle, NULL); 236 scoped_ptr<DEVMODE, base::FreeDeleter> user_settings =
237 CreateDevMode(printer_handle, NULL);
237 if (user_settings) { 238 if (user_settings) {
238 if (user_settings.get()->dmFields & DM_COLOR) 239 if (user_settings->dmFields & DM_COLOR)
239 caps.color_default = (user_settings.get()->dmColor == DMCOLOR_COLOR); 240 caps.color_default = (user_settings->dmColor == DMCOLOR_COLOR);
240 241
241 if (user_settings.get()->dmFields & DM_DUPLEX) { 242 if (user_settings->dmFields & DM_DUPLEX) {
242 switch (user_settings.get()->dmDuplex) { 243 switch (user_settings->dmDuplex) {
243 case DMDUP_SIMPLEX: 244 case DMDUP_SIMPLEX:
244 caps.duplex_default = SIMPLEX; 245 caps.duplex_default = SIMPLEX;
245 break; 246 break;
246 case DMDUP_VERTICAL: 247 case DMDUP_VERTICAL:
247 caps.duplex_default = LONG_EDGE; 248 caps.duplex_default = LONG_EDGE;
248 break; 249 break;
249 case DMDUP_HORIZONTAL: 250 case DMDUP_HORIZONTAL:
250 caps.duplex_default = SHORT_EDGE; 251 caps.duplex_default = SHORT_EDGE;
251 break; 252 break;
252 default: 253 default:
253 NOTREACHED(); 254 NOTREACHED();
254 } 255 }
255 } 256 }
256 257
257 if (user_settings.get()->dmFields & DM_COLLATE) 258 if (user_settings->dmFields & DM_COLLATE)
258 caps.collate_default = (user_settings.get()->dmCollate == DMCOLLATE_TRUE); 259 caps.collate_default = (user_settings->dmCollate == DMCOLLATE_TRUE);
259 } else { 260 } else {
260 LOG(WARNING) << "Fallback to color/simplex mode."; 261 LOG(WARNING) << "Fallback to color/simplex mode.";
261 caps.color_default = caps.color_changeable; 262 caps.color_default = caps.color_changeable;
262 caps.duplex_default = SIMPLEX; 263 caps.duplex_default = SIMPLEX;
263 } 264 }
264 265
265 // Get printer capabilities. For more info see here: 266 // Get printer capabilities. For more info see here:
266 // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183552(v=vs.85).a spx 267 // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183552(v=vs.85).a spx
267 caps.color_changeable = 268 caps.color_changeable =
268 (DeviceCapabilities(name, port, DC_COLORDEVICE, NULL, NULL) == 1); 269 (DeviceCapabilities(name, port, DC_COLORDEVICE, NULL, NULL) == 1);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 if (FAILED(hr)) { 314 if (FAILED(hr)) {
314 return false; 315 return false;
315 } 316 }
316 hr = StreamOnHGlobalToString(print_capabilities_stream.get(), 317 hr = StreamOnHGlobalToString(print_capabilities_stream.get(),
317 &printer_info->printer_capabilities); 318 &printer_info->printer_capabilities);
318 DCHECK(SUCCEEDED(hr)); 319 DCHECK(SUCCEEDED(hr));
319 printer_info->caps_mime_type = "text/xml"; 320 printer_info->caps_mime_type = "text/xml";
320 } 321 }
321 ScopedPrinterHandle printer_handle; 322 ScopedPrinterHandle printer_handle;
322 if (printer_handle.OpenPrinter(printer_name_wide.c_str())) { 323 if (printer_handle.OpenPrinter(printer_name_wide.c_str())) {
323 scoped_ptr<DEVMODE[]> devmode_out(CreateDevMode(printer_handle, NULL)); 324 scoped_ptr<DEVMODE, base::FreeDeleter> devmode_out(
325 CreateDevMode(printer_handle, NULL));
324 if (!devmode_out) 326 if (!devmode_out)
325 return false; 327 return false;
326 base::win::ScopedComPtr<IStream> printer_defaults_stream; 328 base::win::ScopedComPtr<IStream> printer_defaults_stream;
327 hr = CreateStreamOnHGlobal(NULL, TRUE, 329 hr = CreateStreamOnHGlobal(NULL, TRUE,
328 printer_defaults_stream.Receive()); 330 printer_defaults_stream.Receive());
329 DCHECK(SUCCEEDED(hr)); 331 DCHECK(SUCCEEDED(hr));
330 if (printer_defaults_stream) { 332 if (printer_defaults_stream) {
331 DWORD dm_size = devmode_out.get()->dmSize + 333 DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra;
332 devmode_out.get()->dmDriverExtra;
333 hr = XPSModule::ConvertDevModeToPrintTicket(provider, dm_size, 334 hr = XPSModule::ConvertDevModeToPrintTicket(provider, dm_size,
334 devmode_out.get(), kPTJobScope, printer_defaults_stream); 335 devmode_out.get(), kPTJobScope, printer_defaults_stream);
335 DCHECK(SUCCEEDED(hr)); 336 DCHECK(SUCCEEDED(hr));
336 if (SUCCEEDED(hr)) { 337 if (SUCCEEDED(hr)) {
337 hr = StreamOnHGlobalToString(printer_defaults_stream.get(), 338 hr = StreamOnHGlobalToString(printer_defaults_stream.get(),
338 &printer_info->printer_defaults); 339 &printer_info->printer_defaults);
339 DCHECK(SUCCEEDED(hr)); 340 DCHECK(SUCCEEDED(hr));
340 printer_info->defaults_mime_type = "text/xml"; 341 printer_info->defaults_mime_type = "text/xml";
341 } 342 }
342 } 343 }
(...skipping 17 matching lines...) Expand all
360 ScopedPrinterHandle printer_handle; 361 ScopedPrinterHandle printer_handle;
361 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); 362 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str());
362 } 363 }
363 364
364 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( 365 scoped_refptr<PrintBackend> PrintBackend::CreateInstance(
365 const base::DictionaryValue* print_backend_settings) { 366 const base::DictionaryValue* print_backend_settings) {
366 return new PrintBackendWin; 367 return new PrintBackendWin;
367 } 368 }
368 369
369 } // namespace printing 370 } // namespace printing
OLDNEW
« no previous file with comments | « chrome/service/cloud_print/print_system_win.cc ('k') | printing/backend/win_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698