blob: 9600fce45325fa403a61587f43dcd56f8a059490 [file] [log] [blame]
// 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 "base/scoped_observer.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_service_observer.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::SyncServiceObserver {
public:
SyncErrorObserver(
Profile* profile,
AvatarButtonErrorController* avatar_button_error_controller);
~SyncErrorObserver() override;
// SyncServiceObserver:
void OnStateChanged(syncer::SyncService* sync_service) override;
bool HasSyncError();
private:
Profile* profile_;
AvatarButtonErrorController* avatar_button_error_controller_;
ScopedObserver<syncer::SyncService, SyncErrorObserver> sync_observer_;
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_