• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
~Client()32     virtual ~Client() {}
OnCloudPrintProxyEnabled(bool persist_state)33     virtual void OnCloudPrintProxyEnabled(bool persist_state) {}
OnCloudPrintProxyDisabled(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 
user_email()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