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

Unified Diff: chrome/service/cloud_print/print_system_cups.cc

Issue 9693064: ScopedPrinterInfoSetter on crash prone blocks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/service/cloud_print/print_system_cups.cc
diff --git a/chrome/service/cloud_print/print_system_cups.cc b/chrome/service/cloud_print/print_system_cups.cc
index e7fe1f8a3de7b558319ddfe252a1bea18a3bd931..280956159f708035c7c2ebc6f5c390852f6bd5c2 100644
--- a/chrome/service/cloud_print/print_system_cups.cc
+++ b/chrome/service/cloud_print/print_system_cups.cc
@@ -240,8 +240,8 @@ class PrinterWatcherCUPS
PrinterWatcherCUPS(PrintSystemCUPS* print_system,
const std::string& printer_name)
: printer_name_(printer_name),
- delegate_(NULL),
- print_system_(print_system) {
+ delegate_(NULL),
Albert Bodenhamer 2012/03/13 23:57:39 why is this changed?
Vitaly Buka (NO REVIEWS) 2012/03/14 00:11:20 It was attempt to fix style, but still incorrectly
+ print_system_(print_system) {
}
~PrinterWatcherCUPS() {
@@ -251,6 +251,10 @@ class PrinterWatcherCUPS
// PrintSystem::PrinterWatcher implementation.
virtual bool StartWatching(
PrintSystem::PrinterWatcher::Delegate* delegate) OVERRIDE{
+ scoped_refptr<printing::PrintBackend> print_backend(
+ printing::PrintBackend::CreateInstance(NULL));
+ child_process_logging::ScopedPrinterInfoSetter prn_info(
+ print_backend->GetPrinterDriverInfo(printer_name));
if (delegate_ != NULL)
StopWatching();
delegate_ = delegate;
@@ -279,42 +283,6 @@ class PrinterWatcherCUPS
return print_system_->GetPrinterInfo(printer_name_, printer_info);
}
- void JobStatusUpdate() {
- if (delegate_ == NULL)
- return; // Orphan call. We have been stopped already.
- // For CUPS proxy, we are going to fire OnJobChanged notification
- // periodically. Higher level will check if there are any outstanding
- // jobs for this printer and check their status. If printer has no
- // outstanding jobs, OnJobChanged() will do nothing.
- delegate_->OnJobChanged();
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&PrinterWatcherCUPS::JobStatusUpdate, this),
- base::TimeDelta::FromSeconds(kJobUpdateTimeoutSeconds));
- }
-
- void PrinterUpdate() {
- if (delegate_ == NULL)
- return; // Orphan call. We have been stopped already.
- VLOG(1) << "CP_CUPS: Checking for printer updates: " << printer_name_;
- if (print_system_->NotifyDelete() &&
- !print_system_->IsValidPrinter(printer_name_)) {
- delegate_->OnPrinterDeleted();
- VLOG(1) << "CP_CUPS: Printer deleted: " << printer_name_;
- } else {
- std::string new_hash = GetSettingsHash();
- if (settings_hash_ != new_hash) {
- settings_hash_ = new_hash;
- delegate_->OnPrinterChanged();
- VLOG(1) << "CP_CUPS: Printer update detected for: " << printer_name_;
- }
- }
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&PrinterWatcherCUPS::PrinterUpdate, this),
- print_system_->GetUpdateTimeout());
- }
-
private:
std::string GetSettingsHash() {
printing::PrinterBasicInfo info;
@@ -340,7 +308,6 @@ class PrinterWatcherCUPS
return base::MD5String(to_hash);
}
-
std::string printer_name_;
PrintSystem::PrinterWatcher::Delegate* delegate_;
scoped_refptr<PrintSystemCUPS> print_system_;
@@ -512,8 +479,9 @@ bool PrintSystemCUPS::ValidatePrintTicket(const std::string& printer_name,
}
// Print ticket on linux is a JSON string containing only one dictionary.
-bool PrintSystemCUPS::ParsePrintTicket(const std::string& print_ticket,
- std::map<std::string, std::string>* options) {
+bool PrintSystemCUPS::ParsePrintTicket(
+ const std::string& print_ticket,
+ std::map<std::string, std::string>* options) {
DCHECK(options);
scoped_ptr<Value> ticket_value(base::JSONReader::Read(print_ticket, false));
if (ticket_value == NULL || !ticket_value->IsType(Value::TYPE_DICTIONARY))
@@ -552,6 +520,7 @@ bool PrintSystemCUPS::GetPrinterCapsAndDefaults(
}
// TODO(gene): Retry multiple times in case of error.
+ child_process_logging::ScopedPrinterInfoSetter prn_info(server_info->backend->GetPrinterDriverInfo());
Albert Bodenhamer 2012/03/13 23:57:39 80 chars
Vitaly Buka (NO REVIEWS) 2012/03/14 00:11:20 Done.
if (!server_info->backend->GetPrinterCapsAndDefaults(short_printer_name,
printer_info) ) {
return false;
@@ -573,6 +542,8 @@ bool PrintSystemCUPS::GetJobDetails(const std::string& printer_name,
if (!server_info)
return false;
+ child_process_logging::ScopedPrinterInfoSetter prn_info(
+ server_info->backend->GetPrinterDriverInfo());
cups_job_t* jobs = NULL;
int num_jobs = GetJobs(&jobs, server_info->url,
short_printer_name.c_str(), 1, -1);
@@ -738,6 +709,9 @@ PlatformJobId PrintSystemCUPS::SpoolPrintJob(
if (!server_info)
return false;
+ child_process_logging::ScopedPrinterInfoSetter prn_info(
+ server_info->backend->GetPrinterDriverInfo(printer_name));
+
// We need to store options as char* string for the duration of the
// cupsPrintFile2 call. We'll use map here to store options, since
// Dictionary value from JSON parser returns wchat_t.

Powered by Google App Engine
This is Rietveld 408576698