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

Side by Side Diff: chrome/browser/extensions/api/identity/account_tracker.h

Issue 398573007: Cleanup: remove IdentityAccountTracker (replaced by gaia::AccountTracker) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase to ToT Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/extensions/api/identity/account_tracker.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 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_EXTENSIONS_API_IDENTITY_ACCOUNT_TRACKER_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_IDENTITY_ACCOUNT_TRACKER_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "base/observer_list.h"
13 #include "components/signin/core/browser/signin_error_controller.h"
14 #include "components/signin/core/browser/signin_manager_base.h"
15 #include "google_apis/gaia/gaia_oauth_client.h"
16 #include "google_apis/gaia/oauth2_token_service.h"
17
18 class GoogleServiceAuthError;
19 class Profile;
20
21 namespace extensions {
22
23 struct AccountIds {
24 std::string account_key; // The account ID used by OAuth2TokenService.
25 std::string gaia;
26 std::string email;
27 };
28
29 class AccountIdFetcher;
30
31 // The AccountTracker keeps track of what accounts exist on the
32 // profile and the state of their credentials. The tracker fetches the
33 // gaia ID of each account it knows about.
34 //
35 // The AccountTracker maintains these invariants:
36 // 1. Events are only fired after the gaia ID has been fetched.
37 // 2. Add/Remove and SignIn/SignOut pairs are always generated in order.
38 // 3. SignIn follows Add, and there will be a SignOut between SignIn & Remove.
39 // 4. If there is no primary account, there are no other accounts.
40 class AccountTracker : public OAuth2TokenService::Observer,
41 public SigninErrorController::AuthStatusProvider,
42 public SigninManagerBase::Observer {
43 public:
44 explicit AccountTracker(Profile* profile);
45 virtual ~AccountTracker();
46
47 class Observer {
48 public:
49 virtual void OnAccountAdded(const AccountIds& ids) = 0;
50 virtual void OnAccountRemoved(const AccountIds& ids) = 0;
51 virtual void OnAccountSignInChanged(const AccountIds& ids,
52 bool is_signed_in) = 0;
53 };
54
55 void Shutdown();
56
57 void ReportAuthError(const std::string& account_key,
58 const GoogleServiceAuthError& error);
59
60 void AddObserver(Observer* observer);
61 void RemoveObserver(Observer* observer);
62
63 // Returns the list of accounts that are signed in, and for which gaia IDs
64 // have been fetched. The primary account for the profile will be first
65 // in the vector. Additional accounts will be in order of their gaia IDs.
66 std::vector<AccountIds> GetAccounts() const;
67 std::string FindAccountKeyByGaiaId(const std::string& gaia_id);
68
69 // OAuth2TokenService::Observer implementation.
70 virtual void OnRefreshTokenAvailable(const std::string& account_key) OVERRIDE;
71 virtual void OnRefreshTokenRevoked(const std::string& account_key) OVERRIDE;
72
73 void OnUserInfoFetchSuccess(AccountIdFetcher* fetcher,
74 const std::string& gaia_id);
75 void OnUserInfoFetchFailure(AccountIdFetcher* fetcher);
76
77 // AuthStatusProvider implementation.
78 virtual std::string GetAccountId() const OVERRIDE;
79 virtual std::string GetUsername() const OVERRIDE;
80 virtual GoogleServiceAuthError GetAuthStatus() const OVERRIDE;
81
82 // SigninManagerBase::Observer implementation.
83 virtual void GoogleSigninSucceeded(const std::string& username,
84 const std::string& password) OVERRIDE;
85 virtual void GoogleSignedOut(const std::string& username) OVERRIDE;
86
87 // Sets the state of an account. Does not fire notifications.
88 void SetAccountStateForTest(AccountIds ids, bool is_signed_in);
89
90 private:
91 struct AccountState {
92 AccountIds ids;
93 bool is_signed_in;
94 };
95
96 const std::string signin_manager_account_id() const;
97
98 void NotifyAccountAdded(const AccountState& account);
99 void NotifyAccountRemoved(const AccountState& account);
100 void NotifySignInChanged(const AccountState& account);
101
102 void ClearAuthError(const std::string& account_key);
103 void UpdateSignInState(const std::string& account_key, bool is_signed_in);
104
105 void StartTrackingAccount(const std::string& account_key);
106 void StopTrackingAccount(const std::string& account_key);
107 void StopTrackingAllAccounts();
108 void StartFetchingUserInfo(const std::string& account_key);
109 void DeleteFetcher(AccountIdFetcher* fetcher);
110
111 Profile* profile_;
112 std::map<std::string, AccountIdFetcher*> user_info_requests_;
113 std::map<std::string, AccountState> accounts_;
114 std::map<std::string, GoogleServiceAuthError> account_errors_;
115 ObserverList<Observer> observer_list_;
116 };
117
118 class AccountIdFetcher : public OAuth2TokenService::Consumer,
119 public gaia::GaiaOAuthClient::Delegate {
120 public:
121 AccountIdFetcher(Profile* profile,
122 AccountTracker* tracker,
123 const std::string& account_key);
124 virtual ~AccountIdFetcher();
125
126 const std::string& account_key() { return account_key_; }
127
128 void Start();
129
130 // OAuth2TokenService::Consumer implementation.
131 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
132 const std::string& access_token,
133 const base::Time& expiration_time) OVERRIDE;
134 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
135 const GoogleServiceAuthError& error) OVERRIDE;
136
137 // gaia::GaiaOAuthClient::Delegate implementation.
138 virtual void OnGetUserIdResponse(const std::string& gaia_id) OVERRIDE;
139 virtual void OnOAuthError() OVERRIDE;
140 virtual void OnNetworkError(int response_code) OVERRIDE;
141
142 private:
143 Profile* profile_;
144 AccountTracker* tracker_;
145 const std::string account_key_;
146
147 scoped_ptr<OAuth2TokenService::Request> login_token_request_;
148 scoped_ptr<gaia::GaiaOAuthClient> gaia_oauth_client_;
149 };
150
151 } // namespace extensions
152
153 #endif // CHROME_BROWSER_EXTENSIONS_API_IDENTITY_ACCOUNT_TRACKER_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/api/identity/account_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698