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

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

Issue 8760019: Make the change in ProfileSyncService such that it declares success (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <algorithm> 7 #include <algorithm>
8 #include <cstddef> 8 #include <cstddef>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 typedef GoogleServiceAuthError AuthError; 77 typedef GoogleServiceAuthError AuthError;
78 78
79 const char* ProfileSyncService::kSyncServerUrl = 79 const char* ProfileSyncService::kSyncServerUrl =
80 "https://clients4.google.com/chrome-sync"; 80 "https://clients4.google.com/chrome-sync";
81 81
82 const char* ProfileSyncService::kDevServerUrl = 82 const char* ProfileSyncService::kDevServerUrl =
83 "https://clients4.google.com/chrome-sync/dev"; 83 "https://clients4.google.com/chrome-sync/dev";
84 84
85 static const int kSyncClearDataTimeoutInSeconds = 60; // 1 minute. 85 static const int kSyncClearDataTimeoutInSeconds = 60; // 1 minute.
86 86
87 static const char* kRelevantTokenServices[] = {
88 GaiaConstants::kSyncService,
89 GaiaConstants::kGaiaOAuth2LoginRefreshToken};
90 static const int kRelevantTokenServicesCount =
91 arraysize(kRelevantTokenServices);
92
93 // Helper to check if the given token service is relevant for sync.
94 static bool IsTokenServiceRelevant(const std::string& service) {
95 for (int i = 0; i < kRelevantTokenServicesCount; ++i) {
96 if (service == kRelevantTokenServices[i])
97 return true;
98 }
99 return false;
100 }
87 101
88 bool ShouldShowActionOnUI( 102 bool ShouldShowActionOnUI(
89 const browser_sync::SyncProtocolError& error) { 103 const browser_sync::SyncProtocolError& error) {
90 return (error.action != browser_sync::UNKNOWN_ACTION && 104 return (error.action != browser_sync::UNKNOWN_ACTION &&
91 error.action != browser_sync::DISABLE_SYNC_ON_CLIENT); 105 error.action != browser_sync::DISABLE_SYNC_ON_CLIENT);
92 } 106 }
93 107
94 ProfileSyncService::ProfileSyncService(ProfileSyncComponentsFactory* factory, 108 ProfileSyncService::ProfileSyncService(ProfileSyncComponentsFactory* factory,
95 Profile* profile, 109 Profile* profile,
96 SigninManager* signin_manager, 110 SigninManager* signin_manager,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 if (!cros_user_.empty()) 148 if (!cros_user_.empty())
135 auto_start_enabled_ = true; 149 auto_start_enabled_ = true;
136 } 150 }
137 151
138 ProfileSyncService::~ProfileSyncService() { 152 ProfileSyncService::~ProfileSyncService() {
139 sync_prefs_.RemoveSyncPrefObserver(this); 153 sync_prefs_.RemoveSyncPrefObserver(this);
140 Shutdown(false); 154 Shutdown(false);
141 } 155 }
142 156
143 bool ProfileSyncService::AreCredentialsAvailable() { 157 bool ProfileSyncService::AreCredentialsAvailable() {
158 return AreCredentialsAvailable(false);
159 }
160
161 bool ProfileSyncService::AreCredentialsAvailable(
162 bool check_oauth_login_token) {
144 if (IsManaged()) { 163 if (IsManaged()) {
145 return false; 164 return false;
146 } 165 }
147 166
148 // CrOS user is always logged in. Chrome uses signin_ to check logged in. 167 // CrOS user is always logged in. Chrome uses signin_ to check logged in.
149 if (!cros_user_.empty() || !signin_->GetUsername().empty()) { 168 if (cros_user_.empty() && signin_->GetUsername().empty())
150 // TODO(chron): Verify CrOS unit test behavior. 169 return false;
151 return profile()->GetTokenService() && 170
152 profile()->GetTokenService()->HasTokenForService( 171 TokenService* token_service = profile()->GetTokenService();
153 browser_sync::SyncServiceName()); 172 if (!token_service)
154 } 173 return false;
155 return false; 174
175 // TODO(chron): Verify CrOS unit test behavior.
176 if (!token_service->HasTokenForService(browser_sync::SyncServiceName()))
177 return false;
178 return !check_oauth_login_token || token_service->HasOAuthLoginToken();
156 } 179 }
157 180
158 void ProfileSyncService::Initialize() { 181 void ProfileSyncService::Initialize() {
159 InitSettings(); 182 InitSettings();
160 183
161 // We clear this here (vs Shutdown) because we want to remember that an error 184 // We clear this here (vs Shutdown) because we want to remember that an error
162 // happened on shutdown so we can display details (message, location) about it 185 // happened on shutdown so we can display details (message, location) about it
163 // in about:sync. 186 // in about:sync.
164 ClearStaleErrors(); 187 ClearStaleErrors();
165 188
(...skipping 1262 matching lines...) Expand 10 before | Expand all | Expand 10 after
1428 } 1451 }
1429 break; 1452 break;
1430 } 1453 }
1431 case chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED: { 1454 case chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED: {
1432 GoogleServiceAuthError error = 1455 GoogleServiceAuthError error =
1433 *(content::Details<const GoogleServiceAuthError>(details).ptr()); 1456 *(content::Details<const GoogleServiceAuthError>(details).ptr());
1434 UpdateAuthErrorState(error); 1457 UpdateAuthErrorState(error);
1435 break; 1458 break;
1436 } 1459 }
1437 case chrome::NOTIFICATION_TOKEN_REQUEST_FAILED: { 1460 case chrome::NOTIFICATION_TOKEN_REQUEST_FAILED: {
1438 GoogleServiceAuthError error( 1461 const TokenService::TokenRequestFailedDetails& token_details =
1439 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); 1462 *(content::Details<const TokenService::TokenRequestFailedDetails>(
1440 UpdateAuthErrorState(error); 1463 details).ptr());
1464 if (IsTokenServiceRelevant(token_details.service())) {
1465 GoogleServiceAuthError error(
1466 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
1467 UpdateAuthErrorState(error);
1468 }
1441 break; 1469 break;
1442 } 1470 }
1443 case chrome::NOTIFICATION_TOKEN_AVAILABLE: { 1471 case chrome::NOTIFICATION_TOKEN_AVAILABLE: {
1444 if (AreCredentialsAvailable()) { 1472 const TokenService::TokenAvailableDetails& token_details =
1473 *(content::Details<const TokenService::TokenAvailableDetails>(
1474 details).ptr());
1475 if (IsTokenServiceRelevant(token_details.service()) &&
1476 AreCredentialsAvailable(true)) {
1445 if (backend_initialized_) { 1477 if (backend_initialized_) {
1446 backend_->UpdateCredentials(GetCredentials()); 1478 backend_->UpdateCredentials(GetCredentials());
1447 } 1479 }
1448 if (!sync_prefs_.IsStartSuppressed()) 1480 if (!sync_prefs_.IsStartSuppressed())
1449 StartUp(); 1481 StartUp();
1450 } 1482 }
1451 break; 1483 break;
1452 } 1484 }
1453 case chrome::NOTIFICATION_TOKEN_LOADING_FINISHED: { 1485 case chrome::NOTIFICATION_TOKEN_LOADING_FINISHED: {
1454 // If not in Chrome OS, and we have a username without tokens, 1486 // This notification gets fired when TokenService loads the tokens
1455 // the user will need to signin again, so sign out. 1487 // from storage. Here we only check if the chromiumsync token is
1456 if (cros_user_.empty() && 1488 // available (versus both chromiumsync and oauth login tokens) to
1457 !signin_->GetUsername().empty() && 1489 // start up sync successfully for already logged in users who may
1458 !AreCredentialsAvailable()) { 1490 // only have chromiumsync token if they logged in before the code
1491 // to generate oauth login token released.
1492 if (AreCredentialsAvailable()) {
1493 // Initialize the backend if sync token was loaded.
1494 if (backend_initialized_) {
1495 backend_->UpdateCredentials(GetCredentials());
1496 }
1497 if (!sync_prefs_.IsStartSuppressed())
1498 StartUp();
1499 } else if (cros_user_.empty() && !signin_->GetUsername().empty()) {
1500 // If not in Chrome OS, and we have a username without tokens,
1501 // the user will need to signin again, so sign out.
1459 DisableForUser(); 1502 DisableForUser();
1460 } 1503 }
1461 break; 1504 break;
1462 } 1505 }
1463 default: { 1506 default: {
1464 NOTREACHED(); 1507 NOTREACHED();
1465 } 1508 }
1466 } 1509 }
1467 } 1510 }
1468 1511
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1550 << "Unrecoverable error."; 1593 << "Unrecoverable error.";
1551 } else { 1594 } else {
1552 DVLOG(0) << "ConfigureDataTypeManager not invoked because backend is not " 1595 DVLOG(0) << "ConfigureDataTypeManager not invoked because backend is not "
1553 << "initialized"; 1596 << "initialized";
1554 } 1597 }
1555 } 1598 }
1556 1599
1557 const FailedDatatypesHandler& ProfileSyncService::failed_datatypes_handler() { 1600 const FailedDatatypesHandler& ProfileSyncService::failed_datatypes_handler() {
1558 return failed_datatypes_handler_; 1601 return failed_datatypes_handler_;
1559 } 1602 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/profile_sync_service.h ('k') | chrome/browser/sync/profile_sync_service_startup_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698