Home | History | Annotate | Download | only in cloud_print
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_
      6 #define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_
      7 
      8 #include <list>
      9 #include <string>
     10 
     11 #include "base/threading/thread.h"
     12 #include "chrome/service/cloud_print/connector_settings.h"
     13 #include "printing/backend/print_backend.h"
     14 
     15 namespace base {
     16 class DictionaryValue;
     17 }
     18 
     19 namespace gaia {
     20 struct OAuthClientInfo;
     21 }
     22 
     23 namespace cloud_print {
     24 
     25 // CloudPrintProxyFrontend is the interface used by CloudPrintProxyBackend to
     26 // communicate with the entity that created it and, presumably, is interested in
     27 // cloud print proxy related activity.
     28 // NOTE: All methods will be invoked by a CloudPrintProxyBackend on the same
     29 // thread used to create that CloudPrintProxyBackend.
     30 class CloudPrintProxyFrontend {
     31  public:
     32   CloudPrintProxyFrontend() {}
     33 
     34   // We successfully authenticated with the cloud print server. This callback
     35   // allows the frontend to persist the tokens.
     36   virtual void OnAuthenticated(const std::string& robot_oauth_refresh_token,
     37                                const std::string& robot_email,
     38                                const std::string& user_email) = 0;
     39   // We have invalid/expired credentials.
     40   virtual void OnAuthenticationFailed() = 0;
     41   // The print system could not be initialized.
     42   virtual void OnPrintSystemUnavailable() = 0;
     43   // Receive auth token and list of printers.
     44   virtual void OnUnregisterPrinters(
     45       const std::string& auth_token,
     46       const std::list<std::string>& printer_ids) = 0;
     47   // Update and store service settings.
     48   virtual void OnXmppPingUpdated(int ping_timeout) = 0;
     49 
     50  protected:
     51   // Don't delete through SyncFrontend interface.
     52   virtual ~CloudPrintProxyFrontend() {
     53   }
     54  private:
     55   DISALLOW_COPY_AND_ASSIGN(CloudPrintProxyFrontend);
     56 };
     57 
     58 class CloudPrintProxyBackend {
     59  public:
     60   // It is OK for print_system_settings to be NULL. In this case system should
     61   // use system default settings.
     62   CloudPrintProxyBackend(CloudPrintProxyFrontend* frontend,
     63                          const ConnectorSettings& settings,
     64                          const gaia::OAuthClientInfo& oauth_client_info,
     65                          bool enable_job_poll);
     66   ~CloudPrintProxyBackend();
     67 
     68   // Legacy mechanism when we have saved user credentials but no saved robot
     69   // credentials.
     70   bool InitializeWithToken(const std::string& cloud_print_token);
     71   // Called when we have saved robot credentials.
     72   bool InitializeWithRobotToken(const std::string& robot_oauth_refresh_token,
     73                                 const std::string& robot_email);
     74   // Called when an external entity passed in the auth code for the robot.
     75   bool InitializeWithRobotAuthCode(const std::string& robot_oauth_auth_code,
     76                                    const std::string& robot_email);
     77   void Shutdown();
     78   void RegisterPrinters(const printing::PrinterList& printer_list);
     79   void UnregisterPrinters();
     80 
     81  private:
     82   // The real guts of SyncBackendHost, to keep the public client API clean.
     83   class Core;
     84   // A thread we dedicate for use to perform initialization and
     85   // authentication.
     86   base::Thread core_thread_;
     87   // Our core, which communicates with AuthWatcher for GAIA authentication and
     88   // which contains printer registration code.
     89   scoped_refptr<Core> core_;
     90   // A reference to the MessageLoop used to construct |this|, so we know how
     91   // to safely talk back to the SyncFrontend.
     92   base::MessageLoop* const frontend_loop_;
     93   // The frontend which is responsible for displaying UI and updating Prefs
     94   CloudPrintProxyFrontend* frontend_;
     95 
     96   friend class base::RefCountedThreadSafe<CloudPrintProxyBackend::Core>;
     97 
     98   DISALLOW_COPY_AND_ASSIGN(CloudPrintProxyBackend);
     99 };
    100 
    101 }  // namespace cloud_print
    102 
    103 #endif  // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_
    104