| Index: chrome/service/cloud_print/print_system.h
|
| ===================================================================
|
| --- chrome/service/cloud_print/print_system.h (revision 48641)
|
| +++ chrome/service/cloud_print/print_system.h (working copy)
|
| @@ -2,14 +2,15 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef CHROME_SERVICE_CLOUD_PRINT_PRINTER_INFO_H_
|
| -#define CHROME_SERVICE_CLOUD_PRINT_PRINTER_INFO_H_
|
| +#ifndef CHROME_SERVICE_CLOUD_PRINT_PRINT_SYSTEM_H_
|
| +#define CHROME_SERVICE_CLOUD_PRINT_PRINT_SYSTEM_H_
|
|
|
| #include <map>
|
| #include <string>
|
| #include <vector>
|
|
|
| #include "base/file_path.h"
|
| +#include "base/ref_counted.h"
|
|
|
| // This is the interface for platform-specific code for cloud print
|
| namespace cloud_print {
|
| @@ -70,58 +71,98 @@
|
| }
|
| };
|
|
|
| -// Enumerates the list of installed local and network printers.
|
| -void EnumeratePrinters(PrinterList* printer_list);
|
| -// Gets the capabilities and defaults for a specific printer.
|
| -bool GetPrinterCapsAndDefaults(const std::string& printer_name,
|
| - PrinterCapsAndDefaults* printer_info);
|
| -bool ValidatePrintTicket(const std::string& printer_name,
|
| - const std::string& print_ticket_data);
|
| -std::string GenerateProxyId();
|
| -bool SpoolPrintJob(const std::string& print_ticket,
|
| - const FilePath& print_data_file_path,
|
| - const std::string& print_data_mime_type,
|
| - const std::string& printer_name,
|
| - const std::string& job_title,
|
| - PlatformJobId* job_id_ret);
|
| +// PrintSystem class will provide interface for different printing systems
|
| +// (Windows, CUPS) to implement. User will call CreateInstance() to
|
| +// obtain available printing system.
|
| +// Please note, that PrintSystem is not platform specific, but rather
|
| +// print system specific. For example, CUPS is available on both Linux and Mac,
|
| +// but not avaialble on ChromeOS, etc. This design allows us to add more
|
| +// functionality on some platforms, while reusing core (CUPS) functions.
|
| +class PrintSystem : public base::RefCountedThreadSafe<PrintSystem> {
|
| + public:
|
| + virtual ~PrintSystem() {}
|
|
|
| -bool GetJobDetails(const std::string& printer_name,
|
| - PlatformJobId job_id,
|
| - PrintJobDetails *job_details);
|
| -bool IsValidPrinter(const std::string& printer_name);
|
| + // Enumerates the list of installed local and network printers.
|
| + virtual void EnumeratePrinters(PrinterList* printer_list) = 0;
|
|
|
| -// A class that watches changes to a printer or a print server.
|
| -// The set of notifications are very coarse-grained (even though the Windows
|
| -// API allows for listening to fine-grained details about a printer, this class
|
| -// does not support that level of fine-grained control.
|
| -class PrinterChangeNotifier {
|
| - public:
|
| - class Delegate {
|
| - public:
|
| - virtual void OnPrinterAdded() = 0;
|
| - virtual void OnPrinterDeleted() = 0;
|
| - virtual void OnPrinterChanged() = 0;
|
| - virtual void OnJobChanged() = 0;
|
| + // Gets the capabilities and defaults for a specific printer.
|
| + virtual bool GetPrinterCapsAndDefaults(const std::string& printer_name,
|
| + PrinterCapsAndDefaults* printer_info) = 0;
|
| +
|
| + // Returns true if ticket is valid.
|
| + virtual bool ValidatePrintTicket(const std::string& printer_name,
|
| + const std::string& print_ticket_data) = 0;
|
| +
|
| + // Send job to the printer.
|
| + virtual bool SpoolPrintJob(const std::string& print_ticket,
|
| + const FilePath& print_data_file_path,
|
| + const std::string& print_data_mime_type,
|
| + const std::string& printer_name,
|
| + const std::string& job_title,
|
| + PlatformJobId* job_id_ret) = 0;
|
| +
|
| + // Get details for already spooled job.
|
| + virtual bool GetJobDetails(const std::string& printer_name,
|
| + PlatformJobId job_id,
|
| + PrintJobDetails *job_details) = 0;
|
| +
|
| + // Returns true if printer_name points to a valid printer.
|
| + virtual bool IsValidPrinter(const std::string& printer_name) = 0;
|
| +
|
| + class PrintServerWatcher
|
| + : public base::RefCountedThreadSafe<PrintServerWatcher> {
|
| + public:
|
| + // Callback interface for new printer notifications.
|
| + class Delegate {
|
| + public:
|
| + virtual void OnPrinterAdded() = 0;
|
| + // TODO(gene): Do we need OnPrinterDeleted notification here?
|
| + };
|
| +
|
| + virtual ~PrintServerWatcher() {}
|
| + virtual bool StartWatching(PrintServerWatcher::Delegate* delegate) = 0;
|
| + virtual bool StopWatching() = 0;
|
| };
|
| - PrinterChangeNotifier();
|
| - ~PrinterChangeNotifier();
|
| - bool StartWatching(const std::string& printer_name, Delegate* delegate);
|
| - bool StopWatching();
|
| - bool GetCurrentPrinterInfo(PrinterBasicInfo* printer_info);
|
| - private:
|
| - // Internal state maintained by the PrinterChangeNotifier class.
|
| - class NotificationState;
|
| - NotificationState* state_;
|
| - DISALLOW_COPY_AND_ASSIGN(PrinterChangeNotifier);
|
| +
|
| + class PrinterWatcher : public base::RefCountedThreadSafe<PrinterWatcher> {
|
| + public:
|
| + // Callback interface for printer updates notifications.
|
| + class Delegate {
|
| + public:
|
| + virtual void OnPrinterDeleted() = 0;
|
| + virtual void OnPrinterChanged() = 0;
|
| + virtual void OnJobChanged() = 0;
|
| + };
|
| +
|
| + virtual ~PrinterWatcher() {}
|
| + virtual bool StartWatching(PrinterWatcher::Delegate* delegate) = 0;
|
| + virtual bool StopWatching() = 0;
|
| + virtual bool GetCurrentPrinterInfo(PrinterBasicInfo* printer_info) = 0;
|
| + };
|
| +
|
| + // Factory methods to create corresponding watcher. Callee is responsible
|
| + // for deleting objects. Return NULL if failed.
|
| + virtual PrintServerWatcher* CreatePrintServerWatcher() = 0;
|
| + virtual PrinterWatcher* CreatePrinterWatcher(
|
| + const std::string& printer_name) = 0;
|
| +
|
| + // Generate unique for proxy.
|
| + static std::string GenerateProxyId();
|
| +
|
| + // Call this function to obtain current printing system. Return NULL if no
|
| + // print system available. Delete returned PrintSystem pointer using delete.
|
| + static scoped_refptr<PrintSystem> CreateInstance();
|
| };
|
|
|
| +
|
| // This typedef is to workaround the issue with certain versions of
|
| // Visual Studio where it gets confused between multiple Delegate
|
| // classes and gives a C2500 error. (I saw this error on the try bots -
|
| // the workaround was not needed for my machine).
|
| -typedef PrinterChangeNotifier::Delegate PrinterChangeNotifierDelegate;
|
| +typedef PrintSystem::PrintServerWatcher::Delegate PrintServerWatcherDelegate;
|
| +typedef PrintSystem::PrinterWatcher::Delegate PrinterWatcherDelegate;
|
|
|
| } // namespace cloud_print
|
|
|
| -#endif // CHROME_SERVICE_CLOUD_PRINT_PRINTER_INFO_H_
|
| +#endif // CHROME_SERVICE_CLOUD_PRINT_PRINT_SYSTEM_H_
|
|
|
|
|