OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 // the number of requests. | 69 // the number of requests. |
70 typedef std::map<std::string, printing::PrinterCapsAndDefaults> CapsMap; | 70 typedef std::map<std::string, printing::PrinterCapsAndDefaults> CapsMap; |
71 CapsMap caps_cache; | 71 CapsMap caps_cache; |
72 }; | 72 }; |
73 | 73 |
74 class PrintSystemCUPS : public PrintSystem { | 74 class PrintSystemCUPS : public PrintSystem { |
75 public: | 75 public: |
76 explicit PrintSystemCUPS(const base::DictionaryValue* print_system_settings); | 76 explicit PrintSystemCUPS(const base::DictionaryValue* print_system_settings); |
77 | 77 |
78 // PrintSystem implementation. | 78 // PrintSystem implementation. |
79 virtual PrintSystemResult Init() OVERRIDE; | 79 virtual PrintSystemResult Init() override; |
80 virtual PrintSystem::PrintSystemResult EnumeratePrinters( | 80 virtual PrintSystem::PrintSystemResult EnumeratePrinters( |
81 printing::PrinterList* printer_list) OVERRIDE; | 81 printing::PrinterList* printer_list) override; |
82 virtual void GetPrinterCapsAndDefaults( | 82 virtual void GetPrinterCapsAndDefaults( |
83 const std::string& printer_name, | 83 const std::string& printer_name, |
84 const PrinterCapsAndDefaultsCallback& callback) OVERRIDE; | 84 const PrinterCapsAndDefaultsCallback& callback) override; |
85 virtual bool IsValidPrinter(const std::string& printer_name) OVERRIDE; | 85 virtual bool IsValidPrinter(const std::string& printer_name) override; |
86 virtual bool ValidatePrintTicket( | 86 virtual bool ValidatePrintTicket( |
87 const std::string& printer_name, | 87 const std::string& printer_name, |
88 const std::string& print_ticket_data, | 88 const std::string& print_ticket_data, |
89 const std::string& print_ticket_mime_type) OVERRIDE; | 89 const std::string& print_ticket_mime_type) override; |
90 virtual bool GetJobDetails(const std::string& printer_name, | 90 virtual bool GetJobDetails(const std::string& printer_name, |
91 PlatformJobId job_id, | 91 PlatformJobId job_id, |
92 PrintJobDetails *job_details) OVERRIDE; | 92 PrintJobDetails *job_details) override; |
93 virtual PrintSystem::PrintServerWatcher* CreatePrintServerWatcher() OVERRIDE; | 93 virtual PrintSystem::PrintServerWatcher* CreatePrintServerWatcher() override; |
94 virtual PrintSystem::PrinterWatcher* CreatePrinterWatcher( | 94 virtual PrintSystem::PrinterWatcher* CreatePrinterWatcher( |
95 const std::string& printer_name) OVERRIDE; | 95 const std::string& printer_name) override; |
96 virtual PrintSystem::JobSpooler* CreateJobSpooler() OVERRIDE; | 96 virtual PrintSystem::JobSpooler* CreateJobSpooler() override; |
97 virtual bool UseCddAndCjt() OVERRIDE; | 97 virtual bool UseCddAndCjt() override; |
98 virtual std::string GetSupportedMimeTypes() OVERRIDE; | 98 virtual std::string GetSupportedMimeTypes() override; |
99 | 99 |
100 // Helper functions. | 100 // Helper functions. |
101 PlatformJobId SpoolPrintJob(const std::string& print_ticket, | 101 PlatformJobId SpoolPrintJob(const std::string& print_ticket, |
102 const base::FilePath& print_data_file_path, | 102 const base::FilePath& print_data_file_path, |
103 const std::string& print_data_mime_type, | 103 const std::string& print_data_mime_type, |
104 const std::string& printer_name, | 104 const std::string& printer_name, |
105 const std::string& job_title, | 105 const std::string& job_title, |
106 const std::vector<std::string>& tags, | 106 const std::vector<std::string>& tags, |
107 bool* dry_run); | 107 bool* dry_run); |
108 bool GetPrinterInfo(const std::string& printer_name, | 108 bool GetPrinterInfo(const std::string& printer_name, |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 class PrintServerWatcherCUPS | 174 class PrintServerWatcherCUPS |
175 : public PrintSystem::PrintServerWatcher { | 175 : public PrintSystem::PrintServerWatcher { |
176 public: | 176 public: |
177 explicit PrintServerWatcherCUPS(PrintSystemCUPS* print_system) | 177 explicit PrintServerWatcherCUPS(PrintSystemCUPS* print_system) |
178 : print_system_(print_system), | 178 : print_system_(print_system), |
179 delegate_(NULL) { | 179 delegate_(NULL) { |
180 } | 180 } |
181 | 181 |
182 // PrintSystem::PrintServerWatcher implementation. | 182 // PrintSystem::PrintServerWatcher implementation. |
183 virtual bool StartWatching( | 183 virtual bool StartWatching( |
184 PrintSystem::PrintServerWatcher::Delegate* delegate) OVERRIDE { | 184 PrintSystem::PrintServerWatcher::Delegate* delegate) override { |
185 delegate_ = delegate; | 185 delegate_ = delegate; |
186 printers_hash_ = GetPrintersHash(); | 186 printers_hash_ = GetPrintersHash(); |
187 base::MessageLoop::current()->PostDelayedTask( | 187 base::MessageLoop::current()->PostDelayedTask( |
188 FROM_HERE, | 188 FROM_HERE, |
189 base::Bind(&PrintServerWatcherCUPS::CheckForUpdates, this), | 189 base::Bind(&PrintServerWatcherCUPS::CheckForUpdates, this), |
190 print_system_->GetUpdateTimeout()); | 190 print_system_->GetUpdateTimeout()); |
191 return true; | 191 return true; |
192 } | 192 } |
193 | 193 |
194 virtual bool StopWatching() OVERRIDE { | 194 virtual bool StopWatching() override { |
195 delegate_ = NULL; | 195 delegate_ = NULL; |
196 return true; | 196 return true; |
197 } | 197 } |
198 | 198 |
199 void CheckForUpdates() { | 199 void CheckForUpdates() { |
200 if (delegate_ == NULL) | 200 if (delegate_ == NULL) |
201 return; // Orphan call. We have been stopped already. | 201 return; // Orphan call. We have been stopped already. |
202 VLOG(1) << "CP_CUPS: Checking for new printers"; | 202 VLOG(1) << "CP_CUPS: Checking for new printers"; |
203 std::string new_hash = GetPrintersHash(); | 203 std::string new_hash = GetPrintersHash(); |
204 if (printers_hash_ != new_hash) { | 204 if (printers_hash_ != new_hash) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 public: | 247 public: |
248 PrinterWatcherCUPS(PrintSystemCUPS* print_system, | 248 PrinterWatcherCUPS(PrintSystemCUPS* print_system, |
249 const std::string& printer_name) | 249 const std::string& printer_name) |
250 : printer_name_(printer_name), | 250 : printer_name_(printer_name), |
251 delegate_(NULL), | 251 delegate_(NULL), |
252 print_system_(print_system) { | 252 print_system_(print_system) { |
253 } | 253 } |
254 | 254 |
255 // PrintSystem::PrinterWatcher implementation. | 255 // PrintSystem::PrinterWatcher implementation. |
256 virtual bool StartWatching( | 256 virtual bool StartWatching( |
257 PrintSystem::PrinterWatcher::Delegate* delegate) OVERRIDE{ | 257 PrintSystem::PrinterWatcher::Delegate* delegate) override{ |
258 scoped_refptr<printing::PrintBackend> print_backend( | 258 scoped_refptr<printing::PrintBackend> print_backend( |
259 printing::PrintBackend::CreateInstance(NULL)); | 259 printing::PrintBackend::CreateInstance(NULL)); |
260 crash_keys::ScopedPrinterInfo crash_key( | 260 crash_keys::ScopedPrinterInfo crash_key( |
261 print_backend->GetPrinterDriverInfo(printer_name_)); | 261 print_backend->GetPrinterDriverInfo(printer_name_)); |
262 if (delegate_ != NULL) | 262 if (delegate_ != NULL) |
263 StopWatching(); | 263 StopWatching(); |
264 delegate_ = delegate; | 264 delegate_ = delegate; |
265 settings_hash_ = GetSettingsHash(); | 265 settings_hash_ = GetSettingsHash(); |
266 // Schedule next job status update. | 266 // Schedule next job status update. |
267 base::MessageLoop::current()->PostDelayedTask( | 267 base::MessageLoop::current()->PostDelayedTask( |
268 FROM_HERE, | 268 FROM_HERE, |
269 base::Bind(&PrinterWatcherCUPS::JobStatusUpdate, this), | 269 base::Bind(&PrinterWatcherCUPS::JobStatusUpdate, this), |
270 base::TimeDelta::FromSeconds(kJobUpdateTimeoutSeconds)); | 270 base::TimeDelta::FromSeconds(kJobUpdateTimeoutSeconds)); |
271 // Schedule next printer check. | 271 // Schedule next printer check. |
272 // TODO(gene): Randomize time for the next printer update. | 272 // TODO(gene): Randomize time for the next printer update. |
273 base::MessageLoop::current()->PostDelayedTask( | 273 base::MessageLoop::current()->PostDelayedTask( |
274 FROM_HERE, | 274 FROM_HERE, |
275 base::Bind(&PrinterWatcherCUPS::PrinterUpdate, this), | 275 base::Bind(&PrinterWatcherCUPS::PrinterUpdate, this), |
276 print_system_->GetUpdateTimeout()); | 276 print_system_->GetUpdateTimeout()); |
277 return true; | 277 return true; |
278 } | 278 } |
279 | 279 |
280 virtual bool StopWatching() OVERRIDE{ | 280 virtual bool StopWatching() override{ |
281 delegate_ = NULL; | 281 delegate_ = NULL; |
282 return true; | 282 return true; |
283 } | 283 } |
284 | 284 |
285 virtual bool GetCurrentPrinterInfo( | 285 virtual bool GetCurrentPrinterInfo( |
286 printing::PrinterBasicInfo* printer_info) OVERRIDE { | 286 printing::PrinterBasicInfo* printer_info) override { |
287 DCHECK(printer_info); | 287 DCHECK(printer_info); |
288 return print_system_->GetPrinterInfo(printer_name_, printer_info); | 288 return print_system_->GetPrinterInfo(printer_name_, printer_info); |
289 } | 289 } |
290 | 290 |
291 void JobStatusUpdate() { | 291 void JobStatusUpdate() { |
292 if (delegate_ == NULL) | 292 if (delegate_ == NULL) |
293 return; // Orphan call. We have been stopped already. | 293 return; // Orphan call. We have been stopped already. |
294 // For CUPS proxy, we are going to fire OnJobChanged notification | 294 // For CUPS proxy, we are going to fire OnJobChanged notification |
295 // periodically. Higher level will check if there are any outstanding | 295 // periodically. Higher level will check if there are any outstanding |
296 // jobs for this printer and check their status. If printer has no | 296 // jobs for this printer and check their status. If printer has no |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 } | 373 } |
374 | 374 |
375 // PrintSystem::JobSpooler implementation. | 375 // PrintSystem::JobSpooler implementation. |
376 virtual bool Spool(const std::string& print_ticket, | 376 virtual bool Spool(const std::string& print_ticket, |
377 const std::string& print_ticket_mime_type, | 377 const std::string& print_ticket_mime_type, |
378 const base::FilePath& print_data_file_path, | 378 const base::FilePath& print_data_file_path, |
379 const std::string& print_data_mime_type, | 379 const std::string& print_data_mime_type, |
380 const std::string& printer_name, | 380 const std::string& printer_name, |
381 const std::string& job_title, | 381 const std::string& job_title, |
382 const std::vector<std::string>& tags, | 382 const std::vector<std::string>& tags, |
383 JobSpooler::Delegate* delegate) OVERRIDE{ | 383 JobSpooler::Delegate* delegate) override{ |
384 DCHECK(delegate); | 384 DCHECK(delegate); |
385 bool dry_run = false; | 385 bool dry_run = false; |
386 int job_id = print_system_->SpoolPrintJob( | 386 int job_id = print_system_->SpoolPrintJob( |
387 print_ticket, print_data_file_path, print_data_mime_type, | 387 print_ticket, print_data_file_path, print_data_mime_type, |
388 printer_name, job_title, tags, &dry_run); | 388 printer_name, job_title, tags, &dry_run); |
389 base::MessageLoop::current()->PostTask( | 389 base::MessageLoop::current()->PostTask( |
390 FROM_HERE, | 390 FROM_HERE, |
391 base::Bind(&JobSpoolerCUPS::NotifyDelegate, delegate, job_id, dry_run)); | 391 base::Bind(&JobSpoolerCUPS::NotifyDelegate, delegate, job_id, dry_run)); |
392 return true; | 392 return true; |
393 } | 393 } |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 | 872 |
873 void PrintSystemCUPS::RunCapsCallback( | 873 void PrintSystemCUPS::RunCapsCallback( |
874 const PrinterCapsAndDefaultsCallback& callback, | 874 const PrinterCapsAndDefaultsCallback& callback, |
875 bool succeeded, | 875 bool succeeded, |
876 const std::string& printer_name, | 876 const std::string& printer_name, |
877 const printing::PrinterCapsAndDefaults& printer_info) { | 877 const printing::PrinterCapsAndDefaults& printer_info) { |
878 callback.Run(succeeded, printer_name, printer_info); | 878 callback.Run(succeeded, printer_name, printer_info); |
879 } | 879 } |
880 | 880 |
881 } // namespace cloud_print | 881 } // namespace cloud_print |
OLD | NEW |