blob: 1ff46007bb3fa9209d9c78fdac980afb7949c98c [file] [log] [blame]
// Copyright 2019 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_CHROMEOS_LOGIN_TEST_OOBE_SCREEN_EXIT_WAITER_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_TEST_OOBE_SCREEN_EXIT_WAITER_H_
#include "base/macros.h"
#include "base/scoped_observer.h"
#include "chrome/browser/chromeos/login/oobe_screen.h"
#include "chrome/browser/chromeos/login/test/test_condition_waiter.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
namespace base {
class RunLoop;
}
namespace chromeos {
class OobeUI;
// A waiter that blocks until the the current OOBE screen is different than the
// target screen, or the OOBE UI is destroyed.
class OobeScreenExitWaiter : public OobeUI::Observer,
public test::TestConditionWaiter {
public:
explicit OobeScreenExitWaiter(OobeScreenId target_screen);
~OobeScreenExitWaiter() override;
// OobeUI::Observer implementation:
void OnCurrentScreenChanged(OobeScreenId current_screen,
OobeScreenId new_screen) override;
void OnDestroyingOobeUI() override;
// TestConditionWaiter;
void Wait() override;
private:
enum class State { IDLE, WAITING_FOR_SCREEN_EXIT, DONE };
OobeUI* GetOobeUI();
void EndWait();
const OobeScreenId target_screen_;
State state_ = State::IDLE;
ScopedObserver<OobeUI, OobeUI::Observer> oobe_ui_observer_{this};
std::unique_ptr<base::RunLoop> run_loop_;
DISALLOW_COPY_AND_ASSIGN(OobeScreenExitWaiter);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_TEST_OOBE_SCREEN_EXIT_WAITER_H_