Chromium Code Reviews| Index: chrome/browser/ui/views/profiles/new_avatar_button.cc |
| diff --git a/chrome/browser/ui/views/profiles/new_avatar_button.cc b/chrome/browser/ui/views/profiles/new_avatar_button.cc |
| index 44f2863a2e3afc0489aab0de057b078e25c597aa..fcb75304be9aa91fc35dfcc1ff6f9aa559b04dd6 100644 |
| --- a/chrome/browser/ui/views/profiles/new_avatar_button.cc |
| +++ b/chrome/browser/ui/views/profiles/new_avatar_button.cc |
| @@ -12,8 +12,10 @@ |
| #include "chrome/browser/profiles/profile_attributes_entry.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| #include "chrome/browser/profiles/profiles_state.h" |
| +#include "chrome/browser/sync/profile_sync_service_factory.h" |
| #include "chrome/browser/ui/views/profiles/avatar_button_delegate.h" |
| #include "chrome/browser/ui/views/profiles/profile_chooser_view.h" |
| +#include "components/browser_sync/browser/profile_sync_service.h" |
| #include "components/signin/core/common/profile_management_switches.h" |
| #include "grit/theme_resources.h" |
| #include "ui/base/resource/resource_bundle.h" |
| @@ -57,7 +59,7 @@ NewAvatarButton::NewAvatarButton(AvatarButtonDelegate* delegate, |
| : LabelButton(delegate, base::string16()), |
| delegate_(delegate), |
| profile_(profile), |
| - has_auth_error_(false), |
| + has_sync_error_(false), |
| suppress_mouse_released_action_(false) { |
| set_triggerable_event_flags( |
| ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON); |
| @@ -106,10 +108,21 @@ NewAvatarButton::NewAvatarButton(AvatarButtonDelegate* delegate, |
| // Subscribe to authentication error changes so that the avatar button can |
| // update itself. Note that guest mode profiles won't have a token service. |
| - SigninErrorController* error = profiles::GetSigninErrorController(profile_); |
| - if (error) { |
| - error->AddObserver(this); |
| - OnErrorChanged(); // This calls Update(). |
| + SigninErrorController* signin_error_controller = |
| + profiles::GetSigninErrorController(profile_); |
| + SyncErrorController* sync_error_controller = NULL; |
|
msw
2016/07/13 22:31:37
nit: nullptr
Jane
2016/07/14 00:18:57
Done.
|
| + ProfileSyncService* sync_service = |
|
msw
2016/07/13 22:31:37
Add a file-local GetSyncErrorController helper ins
Jane
2016/07/14 00:18:57
Done.
|
| + ProfileSyncServiceFactory::GetForProfile(profile_); |
| + if (switches::IsMaterialDesignUserMenu() && sync_service) { |
|
msw
2016/07/13 22:31:37
nit: curlies not needed
Jane
2016/07/14 00:18:57
Done.
|
| + sync_error_controller = sync_service->sync_error_controller(); |
| + } |
| + |
| + if (signin_error_controller || sync_error_controller) { |
| + if (signin_error_controller) |
|
msw
2016/07/13 22:31:37
nit: move these two conditionals above the either-
Jane
2016/07/14 00:18:57
Done.
|
| + signin_error_controller->AddObserver(this); |
| + if (sync_error_controller) |
| + sync_error_controller->AddObserver(this); |
| + OnErrorChanged(); // This calls Update() |
| } else { |
| Update(); |
| } |
| @@ -119,10 +132,19 @@ NewAvatarButton::NewAvatarButton(AvatarButtonDelegate* delegate, |
| NewAvatarButton::~NewAvatarButton() { |
| g_browser_process->profile_manager()-> |
| GetProfileAttributesStorage().RemoveObserver(this); |
| - SigninErrorController* error = |
| + SigninErrorController* signin_error_controller = |
| profiles::GetSigninErrorController(profile_); |
| - if (error) |
| - error->RemoveObserver(this); |
| + if (signin_error_controller) |
| + signin_error_controller->RemoveObserver(this); |
| + |
| + ProfileSyncService* sync_service = |
| + ProfileSyncServiceFactory::GetForProfile(profile_); |
| + if (switches::IsMaterialDesignUserMenu() && sync_service) { |
| + SyncErrorController* sync_error_controller = |
| + sync_service->sync_error_controller(); |
| + if (sync_error_controller) |
| + sync_error_controller->RemoveObserver(this); |
| + } |
| } |
| bool NewAvatarButton::OnMousePressed(const ui::MouseEvent& event) { |
| @@ -176,10 +198,25 @@ void NewAvatarButton::OnProfileSupervisedUserIdChanged( |
| } |
| void NewAvatarButton::OnErrorChanged() { |
| - // If there is an error, show an warning icon. |
| - const SigninErrorController* error = |
| + // If there is an signin error, show an warning icon. |
|
msw
2016/07/13 22:31:37
nit: "a signin" and "a warning"
Jane
2016/07/14 00:18:57
Done.
|
| + const SigninErrorController* signin_error_controller = |
| profiles::GetSigninErrorController(profile_); |
| - has_auth_error_ = error && error->HasError(); |
| + has_sync_error_ = |
| + signin_error_controller && signin_error_controller->HasError(); |
| + |
| + // Also show warning icon for sync error for material design user menu. |
|
msw
2016/07/13 22:31:37
nit: "a warning", "sync errors", and "for the mate
Jane
2016/07/14 00:18:57
Done.
|
| + ProfileSyncService* sync_service = |
| + ProfileSyncServiceFactory::GetForProfile(profile_); |
| + if (switches::IsMaterialDesignUserMenu() && sync_service) { |
| + SyncErrorController* sync_error_controller = |
| + sync_service->sync_error_controller(); |
| + ProfileSyncService::Status status; |
| + sync_service->QueryDetailedSyncStatus(&status); |
| + if (sync_service->HasUnrecoverableError() || |
|
msw
2016/07/13 22:31:37
nit: has_sync_error_ |= ...
Jane
2016/07/14 00:18:57
Done. Is this what you mean?
|
| + status.sync_protocol_error.action == syncer::UPGRADE_CLIENT || |
| + (sync_error_controller && sync_error_controller->HasError())) |
| + has_sync_error_ = true; |
| + } |
| Update(); |
| } |
| @@ -213,7 +250,7 @@ void NewAvatarButton::Update() { |
| if (use_generic_button) { |
| SetImage(views::Button::STATE_NORMAL, generic_avatar_); |
| - } else if (has_auth_error_) { |
| + } else if (has_sync_error_) { |
| if (switches::IsMaterialDesignUserMenu()) { |
| SetImage(views::Button::STATE_NORMAL, |
| gfx::CreateVectorIcon(gfx::VectorIconId::SYNC_PROBLEM, 13, |