#ifndef ASH_SESSION_FULLSCREEN_CONTROLLER_H_
#define ASH_SESSION_FULLSCREEN_CONTROLLER_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "chromeos/dbus/power/power_manager_client.h"
#include "absl/types/optional.h"
class PrefRegistrySimple;
namespace chromeos {
class KeepFullscreenForUrlChecker;
}
namespace ash {
class SessionControllerImpl;
class FullscreenNotificationBubble;
class FullscreenController : public chromeos::PowerManagerClient::Observer {
public:
explicit FullscreenController(SessionControllerImpl* session_controller);
FullscreenController(const FullscreenController&) = delete;
FullscreenController& operator=(const FullscreenController&) = delete;
~FullscreenController() override;
static void RegisterProfilePrefs(PrefRegistrySimple* registry);
void MaybeExitFullscreenBeforeLock(base::OnceClosure callback);
private:
void MaybeShowNotification();
void SuspendImminent(power_manager::SuspendImminent::Reason reason) override;
void ScreenIdleStateChanged(
const power_manager::ScreenIdleState& proto) override;
void ScreenBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) override;
void LidEventReceived(chromeos::PowerManagerClient::LidState state,
base::TimeTicks timestamp) override;
const raw_ptr<const SessionControllerImpl> session_controller_;
std::unique_ptr<FullscreenNotificationBubble> bubble_;
std::unique_ptr<chromeos::KeepFullscreenForUrlChecker>
keep_fullscreen_checker_;
bool device_in_dark_ = false;
};
}
#endif