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/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 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 } | 297 } |
298 DCHECK(printer_info); | 298 DCHECK(printer_info); |
299 HPTPROVIDER provider = NULL; | 299 HPTPROVIDER provider = NULL; |
300 std::wstring printer_name_wide = base::UTF8ToWide(printer_name); | 300 std::wstring printer_name_wide = base::UTF8ToWide(printer_name); |
301 HRESULT hr = XPSModule::OpenProvider(printer_name_wide, 1, &provider); | 301 HRESULT hr = XPSModule::OpenProvider(printer_name_wide, 1, &provider); |
302 if (provider) { | 302 if (provider) { |
303 base::win::ScopedComPtr<IStream> print_capabilities_stream; | 303 base::win::ScopedComPtr<IStream> print_capabilities_stream; |
304 hr = CreateStreamOnHGlobal(NULL, TRUE, | 304 hr = CreateStreamOnHGlobal(NULL, TRUE, |
305 print_capabilities_stream.Receive()); | 305 print_capabilities_stream.Receive()); |
306 DCHECK(SUCCEEDED(hr)); | 306 DCHECK(SUCCEEDED(hr)); |
307 if (print_capabilities_stream) { | 307 if (print_capabilities_stream.get()) { |
308 base::win::ScopedBstr error; | 308 base::win::ScopedBstr error; |
309 hr = XPSModule::GetPrintCapabilities(provider, | 309 hr = XPSModule::GetPrintCapabilities( |
310 NULL, | 310 provider, NULL, print_capabilities_stream.get(), error.Receive()); |
311 print_capabilities_stream, | |
312 error.Receive()); | |
313 DCHECK(SUCCEEDED(hr)); | 311 DCHECK(SUCCEEDED(hr)); |
314 if (FAILED(hr)) { | 312 if (FAILED(hr)) { |
315 return false; | 313 return false; |
316 } | 314 } |
317 hr = StreamOnHGlobalToString(print_capabilities_stream.get(), | 315 hr = StreamOnHGlobalToString(print_capabilities_stream.get(), |
318 &printer_info->printer_capabilities); | 316 &printer_info->printer_capabilities); |
319 DCHECK(SUCCEEDED(hr)); | 317 DCHECK(SUCCEEDED(hr)); |
320 printer_info->caps_mime_type = "text/xml"; | 318 printer_info->caps_mime_type = "text/xml"; |
321 } | 319 } |
322 ScopedPrinterHandle printer_handle; | 320 ScopedPrinterHandle printer_handle; |
323 if (printer_handle.OpenPrinter(printer_name_wide.c_str())) { | 321 if (printer_handle.OpenPrinter(printer_name_wide.c_str())) { |
324 scoped_ptr<DEVMODE, base::FreeDeleter> devmode_out( | 322 scoped_ptr<DEVMODE, base::FreeDeleter> devmode_out( |
325 CreateDevMode(printer_handle.Get(), NULL)); | 323 CreateDevMode(printer_handle.Get(), NULL)); |
326 if (!devmode_out) | 324 if (!devmode_out) |
327 return false; | 325 return false; |
328 base::win::ScopedComPtr<IStream> printer_defaults_stream; | 326 base::win::ScopedComPtr<IStream> printer_defaults_stream; |
329 hr = CreateStreamOnHGlobal(NULL, TRUE, | 327 hr = CreateStreamOnHGlobal(NULL, TRUE, |
330 printer_defaults_stream.Receive()); | 328 printer_defaults_stream.Receive()); |
331 DCHECK(SUCCEEDED(hr)); | 329 DCHECK(SUCCEEDED(hr)); |
332 if (printer_defaults_stream) { | 330 if (printer_defaults_stream.get()) { |
333 DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra; | 331 DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra; |
334 hr = XPSModule::ConvertDevModeToPrintTicket(provider, dm_size, | 332 hr = XPSModule::ConvertDevModeToPrintTicket( |
335 devmode_out.get(), kPTJobScope, printer_defaults_stream); | 333 provider, dm_size, devmode_out.get(), kPTJobScope, |
| 334 printer_defaults_stream.get()); |
336 DCHECK(SUCCEEDED(hr)); | 335 DCHECK(SUCCEEDED(hr)); |
337 if (SUCCEEDED(hr)) { | 336 if (SUCCEEDED(hr)) { |
338 hr = StreamOnHGlobalToString(printer_defaults_stream.get(), | 337 hr = StreamOnHGlobalToString(printer_defaults_stream.get(), |
339 &printer_info->printer_defaults); | 338 &printer_info->printer_defaults); |
340 DCHECK(SUCCEEDED(hr)); | 339 DCHECK(SUCCEEDED(hr)); |
341 printer_info->defaults_mime_type = "text/xml"; | 340 printer_info->defaults_mime_type = "text/xml"; |
342 } | 341 } |
343 } | 342 } |
344 } | 343 } |
345 XPSModule::CloseProvider(provider); | 344 XPSModule::CloseProvider(provider); |
(...skipping 15 matching lines...) Expand all Loading... |
361 ScopedPrinterHandle printer_handle; | 360 ScopedPrinterHandle printer_handle; |
362 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); | 361 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); |
363 } | 362 } |
364 | 363 |
365 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( | 364 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( |
366 const base::DictionaryValue* print_backend_settings) { | 365 const base::DictionaryValue* print_backend_settings) { |
367 return new PrintBackendWin; | 366 return new PrintBackendWin; |
368 } | 367 } |
369 | 368 |
370 } // namespace printing | 369 } // namespace printing |
OLD | NEW |