| Index: chrome/browser/sync/sync_ui_util.cc
|
| diff --git a/chrome/browser/sync/sync_ui_util.cc b/chrome/browser/sync/sync_ui_util.cc
|
| index 43db6f66faf507af2eb6a6647ffef957fdd810e7..a41619e52c3bff2d6fe67488c97f76295b9180f9 100644
|
| --- a/chrome/browser/sync/sync_ui_util.cc
|
| +++ b/chrome/browser/sync/sync_ui_util.cc
|
| @@ -11,7 +11,9 @@
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/profiles/profile_manager.h"
|
| +#include "chrome/browser/signin/signin_global_error.h"
|
| #include "chrome/browser/signin/signin_manager.h"
|
| +#include "chrome/browser/signin/signin_ui_util.h"
|
| #include "chrome/browser/sync/profile_sync_service.h"
|
| #include "chrome/browser/sync/profile_sync_service_factory.h"
|
| #include "chrome/browser/ui/browser.h"
|
| @@ -39,73 +41,26 @@ namespace sync_ui_util {
|
|
|
| namespace {
|
|
|
| -// Given an authentication state this helper function returns various labels
|
| -// that can be used to display information about the state.
|
| -void GetStatusLabelsForAuthError(const AuthError& auth_error,
|
| - const ProfileSyncService& service,
|
| - string16* status_label,
|
| - string16* link_label) {
|
| - string16 username = UTF8ToUTF16(service.profile()->GetPrefs()->GetString(
|
| - prefs::kGoogleServicesUsername));
|
| - string16 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_NAME);
|
| - if (link_label)
|
| - link_label->assign(l10n_util::GetStringUTF16(IDS_SYNC_RELOGIN_LINK_LABEL));
|
| -
|
| - switch (auth_error.state()) {
|
| - case AuthError::INVALID_GAIA_CREDENTIALS:
|
| - case AuthError::ACCOUNT_DELETED:
|
| - case AuthError::ACCOUNT_DISABLED:
|
| - // If the user name is empty then the first login failed, otherwise the
|
| - // credentials are out-of-date.
|
| - if (username.empty()) {
|
| - if (status_label) {
|
| - status_label->assign(
|
| - l10n_util::GetStringUTF16(IDS_SYNC_INVALID_USER_CREDENTIALS));
|
| - }
|
| - } else {
|
| - if (status_label) {
|
| - status_label->assign(
|
| - l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_INFO_OUT_OF_DATE));
|
| - }
|
| - }
|
| - break;
|
| - case AuthError::SERVICE_UNAVAILABLE:
|
| - if (status_label) {
|
| - status_label->assign(
|
| - l10n_util::GetStringUTF16(IDS_SYNC_SERVICE_UNAVAILABLE));
|
| - }
|
| - if (link_label)
|
| - link_label->clear();
|
| - break;
|
| - case AuthError::CONNECTION_FAILED:
|
| - // Note that there is little the user can do if the server is not
|
| - // reachable. Since attempting to re-connect is done automatically by
|
| - // the Syncer, we do not show the (re)login link.
|
| - if (status_label) {
|
| - status_label->assign(
|
| - l10n_util::GetStringFUTF16(IDS_SYNC_SERVER_IS_UNREACHABLE,
|
| - product_name));
|
| - }
|
| - break;
|
| - default:
|
| - if (status_label) {
|
| - status_label->assign(l10n_util::GetStringUTF16(
|
| - IDS_SYNC_ERROR_SIGNING_IN));
|
| - }
|
| - break;
|
| - }
|
| -}
|
| -
|
| // Returns the message that should be displayed when the user is authenticated
|
| // and can connect to the sync server. If the user hasn't yet authenticated, an
|
| // empty string is returned.
|
| string16 GetSyncedStateStatusLabel(ProfileSyncService* service,
|
| + const SigninManager& signin,
|
| StatusLabelStyle style) {
|
| - if (!service->sync_initialized())
|
| + string16 user_name = UTF8ToUTF16(signin.GetAuthenticatedUsername());
|
| +
|
| + if (!user_name.empty() &&
|
| + (!service || service->IsManaged())) {
|
| + // User is signed in, but sync is disabled.
|
| + return l10n_util::GetStringFUTF16(IDS_SIGNED_IN_WITH_SYNC_DISABLED,
|
| + user_name);
|
| + }
|
| +
|
| + if (!service || !service->sync_initialized()) {
|
| + // User is not signed in, or sync is still initializing.
|
| return string16();
|
| + }
|
|
|
| - string16 user_name = UTF8ToUTF16(service->profile()->GetPrefs()->GetString(
|
| - prefs::kGoogleServicesUsername));
|
| DCHECK(!user_name.empty());
|
|
|
| // Message may also carry additional advice with an HTML link, if acceptable.
|
| @@ -164,19 +119,14 @@ MessageType GetStatusInfo(ProfileSyncService* service,
|
|
|
| MessageType result_type(SYNCED);
|
|
|
| - if (!service) {
|
| + if (signin.GetAuthenticatedUsername().empty())
|
| return PRE_SYNCED;
|
| - }
|
| -
|
| - if (service->HasSyncSetupCompleted()) {
|
| - ProfileSyncService::Status status;
|
| - service->QueryDetailedSyncStatus(&status);
|
| - const AuthError& auth_error = service->GetAuthError();
|
|
|
| + if (!service || service->IsManaged() || service->HasSyncSetupCompleted()) {
|
| // The order or priority is going to be: 1. Unrecoverable errors.
|
| // 2. Auth errors. 3. Protocol errors. 4. Passphrase errors.
|
|
|
| - if (service->HasUnrecoverableError()) {
|
| + if (service && service->HasUnrecoverableError()) {
|
| if (status_label) {
|
| status_label->assign(l10n_util::GetStringFUTF16(
|
| IDS_SYNC_STATUS_UNRECOVERABLE_ERROR,
|
| @@ -195,52 +145,59 @@ MessageType GetStatusInfo(ProfileSyncService* service,
|
| }
|
|
|
| // No auth in progress check for an auth error.
|
| + AuthError auth_error = signin.signin_global_error()->GetLastAuthError();
|
| if (auth_error.state() != AuthError::NONE) {
|
| - if (status_label && link_label) {
|
| - GetStatusLabelsForAuthError(
|
| - auth_error, *service, status_label, link_label);
|
| - }
|
| + if (status_label && link_label)
|
| + signin_ui_util::GetStatusLabelsForAuthError(
|
| + signin, status_label, link_label);
|
| return SYNC_ERROR;
|
| }
|
|
|
| - // We dont have an auth error. Check for protocol error.
|
| - if (ShouldShowActionOnUI(status.sync_protocol_error)) {
|
| - if (status_label) {
|
| - GetStatusForActionableError(status.sync_protocol_error,
|
| - status_label);
|
| + // We dont have an auth error. Check for sync errors if the sync service
|
| + // is enabled.
|
| + if (service) {
|
| + ProfileSyncService::Status status;
|
| + service->QueryDetailedSyncStatus(&status);
|
| +
|
| + if (ShouldShowActionOnUI(status.sync_protocol_error)) {
|
| + if (status_label) {
|
| + GetStatusForActionableError(status.sync_protocol_error,
|
| + status_label);
|
| + }
|
| + return SYNC_ERROR;
|
| }
|
| - return SYNC_ERROR;
|
| - }
|
|
|
| - // Now finally passphrase error.
|
| - if (service->IsPassphraseRequired()) {
|
| - if (service->IsPassphraseRequiredForDecryption()) {
|
| - // TODO(lipalani) : Ask tim if this is still needed.
|
| - // NOT first machine.
|
| - // Show a link ("needs attention"), but still indicate the
|
| - // current synced status. Return SYNC_PROMO so that
|
| - // the configure link will still be shown.
|
| - if (status_label && link_label) {
|
| - status_label->assign(GetSyncedStateStatusLabel(service, style));
|
| - link_label->assign(
|
| - l10n_util::GetStringUTF16(IDS_SYNC_PASSWORD_SYNC_ATTENTION));
|
| + // Now finally passphrase error.
|
| + if (service->IsPassphraseRequired()) {
|
| + if (service->IsPassphraseRequiredForDecryption()) {
|
| + // TODO(lipalani) : Ask tim if this is still needed.
|
| + // NOT first machine.
|
| + // Show a link ("needs attention"), but still indicate the
|
| + // current synced status. Return SYNC_PROMO so that
|
| + // the configure link will still be shown.
|
| + if (status_label && link_label) {
|
| + status_label->assign(GetSyncedStateStatusLabel(
|
| + service, signin, style));
|
| + link_label->assign(
|
| + l10n_util::GetStringUTF16(IDS_SYNC_PASSWORD_SYNC_ATTENTION));
|
| + }
|
| + return SYNC_PROMO;
|
| }
|
| - return SYNC_PROMO;
|
| }
|
| }
|
|
|
| // There is no error. Display "Last synced..." message.
|
| if (status_label)
|
| - status_label->assign(GetSyncedStateStatusLabel(service, style));
|
| + status_label->assign(GetSyncedStateStatusLabel(service, signin, style));
|
| return SYNCED;
|
| } else {
|
| // Either show auth error information with a link to re-login, auth in prog,
|
| // or provide a link to continue with setup.
|
| - result_type = PRE_SYNCED;
|
| if (service->FirstSetupInProgress()) {
|
| + result_type = PRE_SYNCED;
|
| ProfileSyncService::Status status;
|
| service->QueryDetailedSyncStatus(&status);
|
| - const AuthError& auth_error = service->GetAuthError();
|
| + AuthError auth_error = signin.signin_global_error()->GetLastAuthError();
|
| if (status_label) {
|
| status_label->assign(
|
| l10n_util::GetStringUTF16(IDS_SYNC_NTP_SETUP_IN_PROGRESS));
|
| @@ -254,7 +211,8 @@ MessageType GetStatusInfo(ProfileSyncService* service,
|
| auth_error.state() != AuthError::TWO_FACTOR) {
|
| if (status_label) {
|
| status_label->clear();
|
| - GetStatusLabelsForAuthError(auth_error, *service, status_label, NULL);
|
| + signin_ui_util::GetStatusLabelsForAuthError(
|
| + signin, status_label, NULL);
|
| }
|
| result_type = SYNC_ERROR;
|
| }
|
|
|