#ifndef ASH_USER_EDUCATION_USER_EDUCATION_CONTROLLER_H_
#define ASH_USER_EDUCATION_USER_EDUCATION_CONTROLLER_H_
#include <memory>
#include <set>
#include "ash/ash_export.h"
#include "ash/public/cpp/session/session_observer.h"
#include "ash/user_education/user_education_private_api_key.h"
#include "base/functional/callback_forward.h"
#include "base/scoped_observation.h"
namespace ui {
class ElementContext;
}
namespace ash {
class SessionController;
class TutorialController;
class UserEducationDelegate;
enum class TutorialId;
class ASH_EXPORT UserEducationController : public SessionObserver {
public:
explicit UserEducationController(std::unique_ptr<UserEducationDelegate>);
UserEducationController(const UserEducationController&) = delete;
UserEducationController& operator=(const UserEducationController&) = delete;
~UserEducationController() override;
static UserEducationController* Get();
void StartTutorial(UserEducationPrivateApiKey,
TutorialId tutorial_id,
ui::ElementContext element_context,
base::OnceClosure completed_callback,
base::OnceClosure aborted_callback);
private:
void OnChromeTerminating() override;
void OnUserSessionAdded(const AccountId& account_id) override;
std::unique_ptr<UserEducationDelegate> delegate_;
std::set<std::unique_ptr<TutorialController>> tutorial_controllers_;
base::ScopedObservation<SessionController, SessionObserver>
session_observation_{this};
};
}
#endif