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

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

Issue 23382008: Making OAuth2TokenService multi-login aware, updating callers, minor fixes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing to include the update to ProfileSyncService: r224220 Created 7 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 unified diff | Download patch
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>
(...skipping 12 matching lines...) Expand all
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/net/chrome_cookie_notification_details.h" 28 #include "chrome/browser/net/chrome_cookie_notification_details.h"
29 #include "chrome/browser/prefs/pref_service_syncable.h" 29 #include "chrome/browser/prefs/pref_service_syncable.h"
30 #include "chrome/browser/profiles/profile.h" 30 #include "chrome/browser/profiles/profile.h"
31 #include "chrome/browser/signin/about_signin_internals.h" 31 #include "chrome/browser/signin/about_signin_internals.h"
32 #include "chrome/browser/signin/about_signin_internals_factory.h" 32 #include "chrome/browser/signin/about_signin_internals_factory.h"
33 #include "chrome/browser/signin/profile_oauth2_token_service.h"
33 #include "chrome/browser/signin/signin_manager.h" 34 #include "chrome/browser/signin/signin_manager.h"
34 #include "chrome/browser/signin/signin_manager_factory.h" 35 #include "chrome/browser/signin/signin_manager_factory.h"
35 #include "chrome/browser/signin/token_service.h" 36 #include "chrome/browser/signin/token_service.h"
36 #include "chrome/browser/signin/token_service_factory.h" 37 #include "chrome/browser/signin/token_service_factory.h"
37 #include "chrome/browser/sync/backend_migrator.h" 38 #include "chrome/browser/sync/backend_migrator.h"
38 #include "chrome/browser/sync/glue/change_processor.h" 39 #include "chrome/browser/sync/glue/change_processor.h"
39 #include "chrome/browser/sync/glue/chrome_encryptor.h" 40 #include "chrome/browser/sync/glue/chrome_encryptor.h"
40 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h" 41 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
41 #include "chrome/browser/sync/glue/data_type_controller.h" 42 #include "chrome/browser/sync/glue/data_type_controller.h"
42 #include "chrome/browser/sync/glue/device_info.h" 43 #include "chrome/browser/sync/glue/device_info.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 false, 141 false,
141 }; 142 };
142 143
143 bool ShouldShowActionOnUI( 144 bool ShouldShowActionOnUI(
144 const syncer::SyncProtocolError& error) { 145 const syncer::SyncProtocolError& error) {
145 return (error.action != syncer::UNKNOWN_ACTION && 146 return (error.action != syncer::UNKNOWN_ACTION &&
146 error.action != syncer::DISABLE_SYNC_ON_CLIENT && 147 error.action != syncer::DISABLE_SYNC_ON_CLIENT &&
147 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT); 148 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT);
148 } 149 }
149 150
150 ProfileSyncService::ProfileSyncService(ProfileSyncComponentsFactory* factory, 151 ProfileSyncService::ProfileSyncService(
151 Profile* profile, 152 ProfileSyncComponentsFactory* factory,
152 SigninManagerBase* signin_manager, 153 Profile* profile,
153 OAuth2TokenService* oauth2_token_service, 154 SigninManagerBase* signin_manager,
154 StartBehavior start_behavior) 155 ProfileOAuth2TokenService* oauth2_token_service,
156 StartBehavior start_behavior)
155 : last_auth_error_(AuthError::AuthErrorNone()), 157 : last_auth_error_(AuthError::AuthErrorNone()),
156 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED), 158 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED),
157 factory_(factory), 159 factory_(factory),
158 profile_(profile), 160 profile_(profile),
159 // |profile| may be NULL in unit tests. 161 // |profile| may be NULL in unit tests.
160 sync_prefs_(profile_ ? profile_->GetPrefs() : NULL), 162 sync_prefs_(profile_ ? profile_->GetPrefs() : NULL),
161 sync_service_url_(kDevServerUrl), 163 sync_service_url_(kDevServerUrl),
162 data_type_requested_sync_startup_(false), 164 data_type_requested_sync_startup_(false),
163 is_first_time_sync_configure_(false), 165 is_first_time_sync_configure_(false),
164 backend_initialized_(false), 166 backend_initialized_(false),
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 } 209 }
208 210
209 bool ProfileSyncService::IsOAuthRefreshTokenAvailable() { 211 bool ProfileSyncService::IsOAuthRefreshTokenAvailable() {
210 // Function name doesn't reflect which token is checked. Function checks 212 // Function name doesn't reflect which token is checked. Function checks
211 // refresh token when use_oauth2_token_ is true (all platforms except android) 213 // refresh token when use_oauth2_token_ is true (all platforms except android)
212 // and sync token otherwise (for android). 214 // and sync token otherwise (for android).
213 // TODO(pavely): Remove "else" part once use_oauth2_token_ is gone. 215 // TODO(pavely): Remove "else" part once use_oauth2_token_ is gone.
214 if (use_oauth2_token_) { 216 if (use_oauth2_token_) {
215 if (!oauth2_token_service_) 217 if (!oauth2_token_service_)
216 return false; 218 return false;
217 return oauth2_token_service_->RefreshTokenIsAvailable(); 219 return oauth2_token_service_->RefreshTokenIsAvailable(
220 oauth2_token_service_->GetPrimaryAccountId());
218 } else { 221 } else {
219 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_); 222 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
220 if (!token_service) 223 if (!token_service)
221 return false; 224 return false;
222 225
223 return token_service->HasTokenForService(GaiaConstants::kSyncService); 226 return token_service->HasTokenForService(GaiaConstants::kSyncService);
224 } 227 }
225 } 228 }
226 229
227 void ProfileSyncService::Initialize() { 230 void ProfileSyncService::Initialize() {
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 } 707 }
705 default: { 708 default: {
706 // Show error to user. 709 // Show error to user.
707 UpdateAuthErrorState(error); 710 UpdateAuthErrorState(error);
708 } 711 }
709 } 712 }
710 } 713 }
711 714
712 void ProfileSyncService::OnRefreshTokenAvailable( 715 void ProfileSyncService::OnRefreshTokenAvailable(
713 const std::string& account_id) { 716 const std::string& account_id) {
714 OnRefreshTokensLoaded(); 717 if (oauth2_token_service_->GetPrimaryAccountId() == account_id)
718 OnRefreshTokensLoaded();
715 } 719 }
716 720
717 void ProfileSyncService::OnRefreshTokenRevoked( 721 void ProfileSyncService::OnRefreshTokenRevoked(
718 const std::string& account_id) { 722 const std::string& account_id) {
719 if (!IsOAuthRefreshTokenAvailable()) { 723 if (!IsOAuthRefreshTokenAvailable()) {
724 access_token_.clear();
720 // The additional check around IsOAuthRefreshTokenAvailable() above 725 // The additional check around IsOAuthRefreshTokenAvailable() above
721 // prevents us sounding the alarm if we actually have a valid token but 726 // prevents us sounding the alarm if we actually have a valid token but
722 // a refresh attempt by TokenService failed for any variety of reasons 727 // a refresh attempt by TokenService failed for any variety of reasons
723 // (e.g. flaky network). It's possible the token we do have is also 728 // (e.g. flaky network). It's possible the token we do have is also
724 // invalid, but in that case we should already have (or can expect) an 729 // invalid, but in that case we should already have (or can expect) an
725 // auth error sent from the sync backend. 730 // auth error sent from the sync backend.
726 UpdateAuthErrorState( 731 UpdateAuthErrorState(
727 GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED)); 732 GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED));
728 } 733 }
729 } 734 }
730 735
731 void ProfileSyncService::OnRefreshTokensLoaded() { 736 void ProfileSyncService::OnRefreshTokensLoaded() {
732 // This notification gets fired when TokenService loads the tokens 737 // This notification gets fired when TokenService loads the tokens
733 // from storage. 738 // from storage.
734 // Initialize the backend if sync is enabled. If the sync token was 739 // Initialize the backend if sync is enabled. If the sync token was
735 // not loaded, GetCredentials() will generate invalid credentials to 740 // not loaded, GetCredentials() will generate invalid credentials to
736 // cause the backend to generate an auth error (crbug.com/121755). 741 // cause the backend to generate an auth error (crbug.com/121755).
737 if (backend_) { 742 if (backend_) {
738 RequestAccessToken(); 743 RequestAccessToken();
739 } else { 744 } else {
740 TryStart(); 745 TryStart();
741 } 746 }
742 } 747 }
743 748
744 void ProfileSyncService::OnRefreshTokensCleared() {
745 access_token_.clear();
746 }
747
748 void ProfileSyncService::Shutdown() { 749 void ProfileSyncService::Shutdown() {
749 UnregisterAuthNotifications(); 750 UnregisterAuthNotifications();
750 751
751 if (profile_) 752 if (profile_)
752 SigninGlobalError::GetForProfile(profile_)->RemoveProvider(this); 753 SigninGlobalError::GetForProfile(profile_)->RemoveProvider(this);
753 754
754 ShutdownImpl(browser_sync::SyncBackendHost::STOP); 755 ShutdownImpl(browser_sync::SyncBackendHost::STOP);
755 756
756 if (sync_thread_) 757 if (sync_thread_)
757 sync_thread_->Stop(); 758 sync_thread_->Stop();
(...skipping 1137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1895 request_access_token_retry_timer_.Stop(); 1896 request_access_token_retry_timer_.Stop();
1896 OAuth2TokenService::ScopeSet oauth2_scopes; 1897 OAuth2TokenService::ScopeSet oauth2_scopes;
1897 if (profile_->IsManaged()) { 1898 if (profile_->IsManaged()) {
1898 oauth2_scopes.insert(GaiaConstants::kChromeSyncManagedOAuth2Scope); 1899 oauth2_scopes.insert(GaiaConstants::kChromeSyncManagedOAuth2Scope);
1899 } else { 1900 } else {
1900 oauth2_scopes.insert(GaiaConstants::kChromeSyncOAuth2Scope); 1901 oauth2_scopes.insert(GaiaConstants::kChromeSyncOAuth2Scope);
1901 } 1902 }
1902 1903
1903 // Invalidate previous token, otherwise token service will return the same 1904 // Invalidate previous token, otherwise token service will return the same
1904 // token again. 1905 // token again.
1905 if (!access_token_.empty()) 1906 const std::string& account_id = oauth2_token_service_->GetPrimaryAccountId();
1906 oauth2_token_service_->InvalidateToken(oauth2_scopes, access_token_); 1907 if (!access_token_.empty()) {
1908 oauth2_token_service_->InvalidateToken(
1909 account_id, oauth2_scopes, access_token_);
1910 }
1907 1911
1908 access_token_.clear(); 1912 access_token_.clear();
1909 access_token_request_ = 1913 access_token_request_ =
1910 oauth2_token_service_->StartRequest(oauth2_scopes, this); 1914 oauth2_token_service_->StartRequest(account_id, oauth2_scopes, this);
1911 } 1915 }
1912 1916
1913 void ProfileSyncService::SetEncryptionPassphrase(const std::string& passphrase, 1917 void ProfileSyncService::SetEncryptionPassphrase(const std::string& passphrase,
1914 PassphraseType type) { 1918 PassphraseType type) {
1915 // This should only be called when the backend has been initialized. 1919 // This should only be called when the backend has been initialized.
1916 DCHECK(sync_initialized()); 1920 DCHECK(sync_initialized());
1917 DCHECK(!(type == IMPLICIT && IsUsingSecondaryPassphrase())) << 1921 DCHECK(!(type == IMPLICIT && IsUsingSecondaryPassphrase())) <<
1918 "Data is already encrypted using an explicit passphrase"; 1922 "Data is already encrypted using an explicit passphrase";
1919 DCHECK(!(type == EXPLICIT && 1923 DCHECK(!(type == EXPLICIT &&
1920 passphrase_required_reason_ == syncer::REASON_DECRYPTION)) << 1924 passphrase_required_reason_ == syncer::REASON_DECRYPTION)) <<
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
2146 NOTREACHED(); 2150 NOTREACHED();
2147 #endif 2151 #endif
2148 } 2152 }
2149 2153
2150 return signin_->GetAuthenticatedUsername(); 2154 return signin_->GetAuthenticatedUsername();
2151 } 2155 }
2152 2156
2153 WeakHandle<syncer::JsEventHandler> ProfileSyncService::GetJsEventHandler() { 2157 WeakHandle<syncer::JsEventHandler> ProfileSyncService::GetJsEventHandler() {
2154 return MakeWeakHandle(sync_js_controller_.AsWeakPtr()); 2158 return MakeWeakHandle(sync_js_controller_.AsWeakPtr());
2155 } 2159 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/profile_sync_service.h ('k') | chrome/browser/sync/profile_sync_service_autofill_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698