| 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 |