| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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_SIGNIN_EASY_UNLOCK_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SERVICE_H_ |
| 6 #define CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SERVICE_H_ | 6 #define CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SERVICE_H_ |
| 7 | 7 |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/callback_forward.h" | 11 #include "base/callback_forward.h" |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/memory/weak_ptr.h" | 14 #include "base/memory/weak_ptr.h" |
| 15 #include "base/observer_list.h" | 15 #include "base/observer_list.h" |
| 16 #include "chrome/browser/signin/easy_unlock_auth_attempt.h" | 16 #include "chrome/browser/signin/easy_unlock_auth_attempt.h" |
| 17 #include "chrome/browser/signin/easy_unlock_metrics.h" | 17 #include "chrome/browser/signin/easy_unlock_metrics.h" |
| 18 #include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h" | 18 #include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h" |
| 19 #include "components/keyed_service/core/keyed_service.h" | 19 #include "components/keyed_service/core/keyed_service.h" |
| 20 #include "components/proximity_auth/screenlock_state.h" | 20 #include "components/proximity_auth/screenlock_state.h" |
| 21 #include "components/user_manager/user_id.h" |
| 21 | 22 |
| 22 #if defined(OS_CHROMEOS) | 23 #if defined(OS_CHROMEOS) |
| 23 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_types.h" | 24 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_types.h" |
| 24 #endif | 25 #endif |
| 25 | 26 |
| 26 namespace base { | 27 namespace base { |
| 27 class DictionaryValue; | 28 class DictionaryValue; |
| 28 class ListValue; | 29 class ListValue; |
| 29 } | 30 } |
| 30 | 31 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 // logged in and his profile is initialized. | 76 // logged in and his profile is initialized. |
| 76 static EasyUnlockService* GetForUser(const user_manager::User& user); | 77 static EasyUnlockService* GetForUser(const user_manager::User& user); |
| 77 | 78 |
| 78 // Registers Easy Unlock profile preferences. | 79 // Registers Easy Unlock profile preferences. |
| 79 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | 80 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); |
| 80 | 81 |
| 81 // Registers Easy Unlock local state entries. | 82 // Registers Easy Unlock local state entries. |
| 82 static void RegisterPrefs(PrefRegistrySimple* registry); | 83 static void RegisterPrefs(PrefRegistrySimple* registry); |
| 83 | 84 |
| 84 // Removes the hardlock state for the given user. | 85 // Removes the hardlock state for the given user. |
| 85 static void ResetLocalStateForUser(const std::string& user_id); | 86 static void ResetLocalStateForUser(const user_manager::UserID& user_id); |
| 86 | 87 |
| 87 // Returns the user's preferences. | 88 // Returns the user's preferences. |
| 88 static UserSettings GetUserSettings(const std::string& user_id); | 89 static UserSettings GetUserSettings(const user_manager::UserID& user_id); |
| 89 | 90 |
| 90 // Returns the identifier for the device. | 91 // Returns the identifier for the device. |
| 91 static std::string GetDeviceId(); | 92 static std::string GetDeviceId(); |
| 92 | 93 |
| 93 // Returns true if Easy sign-in is enabled. | 94 // Returns true if Easy sign-in is enabled. |
| 94 static bool IsSignInEnabled(); | 95 static bool IsSignInEnabled(); |
| 95 | 96 |
| 96 // Returns the EasyUnlockService type. | 97 // Returns the EasyUnlockService type. |
| 97 virtual Type GetType() const = 0; | 98 virtual Type GetType() const = 0; |
| 98 | 99 |
| 99 // Returns the user currently associated with the service. | 100 // Returns the user currently associated with the service. |
| 100 virtual std::string GetUserEmail() const = 0; | 101 virtual user_manager::UserID GetUserID() const = 0; |
| 101 | 102 |
| 102 // Launches Easy Unlock setup app. | 103 // Launches Easy Unlock setup app. |
| 103 virtual void LaunchSetup() = 0; | 104 virtual void LaunchSetup() = 0; |
| 104 | 105 |
| 105 // Gets/Sets/Clears the permit access for the local device. | 106 // Gets/Sets/Clears the permit access for the local device. |
| 106 virtual const base::DictionaryValue* GetPermitAccess() const = 0; | 107 virtual const base::DictionaryValue* GetPermitAccess() const = 0; |
| 107 virtual void SetPermitAccess(const base::DictionaryValue& permit) = 0; | 108 virtual void SetPermitAccess(const base::DictionaryValue& permit) = 0; |
| 108 virtual void ClearPermitAccess() = 0; | 109 virtual void ClearPermitAccess() = 0; |
| 109 | 110 |
| 110 // Gets/Sets the remote devices list. | 111 // Gets/Sets the remote devices list. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 124 // service. | 125 // service. |
| 125 virtual std::string GetChallenge() const = 0; | 126 virtual std::string GetChallenge() const = 0; |
| 126 | 127 |
| 127 // Retrieved wrapped secret that should be used to unlock cryptohome for the | 128 // Retrieved wrapped secret that should be used to unlock cryptohome for the |
| 128 // user currently associated with the service. If the service does not support | 129 // user currently associated with the service. If the service does not support |
| 129 // signin (i.e. service for a regular profile) or there is no secret available | 130 // signin (i.e. service for a regular profile) or there is no secret available |
| 130 // for the user, returns an empty string. | 131 // for the user, returns an empty string. |
| 131 virtual std::string GetWrappedSecret() const = 0; | 132 virtual std::string GetWrappedSecret() const = 0; |
| 132 | 133 |
| 133 // Records metrics for Easy sign-in outcome for the given user. | 134 // Records metrics for Easy sign-in outcome for the given user. |
| 134 virtual void RecordEasySignInOutcome(const std::string& user_id, | 135 virtual void RecordEasySignInOutcome(const user_manager::UserID& user_id, |
| 135 bool success) const = 0; | 136 bool success) const = 0; |
| 136 | 137 |
| 137 // Records metrics for password based flow for the given user. | 138 // Records metrics for password based flow for the given user. |
| 138 virtual void RecordPasswordLoginEvent(const std::string& user_id) const = 0; | 139 virtual void RecordPasswordLoginEvent(const user_manager::UserID& user_id) con
st = 0; |
| 139 | 140 |
| 140 // Starts auto pairing. | 141 // Starts auto pairing. |
| 141 typedef base::Callback<void(bool success, const std::string& error)> | 142 typedef base::Callback<void(bool success, const std::string& error)> |
| 142 AutoPairingResultCallback; | 143 AutoPairingResultCallback; |
| 143 virtual void StartAutoPairing(const AutoPairingResultCallback& callback) = 0; | 144 virtual void StartAutoPairing(const AutoPairingResultCallback& callback) = 0; |
| 144 | 145 |
| 145 // Sets auto pairing result. | 146 // Sets auto pairing result. |
| 146 virtual void SetAutoPairingResult(bool success, const std::string& error) = 0; | 147 virtual void SetAutoPairingResult(bool success, const std::string& error) = 0; |
| 147 | 148 |
| 148 // Sets the service up and schedules service initialization. | 149 // Sets the service up and schedules service initialization. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 175 // Updates the user pod on the signin/lock screen for the user associated with | 176 // Updates the user pod on the signin/lock screen for the user associated with |
| 176 // the service to reflect the provided screenlock state. | 177 // the service to reflect the provided screenlock state. |
| 177 bool UpdateScreenlockState(proximity_auth::ScreenlockState state); | 178 bool UpdateScreenlockState(proximity_auth::ScreenlockState state); |
| 178 | 179 |
| 179 // Returns the screenlock state if it is available. Otherwise STATE_INACTIVE | 180 // Returns the screenlock state if it is available. Otherwise STATE_INACTIVE |
| 180 // is returned. | 181 // is returned. |
| 181 proximity_auth::ScreenlockState GetScreenlockState(); | 182 proximity_auth::ScreenlockState GetScreenlockState(); |
| 182 | 183 |
| 183 // Starts an auth attempt for the user associated with the service. The | 184 // Starts an auth attempt for the user associated with the service. The |
| 184 // attempt type (unlock vs. signin) will depend on the service type. | 185 // attempt type (unlock vs. signin) will depend on the service type. |
| 185 void AttemptAuth(const std::string& user_id); | 186 void AttemptAuth(const user_manager::UserID& user_id); |
| 186 | 187 |
| 187 // Similar to above but a callback is invoked after the auth attempt is | 188 // Similar to above but a callback is invoked after the auth attempt is |
| 188 // finalized instead of default unlock/sign-in. | 189 // finalized instead of default unlock/sign-in. |
| 189 typedef EasyUnlockAuthAttempt::FinalizedCallback AttemptAuthCallback; | 190 typedef EasyUnlockAuthAttempt::FinalizedCallback AttemptAuthCallback; |
| 190 void AttemptAuth(const std::string& user_id, | 191 void AttemptAuth(const user_manager::UserID& user_id, |
| 191 const AttemptAuthCallback& callback); | 192 const AttemptAuthCallback& callback); |
| 192 | 193 |
| 193 // Finalizes the previously started auth attempt for easy unlock. If called on | 194 // Finalizes the previously started auth attempt for easy unlock. If called on |
| 194 // signin profile service, it will cancel the current auth attempt if one | 195 // signin profile service, it will cancel the current auth attempt if one |
| 195 // exists. | 196 // exists. |
| 196 void FinalizeUnlock(bool success); | 197 void FinalizeUnlock(bool success); |
| 197 | 198 |
| 198 // Finalizes previously started auth attempt for easy signin. If called on | 199 // Finalizes previously started auth attempt for easy signin. If called on |
| 199 // regular profile service, it will cancel the current auth attempt if one | 200 // regular profile service, it will cancel the current auth attempt if one |
| 200 // exists. | 201 // exists. |
| 201 void FinalizeSignin(const std::string& secret); | 202 void FinalizeSignin(const std::string& secret); |
| 202 | 203 |
| 203 // Handles Easy Unlock auth failure for the user. | 204 // Handles Easy Unlock auth failure for the user. |
| 204 void HandleAuthFailure(const std::string& user_id); | 205 void HandleAuthFailure(const user_manager::UserID& user_id); |
| 205 | 206 |
| 206 // Checks the consistency between pairing data and cryptohome keys. Set | 207 // Checks the consistency between pairing data and cryptohome keys. Set |
| 207 // hardlock state if the two do not match. | 208 // hardlock state if the two do not match. |
| 208 void CheckCryptohomeKeysAndMaybeHardlock(); | 209 void CheckCryptohomeKeysAndMaybeHardlock(); |
| 209 | 210 |
| 210 // Marks the Easy Unlock screen lock state as the one associated with the | 211 // Marks the Easy Unlock screen lock state as the one associated with the |
| 211 // trial run initiated by Easy Unlock app. | 212 // trial run initiated by Easy Unlock app. |
| 212 void SetTrialRun(); | 213 void SetTrialRun(); |
| 213 | 214 |
| 214 // Records that the user clicked on the lock icon during the trial run | 215 // Records that the user clicked on the lock icon during the trial run |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 void SetScreenlockHardlockedState( | 278 void SetScreenlockHardlockedState( |
| 278 EasyUnlockScreenlockStateHandler::HardlockState state); | 279 EasyUnlockScreenlockStateHandler::HardlockState state); |
| 279 | 280 |
| 280 const EasyUnlockScreenlockStateHandler* screenlock_state_handler() const { | 281 const EasyUnlockScreenlockStateHandler* screenlock_state_handler() const { |
| 281 return screenlock_state_handler_.get(); | 282 return screenlock_state_handler_.get(); |
| 282 } | 283 } |
| 283 | 284 |
| 284 // Saves hardlock state for the given user. Update UI if the currently | 285 // Saves hardlock state for the given user. Update UI if the currently |
| 285 // associated user is the same. | 286 // associated user is the same. |
| 286 void SetHardlockStateForUser( | 287 void SetHardlockStateForUser( |
| 287 const std::string& user_id, | 288 const user_manager::UserID& user_id, |
| 288 EasyUnlockScreenlockStateHandler::HardlockState state); | 289 EasyUnlockScreenlockStateHandler::HardlockState state); |
| 289 | 290 |
| 290 // Returns the authentication event for a recent password sign-in or unlock, | 291 // Returns the authentication event for a recent password sign-in or unlock, |
| 291 // according to the current state of the service. | 292 // according to the current state of the service. |
| 292 EasyUnlockAuthEvent GetPasswordAuthEvent() const; | 293 EasyUnlockAuthEvent GetPasswordAuthEvent() const; |
| 293 | 294 |
| 294 private: | 295 private: |
| 295 // A class to detect whether a bluetooth adapter is present. | 296 // A class to detect whether a bluetooth adapter is present. |
| 296 class BluetoothDetector; | 297 class BluetoothDetector; |
| 297 | 298 |
| 298 // Initializes the service after EasyUnlockAppManager is ready. | 299 // Initializes the service after EasyUnlockAppManager is ready. |
| 299 void InitializeOnAppManagerReady(); | 300 void InitializeOnAppManagerReady(); |
| 300 | 301 |
| 301 // Gets |screenlock_state_handler_|. Returns NULL if Easy Unlock is not | 302 // Gets |screenlock_state_handler_|. Returns NULL if Easy Unlock is not |
| 302 // allowed. Otherwise, if |screenlock_state_handler_| is not set, an instance | 303 // allowed. Otherwise, if |screenlock_state_handler_| is not set, an instance |
| 303 // is created. Do not cache the returned value, as it may go away if Easy | 304 // is created. Do not cache the returned value, as it may go away if Easy |
| 304 // Unlock gets disabled. | 305 // Unlock gets disabled. |
| 305 EasyUnlockScreenlockStateHandler* GetScreenlockStateHandler(); | 306 EasyUnlockScreenlockStateHandler* GetScreenlockStateHandler(); |
| 306 | 307 |
| 307 // Callback when Bluetooth adapter present state changes. | 308 // Callback when Bluetooth adapter present state changes. |
| 308 void OnBluetoothAdapterPresentChanged(); | 309 void OnBluetoothAdapterPresentChanged(); |
| 309 | 310 |
| 310 #if defined(OS_CHROMEOS) | 311 #if defined(OS_CHROMEOS) |
| 311 // Callback for get key operation from CheckCryptohomeKeysAndMaybeHardlock. | 312 // Callback for get key operation from CheckCryptohomeKeysAndMaybeHardlock. |
| 312 void OnCryptohomeKeysFetchedForChecking( | 313 void OnCryptohomeKeysFetchedForChecking( |
| 313 const std::string& user_id, | 314 const user_manager::UserID& user_id, |
| 314 const std::set<std::string> paired_devices, | 315 const std::set<std::string> paired_devices, |
| 315 bool success, | 316 bool success, |
| 316 const chromeos::EasyUnlockDeviceKeyDataList& key_data_list); | 317 const chromeos::EasyUnlockDeviceKeyDataList& key_data_list); |
| 317 #endif | 318 #endif |
| 318 | 319 |
| 319 // Updates the service to state for handling system suspend. | 320 // Updates the service to state for handling system suspend. |
| 320 void PrepareForSuspend(); | 321 void PrepareForSuspend(); |
| 321 | 322 |
| 322 void EnsureTpmKeyPresentIfNeeded(); | 323 void EnsureTpmKeyPresentIfNeeded(); |
| 323 | 324 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 351 bool tpm_key_checked_; | 352 bool tpm_key_checked_; |
| 352 | 353 |
| 353 ObserverList<EasyUnlockServiceObserver> observers_; | 354 ObserverList<EasyUnlockServiceObserver> observers_; |
| 354 | 355 |
| 355 base::WeakPtrFactory<EasyUnlockService> weak_ptr_factory_; | 356 base::WeakPtrFactory<EasyUnlockService> weak_ptr_factory_; |
| 356 | 357 |
| 357 DISALLOW_COPY_AND_ASSIGN(EasyUnlockService); | 358 DISALLOW_COPY_AND_ASSIGN(EasyUnlockService); |
| 358 }; | 359 }; |
| 359 | 360 |
| 360 #endif // CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SERVICE_H_ | 361 #endif // CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SERVICE_H_ |
| OLD | NEW |