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 | 4 |
5 #include "chrome/browser/signin/mutable_profile_oauth2_token_service.h" | 5 #include "chrome/browser/signin/mutable_profile_oauth2_token_service.h" |
6 | 6 |
7 #include "chrome/browser/profiles/profile.h" | 7 #include "chrome/browser/profiles/profile.h" |
8 #include "chrome/browser/webdata/web_data_service_factory.h" | 8 #include "chrome/browser/webdata/token_web_data.h" |
9 #include "components/signin/core/webdata/token_web_data.h" | |
10 #include "components/webdata/common/web_data_service_base.h" | 9 #include "components/webdata/common/web_data_service_base.h" |
11 #include "google_apis/gaia/gaia_auth_fetcher.h" | 10 #include "google_apis/gaia/gaia_auth_fetcher.h" |
12 #include "google_apis/gaia/gaia_constants.h" | 11 #include "google_apis/gaia/gaia_constants.h" |
13 #include "google_apis/gaia/google_service_auth_error.h" | 12 #include "google_apis/gaia/google_service_auth_error.h" |
14 #include "net/url_request/url_request_context_getter.h" | 13 #include "net/url_request/url_request_context_getter.h" |
15 | 14 |
16 #if defined(ENABLE_MANAGED_USERS) | 15 #if defined(ENABLE_MANAGED_USERS) |
17 #include "chrome/browser/managed_mode/managed_user_constants.h" | 16 #include "chrome/browser/managed_mode/managed_user_constants.h" |
18 #endif | 17 #endif |
19 | 18 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 MutableProfileOAuth2TokenService::MutableProfileOAuth2TokenService() | 75 MutableProfileOAuth2TokenService::MutableProfileOAuth2TokenService() |
77 : web_data_service_request_(0) { | 76 : web_data_service_request_(0) { |
78 } | 77 } |
79 | 78 |
80 MutableProfileOAuth2TokenService::~MutableProfileOAuth2TokenService() { | 79 MutableProfileOAuth2TokenService::~MutableProfileOAuth2TokenService() { |
81 } | 80 } |
82 | 81 |
83 void MutableProfileOAuth2TokenService::Shutdown() { | 82 void MutableProfileOAuth2TokenService::Shutdown() { |
84 if (web_data_service_request_ != 0) { | 83 if (web_data_service_request_ != 0) { |
85 scoped_refptr<TokenWebData> token_web_data = | 84 scoped_refptr<TokenWebData> token_web_data = |
86 WebDataServiceFactory::GetTokenWebDataForProfile( | 85 TokenWebData::FromBrowserContext(profile()); |
87 profile(), Profile::EXPLICIT_ACCESS); | |
88 DCHECK(token_web_data.get()); | 86 DCHECK(token_web_data.get()); |
89 token_web_data->CancelRequest(web_data_service_request_); | 87 token_web_data->CancelRequest(web_data_service_request_); |
90 web_data_service_request_ = 0; | 88 web_data_service_request_ = 0; |
91 } | 89 } |
92 ProfileOAuth2TokenService::Shutdown(); | 90 ProfileOAuth2TokenService::Shutdown(); |
93 } | 91 } |
94 | 92 |
95 net::URLRequestContextGetter* | 93 net::URLRequestContextGetter* |
96 MutableProfileOAuth2TokenService::GetRequestContext() { | 94 MutableProfileOAuth2TokenService::GetRequestContext() { |
97 return profile()->GetRequestContext(); | 95 return profile()->GetRequestContext(); |
98 } | 96 } |
99 | 97 |
100 void MutableProfileOAuth2TokenService::LoadCredentials() { | 98 void MutableProfileOAuth2TokenService::LoadCredentials() { |
101 DCHECK_EQ(0, web_data_service_request_); | 99 DCHECK_EQ(0, web_data_service_request_); |
102 | 100 |
103 CancelAllRequests(); | 101 CancelAllRequests(); |
104 refresh_tokens().clear(); | 102 refresh_tokens().clear(); |
105 scoped_refptr<TokenWebData> token_web_data = | 103 scoped_refptr<TokenWebData> token_web_data = |
106 WebDataServiceFactory::GetTokenWebDataForProfile( | 104 TokenWebData::FromBrowserContext(profile()); |
107 profile(), Profile::EXPLICIT_ACCESS); | |
108 if (token_web_data.get()) | 105 if (token_web_data.get()) |
109 web_data_service_request_ = token_web_data->GetAllTokens(this); | 106 web_data_service_request_ = token_web_data->GetAllTokens(this); |
110 } | 107 } |
111 | 108 |
112 void MutableProfileOAuth2TokenService::OnWebDataServiceRequestDone( | 109 void MutableProfileOAuth2TokenService::OnWebDataServiceRequestDone( |
113 WebDataServiceBase::Handle handle, | 110 WebDataServiceBase::Handle handle, |
114 const WDTypedResult* result) { | 111 const WDTypedResult* result) { |
115 DCHECK_EQ(web_data_service_request_, handle); | 112 DCHECK_EQ(web_data_service_request_, handle); |
116 web_data_service_request_ = 0; | 113 web_data_service_request_ = 0; |
117 | 114 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 iter != db_tokens.end(); | 149 iter != db_tokens.end(); |
153 ++iter) { | 150 ++iter) { |
154 std::string prefixed_account_id = iter->first; | 151 std::string prefixed_account_id = iter->first; |
155 std::string refresh_token = iter->second; | 152 std::string refresh_token = iter->second; |
156 | 153 |
157 if (IsLegacyRefreshTokenId(prefixed_account_id) && !refresh_token.empty()) | 154 if (IsLegacyRefreshTokenId(prefixed_account_id) && !refresh_token.empty()) |
158 old_login_token = refresh_token; | 155 old_login_token = refresh_token; |
159 | 156 |
160 if (IsLegacyServiceId(prefixed_account_id)) { | 157 if (IsLegacyServiceId(prefixed_account_id)) { |
161 scoped_refptr<TokenWebData> token_web_data = | 158 scoped_refptr<TokenWebData> token_web_data = |
162 WebDataServiceFactory::GetTokenWebDataForProfile( | 159 TokenWebData::FromBrowserContext(profile()); |
163 profile(), Profile::EXPLICIT_ACCESS); | |
164 if (token_web_data.get()) | 160 if (token_web_data.get()) |
165 token_web_data->RemoveTokenForService(prefixed_account_id); | 161 token_web_data->RemoveTokenForService(prefixed_account_id); |
166 } else { | 162 } else { |
167 DCHECK(!refresh_token.empty()); | 163 DCHECK(!refresh_token.empty()); |
168 std::string account_id = RemoveAccountIdPrefix(prefixed_account_id); | 164 std::string account_id = RemoveAccountIdPrefix(prefixed_account_id); |
169 refresh_tokens()[account_id].reset( | 165 refresh_tokens()[account_id].reset( |
170 new AccountInfo(this, account_id, refresh_token)); | 166 new AccountInfo(this, account_id, refresh_token)); |
171 FireRefreshTokenAvailable(account_id); | 167 FireRefreshTokenAvailable(account_id); |
172 // TODO(fgorski): Notify diagnostic observers. | 168 // TODO(fgorski): Notify diagnostic observers. |
173 } | 169 } |
174 } | 170 } |
175 | 171 |
176 if (!old_login_token.empty()) { | 172 if (!old_login_token.empty()) { |
177 std::string account_id = GetAccountIdForMigratingRefreshToken(); | 173 std::string account_id = GetAccountIdForMigratingRefreshToken(); |
178 | 174 |
179 if (refresh_tokens().count(account_id) == 0) | 175 if (refresh_tokens().count(account_id) == 0) |
180 UpdateCredentials(account_id, old_login_token); | 176 UpdateCredentials(account_id, old_login_token); |
181 } | 177 } |
182 | 178 |
183 FireRefreshTokensLoaded(); | 179 FireRefreshTokensLoaded(); |
184 } | 180 } |
185 | 181 |
186 void MutableProfileOAuth2TokenService::PersistCredentials( | 182 void MutableProfileOAuth2TokenService::PersistCredentials( |
187 const std::string& account_id, | 183 const std::string& account_id, |
188 const std::string& refresh_token) { | 184 const std::string& refresh_token) { |
189 scoped_refptr<TokenWebData> token_web_data = | 185 scoped_refptr<TokenWebData> token_web_data = |
190 WebDataServiceFactory::GetTokenWebDataForProfile( | 186 TokenWebData::FromBrowserContext(profile()); |
191 profile(), Profile::EXPLICIT_ACCESS); | |
192 if (token_web_data.get()) { | 187 if (token_web_data.get()) { |
193 token_web_data->SetTokenForService(ApplyAccountIdPrefix(account_id), | 188 token_web_data->SetTokenForService(ApplyAccountIdPrefix(account_id), |
194 refresh_token); | 189 refresh_token); |
195 } | 190 } |
196 } | 191 } |
197 | 192 |
198 void MutableProfileOAuth2TokenService::ClearPersistedCredentials( | 193 void MutableProfileOAuth2TokenService::ClearPersistedCredentials( |
199 const std::string& account_id) { | 194 const std::string& account_id) { |
200 scoped_refptr<TokenWebData> token_web_data = | 195 scoped_refptr<TokenWebData> token_web_data = |
201 WebDataServiceFactory::GetTokenWebDataForProfile( | 196 TokenWebData::FromBrowserContext(profile()); |
202 profile(), Profile::EXPLICIT_ACCESS); | |
203 if (token_web_data.get()) | 197 if (token_web_data.get()) |
204 token_web_data->RemoveTokenForService(ApplyAccountIdPrefix(account_id)); | 198 token_web_data->RemoveTokenForService(ApplyAccountIdPrefix(account_id)); |
205 } | 199 } |
206 | 200 |
207 std::string | 201 std::string |
208 MutableProfileOAuth2TokenService::GetAccountIdForMigratingRefreshToken() { | 202 MutableProfileOAuth2TokenService::GetAccountIdForMigratingRefreshToken() { |
209 #if defined(ENABLE_MANAGED_USERS) | 203 #if defined(ENABLE_MANAGED_USERS) |
210 // TODO(bauerb): Make sure that only services that can deal with supervised | 204 // TODO(bauerb): Make sure that only services that can deal with supervised |
211 // users see the supervised user token. | 205 // users see the supervised user token. |
212 if (profile()->IsManaged()) | 206 if (profile()->IsManaged()) |
213 return managed_users::kManagedUserPseudoEmail; | 207 return managed_users::kManagedUserPseudoEmail; |
214 #endif | 208 #endif |
215 | 209 |
216 return GetPrimaryAccountId(); | 210 return GetPrimaryAccountId(); |
217 } | 211 } |
218 | 212 |
219 void MutableProfileOAuth2TokenService::RevokeCredentialsOnServer( | 213 void MutableProfileOAuth2TokenService::RevokeCredentialsOnServer( |
220 const std::string& refresh_token) { | 214 const std::string& refresh_token) { |
221 // RevokeServerRefreshToken deletes itself when done. | 215 // RevokeServerRefreshToken deletes itself when done. |
222 new RevokeServerRefreshToken(refresh_token, GetRequestContext()); | 216 new RevokeServerRefreshToken(refresh_token, GetRequestContext()); |
223 } | 217 } |
OLD | NEW |