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_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_ 6 #define CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/callback_forward.h" 13 #include "base/memory/weak_ptr.h" 14 #include "base/observer_list.h" 15 #include "base/prefs/pref_change_registrar.h" 16 #include "components/keyed_service/core/keyed_service.h" 17 18 class Profile; 19 class ServiceProcessControl; 20 21 namespace base { 22 class DictionaryValue; 23 } // namespace base 24 25 namespace cloud_print { 26 struct CloudPrintProxyInfo; 27 } // namespace cloud_print 28 29 // Layer between the browser user interface and the cloud print proxy code 30 // running in the service process. 31 class CloudPrintProxyService : public KeyedService { 32 public: 33 explicit CloudPrintProxyService(Profile* profile); 34 virtual ~CloudPrintProxyService(); 35 36 typedef base::Callback<void(const std::vector<std::string>&)> 37 PrintersCallback; 38 39 // Initializes the object. This should be called every time an object of this 40 // class is constructed. 41 void Initialize(); 42 43 // Returns list of printer names available for registration. 44 void GetPrinters(const PrintersCallback& callback); 45 46 // Enables/disables cloud printing for the user 47 virtual void EnableForUserWithRobot( 48 const std::string& robot_auth_code, 49 const std::string& robot_email, 50 const std::string& user_email, 51 const base::DictionaryValue& user_settings); 52 virtual void DisableForUser(); 53 54 // Query the service process for the status of the cloud print proxy and 55 // update the browser prefs. 56 void RefreshStatusFromService(); 57 58 // Disable the service if the policy to do so is set, and once the 59 // disablement is verified, quit the browser. Returns true if the policy is 60 // not set or the connector was not enabled. 61 bool EnforceCloudPrintConnectorPolicyAndQuit(); 62 63 std::string proxy_id() const { return proxy_id_; } 64 65 private: 66 // NotificationDelegate implementation for the token expired notification. 67 class TokenExpiredNotificationDelegate; 68 friend class TokenExpiredNotificationDelegate; 69 70 // Methods that send an IPC to the service. 71 void GetCloudPrintProxyPrinters(const PrintersCallback& callback); 72 void RefreshCloudPrintProxyStatus(); 73 void EnableCloudPrintProxyWithRobot( 74 const std::string& robot_auth_code, 75 const std::string& robot_email, 76 const std::string& user_email, 77 const base::DictionaryValue* user_preferences); 78 void DisableCloudPrintProxy(); 79 80 // Callback that gets the cloud print proxy info. 81 void ProxyInfoCallback( 82 const cloud_print::CloudPrintProxyInfo& proxy_info); 83 84 // Invoke a task that gets run after the service process successfully 85 // launches. The task typically involves sending an IPC to the service 86 // process. 87 bool InvokeServiceTask(const base::Closure& task); 88 89 // Checks the policy. Returns true if nothing needs to be done (the policy is 90 // not set or the connector is not enabled). 91 bool ApplyCloudPrintConnectorPolicy(); 92 93 Profile* profile_; 94 std::string proxy_id_; 95 96 // Virtual for testing. 97 virtual ServiceProcessControl* GetServiceProcessControl(); 98 99 base::WeakPtrFactory<CloudPrintProxyService> weak_factory_; 100 101 // For watching for connector policy changes. 102 PrefChangeRegistrar pref_change_registrar_; 103 104 // If set, continue trying to disable the connector, and quit the process 105 // once successful. 106 bool enforcing_connector_policy_; 107 108 DISALLOW_COPY_AND_ASSIGN(CloudPrintProxyService); 109 }; 110 111 #endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_ 112