| // Copyright 2016 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. |
| |
| #ifndef CHROME_BROWSER_UI_AVATAR_BUTTON_ERROR_CONTROLLER_H_ |
| #define CHROME_BROWSER_UI_AVATAR_BUTTON_ERROR_CONTROLLER_H_ |
| |
| #include "chrome/browser/ui/avatar_button_error_controller_delegate.h" |
| #include "components/signin/core/browser/signin_error_controller.h" |
| #include "components/sync/driver/sync_error_controller.h" |
| |
| class Profile; |
| |
| // Keeps track of the signin and sync errors that should be exposed to the user |
| // in the avatar button. |
| class AvatarButtonErrorController { |
| public: |
| AvatarButtonErrorController(AvatarButtonErrorControllerDelegate* delegate, |
| Profile* profile); |
| ~AvatarButtonErrorController(); |
| |
| bool HasAvatarError() const { return has_signin_error_ || has_sync_error_; } |
| |
| private: |
| friend class SigninErrorObserver; |
| friend class SyncErrorObserver; |
| |
| // Observes signin errors and updates the error controller for the avatar |
| // button accordingly. |
| class SigninErrorObserver : public SigninErrorController::Observer { |
| public: |
| SigninErrorObserver( |
| Profile* profile, |
| AvatarButtonErrorController* avatar_button_error_controller); |
| ~SigninErrorObserver() override; |
| |
| // SigninErrorController::Observer: |
| void OnErrorChanged() override; |
| |
| bool HasSigninError(); |
| |
| private: |
| Profile* profile_; |
| AvatarButtonErrorController* avatar_button_error_controller_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SigninErrorObserver); |
| }; |
| |
| // Observes sync errors and updates the error controller for the avatar |
| // button accordingly. |
| class SyncErrorObserver : public syncer::SyncErrorController::Observer { |
| public: |
| SyncErrorObserver( |
| Profile* profile, |
| AvatarButtonErrorController* avatar_button_error_controller); |
| ~SyncErrorObserver() override; |
| |
| // SyncErrorController::Observer: |
| void OnErrorChanged() override; |
| |
| bool HasSyncError(); |
| |
| private: |
| syncer::SyncErrorController* GetSyncErrorControllerIfNeeded(); |
| |
| Profile* profile_; |
| AvatarButtonErrorController* avatar_button_error_controller_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SyncErrorObserver); |
| }; |
| |
| void UpdateSigninError(bool has_signin_error); |
| void UpdateSyncError(bool has_sync_error); |
| |
| AvatarButtonErrorControllerDelegate* delegate_; |
| |
| SigninErrorObserver avatar_signin_error_controller_; |
| SyncErrorObserver avatar_sync_error_controller_; |
| |
| bool has_signin_error_; |
| bool has_sync_error_; |
| |
| DISALLOW_COPY_AND_ASSIGN(AvatarButtonErrorController); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_AVATAR_BUTTON_ERROR_CONTROLLER_H_ |