| Index: chrome/browser/sync/sync_ui_util.cc
|
| ===================================================================
|
| --- chrome/browser/sync/sync_ui_util.cc (revision 177205)
|
| +++ chrome/browser/sync/sync_ui_util.cc (working copy)
|
| @@ -44,7 +44,10 @@
|
| void GetStatusLabelsForAuthError(const AuthError& auth_error,
|
| const ProfileSyncService& service,
|
| string16* status_label,
|
| - string16* link_label) {
|
| + string16* link_label,
|
| + string16* global_error_menu_label,
|
| + string16* global_error_bubble_message,
|
| + string16* global_error_bubble_accept_label) {
|
| string16 username = UTF8ToUTF16(service.profile()->GetPrefs()->GetString(
|
| prefs::kGoogleServicesUsername));
|
| string16 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_NAME);
|
| @@ -67,6 +70,18 @@
|
| status_label->assign(
|
| l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_INFO_OUT_OF_DATE));
|
| }
|
| + if (global_error_menu_label) {
|
| + global_error_menu_label->assign(l10n_util::GetStringUTF16(
|
| + IDS_SYNC_SIGN_IN_ERROR_WRENCH_MENU_ITEM));
|
| + }
|
| + if (global_error_bubble_message) {
|
| + global_error_bubble_message->assign(l10n_util::GetStringFUTF16(
|
| + IDS_SYNC_SIGN_IN_ERROR_BUBBLE_VIEW_MESSAGE, product_name));
|
| + }
|
| + if (global_error_bubble_accept_label) {
|
| + global_error_bubble_accept_label->assign(l10n_util::GetStringUTF16(
|
| + IDS_SYNC_SIGN_IN_ERROR_BUBBLE_VIEW_ACCEPT));
|
| + }
|
| }
|
| break;
|
| case AuthError::SERVICE_UNAVAILABLE:
|
| @@ -76,6 +91,18 @@
|
| }
|
| if (link_label)
|
| link_label->clear();
|
| + if (global_error_menu_label) {
|
| + global_error_menu_label->assign(l10n_util::GetStringUTF16(
|
| + IDS_SYNC_SIGN_IN_ERROR_WRENCH_MENU_ITEM));
|
| + }
|
| + if (global_error_bubble_message) {
|
| + global_error_bubble_message->assign(l10n_util::GetStringFUTF16(
|
| + IDS_SYNC_UNAVAILABLE_ERROR_BUBBLE_VIEW_MESSAGE, product_name));
|
| + }
|
| + if (global_error_bubble_accept_label) {
|
| + global_error_bubble_accept_label->assign(l10n_util::GetStringUTF16(
|
| + IDS_SYNC_UNAVAILABLE_ERROR_BUBBLE_VIEW_ACCEPT));
|
| + }
|
| break;
|
| case AuthError::CONNECTION_FAILED:
|
| // Note that there is little the user can do if the server is not
|
| @@ -92,6 +119,18 @@
|
| status_label->assign(l10n_util::GetStringUTF16(
|
| IDS_SYNC_ERROR_SIGNING_IN));
|
| }
|
| + if (global_error_menu_label) {
|
| + global_error_menu_label->assign(l10n_util::GetStringUTF16(
|
| + IDS_SYNC_SIGN_IN_ERROR_WRENCH_MENU_ITEM));
|
| + }
|
| + if (global_error_bubble_message) {
|
| + global_error_bubble_message->assign(l10n_util::GetStringFUTF16(
|
| + IDS_SYNC_OTHER_SIGN_IN_ERROR_BUBBLE_VIEW_MESSAGE, product_name));
|
| + }
|
| + if (global_error_bubble_accept_label) {
|
| + global_error_bubble_accept_label->assign(l10n_util::GetStringUTF16(
|
| + IDS_SYNC_SIGN_IN_ERROR_BUBBLE_VIEW_ACCEPT));
|
| + }
|
| break;
|
| }
|
| }
|
| @@ -197,8 +236,8 @@
|
| // No auth in progress check for an auth error.
|
| if (auth_error.state() != AuthError::NONE) {
|
| if (status_label && link_label) {
|
| - GetStatusLabelsForAuthError(
|
| - auth_error, *service, status_label, link_label);
|
| + GetStatusLabelsForAuthError(auth_error, *service,
|
| + status_label, link_label, NULL, NULL, NULL);
|
| }
|
| return SYNC_ERROR;
|
| }
|
| @@ -254,7 +293,8 @@
|
| auth_error.state() != AuthError::TWO_FACTOR) {
|
| if (status_label) {
|
| status_label->clear();
|
| - GetStatusLabelsForAuthError(auth_error, *service, status_label, NULL);
|
| + GetStatusLabelsForAuthError(auth_error, *service, status_label, NULL,
|
| + NULL, NULL, NULL);
|
| }
|
| result_type = SYNC_ERROR;
|
| }
|
| @@ -348,11 +388,22 @@
|
| *bubble_message = string16();
|
| *bubble_accept_label = string16();
|
|
|
| - // Only display an error if we've completed sync setup.
|
| if (!service->HasSyncSetupCompleted())
|
| return;
|
|
|
| - // Display a passphrase error if we have one.
|
| + MessageType status = GetStatus(service, signin);
|
| + if (status == SYNC_ERROR) {
|
| + const AuthError& auth_error = service->GetAuthError();
|
| + if (auth_error.state() != AuthError::NONE) {
|
| + GetStatusLabelsForAuthError(auth_error, *service, NULL, NULL,
|
| + menu_label, bubble_message, bubble_accept_label);
|
| + // If we have an actionable auth error, display it.
|
| + if (!menu_label->empty())
|
| + return;
|
| + }
|
| + }
|
| +
|
| + // No actionable auth error - display the passphrase error.
|
| if (service->IsPassphraseRequired() &&
|
| service->IsPassphraseRequiredForDecryption()) {
|
| // This is not the first machine so ask user to enter passphrase.
|
| @@ -372,6 +423,18 @@
|
| return sync_ui_util::GetStatusInfo(service, signin, WITH_HTML, NULL, NULL);
|
| }
|
|
|
| +string16 GetSyncMenuLabel(
|
| + ProfileSyncService* service, const SigninManager& signin) {
|
| + MessageType type = GetStatus(service, signin);
|
| +
|
| + if (type == sync_ui_util::SYNCED)
|
| + return l10n_util::GetStringUTF16(IDS_SYNC_MENU_SYNCED_LABEL);
|
| + else if (type == sync_ui_util::SYNC_ERROR)
|
| + return l10n_util::GetStringUTF16(IDS_SYNC_MENU_SYNC_ERROR_LABEL);
|
| + else
|
| + return l10n_util::GetStringUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL);
|
| +}
|
| +
|
| string16 ConstructTime(int64 time_in_int) {
|
| base::Time time = base::Time::FromInternalValue(time_in_int);
|
|
|
| @@ -381,4 +444,21 @@
|
| return base::TimeFormatFriendlyDateAndTime(time);
|
| }
|
|
|
| +std::string MakeSyncAuthErrorText(
|
| + const GoogleServiceAuthError::State& state) {
|
| + switch (state) {
|
| + case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS:
|
| + case GoogleServiceAuthError::ACCOUNT_DELETED:
|
| + case GoogleServiceAuthError::ACCOUNT_DISABLED:
|
| + case GoogleServiceAuthError::SERVICE_UNAVAILABLE:
|
| + return "INVALID_GAIA_CREDENTIALS";
|
| + case GoogleServiceAuthError::USER_NOT_SIGNED_UP:
|
| + return "USER_NOT_SIGNED_UP";
|
| + case GoogleServiceAuthError::CONNECTION_FAILED:
|
| + return "CONNECTION_FAILED";
|
| + default:
|
| + return std::string();
|
| + }
|
| +}
|
| +
|
| } // namespace sync_ui_util
|
|
|