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

Unified Diff: chrome/browser/sync/profile_sync_service.cc

Issue 9295044: Start moving signin code out of browser/sync. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review feedback Created 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/profile_sync_service.cc
diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc
index 20d6572c88a152dae4642585272d8ba38433488b..621a01708399bffb9d5c534f727368d3b7c61a31 100644
--- a/chrome/browser/sync/profile_sync_service.cc
+++ b/chrome/browser/sync/profile_sync_service.cc
@@ -48,6 +48,8 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/global_error_service.h"
#include "chrome/browser/ui/global_error_service_factory.h"
+#include "chrome/browser/ui/webui/signin/login_ui_service.h"
+#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/chrome_version_info.h"
@@ -157,6 +159,13 @@ bool ProfileSyncService::AreCredentialsAvailable(
return false;
}
+ // If we have start suppressed, then basically just act like we have no
+ // credentials (login is required to fix this, since we need the user's
+ // passphrase to encrypt/decrypt anyway).
+ // TODO(sync): Revisit this when we move to a server-based keystore.
+ if (sync_prefs_.IsStartSuppressed())
+ return false;
+
// CrOS user is always logged in. Chrome uses signin_ to check logged in.
if (signin_->GetAuthenticatedUsername().empty())
return false;
@@ -718,21 +727,14 @@ void ProfileSyncService::OnDataTypesChanged(
void ProfileSyncService::UpdateAuthErrorState(
const GoogleServiceAuthError& error) {
+ is_auth_in_progress_ = false;
last_auth_error_ = error;
- // Protect against the in-your-face dialogs that pop out of nowhere.
- // Require the user to click somewhere to run the setup wizard in the case
- // of a steady-state auth failure.
- if (WizardIsVisible()) {
- wizard_.Step(last_auth_error_.state() == AuthError::NONE ?
- SyncSetupWizard::GAIA_SUCCESS : SyncSetupWizard::GetLoginState());
- } else {
- auth_error_time_ = base::TimeTicks::Now();
- }
- if (!auth_start_time_.is_null()) {
- UMA_HISTOGRAM_TIMES("Sync.AuthorizationTimeInNetwork",
- base::TimeTicks::Now() - auth_start_time_);
- auth_start_time_ = base::TimeTicks();
+ if (WizardIsVisible() && last_auth_error_.state() != AuthError::NONE) {
+ // Got some kind of auth error while the wizard is visible. Exit out of
tim (not reviewing) 2012/02/14 02:11:21 err... why is this fatal? what happens to any com
Andrew T Wilson (Slow) 2012/02/14 05:23:52 Remember that this is dealing with a GAIA error *a
+ // the config flow (UI handler can notify the user or bring up the signin
+ // flow as appropriate).
+ wizard_.Step(SyncSetupWizard::FATAL_ERROR);
}
// Fan the notification out to interested UI-thread components.
@@ -744,8 +746,11 @@ void ProfileSyncService::OnAuthError() {
}
void ProfileSyncService::OnStopSyncingPermanently() {
+ UpdateAuthErrorState(
+ GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE));
+
if (SetupInProgress()) {
Andrew T Wilson (Slow) 2012/02/14 05:23:52 BTW, I'm changing this to abort whenever the wizar
- wizard_.Step(SyncSetupWizard::SETUP_ABORTED_BY_PENDING_CLEAR);
+ wizard_.Step(SyncSetupWizard::ABORT);
expect_sync_configuration_aborted_ = true;
}
sync_prefs_.SetStartSuppressed(true);
@@ -945,23 +950,9 @@ void ProfileSyncService::OnActionableError(const SyncProtocolError& error) {
}
void ProfileSyncService::ShowLoginDialog() {
- if (WizardIsVisible()) {
- wizard_.Focus();
- // Force the wizard to step to the login screen (which will only actually
- // happen if the transition is valid).
- wizard_.Step(SyncSetupWizard::GetLoginState());
- return;
- }
-
- if (!auth_error_time_.is_null()) {
- UMA_HISTOGRAM_LONG_TIMES("Sync.ReauthorizationTime",
- base::TimeTicks::Now() - auth_error_time_);
- auth_error_time_ = base::TimeTicks(); // Reset auth_error_time_ to null.
- }
-
- ShowSyncSetupWithWizard(SyncSetupWizard::GetLoginState());
-
- NotifyObservers();
+ // TODO(atwilson): Remove this API and have the callers directly call
+ // LoginUIService.
+ LoginUIServiceFactory::GetForProfile(profile_)->ShowLoginUI();
}
void ProfileSyncService::ShowErrorUI() {
@@ -970,12 +961,21 @@ void ProfileSyncService::ShowErrorUI() {
return;
}
- if (last_auth_error_.state() != AuthError::NONE)
+ // Figure out what kind of error we've encountered. There are only 3 kinds:
+ // 1) auth error.
+ // 2) server-initiated error
+ // 3) passphrase error
+ // Any other errors (such as unrecoverable error) should be handled by the UI
+ // itself and should not result in a call to ShowErrorUI.
tim (not reviewing) 2012/02/14 02:11:21 hm. so what about a failure to initialize / load t
Andrew T Wilson (Slow) 2012/02/14 05:23:52 This change just makes explicit what was previousl
+ if (last_auth_error_.state() != AuthError::NONE) {
ShowLoginDialog();
- else if (ShouldShowActionOnUI(last_actionable_error_))
+ } else if (ShouldShowActionOnUI(last_actionable_error_)) {
ShowSyncSetup(chrome::kPersonalOptionsSubPage);
- else
- ShowSyncSetupWithWizard(SyncSetupWizard::NONFATAL_ERROR);
+ } else {
+ // We should only get here for passphrase error.
+ DCHECK(IsPassphraseRequired());
+ ShowSyncSetupWithWizard(SyncSetupWizard::ENTER_PASSPHRASE);
+ }
}
void ProfileSyncService::ShowConfigure(bool sync_everything) {
@@ -1061,18 +1061,7 @@ bool ProfileSyncService::unrecoverable_error_detected() const {
}
bool ProfileSyncService::UIShouldDepictAuthInProgress() const {
- return is_auth_in_progress_;
-}
-
-void ProfileSyncService::SetUIShouldDepictAuthInProgress(
- bool auth_in_progress) {
- is_auth_in_progress_ = auth_in_progress;
- // TODO(atwilson): Figure out if we still need to track this or if we should
- // move this up to the UI (or break it out into two stats that track GAIA
- // auth and sync auth separately).
- if (is_auth_in_progress_)
- auth_start_time_ = base::TimeTicks::Now();
- NotifyObservers();
+ return signin()->AuthInProgress();
}
bool ProfileSyncService::IsPassphraseRequired() const {
@@ -1449,6 +1438,7 @@ void ProfileSyncService::Observe(int type,
details).ptr();
// The user has submitted credentials, which indicates they don't
// want to suppress start up anymore.
+ // TODO(sync): Remove this when sync is no longer tied to browser signin.
tim (not reviewing) 2012/02/14 02:11:21 should tie this to a bug (and mention in the bug t
Andrew T Wilson (Slow) 2012/02/14 05:23:52 Done.
sync_prefs_.SetStartSuppressed(false);
// Because we specify IMPLICIT to SetPassphrase, we know it won't override
@@ -1457,6 +1447,12 @@ void ProfileSyncService::Observe(int type,
// an explicit passphrase set so this becomes a no-op.
if (!successful->password.empty())
SetPassphrase(successful->password, IMPLICIT, INTERNAL);
+
+ if (!sync_initialized() ||
tim (not reviewing) 2012/02/14 02:11:21 Hm, so there's no way we can call UpdateAuthErrorS
Andrew T Wilson (Slow) 2012/02/14 05:23:52 We aren't actually changing the state - all we're
+ GetAuthError().state() != GoogleServiceAuthError::NONE) {
+ // Track the fact that we're still waiting for auth to complete.
+ is_auth_in_progress_ = true;
+ }
break;
}
case chrome::NOTIFICATION_TOKEN_REQUEST_FAILED: {

Powered by Google App Engine
This is Rietveld 408576698