1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/sync/sync_status_ui_helper.h"
#include "app/l10n_util.h"
#include "base/string_util.h"
#include "chrome/browser/sync/auth_error_state.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
// Given an authentication state, this helper function returns the appropriate
// status message and, if necessary, the text that should appear in the
// re-login link.
static void GetLabelsForAuthError(AuthErrorState auth_error,
ProfileSyncService* service, string16* status_label,
string16* link_label) {
if (link_label)
link_label->assign(l10n_util::GetStringUTF16(IDS_SYNC_RELOGIN_LINK_LABEL));
if (auth_error == AUTH_ERROR_INVALID_GAIA_CREDENTIALS) {
// If the user name is empty then the first login failed, otherwise the
// credentials are out-of-date.
if (service->GetAuthenticatedUsername().empty())
status_label->assign(
l10n_util::GetStringUTF16(IDS_SYNC_INVALID_USER_CREDENTIALS));
else
status_label->assign(
l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_INFO_OUT_OF_DATE));
} else if (auth_error == AUTH_ERROR_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.
status_label->assign(
l10n_util::GetStringFUTF16(IDS_SYNC_SERVER_IS_UNREACHABLE,
l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
if (link_label)
link_label->clear();
} else {
status_label->assign(l10n_util::GetStringUTF16(IDS_SYNC_ERROR_SIGNING_IN));
}
}
// 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.
static string16 GetSyncedStateStatusLabel(ProfileSyncService* service) {
string16 label;
string16 user_name(service->GetAuthenticatedUsername());
if (user_name.empty())
return label;
return l10n_util::GetStringFUTF16(
IDS_SYNC_ACCOUNT_SYNCED_TO_USER_WITH_TIME,
user_name,
WideToUTF16(service->GetLastSyncedTimeString()));
}
// static
SyncStatusUIHelper::MessageType SyncStatusUIHelper::GetLabels(
ProfileSyncService* service, string16* status_label,
string16* link_label) {
MessageType result_type(SYNCED);
if (!service) {
return PRE_SYNCED;
}
if (service->HasSyncSetupCompleted()) {
ProfileSyncService::Status status(service->QueryDetailedSyncStatus());
AuthErrorState auth_error(service->GetAuthErrorState());
// Either show auth error information with a link to re-login, auth in prog,
// or note that everything is OK with the last synced time.
if (status.authenticated) {
// Everything is peachy.
status_label->assign(GetSyncedStateStatusLabel(service));
DCHECK_EQ(auth_error, AUTH_ERROR_NONE);
} else if (service->UIShouldDepictAuthInProgress()) {
status_label->assign(
l10n_util::GetStringUTF16(IDS_SYNC_AUTHENTICATING_LABEL));
result_type = PRE_SYNCED;
} else if (auth_error != AUTH_ERROR_NONE) {
GetLabelsForAuthError(auth_error, service, status_label, link_label);
result_type = SYNC_ERROR;
}
} 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->SetupInProgress()) {
ProfileSyncService::Status status(service->QueryDetailedSyncStatus());
AuthErrorState auth_error(service->GetAuthErrorState());
status_label->assign(
l10n_util::GetStringUTF16(IDS_SYNC_NTP_SETUP_IN_PROGRESS));
if (service->UIShouldDepictAuthInProgress()) {
status_label->assign(
l10n_util::GetStringUTF16(IDS_SYNC_AUTHENTICATING_LABEL));
} else if (auth_error != AUTH_ERROR_NONE) {
status_label->clear();
GetLabelsForAuthError(auth_error, service, status_label, NULL);
result_type = SYNC_ERROR;
} else if (!status.authenticated) {
status_label->assign(
l10n_util::GetStringUTF16(IDS_SYNC_ACCOUNT_DETAILS_NOT_ENTERED));
}
} else if (service->unrecoverable_error_detected()) {
result_type = SYNC_ERROR;
status_label->assign(l10n_util::GetStringUTF16(IDS_SYNC_SETUP_ERROR));
} else {
status_label->assign(l10n_util::GetStringUTF16(IDS_SYNC_NOT_SET_UP_INFO));
}
}
return result_type;
}
|