1 // Copyright 2014 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_CHROMEOS_POLICY_BROWSER_POLICY_CONNECTOR_CHROMEOS_H_ 6 #define CHROME_BROWSER_CHROMEOS_POLICY_BROWSER_POLICY_CONNECTOR_CHROMEOS_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/weak_ptr.h" 14 #include "chrome/browser/policy/chrome_browser_policy_connector.h" 15 #include "components/policy/core/common/cloud/cloud_policy_constants.h" 16 17 class PrefRegistrySimple; 18 class PrefService; 19 20 namespace net { 21 class URLRequestContextGetter; 22 } 23 24 namespace policy { 25 26 class AppPackUpdater; 27 class DeviceCloudPolicyManagerChromeOS; 28 class DeviceLocalAccountPolicyService; 29 class DeviceManagementService; 30 class EnterpriseInstallAttributes; 31 class NetworkConfigurationUpdater; 32 class ProxyPolicyProvider; 33 class ServerBackedStateKeysBroker; 34 35 // Extends ChromeBrowserPolicyConnector with the setup specific to ChromeOS. 36 class BrowserPolicyConnectorChromeOS : public ChromeBrowserPolicyConnector { 37 public: 38 BrowserPolicyConnectorChromeOS(); 39 40 virtual ~BrowserPolicyConnectorChromeOS(); 41 42 virtual void Init( 43 PrefService* local_state, 44 scoped_refptr<net::URLRequestContextGetter> request_context) OVERRIDE; 45 46 virtual void Shutdown() OVERRIDE; 47 48 // Returns true if this device is managed by an enterprise (as opposed to 49 // a local owner). 50 bool IsEnterpriseManaged(); 51 52 // Returns the enterprise domain if device is managed. 53 std::string GetEnterpriseDomain(); 54 55 // Returns the device mode. For ChromeOS this function will return the mode 56 // stored in the lockbox, or DEVICE_MODE_CONSUMER if the lockbox has been 57 // locked empty, or DEVICE_MODE_UNKNOWN if the device has not been owned yet. 58 // For other OSes the function will always return DEVICE_MODE_CONSUMER. 59 DeviceMode GetDeviceMode(); 60 61 // Works out the user affiliation by checking the given |user_name| against 62 // the installation attributes. 63 UserAffiliation GetUserAffiliation(const std::string& user_name); 64 65 AppPackUpdater* GetAppPackUpdater(); 66 67 DeviceCloudPolicyManagerChromeOS* GetDeviceCloudPolicyManager() { 68 return device_cloud_policy_manager_; 69 } 70 71 DeviceLocalAccountPolicyService* GetDeviceLocalAccountPolicyService() { 72 return device_local_account_policy_service_.get(); 73 } 74 75 EnterpriseInstallAttributes* GetInstallAttributes() { 76 return install_attributes_.get(); 77 } 78 79 ServerBackedStateKeysBroker* GetStateKeysBroker() { 80 return state_keys_broker_.get(); 81 } 82 83 // The browser-global PolicyService is created before Profiles are ready, to 84 // provide managed values for the local state PrefService. It includes a 85 // policy provider that forwards policies from a delegate policy provider. 86 // This call can be used to set the user policy provider as that delegate 87 // once the Profile is ready, so that user policies can also affect local 88 // state preferences. 89 // Only one user policy provider can be set as a delegate at a time, and any 90 // previously set delegate is removed. Passing NULL removes the current 91 // delegate, if there is one. 92 void SetUserPolicyDelegate(ConfigurationPolicyProvider* user_policy_provider); 93 94 // Returns the device management service for consumer management. 95 DeviceManagementService* consumer_device_management_service() const { 96 return consumer_device_management_service_.get(); 97 } 98 99 // Sets the install attributes for testing. Must be called before the browser 100 // is created. RemoveInstallAttributesForTesting must be called after the test 101 // to free the attributes. 102 static void SetInstallAttributesForTesting( 103 EnterpriseInstallAttributes* attributes); 104 static void RemoveInstallAttributesForTesting(); 105 106 // Registers device refresh rate pref. 107 static void RegisterPrefs(PrefRegistrySimple* registry); 108 109 private: 110 // Set the timezone as soon as the policies are available. 111 void SetTimezoneIfPolicyAvailable(); 112 113 // Components of the device cloud policy implementation. 114 scoped_ptr<ServerBackedStateKeysBroker> state_keys_broker_; 115 scoped_ptr<EnterpriseInstallAttributes> install_attributes_; 116 DeviceCloudPolicyManagerChromeOS* device_cloud_policy_manager_; 117 scoped_ptr<DeviceLocalAccountPolicyService> 118 device_local_account_policy_service_; 119 120 // This policy provider is used on Chrome OS to feed user policy into the 121 // global PolicyService instance. This works by installing the cloud policy 122 // provider of the primary profile as the delegate of the ProxyPolicyProvider, 123 // after login. 124 // The provider is owned by the base class; this field is just a typed weak 125 // pointer to get to the ProxyPolicyProvider at SetUserPolicyDelegate(). 126 ProxyPolicyProvider* global_user_cloud_policy_provider_; 127 128 scoped_ptr<AppPackUpdater> app_pack_updater_; 129 scoped_ptr<NetworkConfigurationUpdater> network_configuration_updater_; 130 131 scoped_ptr<DeviceManagementService> consumer_device_management_service_; 132 133 base::WeakPtrFactory<BrowserPolicyConnectorChromeOS> weak_ptr_factory_; 134 135 DISALLOW_COPY_AND_ASSIGN(BrowserPolicyConnectorChromeOS); 136 }; 137 138 } // namespace policy 139 140 #endif // CHROME_BROWSER_CHROMEOS_POLICY_BROWSER_POLICY_CONNECTOR_CHROMEOS_H_ 141