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

Side by Side Diff: chrome/service/cloud_print/print_system_cups.cc

Issue 6356007: Added a diagnostic user message when enumerating printers fails. Also tweaked... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fixed build errors Created 9 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/service/cloud_print/print_system.h" 5 #include "chrome/service/cloud_print/print_system.h"
6 6
7 #include <cups/cups.h> 7 #include <cups/cups.h>
8 #include <dlfcn.h> 8 #include <dlfcn.h>
9 #include <errno.h> 9 #include <errno.h>
10 #include <pthread.h> 10 #include <pthread.h>
(...skipping 10 matching lines...) Expand all
21 #include "base/rand_util.h" 21 #include "base/rand_util.h"
22 #include "base/scoped_ptr.h" 22 #include "base/scoped_ptr.h"
23 #include "base/string_number_conversions.h" 23 #include "base/string_number_conversions.h"
24 #include "base/string_util.h" 24 #include "base/string_util.h"
25 #include "base/task.h" 25 #include "base/task.h"
26 #include "base/values.h" 26 #include "base/values.h"
27 #include "base/utf_string_conversions.h" 27 #include "base/utf_string_conversions.h"
28 #include "chrome/service/cloud_print/cloud_print_consts.h" 28 #include "chrome/service/cloud_print/cloud_print_consts.h"
29 #include "chrome/service/cloud_print/cloud_print_helpers.h" 29 #include "chrome/service/cloud_print/cloud_print_helpers.h"
30 #include "googleurl/src/gurl.h" 30 #include "googleurl/src/gurl.h"
31 #include "grit/generated_resources.h"
31 #include "printing/backend/cups_helper.h" 32 #include "printing/backend/cups_helper.h"
32 #include "printing/backend/print_backend.h" 33 #include "printing/backend/print_backend.h"
33 #include "printing/backend/print_backend_consts.h" 34 #include "printing/backend/print_backend_consts.h"
35 #include "ui/base/l10n/l10n_util.h"
34 36
35 namespace { 37 namespace {
36 static const char kCUPSPrinterInfoOpt[] = "printer-info"; 38 static const char kCUPSPrinterInfoOpt[] = "printer-info";
37 static const char kCUPSPrinterStateOpt[] = "printer-state"; 39 static const char kCUPSPrinterStateOpt[] = "printer-state";
38 static const char kCUPSPrintServerURLs[] = "print_server_urls"; 40 static const char kCUPSPrintServerURLs[] = "print_server_urls";
39 static const char kCUPSUpdateTimeoutMs[] = "update_timeout_ms"; 41 static const char kCUPSUpdateTimeoutMs[] = "update_timeout_ms";
40 42
41 // Default port for IPP print servers. 43 // Default port for IPP print servers.
42 static const int kDefaultIPPServerPort = 631; 44 static const int kDefaultIPPServerPort = 631;
43 45
(...skipping 22 matching lines...) Expand all
66 CapsMap caps_cache; 68 CapsMap caps_cache;
67 }; 69 };
68 70
69 class PrintSystemCUPS : public PrintSystem { 71 class PrintSystemCUPS : public PrintSystem {
70 public: 72 public:
71 explicit PrintSystemCUPS(const DictionaryValue* print_system_settings); 73 explicit PrintSystemCUPS(const DictionaryValue* print_system_settings);
72 74
73 // PrintSystem implementation. 75 // PrintSystem implementation.
74 virtual PrintSystemResult Init(); 76 virtual PrintSystemResult Init();
75 77
76 virtual void EnumeratePrinters(printing::PrinterList* printer_list); 78 virtual PrintSystem::PrintSystemResult EnumeratePrinters(
79 printing::PrinterList* printer_list);
77 80
78 virtual void GetPrinterCapsAndDefaults( 81 virtual void GetPrinterCapsAndDefaults(
79 const std::string& printer_name, 82 const std::string& printer_name,
80 PrinterCapsAndDefaultsCallback* callback); 83 PrinterCapsAndDefaultsCallback* callback);
81 84
82 virtual bool IsValidPrinter(const std::string& printer_name); 85 virtual bool IsValidPrinter(const std::string& printer_name);
83 86
84 virtual bool ValidatePrintTicket(const std::string& printer_name, 87 virtual bool ValidatePrintTicket(const std::string& printer_name,
85 const std::string& print_ticket_data); 88 const std::string& print_ticket_data);
86 89
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 const std::string& printer_name, 147 const std::string& printer_name,
145 const printing::PrinterCapsAndDefaults& printer_info); 148 const printing::PrinterCapsAndDefaults& printer_info);
146 149
147 // PrintServerList contains information about all print servers and backends 150 // PrintServerList contains information about all print servers and backends
148 // this proxy is connected to. 151 // this proxy is connected to.
149 typedef std::list<PrintServerInfoCUPS> PrintServerList; 152 typedef std::list<PrintServerInfoCUPS> PrintServerList;
150 PrintServerList print_servers_; 153 PrintServerList print_servers_;
151 154
152 int update_timeout_; 155 int update_timeout_;
153 bool initialized_; 156 bool initialized_;
157 // A comma separated string of print server names for which enumeration of
158 // printers failed. This is used to prepare a diagnostic error message.
159 std::string enum_failed_server_list_;
gene1 2011/01/24 19:46:47 Can we keep it as a bool flag? I understand that i
Scott Byer 2011/01/24 20:02:07 Since it's not being used, how about making it a b
154 }; 160 };
155 161
156 class PrintServerWatcherCUPS 162 class PrintServerWatcherCUPS
157 : public PrintSystem::PrintServerWatcher { 163 : public PrintSystem::PrintServerWatcher {
158 public: 164 public:
159 explicit PrintServerWatcherCUPS(PrintSystemCUPS* print_system) 165 explicit PrintServerWatcherCUPS(PrintSystemCUPS* print_system)
160 : print_system_(print_system), 166 : print_system_(print_system),
161 delegate_(NULL) { 167 delegate_(NULL) {
162 } 168 }
163 ~PrintServerWatcherCUPS() { 169 ~PrintServerWatcherCUPS() {
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 411 }
406 412
407 PrintSystem::PrintSystemResult PrintSystemCUPS::Init() { 413 PrintSystem::PrintSystemResult PrintSystemCUPS::Init() {
408 UpdatePrinters(); 414 UpdatePrinters();
409 initialized_ = true; 415 initialized_ = true;
410 return PrintSystemResult(true, std::string()); 416 return PrintSystemResult(true, std::string());
411 } 417 }
412 418
413 void PrintSystemCUPS::UpdatePrinters() { 419 void PrintSystemCUPS::UpdatePrinters() {
414 PrintServerList::iterator it; 420 PrintServerList::iterator it;
421 enum_failed_server_list_.clear();
415 for (it = print_servers_.begin(); it != print_servers_.end(); ++it) { 422 for (it = print_servers_.begin(); it != print_servers_.end(); ++it) {
416 it->backend->EnumeratePrinters(&it->printers); 423 if (!it->backend->EnumeratePrinters(&it->printers)) {
424 enum_failed_server_list_.append(it->url.spec());
425 enum_failed_server_list_.append(",");
426 }
417 it->caps_cache.clear(); 427 it->caps_cache.clear();
418 printing::PrinterList::iterator printer_it; 428 printing::PrinterList::iterator printer_it;
419 for (printer_it = it->printers.begin(); 429 for (printer_it = it->printers.begin();
420 printer_it != it->printers.end(); ++printer_it) { 430 printer_it != it->printers.end(); ++printer_it) {
421 printer_it->printer_name = MakeFullPrinterName(it->url, 431 printer_it->printer_name = MakeFullPrinterName(it->url,
422 printer_it->printer_name); 432 printer_it->printer_name);
423 } 433 }
424 VLOG(1) << "CUPS: Updated printer list for url: " << it->url 434 VLOG(1) << "CUPS: Updated printer list for url: " << it->url
425 << " Number of printers: " << it->printers.size(); 435 << " Number of printers: " << it->printers.size();
426 } 436 }
427 437
428 // Schedule next update. 438 // Schedule next update.
429 MessageLoop::current()->PostDelayedTask(FROM_HERE, 439 MessageLoop::current()->PostDelayedTask(FROM_HERE,
430 NewRunnableMethod(this, &PrintSystemCUPS::UpdatePrinters), 440 NewRunnableMethod(this, &PrintSystemCUPS::UpdatePrinters),
431 GetUpdateTimeoutMs()); 441 GetUpdateTimeoutMs());
432 } 442 }
433 443
434 void PrintSystemCUPS::EnumeratePrinters(printing::PrinterList* printer_list) { 444 PrintSystem::PrintSystemResult PrintSystemCUPS::EnumeratePrinters(
445 printing::PrinterList* printer_list) {
435 DCHECK(initialized_); 446 DCHECK(initialized_);
436 printer_list->clear(); 447 printer_list->clear();
437 PrintServerList::iterator it; 448 PrintServerList::iterator it;
438 for (it = print_servers_.begin(); it != print_servers_.end(); ++it) { 449 for (it = print_servers_.begin(); it != print_servers_.end(); ++it) {
439 printer_list->insert(printer_list->end(), 450 printer_list->insert(printer_list->end(),
440 it->printers.begin(), it->printers.end()); 451 it->printers.begin(), it->printers.end());
441 } 452 }
442 VLOG(1) << "CUPS: Total " << printer_list->size() << " printers enumerated."; 453 VLOG(1) << "CUPS: Total " << printer_list->size() << " printers enumerated.";
454 if (!enum_failed_server_list_.empty()) {
455 // The enumeration failed on some servers.
456 // TODO(sanjeevr): Maybe some day we want to report the actual server names.
457 std::string message = l10n_util::GetStringUTF8(IDS_CLOUD_PRINT_ENUM_FAILED);
458 return PrintSystemResult(false, message);
459 }
460 return PrintSystemResult(true, std::string());
443 } 461 }
444 462
445 void PrintSystemCUPS::GetPrinterCapsAndDefaults( 463 void PrintSystemCUPS::GetPrinterCapsAndDefaults(
446 const std::string& printer_name, 464 const std::string& printer_name,
447 PrinterCapsAndDefaultsCallback* callback) { 465 PrinterCapsAndDefaultsCallback* callback) {
448 printing::PrinterCapsAndDefaults printer_info; 466 printing::PrinterCapsAndDefaults printer_info;
449 bool succeeded = GetPrinterCapsAndDefaults(printer_name, &printer_info); 467 bool succeeded = GetPrinterCapsAndDefaults(printer_name, &printer_info);
450 MessageLoop::current()->PostTask( 468 MessageLoop::current()->PostTask(
451 FROM_HERE, 469 FROM_HERE,
452 NewRunnableFunction(&PrintSystemCUPS::RunCapsCallback, 470 NewRunnableFunction(&PrintSystemCUPS::RunCapsCallback,
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 void PrintSystemCUPS::RunCapsCallback( 784 void PrintSystemCUPS::RunCapsCallback(
767 PrinterCapsAndDefaultsCallback* callback, 785 PrinterCapsAndDefaultsCallback* callback,
768 bool succeeded, 786 bool succeeded,
769 const std::string& printer_name, 787 const std::string& printer_name,
770 const printing::PrinterCapsAndDefaults& printer_info) { 788 const printing::PrinterCapsAndDefaults& printer_info) {
771 callback->Run(succeeded, printer_name, printer_info); 789 callback->Run(succeeded, printer_name, printer_info);
772 delete callback; 790 delete callback;
773 } 791 }
774 792
775 } // namespace cloud_print 793 } // namespace cloud_print
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698