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_H_
      6 #define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_H_
      7 
      8 #include <list>
      9 #include <string>
     10 #include <vector>
     11 
     12 #include "base/basictypes.h"
     13 #include "base/memory/scoped_ptr.h"
     14 #include "base/threading/non_thread_safe.h"
     15 #include "chrome/service/cloud_print/cloud_print_proxy_backend.h"
     16 #include "chrome/service/cloud_print/cloud_print_wipeout.h"
     17 
     18 class ServiceProcessPrefs;
     19 
     20 namespace cloud_print {
     21 
     22 struct CloudPrintProxyInfo;
     23 
     24 // CloudPrintProxy is the layer between the service process UI thread
     25 // and the cloud print proxy backend.
     26 class CloudPrintProxy : public CloudPrintProxyFrontend,
     27                         public CloudPrintWipeout::Client,
     28                         public base::NonThreadSafe {
     29  public:
     30   class Client {
     31    public:
     32     virtual ~Client() {}
     33     virtual void OnCloudPrintProxyEnabled(bool persist_state) {}
     34     virtual void OnCloudPrintProxyDisabled(bool persist_state) {}
     35   };
     36   CloudPrintProxy();
     37   virtual ~CloudPrintProxy();
     38 
     39   // Initializes the object. This should be called every time an object of this
     40   // class is constructed.
     41   void Initialize(ServiceProcessPrefs* service_prefs, Client* client);
     42 
     43   // Enables/disables cloud printing for the user
     44   void EnableForUser();
     45   void EnableForUserWithRobot(
     46       const std::string& robot_auth_code,
     47       const std::string& robot_email,
     48       const std::string& user_email,
     49       const base::DictionaryValue& user_settings);
     50   void UnregisterPrintersAndDisableForUser();
     51   void DisableForUser();
     52   // Returns the proxy info.
     53   void GetProxyInfo(CloudPrintProxyInfo* info);
     54   // Return accessible printers.
     55   void GetPrinters(std::vector<std::string>* printers);
     56 
     57   // Launches a browser to see if the proxy policy has been set.
     58   void CheckCloudPrintProxyPolicy();
     59 
     60   const std::string& user_email() const {
     61     return user_email_;
     62   }
     63 
     64   // CloudPrintProxyFrontend implementation. Called on UI thread.
     65   virtual void OnAuthenticated(const std::string& robot_oauth_refresh_token,
     66                                const std::string& robot_email,
     67                                const std::string& user_email) OVERRIDE;
     68   virtual void OnAuthenticationFailed() OVERRIDE;
     69   virtual void OnPrintSystemUnavailable() OVERRIDE;
     70   virtual void OnUnregisterPrinters(
     71       const std::string& auth_token,
     72       const std::list<std::string>& printer_ids) OVERRIDE;
     73   virtual void OnXmppPingUpdated(int ping_timeout) OVERRIDE;
     74 
     75   // CloudPrintWipeout::Client implementation.
     76   virtual void OnUnregisterPrintersComplete() OVERRIDE;
     77 
     78  protected:
     79   void ShutdownBackend();
     80   bool CreateBackend();
     81 
     82   // Our asynchronous backend to communicate with sync components living on
     83   // other threads.
     84   scoped_ptr<CloudPrintProxyBackend> backend_;
     85   // This class does not own this. It is guaranteed to remain valid for the
     86   // lifetime of this class.
     87   ServiceProcessPrefs* service_prefs_;
     88   // This class does not own this. If non-NULL, It is guaranteed to remain
     89   // valid for the lifetime of this class.
     90   Client* client_;
     91   // The email address of the account used to authenticate to the Cloud Print
     92   // service.
     93   std::string user_email_;
     94   // This is set to true when the Cloud Print proxy is enabled and after
     95   // successful authentication with the Cloud Print service.
     96   bool enabled_;
     97   // This is a cleanup class for unregistering printers on proxy disable.
     98   scoped_ptr<CloudPrintWipeout> wipeout_;
     99 
    100   DISALLOW_COPY_AND_ASSIGN(CloudPrintProxy);
    101 };
    102 
    103 }  // namespace cloud_print
    104 
    105 #endif  // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_H_
    106