Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5059)

Unified Diff: chrome/browser/signin/easy_unlock_service_signin_chromeos.h

Issue 583403002: [Easy signin] Update the logic for getting user device list from cryptohome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/signin/easy_unlock_service_signin_chromeos.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/signin/easy_unlock_service_signin_chromeos.h
diff --git a/chrome/browser/signin/easy_unlock_service_signin_chromeos.h b/chrome/browser/signin/easy_unlock_service_signin_chromeos.h
index 980afc5169d422c691d833294b4f0cc0a15f147e..00b950bea2f6ba29b6a12320636a046287b40ae0 100644
--- a/chrome/browser/signin/easy_unlock_service_signin_chromeos.h
+++ b/chrome/browser/signin/easy_unlock_service_signin_chromeos.h
@@ -5,28 +5,52 @@
#ifndef CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SERVICE_SIGNIN_CHROMEOS_H_
#define CHROME_BROWSER_SIGNIN_EASY_UNLOCK_SERVICE_SIGNIN_CHROMEOS_H_
+#include <map>
#include <string>
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
+#include "base/values.h"
#include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_types.h"
#include "chrome/browser/signin/easy_unlock_service.h"
-namespace base {
-class DictionaryValue;
-class ListValue;
-}
-
// EasyUnlockService instance that should be used for signin profile.
class EasyUnlockServiceSignin : public EasyUnlockService {
public:
explicit EasyUnlockServiceSignin(Profile* profile);
virtual ~EasyUnlockServiceSignin();
- void SetAssociatedUser(const std::string& user_id);
-
private:
+ // The load state of a user's cryptohome key data.
+ enum UserDataState {
+ // Initial state, the key data is empty and not being loaded.
+ USER_DATA_STATE_INITIAL,
+ // The key data is empty, but being loaded.
+ USER_DATA_STATE_LOADING,
+ // The key data has been loaded.
+ USER_DATA_STATE_LOADED
+ };
+
+ // Structure containing a user's key data loaded from cryptohome.
+ struct UserData {
+ UserData();
+ ~UserData();
+
+ // The loading state of the data.
+ UserDataState state;
+
+ // The data as returned from cryptohome.
+ chromeos::EasyUnlockDeviceKeyDataList devices;
+
+ // The list of remote device dictionaries understood by Easy unlock app.
+ // This will be returned by |GetRemoteDevices| method.
+ base::ListValue remote_devices_value;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(UserData);
+ };
+
// EasyUnlockService implementation:
virtual EasyUnlockService::Type GetType() const OVERRIDE;
virtual std::string GetUserEmail() const OVERRIDE;
@@ -44,20 +68,31 @@ class EasyUnlockServiceSignin : public EasyUnlockService {
virtual bool IsAllowedInternal() OVERRIDE;
virtual void InitializeInternal() OVERRIDE;
- // Fetches |remote_devices_| info from cryptohome keys.
- void FetchCryptohomeKeys();
+ // Loads the device data associated with the user's Easy unlock keys from
+ // crypthome.
+ void LoadCurrentUserDataIfNeeded();
- // Callback invoked when the cryptohome keys are fetched.
- void OnCryptohomeKeysFetched(
+ // Callback invoked when the user's device data is loaded from cryptohome.
+ void OnUserDataLoaded(
+ const std::string& user_id,
bool success,
- const chromeos::EasyUnlockDeviceKeyDataList& devices);
+ const chromeos::EasyUnlockDeviceKeyDataList& data);
- // User id of the associated user.
+ // If the device data has been loaded for the current user, returns is.
+ // Otherwise, returns NULL.
+ const UserData* FindLoadedDataForCurrentUser() const;
+
+ // User id of the user currently associated with the service.
std::string user_id_;
- // Remote devices of the associated user.
- chromeos::EasyUnlockDeviceKeyDataList remote_devices_;
- scoped_ptr<base::ListValue> remote_devices_value_;
+ // Maps user ids to their fetched cryptohome key data.
+ std::map<std::string, UserData*> user_data_;
+
+ // Whether failed attempts to load user data should be retried.
+ // This is to handle case where cryptohome daemon is not started in time the
+ // service attempts to load some data. Retries will be allowed only until the
+ // first data load finishes (even if it fails).
+ bool allow_cryptohome_backoff_;
base::WeakPtrFactory<EasyUnlockServiceSignin> weak_ptr_factory_;
« no previous file with comments | « no previous file | chrome/browser/signin/easy_unlock_service_signin_chromeos.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698