oobe_screen_waiter.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
6
7#include "chrome/browser/chromeos/login/login_display_host_impl.h"
8#include "content/public/test/test_utils.h"
9#include "testing/gtest/include/gtest/gtest.h"
10
11namespace chromeos {
12
13OobeScreenWaiter::OobeScreenWaiter(OobeDisplay::Screen expected_screen)
14    : waiting_for_screen_(false),
15      expected_screen_(expected_screen) {
16}
17
18OobeScreenWaiter::~OobeScreenWaiter() {
19  if (waiting_for_screen_) {
20    GetOobeUI()->RemoveObserver(this);
21  }
22}
23
24void OobeScreenWaiter::Wait() {
25  if (GetOobeUI()->current_screen() == expected_screen_) {
26    return;
27  }
28
29  waiting_for_screen_ = true;
30  GetOobeUI()->AddObserver(this);
31
32  runner_ = new content::MessageLoopRunner;
33  runner_->Run();
34  ASSERT_EQ(expected_screen_, GetOobeUI()->current_screen());
35  ASSERT_FALSE(waiting_for_screen_);
36}
37
38void OobeScreenWaiter::OnCurrentScreenChanged(
39    OobeDisplay::Screen current_screen,
40    OobeDisplay::Screen new_screen) {
41  if (waiting_for_screen_ && new_screen == expected_screen_) {
42    runner_->Quit();
43    waiting_for_screen_ = false;
44    GetOobeUI()->RemoveObserver(this);
45  }
46}
47
48OobeUI* OobeScreenWaiter::GetOobeUI() {
49  OobeUI* oobe_ui = static_cast<chromeos::LoginDisplayHostImpl*>(
50      chromeos::LoginDisplayHostImpl::default_host())->GetOobeUI();
51  CHECK(oobe_ui);
52  return oobe_ui;
53}
54
55}  // namespace chromeos
56