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

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
« no previous file with comments | « chrome/browser/printing/print_system_task_proxy.cc ('k') | chrome/service/cloud_print/print_system_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..e3440c788449823c745a82a140f368661b85cf53 100644
--- a/chrome/service/cloud_print/print_system_cups.cc
+++ b/chrome/service/cloud_print/print_system_cups.cc
@@ -25,6 +25,7 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/common/child_process_logging.h"
#include "chrome/service/cloud_print/cloud_print_consts.h"
#include "chrome/service/cloud_print/cloud_print_helpers.h"
#include "googleurl/src/gurl.h"
@@ -240,8 +241,8 @@ class PrinterWatcherCUPS
PrinterWatcherCUPS(PrintSystemCUPS* print_system,
const std::string& printer_name)
: printer_name_(printer_name),
- delegate_(NULL),
- print_system_(print_system) {
+ delegate_(NULL),
+ print_system_(print_system) {
}
~PrinterWatcherCUPS() {
@@ -251,6 +252,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;
@@ -340,7 +345,6 @@ class PrinterWatcherCUPS
return base::MD5String(to_hash);
}
-
std::string printer_name_;
PrintSystem::PrinterWatcher::Delegate* delegate_;
scoped_refptr<PrintSystemCUPS> print_system_;
@@ -512,8 +516,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 +557,8 @@ bool PrintSystemCUPS::GetPrinterCapsAndDefaults(
}
// TODO(gene): Retry multiple times in case of error.
+ child_process_logging::ScopedPrinterInfoSetter prn_info(
+ server_info->backend->GetPrinterDriverInfo(short_printer_name));
if (!server_info->backend->GetPrinterCapsAndDefaults(short_printer_name,
printer_info) ) {
return false;
@@ -573,6 +580,8 @@ bool PrintSystemCUPS::GetJobDetails(const std::string& printer_name,
if (!server_info)
return false;
+ child_process_logging::ScopedPrinterInfoSetter prn_info(
+ server_info->backend->GetPrinterDriverInfo(short_printer_name));
cups_job_t* jobs = NULL;
int num_jobs = GetJobs(&jobs, server_info->url,
short_printer_name.c_str(), 1, -1);
@@ -738,6 +747,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.
« no previous file with comments | « chrome/browser/printing/print_system_task_proxy.cc ('k') | chrome/service/cloud_print/print_system_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698