| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_CHROMEOS_POLICY_ENTERPRISE_INSTALL_ATTRIBUTES_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_POLICY_ENTERPRISE_INSTALL_ATTRIBUTES_H_ |
| 6 #define CHROME_BROWSER_CHROMEOS_POLICY_ENTERPRISE_INSTALL_ATTRIBUTES_H_ | 6 #define CHROME_BROWSER_CHROMEOS_POLICY_ENTERPRISE_INSTALL_ATTRIBUTES_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 typedef base::Callback<void(LockResult lock_result)> LockResultCallback; | 45 typedef base::Callback<void(LockResult lock_result)> LockResultCallback; |
| 46 | 46 |
| 47 // Return serialized InstallAttributes of an enterprise-owned configuration. | 47 // Return serialized InstallAttributes of an enterprise-owned configuration. |
| 48 static std::string GetEnterpriseOwnedInstallAttributesBlobForTesting( | 48 static std::string GetEnterpriseOwnedInstallAttributesBlobForTesting( |
| 49 const std::string& user_name); | 49 const std::string& user_name); |
| 50 | 50 |
| 51 explicit EnterpriseInstallAttributes( | 51 explicit EnterpriseInstallAttributes( |
| 52 chromeos::CryptohomeClient* cryptohome_client); | 52 chromeos::CryptohomeClient* cryptohome_client); |
| 53 ~EnterpriseInstallAttributes(); | 53 ~EnterpriseInstallAttributes(); |
| 54 | 54 |
| 55 // Reads data from the cache file which is created early during the boot | 55 // Tries to read install attributes from the cache file which is created early |
| 56 // process. The cache file is used to work around slow cryptohome startup, | 56 // during the boot process. The cache file is used to work around slow |
| 57 // which takes a while to register its DBus interface. See | 57 // cryptohome startup, which takes a while to register its DBus interface. |
| 58 // http://crosbug.com/37367 for background on this. | 58 // (See http://crosbug.com/37367 for background on this.) |
| 59 void ReadCacheFile(const base::FilePath& cache_file); | 59 void Init(const base::FilePath& cache_file); |
| 60 | 60 |
| 61 // Makes sure the local caches for enterprise-related install attributes are | 61 // Makes sure the local caches for enterprise-related install attributes are |
| 62 // up-to-date with what cryptohome has. This method checks the readiness of | 62 // up-to-date with what cryptohome has. This method checks the readiness of |
| 63 // attributes and read them if ready. Actual read will be performed in | 63 // attributes and read them if ready. Actual read will be performed in |
| 64 // ReadAttributesIfReady(). | 64 // ReadAttributesIfReady(). |
| 65 void ReadImmutableAttributes(const base::Closure& callback); | 65 void ReadImmutableAttributes(const base::Closure& callback); |
| 66 | 66 |
| 67 // Locks the device to be an enterprise device registered by the given user. | 67 // Locks the device to be an enterprise device registered by the given user. |
| 68 // This can also be called after the lock has already been taken, in which | 68 // This can also be called after the lock has already been taken, in which |
| 69 // case it checks that the passed user agrees with the locked attribute. | 69 // case it checks that the passed user agrees with the locked attribute. |
| 70 // |callback| must not be null and is called with the result. | 70 // |callback| must not be null and is called with the result. Must not be |
| 71 // called while a previous LockDevice() invocation is still pending. |
| 71 void LockDevice(const std::string& user, | 72 void LockDevice(const std::string& user, |
| 72 DeviceMode device_mode, | 73 DeviceMode device_mode, |
| 73 const std::string& device_id, | 74 const std::string& device_id, |
| 74 const LockResultCallback& callback); | 75 const LockResultCallback& callback); |
| 75 | 76 |
| 76 // Checks whether this is an enterprise device. | 77 // Checks whether this is an enterprise device. |
| 77 bool IsEnterpriseDevice(); | 78 bool IsEnterpriseDevice(); |
| 78 | 79 |
| 79 // Checks whether this is a consumer kiosk enabled device. | 80 // Checks whether this is a consumer kiosk enabled device. |
| 80 bool IsConsumerKioskDeviceWithAutoLaunch(); | 81 bool IsConsumerKioskDeviceWithAutoLaunch(); |
| 81 | 82 |
| 82 // Gets the domain this device belongs to or an empty string if the device is | 83 // Gets the domain this device belongs to or an empty string if the device is |
| 83 // not an enterprise device. | 84 // not an enterprise device. |
| 84 std::string GetDomain(); | 85 std::string GetDomain(); |
| 85 | 86 |
| 86 // Gets the user that registered the device. Returns an empty string if the | 87 // Gets the user that registered the device. Returns an empty string if the |
| 87 // device is not an enterprise device. | 88 // device is not an enterprise device. |
| 88 std::string GetRegistrationUser(); | 89 std::string GetRegistrationUser(); |
| 89 | 90 |
| 90 // Gets the device id that was generated when the device was registered. | 91 // Gets the device id that was generated when the device was registered. |
| 91 // Returns an empty string if the device is not an enterprise device or the | 92 // Returns an empty string if the device is not an enterprise device or the |
| 92 // device id was not stored in the lockbox (prior to R19). | 93 // device id was not stored in the lockbox (prior to R19). |
| 93 std::string GetDeviceId(); | 94 std::string GetDeviceId(); |
| 94 | 95 |
| 95 // Gets the mode the device was enrolled to. The return value for devices that | 96 // Gets the mode the device was enrolled to. The return value for devices that |
| 96 // are not locked yet will be DEVICE_MODE_UNKNOWN. | 97 // are not locked yet will be DEVICE_MODE_UNKNOWN. |
| 97 DeviceMode GetMode(); | 98 DeviceMode GetMode(); |
| 98 | 99 |
| 99 protected: | 100 protected: |
| 101 // True if install attributes have been read successfully. False if read |
| 102 // failed or no read attempt was made. |
| 100 bool device_locked_; | 103 bool device_locked_; |
| 104 |
| 105 // Whether the TPM / install attributes consistency check is running. |
| 106 bool consistency_check_running_; |
| 107 |
| 108 // To be run after the consistency check has finished. |
| 109 base::Closure post_check_action_; |
| 110 |
| 111 // Wether the LockDevice() initiated TPM calls are running. |
| 112 bool device_lock_running_; |
| 113 |
| 101 std::string registration_user_; | 114 std::string registration_user_; |
| 102 std::string registration_domain_; | 115 std::string registration_domain_; |
| 103 std::string registration_device_id_; | 116 std::string registration_device_id_; |
| 104 DeviceMode registration_mode_; | 117 DeviceMode registration_mode_; |
| 105 | 118 |
| 106 private: | 119 private: |
| 107 FRIEND_TEST_ALL_PREFIXES(EnterpriseInstallAttributesTest, | 120 FRIEND_TEST_ALL_PREFIXES(EnterpriseInstallAttributesTest, |
| 108 DeviceLockedFromOlderVersion); | 121 DeviceLockedFromOlderVersion); |
| 122 FRIEND_TEST_ALL_PREFIXES(EnterpriseInstallAttributesTest, Init); |
| 109 FRIEND_TEST_ALL_PREFIXES(EnterpriseInstallAttributesTest, | 123 FRIEND_TEST_ALL_PREFIXES(EnterpriseInstallAttributesTest, |
| 110 ReadCacheFile); | 124 InitForConsumerKiosk); |
| 111 FRIEND_TEST_ALL_PREFIXES(EnterpriseInstallAttributesTest, | |
| 112 ReadCacheFileForConsumerKiosk); | |
| 113 FRIEND_TEST_ALL_PREFIXES(EnterpriseInstallAttributesTest, | 125 FRIEND_TEST_ALL_PREFIXES(EnterpriseInstallAttributesTest, |
| 114 VerifyFakeInstallAttributesCache); | 126 VerifyFakeInstallAttributesCache); |
| 115 | 127 |
| 116 // Constants for the possible device modes that can be stored in the lockbox. | 128 // Constants for the possible device modes that can be stored in the lockbox. |
| 117 static const char kConsumerDeviceMode[]; | 129 static const char kConsumerDeviceMode[]; |
| 118 static const char kEnterpriseDeviceMode[]; | 130 static const char kEnterpriseDeviceMode[]; |
| 119 static const char kLegacyRetailDeviceMode[]; | 131 static const char kLegacyRetailDeviceMode[]; |
| 120 static const char kConsumerKioskDeviceMode[]; | 132 static const char kConsumerKioskDeviceMode[]; |
| 121 static const char kUnknownDeviceMode[]; | 133 static const char kUnknownDeviceMode[]; |
| 122 | 134 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 151 DeviceMode device_mode, | 163 DeviceMode device_mode, |
| 152 const std::string& device_id, | 164 const std::string& device_id, |
| 153 const LockResultCallback& callback, | 165 const LockResultCallback& callback, |
| 154 chromeos::DBusMethodCallStatus call_status, | 166 chromeos::DBusMethodCallStatus call_status, |
| 155 bool result); | 167 bool result); |
| 156 | 168 |
| 157 // Confirms the registered user and invoke the callback. | 169 // Confirms the registered user and invoke the callback. |
| 158 void OnReadImmutableAttributes(const std::string& user, | 170 void OnReadImmutableAttributes(const std::string& user, |
| 159 const LockResultCallback& callback); | 171 const LockResultCallback& callback); |
| 160 | 172 |
| 173 // Check state of install attributes against TPM lock state and generate UMA |
| 174 // for the result. Asynchronously retry |dbus_retries| times in case of DBUS |
| 175 // errors (cryptohomed startup is slow). |
| 176 void TriggerConsistencyCheck(int dbus_retries); |
| 177 |
| 178 // Callback for TpmIsOwned() DBUS call. Generates UMA or schedules retry in |
| 179 // case of DBUS error. |
| 180 void OnTpmOwnerCheckCompleted(int dbus_retries_remaining, |
| 181 chromeos::DBusMethodCallStatus call_status, |
| 182 bool result); |
| 183 |
| 161 chromeos::CryptohomeClient* cryptohome_client_; | 184 chromeos::CryptohomeClient* cryptohome_client_; |
| 162 | 185 |
| 163 base::WeakPtrFactory<EnterpriseInstallAttributes> weak_ptr_factory_; | 186 base::WeakPtrFactory<EnterpriseInstallAttributes> weak_ptr_factory_; |
| 164 | 187 |
| 165 DISALLOW_COPY_AND_ASSIGN(EnterpriseInstallAttributes); | 188 DISALLOW_COPY_AND_ASSIGN(EnterpriseInstallAttributes); |
| 166 }; | 189 }; |
| 167 | 190 |
| 168 } // namespace policy | 191 } // namespace policy |
| 169 | 192 |
| 170 #endif // CHROME_BROWSER_CHROMEOS_POLICY_ENTERPRISE_INSTALL_ATTRIBUTES_H_ | 193 #endif // CHROME_BROWSER_CHROMEOS_POLICY_ENTERPRISE_INSTALL_ATTRIBUTES_H_ |
| OLD | NEW |