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

Side by Side Diff: chrome/browser/sync/profile_sync_service.cc

Issue 162943002: Revert of [sync]: add ManagedUserSigninManagerWrapper and pass to ProfileSyncService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/sync/profile_sync_service.h" 5 #include "chrome/browser/sync/profile_sync_service.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/callback.h" 14 #include "base/callback.h"
15 #include "base/command_line.h" 15 #include "base/command_line.h"
16 #include "base/compiler_specific.h" 16 #include "base/compiler_specific.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/memory/ref_counted.h" 18 #include "base/memory/ref_counted.h"
19 #include "base/message_loop/message_loop.h" 19 #include "base/message_loop/message_loop.h"
20 #include "base/metrics/histogram.h" 20 #include "base/metrics/histogram.h"
21 #include "base/strings/string16.h" 21 #include "base/strings/string16.h"
22 #include "base/strings/stringprintf.h" 22 #include "base/strings/stringprintf.h"
23 #include "base/threading/thread_restrictions.h" 23 #include "base/threading/thread_restrictions.h"
24 #include "build/build_config.h" 24 #include "build/build_config.h"
25 #include "chrome/browser/browser_process.h" 25 #include "chrome/browser/browser_process.h"
26 #include "chrome/browser/chrome_notification_types.h" 26 #include "chrome/browser/chrome_notification_types.h"
27 #include "chrome/browser/defaults.h" 27 #include "chrome/browser/defaults.h"
28 #include "chrome/browser/managed_mode/managed_user_signin_manager_wrapper.h"
29 #include "chrome/browser/net/chrome_cookie_notification_details.h" 28 #include "chrome/browser/net/chrome_cookie_notification_details.h"
30 #include "chrome/browser/prefs/pref_service_syncable.h" 29 #include "chrome/browser/prefs/pref_service_syncable.h"
31 #include "chrome/browser/profiles/profile.h" 30 #include "chrome/browser/profiles/profile.h"
32 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" 31 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
33 #include "chrome/browser/signin/about_signin_internals.h" 32 #include "chrome/browser/signin/about_signin_internals.h"
34 #include "chrome/browser/signin/about_signin_internals_factory.h" 33 #include "chrome/browser/signin/about_signin_internals_factory.h"
35 #include "chrome/browser/signin/profile_oauth2_token_service.h" 34 #include "chrome/browser/signin/profile_oauth2_token_service.h"
36 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 35 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
37 #include "chrome/browser/signin/signin_manager.h" 36 #include "chrome/browser/signin/signin_manager.h"
38 #include "chrome/browser/signin/signin_manager_factory.h" 37 #include "chrome/browser/signin/signin_manager_factory.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 bool ShouldShowActionOnUI( 151 bool ShouldShowActionOnUI(
153 const syncer::SyncProtocolError& error) { 152 const syncer::SyncProtocolError& error) {
154 return (error.action != syncer::UNKNOWN_ACTION && 153 return (error.action != syncer::UNKNOWN_ACTION &&
155 error.action != syncer::DISABLE_SYNC_ON_CLIENT && 154 error.action != syncer::DISABLE_SYNC_ON_CLIENT &&
156 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT); 155 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT);
157 } 156 }
158 157
159 ProfileSyncService::ProfileSyncService( 158 ProfileSyncService::ProfileSyncService(
160 ProfileSyncComponentsFactory* factory, 159 ProfileSyncComponentsFactory* factory,
161 Profile* profile, 160 Profile* profile,
162 ManagedUserSigninManagerWrapper* signin_wrapper, 161 SigninManagerBase* signin_manager,
163 ProfileOAuth2TokenService* oauth2_token_service, 162 ProfileOAuth2TokenService* oauth2_token_service,
164 StartBehavior start_behavior) 163 StartBehavior start_behavior)
165 : OAuth2TokenService::Consumer("sync"), 164 : OAuth2TokenService::Consumer("sync"),
166 last_auth_error_(AuthError::AuthErrorNone()), 165 last_auth_error_(AuthError::AuthErrorNone()),
167 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED), 166 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED),
168 factory_(factory), 167 factory_(factory),
169 profile_(profile), 168 profile_(profile),
170 sync_prefs_(profile_->GetPrefs()), 169 sync_prefs_(profile_->GetPrefs()),
171 sync_service_url_(kDevServerUrl), 170 sync_service_url_(kDevServerUrl),
172 data_type_requested_sync_startup_(false), 171 data_type_requested_sync_startup_(false),
173 is_first_time_sync_configure_(false), 172 is_first_time_sync_configure_(false),
174 backend_initialized_(false), 173 backend_initialized_(false),
175 sync_disabled_by_admin_(false), 174 sync_disabled_by_admin_(false),
176 is_auth_in_progress_(false), 175 is_auth_in_progress_(false),
177 signin_(signin_wrapper), 176 signin_(signin_manager),
178 unrecoverable_error_reason_(ERROR_REASON_UNSET), 177 unrecoverable_error_reason_(ERROR_REASON_UNSET),
179 expect_sync_configuration_aborted_(false), 178 expect_sync_configuration_aborted_(false),
180 encrypted_types_(syncer::SyncEncryptionHandler::SensitiveTypes()), 179 encrypted_types_(syncer::SyncEncryptionHandler::SensitiveTypes()),
181 encrypt_everything_(false), 180 encrypt_everything_(false),
182 encryption_pending_(false), 181 encryption_pending_(false),
183 auto_start_enabled_(start_behavior == AUTO_START), 182 auto_start_enabled_(start_behavior == AUTO_START),
184 configure_status_(DataTypeManager::UNKNOWN), 183 configure_status_(DataTypeManager::UNKNOWN),
185 setup_in_progress_(false), 184 setup_in_progress_(false),
186 oauth2_token_service_(oauth2_token_service), 185 oauth2_token_service_(oauth2_token_service),
187 request_access_token_backoff_(&kRequestAccessTokenBackoffPolicy), 186 request_access_token_backoff_(&kRequestAccessTokenBackoffPolicy),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 // Shutdown() should have been called before destruction. 218 // Shutdown() should have been called before destruction.
220 CHECK(!backend_initialized_); 219 CHECK(!backend_initialized_);
221 } 220 }
222 221
223 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() { 222 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() {
224 // Exit if sync is disabled. 223 // Exit if sync is disabled.
225 if (IsManaged() || sync_prefs_.IsStartSuppressed()) 224 if (IsManaged() || sync_prefs_.IsStartSuppressed())
226 return false; 225 return false;
227 226
228 // Sync is logged in if there is a non-empty effective username. 227 // Sync is logged in if there is a non-empty effective username.
229 return !signin_->GetEffectiveUsername().empty(); 228 return !GetEffectiveUsername().empty();
230 } 229 }
231 230
232 bool ProfileSyncService::IsOAuthRefreshTokenAvailable() { 231 bool ProfileSyncService::IsOAuthRefreshTokenAvailable() {
233 if (!oauth2_token_service_) 232 if (!oauth2_token_service_)
234 return false; 233 return false;
235 234
236 return oauth2_token_service_->RefreshTokenIsAvailable( 235 return oauth2_token_service_->RefreshTokenIsAvailable(GetAccountIdToUse());
237 signin_->GetAccountIdToUse());
238 } 236 }
239 237
240 void ProfileSyncService::Initialize() { 238 void ProfileSyncService::Initialize() {
241 InitSettings(); 239 InitSettings();
242 240
243 // We clear this here (vs Shutdown) because we want to remember that an error 241 // We clear this here (vs Shutdown) because we want to remember that an error
244 // happened on shutdown so we can display details (message, location) about it 242 // happened on shutdown so we can display details (message, location) about it
245 // in about:sync. 243 // in about:sync.
246 ClearStaleErrors(); 244 ClearStaleErrors();
247 245
248 sync_prefs_.AddSyncPrefObserver(this); 246 sync_prefs_.AddSyncPrefObserver(this);
249 247
250 // For now, the only thing we can do through policy is to turn sync off. 248 // For now, the only thing we can do through policy is to turn sync off.
251 if (IsManaged()) { 249 if (IsManaged()) {
252 DisableForUser(); 250 DisableForUser();
253 return; 251 return;
254 } 252 }
255 253
256 RegisterAuthNotifications(); 254 RegisterAuthNotifications();
257 255
258 if (!HasSyncSetupCompleted() || signin_->GetEffectiveUsername().empty()) { 256 if (!HasSyncSetupCompleted() || GetEffectiveUsername().empty()) {
259 // Clean up in case of previous crash / setup abort / signout. 257 // Clean up in case of previous crash / setup abort / signout.
260 DisableForUser(); 258 DisableForUser();
261 } 259 }
262 260
263 TrySyncDatatypePrefRecovery(); 261 TrySyncDatatypePrefRecovery();
264 262
265 last_synced_time_ = sync_prefs_.GetLastSyncedTime(); 263 last_synced_time_ = sync_prefs_.GetLastSyncedTime();
266 264
267 #if defined(OS_CHROMEOS) 265 #if defined(OS_CHROMEOS)
268 std::string bootstrap_token = sync_prefs_.GetEncryptionBootstrapToken(); 266 std::string bootstrap_token = sync_prefs_.GetEncryptionBootstrapToken();
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 } else { 527 } else {
530 LOG(WARNING) << "The following sync URL specified at the command-line " 528 LOG(WARNING) << "The following sync URL specified at the command-line "
531 << "is invalid: " << value; 529 << "is invalid: " << value;
532 } 530 }
533 } 531 }
534 } 532 }
535 } 533 }
536 534
537 SyncCredentials ProfileSyncService::GetCredentials() { 535 SyncCredentials ProfileSyncService::GetCredentials() {
538 SyncCredentials credentials; 536 SyncCredentials credentials;
539 credentials.email = signin_->GetEffectiveUsername(); 537 credentials.email = GetEffectiveUsername();
540 DCHECK(!credentials.email.empty()); 538 DCHECK(!credentials.email.empty());
541 credentials.sync_token = access_token_; 539 credentials.sync_token = access_token_;
542 540
543 if (credentials.sync_token.empty()) 541 if (credentials.sync_token.empty())
544 credentials.sync_token = "credentials_lost"; 542 credentials.sync_token = "credentials_lost";
545 return credentials; 543 return credentials;
546 } 544 }
547 545
548 void ProfileSyncService::InitializeBackend(bool delete_stale_data) { 546 void ProfileSyncService::InitializeBackend(bool delete_stale_data) {
549 if (!backend_) { 547 if (!backend_) {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 } 739 }
742 default: { 740 default: {
743 // Show error to user. 741 // Show error to user.
744 UpdateAuthErrorState(error); 742 UpdateAuthErrorState(error);
745 } 743 }
746 } 744 }
747 } 745 }
748 746
749 void ProfileSyncService::OnRefreshTokenAvailable( 747 void ProfileSyncService::OnRefreshTokenAvailable(
750 const std::string& account_id) { 748 const std::string& account_id) {
751 if (account_id == signin_->GetAccountIdToUse()) 749 if (account_id == GetAccountIdToUse())
752 OnRefreshTokensLoaded(); 750 OnRefreshTokensLoaded();
753 } 751 }
754 752
755 void ProfileSyncService::OnRefreshTokenRevoked( 753 void ProfileSyncService::OnRefreshTokenRevoked(
756 const std::string& account_id) { 754 const std::string& account_id) {
757 if (!IsOAuthRefreshTokenAvailable()) { 755 if (!IsOAuthRefreshTokenAvailable()) {
758 access_token_.clear(); 756 access_token_.clear();
759 // The additional check around IsOAuthRefreshTokenAvailable() above 757 // The additional check around IsOAuthRefreshTokenAvailable() above
760 // prevents us sounding the alarm if we actually have a valid token but 758 // prevents us sounding the alarm if we actually have a valid token but
761 // a refresh attempt failed for any variety of reasons 759 // a refresh attempt failed for any variety of reasons
(...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1961 request_access_token_retry_timer_.Stop(); 1959 request_access_token_retry_timer_.Stop();
1962 OAuth2TokenService::ScopeSet oauth2_scopes; 1960 OAuth2TokenService::ScopeSet oauth2_scopes;
1963 if (profile_->IsManaged()) { 1961 if (profile_->IsManaged()) {
1964 oauth2_scopes.insert(GaiaConstants::kChromeSyncManagedOAuth2Scope); 1962 oauth2_scopes.insert(GaiaConstants::kChromeSyncManagedOAuth2Scope);
1965 } else { 1963 } else {
1966 oauth2_scopes.insert(GaiaConstants::kChromeSyncOAuth2Scope); 1964 oauth2_scopes.insert(GaiaConstants::kChromeSyncOAuth2Scope);
1967 } 1965 }
1968 1966
1969 // Invalidate previous token, otherwise token service will return the same 1967 // Invalidate previous token, otherwise token service will return the same
1970 // token again. 1968 // token again.
1971 const std::string& account_id = signin_->GetAccountIdToUse(); 1969 const std::string& account_id = GetAccountIdToUse();
1972 if (!access_token_.empty()) { 1970 if (!access_token_.empty()) {
1973 oauth2_token_service_->InvalidateToken( 1971 oauth2_token_service_->InvalidateToken(
1974 account_id, oauth2_scopes, access_token_); 1972 account_id, oauth2_scopes, access_token_);
1975 } 1973 }
1976 1974
1977 access_token_.clear(); 1975 access_token_.clear();
1978 1976
1979 token_request_time_ = base::Time::Now(); 1977 token_request_time_ = base::Time::Now();
1980 token_receive_time_ = base::Time(); 1978 token_receive_time_ = base::Time();
1981 next_token_request_time_ = base::Time(); 1979 next_token_request_time_ = base::Time();
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
2147 if (backend_) { 2145 if (backend_) {
2148 backend_->UnregisterInvalidationIds(); 2146 backend_->UnregisterInvalidationIds();
2149 } 2147 }
2150 ShutdownImpl(browser_sync::SyncBackendHost::STOP_AND_CLAIM_THREAD); 2148 ShutdownImpl(browser_sync::SyncBackendHost::STOP_AND_CLAIM_THREAD);
2151 } 2149 }
2152 2150
2153 bool ProfileSyncService::IsStartSuppressed() const { 2151 bool ProfileSyncService::IsStartSuppressed() const {
2154 return sync_prefs_.IsStartSuppressed(); 2152 return sync_prefs_.IsStartSuppressed();
2155 } 2153 }
2156 2154
2157 SigninManagerBase* ProfileSyncService::signin() const {
2158 return signin_->GetOriginal();
2159 }
2160
2161 void ProfileSyncService::UnsuppressAndStart() { 2155 void ProfileSyncService::UnsuppressAndStart() {
2162 DCHECK(profile_); 2156 DCHECK(profile_);
2163 sync_prefs_.SetStartSuppressed(false); 2157 sync_prefs_.SetStartSuppressed(false);
2164 // Set username in SigninManager, as SigninManager::OnGetUserInfoSuccess 2158 // Set username in SigninManager, as SigninManager::OnGetUserInfoSuccess
2165 // is never called for some clients. 2159 // is never called for some clients.
2166 if (signin_.get() && 2160 if (signin_ && signin_->GetAuthenticatedUsername().empty()) {
2167 signin_->GetOriginal()->GetAuthenticatedUsername().empty()) { 2161 signin_->SetAuthenticatedUsername(sync_prefs_.GetGoogleServicesUsername());
2168 signin_->GetOriginal()->SetAuthenticatedUsername(
2169 sync_prefs_.GetGoogleServicesUsername());
2170 } 2162 }
2171 TryStart(); 2163 TryStart();
2172 } 2164 }
2173 2165
2174 void ProfileSyncService::AcknowledgeSyncedTypes() { 2166 void ProfileSyncService::AcknowledgeSyncedTypes() {
2175 sync_prefs_.AcknowledgeSyncedTypes(GetRegisteredDataTypes()); 2167 sync_prefs_.AcknowledgeSyncedTypes(GetRegisteredDataTypes());
2176 } 2168 }
2177 2169
2178 void ProfileSyncService::ReconfigureDatatypeManager() { 2170 void ProfileSyncService::ReconfigureDatatypeManager() {
2179 // If we haven't initialized yet, don't configure the DTM as it could cause 2171 // If we haven't initialized yet, don't configure the DTM as it could cause
(...skipping 29 matching lines...) Expand all
2209 } 2201 }
2210 2202
2211 bool ProfileSyncService::IsRetryingAccessTokenFetchForTest() const { 2203 bool ProfileSyncService::IsRetryingAccessTokenFetchForTest() const {
2212 return request_access_token_retry_timer_.IsRunning(); 2204 return request_access_token_retry_timer_.IsRunning();
2213 } 2205 }
2214 2206
2215 std::string ProfileSyncService::GetAccessTokenForTest() const { 2207 std::string ProfileSyncService::GetAccessTokenForTest() const {
2216 return access_token_; 2208 return access_token_;
2217 } 2209 }
2218 2210
2211 std::string ProfileSyncService::GetEffectiveUsername() {
2212 if (profile_->IsManaged()) {
2213 #if defined(ENABLE_MANAGED_USERS)
2214 DCHECK_EQ(std::string(), signin_->GetAuthenticatedUsername());
2215 return managed_users::kManagedUserPseudoEmail;
2216 #else
2217 NOTREACHED();
2218 #endif
2219 }
2220
2221 return signin_->GetAuthenticatedUsername();
2222 }
2223
2224 std::string ProfileSyncService::GetAccountIdToUse() {
2225 if (profile_->IsManaged()) {
2226 #if defined(ENABLE_MANAGED_USERS)
2227 return managed_users::kManagedUserPseudoEmail;
2228 #else
2229 NOTREACHED();
2230 #endif
2231 }
2232
2233 // TODO(fgorski): Use GetPrimaryAccountId() when it's available.
2234 return signin_->GetAuthenticatedUsername();
2235 }
2236
2219 WeakHandle<syncer::JsEventHandler> ProfileSyncService::GetJsEventHandler() { 2237 WeakHandle<syncer::JsEventHandler> ProfileSyncService::GetJsEventHandler() {
2220 return MakeWeakHandle(sync_js_controller_.AsWeakPtr()); 2238 return MakeWeakHandle(sync_js_controller_.AsWeakPtr());
2221 } 2239 }
2222 2240
2223 syncer::SyncableService* ProfileSyncService::GetSessionsSyncableService() { 2241 syncer::SyncableService* ProfileSyncService::GetSessionsSyncableService() {
2224 return sessions_sync_manager_.get(); 2242 return sessions_sync_manager_.get();
2225 } 2243 }
2226 2244
2227 ProfileSyncService::SyncTokenStatus::SyncTokenStatus() 2245 ProfileSyncService::SyncTokenStatus::SyncTokenStatus()
2228 : connection_status(syncer::CONNECTION_NOT_ATTEMPTED), 2246 : connection_status(syncer::CONNECTION_NOT_ATTEMPTED),
(...skipping 10 matching lines...) Expand all
2239 status.last_get_token_error = last_get_token_error_; 2257 status.last_get_token_error = last_get_token_error_;
2240 if (request_access_token_retry_timer_.IsRunning()) 2258 if (request_access_token_retry_timer_.IsRunning())
2241 status.next_token_request_time = next_token_request_time_; 2259 status.next_token_request_time = next_token_request_time_;
2242 return status; 2260 return status;
2243 } 2261 }
2244 2262
2245 void ProfileSyncService::OverrideNetworkResourcesForTest( 2263 void ProfileSyncService::OverrideNetworkResourcesForTest(
2246 scoped_ptr<syncer::NetworkResources> network_resources) { 2264 scoped_ptr<syncer::NetworkResources> network_resources) {
2247 network_resources_ = network_resources.Pass(); 2265 network_resources_ = network_resources.Pass();
2248 } 2266 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/profile_sync_service.h ('k') | chrome/browser/sync/profile_sync_service_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698