| Index: chrome/browser/ui/toolbar/wrench_menu_model.cc
|
| diff --git a/chrome/browser/ui/toolbar/wrench_menu_model.cc b/chrome/browser/ui/toolbar/wrench_menu_model.cc
|
| index 5046cbcdfdf08ca1762bab8672a395418512353d..228c7ef63356f2dfb5e0993986d70135f9fd4a23 100644
|
| --- a/chrome/browser/ui/toolbar/wrench_menu_model.cc
|
| +++ b/chrome/browser/ui/toolbar/wrench_menu_model.cc
|
| @@ -18,12 +18,12 @@
|
| #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_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 "chrome/browser/sync/sync_ui_util.h"
|
| #include "chrome/browser/task_manager/task_manager.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_commands.h"
|
| @@ -57,6 +57,8 @@
|
| #include "ui/base/layout.h"
|
| #include "ui/base/models/button_menu_item_model.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| +#include "ui/base/text/text_elider.h"
|
| +#include "ui/gfx/font.h"
|
| #include "ui/gfx/image/image.h"
|
| #include "ui/gfx/image/image_skia.h"
|
|
|
| @@ -76,6 +78,12 @@ using content::HostZoomMap;
|
| using content::UserMetricsAction;
|
| using content::WebContents;
|
|
|
| +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
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // EncodingMenuModel
|
|
|
| @@ -249,7 +257,7 @@ bool WrenchMenuModel::IsItemForCommandIdDynamic(int command_id) const {
|
| #endif
|
| command_id == IDC_VIEW_BACKGROUND_PAGES ||
|
| command_id == IDC_UPGRADE_DIALOG ||
|
| - command_id == IDC_SHOW_SYNC_SETUP;
|
| + command_id == IDC_SHOW_SIGNIN;
|
| }
|
|
|
| string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
|
| @@ -284,19 +292,28 @@ string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
|
| }
|
| case IDC_UPGRADE_DIALOG:
|
| return l10n_util::GetStringUTF16(IDS_UPDATE_NOW);
|
| - case IDC_SHOW_SYNC_SETUP: {
|
| - ProfileSyncService* service =
|
| - ProfileSyncServiceFactory::GetInstance()->GetForProfile(
|
| - browser_->profile()->GetOriginalProfile());
|
| - SyncGlobalError* error = service->sync_global_error();
|
| - if (error && error->HasCustomizedSyncMenuItem())
|
| + case IDC_SHOW_SIGNIN: {
|
| + GlobalError* error = GetActiveSignedInServiceError();
|
| + if (error)
|
| return error->MenuItemLabel();
|
| - if (service->HasSyncSetupCompleted()) {
|
| - std::string username = browser_->profile()->GetPrefs()->GetString(
|
| - prefs::kGoogleServicesUsername);
|
| - if (!username.empty()) {
|
| +
|
| + // No errors, so just display the signed in user, if any.
|
| + Profile* profile = browser_->profile()->GetOriginalProfile();
|
| + 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->HasSyncSetupCompleted()) {
|
| + SigninManager* signin_manager =
|
| + SigninManagerFactory::GetForProfile(profile);
|
| + std::string 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,
|
| - UTF8ToUTF16(username));
|
| + elided_username);
|
| }
|
| }
|
| return l10n_util::GetStringFUTF16(IDS_SYNC_MENU_PRE_SYNCED_LABEL,
|
| @@ -321,12 +338,9 @@ bool WrenchMenuModel::GetIconForCommandId(int command_id,
|
| }
|
| return false;
|
| }
|
| - case IDC_SHOW_SYNC_SETUP: {
|
| - ProfileSyncService* service =
|
| - ProfileSyncServiceFactory::GetInstance()->GetForProfile(
|
| - browser_->profile()->GetOriginalProfile());
|
| - SyncGlobalError* error = service->sync_global_error();
|
| - if (error && error->HasCustomizedSyncMenuItem()) {
|
| + case IDC_SHOW_SIGNIN: {
|
| + GlobalError* error = GetActiveSignedInServiceError();
|
| + if (error) {
|
| int icon_id = error->MenuItemIconResourceID();
|
| if (icon_id) {
|
| *icon = rb.GetNativeImageNamed(icon_id);
|
| @@ -349,12 +363,10 @@ void WrenchMenuModel::ExecuteCommand(int command_id) {
|
| return;
|
| }
|
|
|
| - if (command_id == IDC_SHOW_SYNC_SETUP) {
|
| - ProfileSyncService* service =
|
| - ProfileSyncServiceFactory::GetInstance()->GetForProfile(
|
| - browser_->profile()->GetOriginalProfile());
|
| - SyncGlobalError* error = service->sync_global_error();
|
| - if (error && error->HasCustomizedSyncMenuItem()) {
|
| + if (command_id == IDC_SHOW_SIGNIN) {
|
| + // If a custom error message is being shown, display it.
|
| + GlobalError* error = GetActiveSignedInServiceError();
|
| + if (error) {
|
| error->ExecuteMenuItem(browser_);
|
| return;
|
| }
|
| @@ -556,7 +568,9 @@ void WrenchMenuModel::Build(bool is_new_menu, bool supports_new_separators) {
|
| AddItemWithStringId(IDC_SHOW_DOWNLOADS, IDS_SHOW_DOWNLOADS);
|
| AddSeparator(ui::NORMAL_SEPARATOR);
|
|
|
| - if (browser_defaults::kShowSyncSetupMenuItem &&
|
| + // TODO(atwilson): Remove call to IsSyncAccessible() once we fully support
|
| + // signin while sync is disabled.
|
| + if (browser_defaults::kShowSigninMenuItem &&
|
| browser_->profile()->GetOriginalProfile()->IsSyncAccessible()) {
|
| const string16 short_product_name =
|
| l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
|
| @@ -719,9 +733,24 @@ void WrenchMenuModel::UpdateZoomControls() {
|
| IDS_ZOOM_PERCENT, base::IntToString16(zoom_percent));
|
| }
|
|
|
| -string16 WrenchMenuModel::GetSyncMenuLabel() const {
|
| +GlobalError* WrenchMenuModel::GetActiveSignedInServiceError() const {
|
| Profile* profile = browser_->profile()->GetOriginalProfile();
|
| - return sync_ui_util::GetSyncMenuLabel(
|
| - ProfileSyncServiceFactory::GetForProfile(profile),
|
| - *SigninManagerFactory::GetForProfile(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;
|
| }
|
|
|