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