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 11 namespace chromeos { 12 OobeScreenWaiter(OobeDisplay::Screen expected_screen)13OobeScreenWaiter::OobeScreenWaiter(OobeDisplay::Screen expected_screen) 14 : waiting_for_screen_(false), 15 expected_screen_(expected_screen) { 16 } 17 ~OobeScreenWaiter()18OobeScreenWaiter::~OobeScreenWaiter() { 19 if (waiting_for_screen_) { 20 GetOobeUI()->RemoveObserver(this); 21 } 22 } 23 Wait()24void OobeScreenWaiter::Wait() { 25 WaitNoAssertCurrentScreen(); 26 27 ASSERT_EQ(expected_screen_, GetOobeUI()->current_screen()); 28 } 29 WaitNoAssertCurrentScreen()30void OobeScreenWaiter::WaitNoAssertCurrentScreen() { 31 if (GetOobeUI()->current_screen() == expected_screen_) 32 return; 33 34 waiting_for_screen_ = true; 35 GetOobeUI()->AddObserver(this); 36 37 runner_ = new content::MessageLoopRunner; 38 runner_->Run(); 39 ASSERT_FALSE(waiting_for_screen_); 40 } 41 OnCurrentScreenChanged(OobeDisplay::Screen current_screen,OobeDisplay::Screen new_screen)42void OobeScreenWaiter::OnCurrentScreenChanged( 43 OobeDisplay::Screen current_screen, 44 OobeDisplay::Screen new_screen) { 45 if (waiting_for_screen_ && new_screen == expected_screen_) { 46 runner_->Quit(); 47 waiting_for_screen_ = false; 48 GetOobeUI()->RemoveObserver(this); 49 } 50 } 51 GetOobeUI()52OobeUI* OobeScreenWaiter::GetOobeUI() { 53 OobeUI* oobe_ui = static_cast<chromeos::LoginDisplayHostImpl*>( 54 chromeos::LoginDisplayHostImpl::default_host())->GetOobeUI(); 55 CHECK(oobe_ui); 56 return oobe_ui; 57 } 58 59 } // namespace chromeos 60