summaryrefslogtreecommitdiffstats
path: root/printing/backend
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-16 08:54:57 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-16 08:54:57 +0000
commit4f9dd83ebff74183730af6c0f1b4b8f67703b06e (patch)
tree7b1df04c06c6970d4efbeef20d6f877f27c454de /printing/backend
parent4b6ebd93159d5b4f1ea9151ab59fefaf7db725cb (diff)
downloadchromium_src-4f9dd83ebff74183730af6c0f1b4b8f67703b06e.zip
chromium_src-4f9dd83ebff74183730af6c0f1b4b8f67703b06e.tar.gz
chromium_src-4f9dd83ebff74183730af6c0f1b4b8f67703b06e.tar.bz2
ScopedPrinterInfoSetter sets printer related information to be available for breakpad. This CL inserts ScopedPrinterInfoSetter in places where Cloud print accesses printers and crash is possible.
BUG=108194 TEST=none Review URL: http://codereview.chromium.org/9693064 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@127131 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing/backend')
-rw-r--r--printing/backend/print_backend.h5
-rw-r--r--printing/backend/print_backend_chromeos.cc7
-rw-r--r--printing/backend/print_backend_cups.cc27
-rw-r--r--printing/backend/print_backend_win.cc15
4 files changed, 33 insertions, 21 deletions
diff --git a/printing/backend/print_backend.h b/printing/backend/print_backend.h
index 59b16aa..8e28b2d 100644
--- a/printing/backend/print_backend.h
+++ b/printing/backend/print_backend.h
@@ -67,9 +67,8 @@ class PRINTING_EXPORT PrintBackend
PrinterCapsAndDefaults* printer_info) = 0;
// Gets the information about driver for a specific printer.
- virtual bool GetPrinterDriverInfo(
- const std::string& printer_name,
- std::string* driver_info) = 0;
+ virtual std::string GetPrinterDriverInfo(
+ const std::string& printer_name) = 0;
// Returns true if printer_name points to a valid printer.
virtual bool IsValidPrinter(const std::string& printer_name) = 0;
diff --git a/printing/backend/print_backend_chromeos.cc b/printing/backend/print_backend_chromeos.cc
index b06683e..a70516c 100644
--- a/printing/backend/print_backend_chromeos.cc
+++ b/printing/backend/print_backend_chromeos.cc
@@ -22,8 +22,7 @@ class PrintBackendChromeOS : public PrintBackend {
virtual bool GetPrinterCapsAndDefaults(const std::string& printer_name,
PrinterCapsAndDefaults* printer_info);
- virtual bool GetPrinterDriverInfo(const std::string& printer_name,
- std::string* driver_info);
+ virtual std::string GetPrinterDriverInfo(const std::string& printer_name);
virtual bool IsValidPrinter(const std::string& printer_name);
@@ -45,8 +44,8 @@ bool PrintBackendChromeOS::GetPrinterCapsAndDefaults(
return false;
}
-bool PrintBackendChromeOS::GetPrinterDriverInfo(const std::string& printer_name,
- std::string* driver_info) {
+std::string PrintBackendChromeOS::GetPrinterDriverInfo(
+ const std::string& printer_name) {
NOTREACHED();
return false;
}
diff --git a/printing/backend/print_backend_cups.cc b/printing/backend/print_backend_cups.cc
index 9a17ddf..c14af03 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,24 @@ 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) {
diff --git a/printing/backend/print_backend_win.cc b/printing/backend/print_backend_win.cc
index 9e3c98e..30da70e 100644
--- a/printing/backend/print_backend_win.cc
+++ b/printing/backend/print_backend_win.cc
@@ -50,8 +50,7 @@ class PrintBackendWin : public PrintBackend {
virtual bool GetPrinterCapsAndDefaults(const std::string& printer_name,
PrinterCapsAndDefaults* printer_info);
- virtual bool GetPrinterDriverInfo(const std::string& printer_name,
- std::string* driver_info);
+ virtual std::string GetPrinterDriverInfo(const std::string& printer_name);
virtual bool IsValidPrinter(const std::string& printer_name);
};
@@ -178,9 +177,9 @@ bool PrintBackendWin::GetPrinterCapsAndDefaults(
}
// Gets the information about driver for a specific printer.
-bool PrintBackendWin::GetPrinterDriverInfo(const std::string& printer_name,
- std::string* driver_info) {
- DCHECK(driver_info);
+std::string PrintBackendWin::GetPrinterDriverInfo(
+ const std::string& printer_name) {
+ std::string driver_info;
ScopedPrinterHandle printer_handle;
if (!::OpenPrinter(const_cast<LPTSTR>(UTF8ToWide(printer_name).c_str()),
printer_handle.Receive(), NULL)) {
@@ -217,11 +216,11 @@ bool PrintBackendWin::GetPrinterDriverInfo(const std::string& printer_name,
for (size_t i = 0; i < arraysize(info); ++i) {
std::replace(info[i].begin(), info[i].end(), ';', ',');
- driver_info->append(info[i]);
- driver_info->append(";");
+ driver_info.append(info[i]);
+ driver_info.append(";");
}
- return true;
+ return driver_info;
}
bool PrintBackendWin::IsValidPrinter(const std::string& printer_name) {