| 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(
|
|
|