Index: chrome/service/cloud_print/print_system_win.cc |
diff --git a/chrome/service/cloud_print/print_system_win.cc b/chrome/service/cloud_print/print_system_win.cc |
index 6b1d5df817e343ae2e1d7427f5ed48e4cdedc66f..048a3ab2f89efd4e3c0d25af4848bcf23ce2c679 100644 |
--- a/chrome/service/cloud_print/print_system_win.cc |
+++ b/chrome/service/cloud_print/print_system_win.cc |
@@ -17,6 +17,7 @@ |
#include "base/win/scoped_bstr.h" |
#include "base/win/scoped_comptr.h" |
#include "base/win/scoped_hdc.h" |
+#include "chrome/common/child_process_logging.h" |
#include "chrome/service/service_process.h" |
#include "chrome/service/service_utility_process_host.h" |
#include "grit/generated_resources.h" |
@@ -162,6 +163,11 @@ class PrintSystemWatcherWin : public base::win::ObjectWatcher::Delegate { |
}; |
bool Start(const std::string& printer_name, Delegate* delegate) { |
+ scoped_refptr<printing::PrintBackend> print_backend( |
+ printing::PrintBackend::CreateInstance(NULL)); |
+ printer_info_ = print_backend->GetPrinterDriverInfo(printer_name); |
+ child_process_logging::ScopedPrinterInfoSetter prn_info(printer_info_); |
+ |
delegate_ = delegate; |
// An empty printer name means watch the current server, we need to pass |
// NULL to OpenPrinter. |
@@ -194,6 +200,7 @@ class PrintSystemWatcherWin : public base::win::ObjectWatcher::Delegate { |
// base::ObjectWatcher::Delegate method |
virtual void OnObjectSignaled(HANDLE object) { |
+ child_process_logging::ScopedPrinterInfoSetter prn_info(printer_info_); |
DWORD change = 0; |
FindNextPrinterChangeNotification(object, &change, NULL, NULL); |
@@ -254,6 +261,7 @@ class PrintSystemWatcherWin : public base::win::ObjectWatcher::Delegate { |
ScopedPrinterChangeHandle printer_change_; |
Delegate* delegate_; // Delegate to notify |
bool did_signal_; // DoneWaiting was called |
+ std::string printer_info_; // For crash reporting. |
}; |
// This typedef is to workaround the issue with certain versions of |
@@ -377,6 +385,10 @@ class PrintSystemWin : public PrintSystem { |
const std::vector<std::string>& tags, |
JobSpooler::Delegate* delegate) OVERRIDE { |
// TODO(gene): add tags handling. |
+ scoped_refptr<printing::PrintBackend> print_backend( |
+ printing::PrintBackend::CreateInstance(NULL)); |
+ child_process_logging::ScopedPrinterInfoSetter prn_info( |
+ print_backend->GetPrinterDriverInfo(printer_name)); |
return core_->Spool(print_ticket, print_data_file_path, |
print_data_mime_type, printer_name, job_title, |
delegate); |
@@ -404,6 +416,10 @@ class PrintSystemWin : public PrintSystem { |
const std::string& printer_name, |
const std::string& job_title, |
JobSpooler::Delegate* delegate) { |
+ scoped_refptr<printing::PrintBackend> print_backend( |
+ printing::PrintBackend::CreateInstance(NULL)); |
+ child_process_logging::ScopedPrinterInfoSetter prn_info( |
+ print_backend->GetPrinterDriverInfo(printer_name)); |
if (delegate_) { |
// We are already in the process of printing. |
NOTREACHED(); |
@@ -780,6 +796,8 @@ bool PrintSystemWin::IsValidPrinter(const std::string& printer_name) { |
bool PrintSystemWin::ValidatePrintTicket( |
const std::string& printer_name, |
const std::string& print_ticket_data) { |
+ child_process_logging::ScopedPrinterInfoSetter prn_info( |
+ print_backend_->GetPrinterDriverInfo(printer_name)); |
printing::ScopedXPSInitializer xps_initializer; |
if (!xps_initializer.initialized()) { |
// TODO(sanjeevr): Handle legacy proxy case (with no prntvpt.dll) |
@@ -819,6 +837,8 @@ bool PrintSystemWin::ValidatePrintTicket( |
bool PrintSystemWin::GetJobDetails(const std::string& printer_name, |
PlatformJobId job_id, |
PrintJobDetails *job_details) { |
+ child_process_logging::ScopedPrinterInfoSetter prn_info( |
+ print_backend_->GetPrinterDriverInfo(printer_name)); |
DCHECK(job_details); |
printing::ScopedPrinterHandle printer_handle; |
std::wstring printer_name_wide = UTF8ToWide(printer_name); |