diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-16 08:54:57 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-16 08:54:57 +0000 |
commit | 4f9dd83ebff74183730af6c0f1b4b8f67703b06e (patch) | |
tree | 7b1df04c06c6970d4efbeef20d6f877f27c454de /printing/backend | |
parent | 4b6ebd93159d5b4f1ea9151ab59fefaf7db725cb (diff) | |
download | chromium_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.h | 5 | ||||
-rw-r--r-- | printing/backend/print_backend_chromeos.cc | 7 | ||||
-rw-r--r-- | printing/backend/print_backend_cups.cc | 27 | ||||
-rw-r--r-- | printing/backend/print_backend_win.cc | 15 |
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) { |