blob: c61dfe6a5062e9053855bc883205383b286b89ec [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/login/screen_manager.h"
#include <iostream>
#include <utility>
#include "base/containers/flat_map.h"
#include "base/memory/ptr_util.h"
#include "chrome/browser/ash/login/oobe_screen.h"
#include "chrome/browser/ash/login/screens/base_screen.h"
namespace ash {
ScreenManager::ScreenManager() = default;
ScreenManager::~ScreenManager() = default;
void ScreenManager::Init(
std::vector<std::pair<OobeScreenId, std::unique_ptr<BaseScreen>>> screens) {
screens_ = decltype(screens_)(std::move(screens));
}
BaseScreen* ScreenManager::GetScreen(OobeScreenId screen) {
auto iter = screens_.find(screen);
CHECK(iter != screens_.end()) << "Failed to find screen " << screen;
return iter->second.get();
}
OobeScreenId ScreenManager::GetScreenByName(const std::string& screen_name) {
OobeScreenId screen = OobeScreenId(screen_name);
auto iter = screens_.find(screen);
CHECK(iter != screens_.end()) << "Failed to find screen " << screen;
return iter->first;
}
bool ScreenManager::HasScreen(OobeScreenId screen) {
return screens_.count(screen) > 0;
}
void ScreenManager::SetScreenForTesting(std::unique_ptr<BaseScreen> value) {
// Capture screen id to avoid using `value` after moving it; = is not a
// sequence point.
auto id = value->screen_id();
screens_[id] = std::move(value);
}
void ScreenManager::DeleteScreenForTesting(OobeScreenId screen) {
screens_[screen] = nullptr;
}
void ScreenManager::Shutdown() {
screens_.clear();
}
} // namespace ash