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

Unified Diff: chrome/browser/signin/signin_ui_util.cc

Issue 12077030: Allow signin to continue even if sync is disabled by policy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix windows sync integration test failure Created 7 years, 11 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
« no previous file with comments | « chrome/browser/signin/signin_ui_util.h ('k') | chrome/browser/sync/profile_sync_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/signin/signin_ui_util.cc
diff --git a/chrome/browser/signin/signin_ui_util.cc b/chrome/browser/signin/signin_ui_util.cc
new file mode 100644
index 0000000000000000000000000000000000000000..61bd7306057c6fed97fbada9f8b148c6cae19f6c
--- /dev/null
+++ b/chrome/browser/signin/signin_ui_util.cc
@@ -0,0 +1,136 @@
+// Copyright (c) 2013 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/signin/signin_ui_util.h"
+
+#include "base/sys_string_conversions.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/signin/signin_global_error.h"
+#include "chrome/browser/signin/signin_manager.h"
+#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/sync/profile_sync_service.h"
+#include "chrome/browser/sync/profile_sync_service_factory.h"
+#include "chrome/browser/sync/sync_global_error.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/text/text_elider.h"
+#include "ui/gfx/font.h"
+
+namespace {
+// Maximum width of a username - we trim emails that are wider than this so
+// the wrench menu doesn't get ridiculously wide.
+const int kUsernameMaxWidth = 200;
+} // namespace
+
+namespace signin_ui_util {
+
+GlobalError* GetSignedInServiceError(Profile* profile) {
+ // Auth errors have the highest priority - after that, individual service
+ // errors.
+ SigninManager* signin_manager = SigninManagerFactory::GetForProfile(profile);
+ SigninGlobalError* signin_error = signin_manager->signin_global_error();
+ if (signin_error && signin_error->HasBadge())
+ return signin_error;
+
+ // No auth error - now try other services. Currently the list is just hard-
+ // coded but in the future if we add more we can create some kind of
+ // registration framework.
+ if (profile->IsSyncAccessible()) {
+ ProfileSyncService* service =
+ ProfileSyncServiceFactory::GetForProfile(profile);
+ SyncGlobalError* error = service->sync_global_error();
+ if (error && error->HasBadge())
+ return error;
+ }
+ return NULL;
+}
+
+string16 GetSigninMenuLabel(Profile* profile) {
+ GlobalError* error = signin_ui_util::GetSignedInServiceError(profile);
+ if (error)
+ return error->MenuItemLabel();
+
+ // No errors, so just display the signed in user, if any.
+ ProfileSyncService* service = profile->IsSyncAccessible() ?
+ ProfileSyncServiceFactory::GetForProfile(profile) : NULL;
+
+ // Even if the user is signed in, don't display the "signed in as..."
+ // label if we're still setting up sync.
+ if (!service || !service->FirstSetupInProgress()) {
+ std::string username;
+ SigninManager* signin_manager =
+ SigninManagerFactory::GetForProfileIfExists(profile);
+ if (signin_manager)
+ username = signin_manager->GetAuthenticatedUsername();
+ if (!username.empty() && !signin_manager->AuthInProgress()) {
+ string16 elided_username = ui::ElideEmail(UTF8ToUTF16(username),
+ gfx::Font(),
+ kUsernameMaxWidth);
+ return l10n_util::GetStringFUTF16(IDS_SYNC_MENU_SYNCED_LABEL,
+ elided_username);
+ }
+ }
+ return l10n_util::GetStringFUTF16(IDS_SYNC_MENU_PRE_SYNCED_LABEL,
+ l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME));
+}
+
+// Given an authentication state this helper function returns various labels
+// that can be used to display information about the state.
+void GetStatusLabelsForAuthError(const SigninManager& signin_manager,
+ string16* status_label,
+ string16* link_label) {
+ string16 username = UTF8ToUTF16(signin_manager.GetAuthenticatedUsername());
+ string16 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_NAME);
+ if (link_label)
+ link_label->assign(l10n_util::GetStringUTF16(IDS_SYNC_RELOGIN_LINK_LABEL));
+
+ switch (signin_manager.signin_global_error()->GetLastAuthError().state()) {
+ case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS:
+ case GoogleServiceAuthError::ACCOUNT_DELETED:
+ case GoogleServiceAuthError::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 GoogleServiceAuthError::SERVICE_UNAVAILABLE:
+ if (status_label) {
+ status_label->assign(
+ l10n_util::GetStringUTF16(IDS_SYNC_SERVICE_UNAVAILABLE));
+ }
+ if (link_label)
+ link_label->clear();
+ break;
+ case GoogleServiceAuthError::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;
+ }
+}
+
+
+} // namespace signin_ui_util
« no previous file with comments | « chrome/browser/signin/signin_ui_util.h ('k') | chrome/browser/sync/profile_sync_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698