Index: chrome/service/cloud_print/print_system_cups.cc |
=================================================================== |
--- chrome/service/cloud_print/print_system_cups.cc (revision 72042) |
+++ chrome/service/cloud_print/print_system_cups.cc (working copy) |
@@ -13,6 +13,7 @@ |
#include <list> |
#include <map> |
+#include "app/l10n_util.h" |
#include "base/file_path.h" |
#include "base/json/json_reader.h" |
#include "base/lock.h" |
@@ -29,6 +30,7 @@ |
#include "chrome/service/cloud_print/cloud_print_consts.h" |
#include "chrome/service/cloud_print/cloud_print_helpers.h" |
#include "googleurl/src/gurl.h" |
+#include "grit/generated_resources.h" |
#include "printing/backend/cups_helper.h" |
#include "printing/backend/print_backend.h" |
#include "printing/backend/print_backend_consts.h" |
@@ -74,7 +76,8 @@ |
// PrintSystem implementation. |
virtual PrintSystemResult Init(); |
- virtual void EnumeratePrinters(printing::PrinterList* printer_list); |
+ virtual PrintSystem::PrintSystemResult EnumeratePrinters( |
+ printing::PrinterList* printer_list); |
virtual void GetPrinterCapsAndDefaults( |
const std::string& printer_name, |
@@ -152,6 +155,9 @@ |
int update_timeout_; |
bool initialized_; |
+ // A comma separated string of print server names for which enumeration of |
+ // printers failed. This is used to prepare a diagnostic error message. |
+ std::string enum_failed_server_list_; |
}; |
class PrintServerWatcherCUPS |
@@ -413,8 +419,12 @@ |
void PrintSystemCUPS::UpdatePrinters() { |
PrintServerList::iterator it; |
+ enum_failed_server_list_.clear(); |
for (it = print_servers_.begin(); it != print_servers_.end(); ++it) { |
- it->backend->EnumeratePrinters(&it->printers); |
+ if (!it->backend->EnumeratePrinters(&it->printers)) { |
+ enum_failed_server_list_.append(it->url.spec()); |
+ enum_failed_server_list_.append(","); |
+ } |
it->caps_cache.clear(); |
printing::PrinterList::iterator printer_it; |
for (printer_it = it->printers.begin(); |
@@ -432,7 +442,8 @@ |
GetUpdateTimeoutMs()); |
} |
-void PrintSystemCUPS::EnumeratePrinters(printing::PrinterList* printer_list) { |
+PrintSystem::PrintSystemResult PrintSystemCUPS::EnumeratePrinters( |
+ printing::PrinterList* printer_list) { |
DCHECK(initialized_); |
printer_list->clear(); |
PrintServerList::iterator it; |
@@ -441,6 +452,13 @@ |
it->printers.begin(), it->printers.end()); |
} |
VLOG(1) << "CUPS: Total " << printer_list->size() << " printers enumerated."; |
+ if (!enum_failed_server_list_.empty()) { |
+ // The enumeration failed on some servers. |
+ // TODO(sanjeevr): Maybe some day we want to report the actual server names. |
+ std::string message = l10n_util::GetStringUTF8(IDS_CLOUD_PRINT_ENUM_FAILED); |
+ return PrintSystemResult(false, message); |
+ } |
+ return PrintSystemResult(true, std::string()); |
} |
void PrintSystemCUPS::GetPrinterCapsAndDefaults( |