OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_H_ | 4 #ifndef CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_H_ |
5 #define CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_H_ | 5 #define CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_H_ |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/memory/scoped_ptr.h" |
9 #include "components/browser_context_keyed_service/browser_context_keyed_service
.h" | 10 #include "components/browser_context_keyed_service/browser_context_keyed_service
.h" |
10 #include "content/public/browser/notification_observer.h" | 11 #include "content/public/browser/notification_observer.h" |
11 #include "content/public/browser/notification_registrar.h" | 12 #include "content/public/browser/notification_registrar.h" |
| 13 #include "google_apis/gaia/gaia_auth_consumer.h" |
12 #include "google_apis/gaia/oauth2_token_service.h" | 14 #include "google_apis/gaia/oauth2_token_service.h" |
13 | 15 |
| 16 class GaiaAuthFetcher; |
14 class Profile; | 17 class Profile; |
15 struct ChromeCookieDetails; | 18 struct ChromeCookieDetails; |
16 | 19 |
17 class AccountReconcilor : public BrowserContextKeyedService, | 20 class AccountReconcilor : public BrowserContextKeyedService, |
18 content::NotificationObserver, | 21 content::NotificationObserver, |
| 22 GaiaAuthConsumer, |
| 23 OAuth2TokenService::Consumer, |
19 OAuth2TokenService::Observer { | 24 OAuth2TokenService::Observer { |
20 public: | 25 public: |
21 explicit AccountReconcilor(Profile* profile); | 26 explicit AccountReconcilor(Profile* profile); |
22 virtual ~AccountReconcilor(); | 27 virtual ~AccountReconcilor(); |
23 | 28 |
24 // BrowserContextKeyedService implementation. | 29 // BrowserContextKeyedService implementation. |
25 virtual void Shutdown() OVERRIDE; | 30 virtual void Shutdown() OVERRIDE; |
26 | 31 |
27 Profile* profile() { return profile_; } | 32 Profile* profile() { return profile_; } |
28 | 33 |
29 bool IsPeriodicReconciliationRunning() { | 34 bool IsPeriodicReconciliationRunning() { |
30 return reconciliation_timer_.IsRunning(); | 35 return reconciliation_timer_.IsRunning(); |
31 } | 36 } |
32 | 37 |
33 private: | 38 private: |
| 39 class AccountReconcilorTest; |
| 40 FRIEND_TEST_ALL_PREFIXES(AccountReconcilorTest, ParseListAccountsData); |
| 41 |
34 // Register and unregister with dependent services. | 42 // Register and unregister with dependent services. |
35 void RegisterWithCookieMonster(); | 43 void RegisterWithCookieMonster(); |
36 void UnregisterWithCookieMonster(); | 44 void UnregisterWithCookieMonster(); |
37 void RegisterWithSigninManager(); | 45 void RegisterWithSigninManager(); |
38 void UnregisterWithSigninManager(); | 46 void UnregisterWithSigninManager(); |
39 void RegisterWithTokenService(); | 47 void RegisterWithTokenService(); |
40 void UnregisterWithTokenService(); | 48 void UnregisterWithTokenService(); |
41 | 49 |
| 50 bool IsProfileConnected(); |
| 51 |
| 52 void DeleteAccessTokenRequests(); |
| 53 |
| 54 static std::vector<std::string> ParseListAccountsData( |
| 55 const std::string& data); |
| 56 |
42 // Start and stop the periodic reconciliation. | 57 // Start and stop the periodic reconciliation. |
43 void StartPeriodicReconciliation(); | 58 void StartPeriodicReconciliation(); |
44 void StopPeriodicReconciliation(); | 59 void StopPeriodicReconciliation(); |
45 void PeriodicReconciliation(); | 60 void PeriodicReconciliation(); |
46 | 61 |
47 // The profile that this reconcilor belongs to. | |
48 Profile* profile_; | |
49 content::NotificationRegistrar registrar_; | |
50 base::RepeatingTimer<AccountReconcilor> reconciliation_timer_; | |
51 | |
52 void PerformMergeAction(const std::string& account_id); | 62 void PerformMergeAction(const std::string& account_id); |
53 void PerformRemoveAction(const std::string& account_id); | 63 void PerformRemoveAction(const std::string& account_id); |
54 void PerformReconcileAction(); | 64 void StartReconcileAction(); |
| 65 void FinishReconcileAction(); |
| 66 |
| 67 void GetAccountsFromCookie(); |
| 68 void ValidateAccountsFromTokenService(); |
| 69 |
| 70 void OnCookieChanged(ChromeCookieDetails* details); |
55 | 71 |
56 // Overriden from content::NotificationObserver | 72 // Overriden from content::NotificationObserver |
57 virtual void Observe(int type, | 73 virtual void Observe(int type, |
58 const content::NotificationSource& source, | 74 const content::NotificationSource& source, |
59 const content::NotificationDetails& details) OVERRIDE; | 75 const content::NotificationDetails& details) OVERRIDE; |
60 | 76 |
61 void OnCookieChanged(ChromeCookieDetails* details); | 77 // Overriden from OAuth2TokenService::Consumer |
| 78 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, |
| 79 const std::string& access_token, |
| 80 const base::Time& expiration_time) OVERRIDE; |
| 81 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, |
| 82 const GoogleServiceAuthError& error) OVERRIDE; |
62 | 83 |
63 // Overriden from OAuth2TokenService::Observer | 84 // Overriden from OAuth2TokenService::Observer |
64 virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE; | 85 virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE; |
65 virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE; | 86 virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE; |
66 virtual void OnRefreshTokensLoaded() OVERRIDE; | 87 virtual void OnRefreshTokensLoaded() OVERRIDE; |
67 | 88 |
| 89 // Overriden from GaiaAuthConsumer |
| 90 virtual void OnListAccountsSuccess(const std::string& data) OVERRIDE; |
| 91 virtual void OnListAccountsFailure( |
| 92 const GoogleServiceAuthError& error) OVERRIDE; |
| 93 |
| 94 // The profile that this reconcilor belongs to. |
| 95 Profile* profile_; |
| 96 content::NotificationRegistrar registrar_; |
| 97 base::RepeatingTimer<AccountReconcilor> reconciliation_timer_; |
| 98 |
| 99 // Used during reconcile action. |
| 100 // These members are used used to validate the gaia cookie. |
| 101 scoped_ptr<GaiaAuthFetcher> gaia_fetcher_; |
| 102 bool are_gaia_accounts_set_; |
| 103 std::vector<std::string> gaia_accounts_; |
| 104 |
| 105 // Used during reconcile action. |
| 106 // These members are used to validate the tokens in OAuth2TokenService. |
| 107 std::string primary_account_; |
| 108 std::vector<std::string> chrome_accounts_; |
| 109 scoped_ptr<OAuth2TokenService::Request>* requests_; |
| 110 std::set<std::string> valid_chrome_accounts_; |
| 111 std::set<std::string> invalid_chrome_accounts_; |
| 112 |
68 DISALLOW_COPY_AND_ASSIGN(AccountReconcilor); | 113 DISALLOW_COPY_AND_ASSIGN(AccountReconcilor); |
69 }; | 114 }; |
70 | 115 |
71 #endif // CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_H_ | 116 #endif // CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_H_ |
OLD | NEW |