1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/prefs/pref_service.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/browser_process.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/mock_error_screen.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/mock_screen_observer.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/update_screen.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/test/wizard_in_process_browser_test.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/wizard_controller.h" 158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/common/pref_names.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/dbus/dbus_thread_manager.h" 19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chromeos/dbus/fake_update_engine_client.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/network/portal_detector/network_portal_detector.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using ::testing::AnyNumber; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using ::testing::AtLeast; 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using ::testing::Exactly; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using ::testing::Invoke; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using ::testing::Return; 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using ::testing::_; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kStubEthernetGuid[] = "eth0"; 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kStubWifiGuid[] = "wlan0"; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class UpdateScreenTest : public WizardInProcessBrowserTest { 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateScreenTest() : WizardInProcessBrowserTest("update"), 43b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) fake_update_engine_client_(NULL), 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) network_portal_detector_(NULL) { 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fake_update_engine_client_ = new FakeUpdateEngineClient; 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::DBusThreadManager::GetSetterForTesting()->SetUpdateEngineClient( 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<UpdateEngineClient>(fake_update_engine_client_)); 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup network portal detector to return online state for both 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ethernet and wifi networks. Ethernet is an active network by 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // default. 588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) network_portal_detector_ = new NetworkPortalDetectorTestImpl(); 598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) NetworkPortalDetector::InitializeForTesting(network_portal_detector_); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkPortalDetector::CaptivePortalState online_state; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) online_state.response_code = 204; 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDefaultNetwork(kStubEthernetGuid); 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDetectionResults(kStubEthernetGuid, online_state); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDetectionResults(kStubWifiGuid, online_state); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WizardInProcessBrowserTest::SetUpOnMainThread(); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_screen_observer_.reset(new MockScreenObserver()); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_error_screen_actor_.reset(new MockErrorScreenActor()); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_error_screen_.reset( 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new MockErrorScreen(mock_screen_observer_.get(), 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_error_screen_actor_.get())); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, ShowCurrentScreen()) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(AnyNumber()); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, GetErrorScreen()) 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(AnyNumber()) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .WillRepeatedly(Return(mock_error_screen_.get())); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(WizardController::default_controller() != NULL); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci update_screen_ = UpdateScreen::Get(WizardController::default_controller()); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(update_screen_ != NULL); 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(WizardController::default_controller()->current_screen(), 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->screen_observer_ = mock_screen_observer_.get(); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void TearDownOnMainThread() OVERRIDE { 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mock_error_screen_.reset(); 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mock_error_screen_actor_.reset(); 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WizardInProcessBrowserTest::TearDownOnMainThread(); 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { 978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) NetworkPortalDetector::Shutdown(); 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetDefaultNetwork(const std::string& guid) { 1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DCHECK(network_portal_detector_); 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_portal_detector_->SetDefaultNetworkForTesting(guid); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetDetectionResults( 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const NetworkPortalDetector::CaptivePortalState& state) { 1098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DCHECK(network_portal_detector_); 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_portal_detector_->SetDetectionResultsForTesting(guid, state); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void NotifyPortalDetectionCompleted() { 1148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DCHECK(network_portal_detector_); 1158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) network_portal_detector_->NotifyObserversForTesting(); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FakeUpdateEngineClient* fake_update_engine_client_; 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<MockScreenObserver> mock_screen_observer_; 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<MockErrorScreenActor> mock_error_screen_actor_; 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<MockErrorScreen> mock_error_screen_; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateScreen* update_screen_; 1238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) NetworkPortalDetectorTestImpl* network_portal_detector_; 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(update_screen_->actor_ != NULL); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) { 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->SetIgnoreIdleStatus(true); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateEngineClient::Status status; 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_IDLE; 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE; 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_IDLE; 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetLastStatus() will be called via ExitUpdate() called from 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // UpdateStatusChanged(). 14390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) fake_update_engine_client_->set_default_status(status); 144b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, OnExit(ScreenObserver::UPDATE_NOUPDATE)) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) { 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->is_ignore_update_deadlines_ = true; 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateEngineClient::Status status; 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE; 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.new_version = "latest and greatest"; 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_DOWNLOADING; 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.download_progress = 0.0; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.download_progress = 0.5; 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.download_progress = 1.0; 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_VERIFYING; 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_FINALIZING; 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT; 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 176b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // UpdateStatusChanged(status) calls RebootAfterUpdate(). 177b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_EQ(1, fake_update_engine_client_->reboot_after_update_call_count()); 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Check that OOBE will resume back at this screen. 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(StartupUtils::IsOobeCompleted()); 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(update_screen_->GetName(), 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) g_browser_process->local_state()->GetString(prefs::kOobeScreenPending)); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) { 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // First, cancel the update that is already in progress. 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_NOUPDATE)) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->CancelUpdate(); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) fake_update_engine_client_->set_update_check_result( 193b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) chromeos::UpdateEngineClient::UPDATE_RESULT_FAILED); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->StartNetworkCheck(); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) { 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateEngineClient::Status status; 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_ERROR; 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetLastStatus() will be called via ExitUpdate() called from 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // UpdateStatusChanged(). 20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) fake_update_engine_client_->set_default_status(status); 206b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) { 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateEngineClient::Status status; 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE; 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.new_version = "latest and greatest"; 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetLastStatus() will be called via ExitUpdate() called from 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // UpdateStatusChanged(). 21990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) fake_update_engine_client_->set_default_status(status); 220b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.status = UpdateEngineClient::UPDATE_STATUS_ERROR; 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetLastStatus() will be called via ExitUpdate() called from 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // UpdateStatusChanged(). 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) fake_update_engine_client_->set_default_status(status); 227b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_ERROR_UPDATING)) 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->UpdateStatusChanged(status); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestTemproraryOfflineNetwork) { 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_NOUPDATE)) 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->CancelUpdate(); 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Change ethernet state to portal. 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkPortalDetector::CaptivePortalState portal_state; 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) portal_state.response_code = 200; 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDetectionResults(kStubEthernetGuid, portal_state); 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update screen will show error message about portal state because 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ethernet is behind captive portal. 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetUIState(ErrorScreen::UI_STATE_UPDATE)) 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->StartNetworkCheck(); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkPortalDetector::CaptivePortalState online_state; 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) online_state.response_code = 204; 264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDetectionResults(kStubEthernetGuid, online_state); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Second notification from portal detector will be about online state, 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // so update screen will hide error message and proceed to update. 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, HideErrorScreen(update_screen_)) 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 270b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) fake_update_engine_client_->set_update_check_result( 271b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) chromeos::UpdateEngineClient::UPDATE_RESULT_FAILED); 272b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NotifyPortalDetectionCompleted(); 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestTwoOfflineNetworks) { 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_NOUPDATE)) 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->CancelUpdate(); 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Change ethernet state to portal. 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkPortalDetector::CaptivePortalState portal_state; 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) portal_state.response_code = 200; 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDetectionResults(kStubEthernetGuid, portal_state); 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update screen will show error message about portal state because 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ethernet is behind captive portal. 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetUIState(ErrorScreen::UI_STATE_UPDATE)) 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) update_screen_->StartNetworkCheck(); 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Change active network to the wifi behind proxy. 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkPortalDetector::CaptivePortalState proxy_state; 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy_state.status = 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED; 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) proxy_state.response_code = -1; 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDefaultNetwork(kStubWifiGuid); 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDetectionResults(kStubWifiGuid, proxy_state); 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update screen will show message about proxy error because wifie 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // network requires proxy authentication. 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetErrorState(ErrorScreen::ERROR_STATE_PROXY, std::string())) 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NotifyPortalDetectionCompleted(); 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestVoidNetwork) { 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDefaultNetwork(std::string()); 32690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 32790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Cancels pending update request. 32890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, 32990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_NOUPDATE)) 33090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Times(1); 33190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) update_screen_->CancelUpdate(); 33290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 33390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // First portal detection attempt returns NULL network and undefined 33490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // results, so detection is restarted. 33590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 33690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetUIState(_)) 33790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Times(Exactly(0)); 33890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 33990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetErrorState(_, _)) 34090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Times(Exactly(0)); 34190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) 34290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Times(Exactly(0)); 34390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) update_screen_->StartNetworkCheck(); 34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Second portal detection also returns NULL network and undefined 34690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // results. In this case, offline message should be displayed. 34790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetUIState(ErrorScreen::UI_STATE_UPDATE)) 34990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Times(1); 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_CALL(*mock_error_screen_actor_, 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SetErrorState(ErrorScreen::ERROR_STATE_OFFLINE, std::string())) 35290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Times(1); 35390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) 35490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Times(1); 35590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 35690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NotifyPortalDetectionCompleted(); 35790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 35890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3592385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestAPReselection) { 3602385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_CALL(*mock_screen_observer_, 3612385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch OnExit(ScreenObserver::UPDATE_NOUPDATE)) 3622385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch .Times(1); 3632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch update_screen_->CancelUpdate(); 3642385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 3652385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // Change ethernet state to portal. 3662385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch NetworkPortalDetector::CaptivePortalState portal_state; 3672385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; 3682385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch portal_state.response_code = 200; 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetDetectionResults(kStubEthernetGuid, portal_state); 3702385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 3712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // Update screen will show error message about portal state because 3722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // ethernet is behind captive portal. 3732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_CALL(*mock_error_screen_actor_, 3742385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch SetUIState(ErrorScreen::UI_STATE_UPDATE)) 3752385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch .Times(1); 3762385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_CALL(*mock_error_screen_actor_, 3772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) 3782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch .Times(1); 3792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) 3802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch .Times(1); 3812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) 3822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch .Times(1); 3832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 3842385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch update_screen_->StartNetworkCheck(); 3852385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 3862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // User re-selects the same network manually. In this case, hide 3872385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // offline message and skip network check. Since ethernet is still 3882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // behind portal, update engine fails to update. 3892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_CALL(*mock_screen_observer_, HideErrorScreen(update_screen_)) 3902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch .Times(1); 3912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch fake_update_engine_client_->set_update_check_result( 3922385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch chromeos::UpdateEngineClient::UPDATE_RESULT_FAILED); 3932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_CALL(*mock_screen_observer_, 3942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) 3952385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch .Times(1); 3962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch update_screen_->OnConnectToNetworkRequested(); 3982385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch base::MessageLoop::current()->RunUntilIdle(); 3992385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 4002385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chromeos 402