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

Unified Diff: printing/backend/print_backend_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: printing/backend/print_backend_cups.cc
diff --git a/printing/backend/print_backend_cups.cc b/printing/backend/print_backend_cups.cc
index 9a17ddf4c39d57ea9431a857c5259c976a5cffef..90050e646a261b15d628ac5b3702d7e3eff388d5 100644
--- a/printing/backend/print_backend_cups.cc
+++ b/printing/backend/print_backend_cups.cc
@@ -98,6 +98,7 @@ namespace printing {
static const char kCUPSPrinterInfoOpt[] = "printer-info";
static const char kCUPSPrinterStateOpt[] = "printer-state";
static const char kCUPSPrinterTypeOpt[] = "printer-type";
+static const char kCUPSPrinterMakeModelOpt[] = "printer-make-and-model";
class PrintBackendCUPS : public PrintBackend {
public:
@@ -113,8 +114,8 @@ class PrintBackendCUPS : public PrintBackend {
const std::string& printer_name,
PrinterCapsAndDefaults* printer_info) OVERRIDE;
- virtual bool GetPrinterDriverInfo(const std::string& printer_name,
- std::string* driver_info) OVERRIDE;
+ virtual std::string GetPrinterDriverInfo(
+ const std::string& printer_name) OVERRIDE;
virtual bool IsValidPrinter(const std::string& printer_name) OVERRIDE;
@@ -228,10 +229,23 @@ bool PrintBackendCUPS::GetPrinterCapsAndDefaults(
return res;
}
-bool PrintBackendCUPS::GetPrinterDriverInfo(const std::string& printer_name,
- std::string* driver_info) {
- // TODO(vitalybuka): MAC implementation. http://crbug.com/108194
- return false;
+std::string PrintBackendCUPS::GetPrinterDriverInfo(
+ const std::string& printer_name) {
+ cups_dest_t* destinations = NULL;
+ int num_dests = GetDests(&destinations);
+ std::string result;
+ for (int printer_index = 0; printer_index < num_dests; printer_index++) {
+ const cups_dest_t& printer = destinations[printer_index];
+ if (printer_name == printer.name) {
+ const char* info = cupsGetOption(kCUPSPrinterMakeModelOpt, printer.num_options,
+ printer.options);
+ if (info)
+ result = *info;
+ }
+ }
+
+ cupsFreeDests(num_dests, destinations);
+ return result;
}
bool PrintBackendCUPS::IsValidPrinter(const std::string& printer_name) {

Powered by Google App Engine
This is Rietveld 408576698