| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chrome/browser/ui/avatar_button_error_controller.h" |
| 6 |
| 7 #include "chrome/browser/profiles/profiles_state.h" |
| 8 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 9 #include "components/browser_sync/browser/profile_sync_service.h" |
| 10 #include "components/signin/core/browser/signin_error_controller.h" |
| 11 #include "components/signin/core/common/profile_management_switches.h" |
| 12 |
| 13 AvatarButtonErrorController::AvatarButtonErrorController( |
| 14 AvatarButtonErrorControllerDelegate* delegate, |
| 15 Profile* profile) |
| 16 : delegate_(delegate), |
| 17 avatar_signin_error_controller_(profile, this), |
| 18 avatar_sync_error_controller_(profile, this), |
| 19 has_signin_error_(avatar_signin_error_controller_.HasSigninError()), |
| 20 has_sync_error_(avatar_sync_error_controller_.HasSyncError()) {} |
| 21 |
| 22 AvatarButtonErrorController::~AvatarButtonErrorController() {} |
| 23 |
| 24 void AvatarButtonErrorController::UpdateSigninError(bool has_signin_error) { |
| 25 bool had_error = HasAvatarError(); |
| 26 has_signin_error_ = has_signin_error; |
| 27 if (had_error != HasAvatarError()) |
| 28 delegate_->OnAvatarErrorChanged(); |
| 29 } |
| 30 |
| 31 void AvatarButtonErrorController::UpdateSyncError(bool has_sync_error) { |
| 32 bool had_error = HasAvatarError(); |
| 33 has_sync_error_ = has_sync_error; |
| 34 if (had_error != HasAvatarError()) |
| 35 delegate_->OnAvatarErrorChanged(); |
| 36 } |
| 37 |
| 38 AvatarButtonErrorController::SigninErrorObserver::SigninErrorObserver( |
| 39 Profile* profile, |
| 40 AvatarButtonErrorController* avatar_button_error_controller) |
| 41 : profile_(profile), |
| 42 avatar_button_error_controller_(avatar_button_error_controller) { |
| 43 SigninErrorController* signin_error_controller = |
| 44 profiles::GetSigninErrorController(profile_); |
| 45 if (signin_error_controller) |
| 46 signin_error_controller->AddObserver(this); |
| 47 } |
| 48 |
| 49 AvatarButtonErrorController::SigninErrorObserver::~SigninErrorObserver() { |
| 50 SigninErrorController* signin_error_controller = |
| 51 profiles::GetSigninErrorController(profile_); |
| 52 if (signin_error_controller) |
| 53 signin_error_controller->RemoveObserver(this); |
| 54 } |
| 55 |
| 56 void AvatarButtonErrorController::SigninErrorObserver::OnErrorChanged() { |
| 57 avatar_button_error_controller_->UpdateSigninError(HasSigninError()); |
| 58 } |
| 59 |
| 60 bool AvatarButtonErrorController::SigninErrorObserver::HasSigninError() { |
| 61 const SigninErrorController* signin_error_controller = |
| 62 profiles::GetSigninErrorController(profile_); |
| 63 return signin_error_controller && signin_error_controller->HasError(); |
| 64 } |
| 65 |
| 66 AvatarButtonErrorController::SyncErrorObserver::SyncErrorObserver( |
| 67 Profile* profile, |
| 68 AvatarButtonErrorController* avatar_button_error_controller) |
| 69 : profile_(profile), |
| 70 avatar_button_error_controller_(avatar_button_error_controller) { |
| 71 SyncErrorController* sync_error_controller = GetSyncErrorControllerIfNeeded(); |
| 72 if (sync_error_controller) |
| 73 sync_error_controller->AddObserver(this); |
| 74 } |
| 75 |
| 76 AvatarButtonErrorController::SyncErrorObserver::~SyncErrorObserver() { |
| 77 SyncErrorController* sync_error_controller = GetSyncErrorControllerIfNeeded(); |
| 78 if (sync_error_controller) |
| 79 sync_error_controller->RemoveObserver(this); |
| 80 } |
| 81 |
| 82 void AvatarButtonErrorController::SyncErrorObserver::OnErrorChanged() { |
| 83 avatar_button_error_controller_->UpdateSyncError(HasSyncError()); |
| 84 } |
| 85 |
| 86 bool AvatarButtonErrorController::SyncErrorObserver::HasSyncError() { |
| 87 ProfileSyncService* sync_service = |
| 88 ProfileSyncServiceFactory::GetForProfile(profile_); |
| 89 if (switches::IsMaterialDesignUserMenu() && sync_service) { |
| 90 SyncErrorController* sync_error_controller = |
| 91 sync_service->sync_error_controller(); |
| 92 ProfileSyncService::Status status; |
| 93 sync_service->QueryDetailedSyncStatus(&status); |
| 94 return sync_service->HasUnrecoverableError() || |
| 95 status.sync_protocol_error.action == syncer::UPGRADE_CLIENT || |
| 96 (sync_error_controller && sync_error_controller->HasError()); |
| 97 } |
| 98 return false; |
| 99 } |
| 100 |
| 101 SyncErrorController* AvatarButtonErrorController::SyncErrorObserver:: |
| 102 GetSyncErrorControllerIfNeeded() { |
| 103 if (!switches::IsMaterialDesignUserMenu()) |
| 104 return nullptr; |
| 105 ProfileSyncService* sync_service = |
| 106 ProfileSyncServiceFactory::GetForProfile(profile_); |
| 107 return sync_service ? sync_service->sync_error_controller() : nullptr; |
| 108 } |
| OLD | NEW |