1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/mock_login_library.h" 6513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/chromeos/cros/mock_network_library.h" 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/mock_update_library.h" 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/mock_screen_observer.h" 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/update_screen.h" 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/wizard_controller.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::_; 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::AnyNumber; 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::AtLeast; 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::Return; 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing ::testing::ReturnRef; 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing ::testing::Invoke; 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstatic void RequestUpdateCheckSuccess(UpdateCallback callback, void* userdata) { 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen callback(userdata, chromeos::UPDATE_RESULT_SUCCESS, NULL); 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass UpdateScreenTest : public WizardInProcessBrowserTest { 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateScreenTest() : WizardInProcessBrowserTest("update"), 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_login_library_(NULL), 30513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch mock_update_library_(NULL), 31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch mock_network_library_(NULL) {} 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void SetUpInProcessBrowserTestFixture() { 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen cros_mock_->InitStatusAreaMocks(); 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen cros_mock_->SetStatusAreaMocksExpectations(); 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(CrosLibrary::Get()->EnsureLoaded()); 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_login_library_ = new MockLoginLibrary(); 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen cros_mock_->test_api()->SetLoginLibrary(mock_login_library_, true); 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_login_library_, EmitLoginPromptReady()) 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mock_update_library_ = new MockUpdateLibrary(); 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen cros_mock_->test_api()->SetUpdateLibrary(mock_update_library_, true); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // UpdateScreen::StartUpdate() will be called by the WizardController 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // just after creating the update screen, so the expectations for that 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // should be set up here. 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, AddObserver(_)) 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, RemoveObserver(_)) 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)); 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*mock_update_library_, RequestUpdateCheck(_,_)) 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1) 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Invoke(RequestUpdateCheckSuccess)); 58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch mock_network_library_ = cros_mock_->mock_network_library(); 60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_CALL(*mock_network_library_, Connected()) 61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch .Times(1) // also called by NetworkMenu::InitMenuItems() 62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch .WillRepeatedly((Return(false))) 63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch .RetiresOnSaturation(); 64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(_)) 65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch .Times(1) 66513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch .RetiresOnSaturation(); 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*mock_network_library_, FindWifiDevice()) 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(AnyNumber()); 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*mock_network_library_, FindEthernetDevice()) 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .Times(AnyNumber()); 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void TearDownInProcessBrowserTestFixture() { 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen cros_mock_->test_api()->SetUpdateLibrary(NULL, true); 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockLoginLibrary* mock_login_library_; 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MockUpdateLibrary* mock_update_library_; 80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MockNetworkLibrary* mock_network_library_; 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(controller() != NULL); 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(mock_screen_observer.get()); 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateScreen* update_screen = controller()->GetUpdateScreen(); 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(update_screen != NULL); 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_EQ(controller()->current_screen(), update_screen); 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateView* update_view = update_screen->view(); 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(update_view != NULL); 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(NULL); 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) { 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(controller() != NULL); 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(mock_screen_observer.get()); 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateScreen* update_screen = controller()->GetUpdateScreen(); 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(update_screen != NULL); 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_EQ(controller()->current_screen(), update_screen); 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateLibrary::Status status; 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_IDLE; 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_screen_observer, OnExit(ScreenObserver::UPDATE_NOUPDATE)) 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(NULL); 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) { 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(controller() != NULL); 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(mock_screen_observer.get()); 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateScreen* update_screen = controller()->GetUpdateScreen(); 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(update_screen != NULL); 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_EQ(controller()->current_screen(), update_screen); 1254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch update_screen->SetAllUpdatesCritical(true); 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateLibrary::Status status; 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_UPDATE_AVAILABLE; 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.new_version = "latest and greatest"; 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_DOWNLOADING; 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.download_progress = 0.0; 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.download_progress = 0.5; 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.download_progress = 1.0; 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_VERIFYING; 156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_FINALIZING; 162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_UPDATED_NEED_REBOOT; 168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, RebootAfterUpdate()) 172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(NULL); 176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstatic void RequestUpdateCheckFail(UpdateCallback callback, void* userdata) { 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen callback(userdata, chromeos::UPDATE_RESULT_FAILED, NULL); 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) { 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(controller() != NULL); 184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); 185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(mock_screen_observer.get()); 186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateScreen* update_screen = controller()->GetUpdateScreen(); 187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(update_screen != NULL); 188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_EQ(controller()->current_screen(), update_screen); 189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // First, cancel the update that is already in progress. 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_CALL(*mock_screen_observer, 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen OnExit(ScreenObserver::UPDATE_NOUPDATE)) 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen .Times(1); 194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->CancelUpdate(); 195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Run UpdateScreen::StartUpdate() again, but CheckForUpdate() will fail 197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // issuing the update check this time. 198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, AddObserver(_)) 199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, RemoveObserver(_)) 201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)); 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(*mock_update_library_, RequestUpdateCheck(_,_)) 203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1) 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(Invoke(RequestUpdateCheckFail)); 205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_screen_observer, 206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) 207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->StartUpdate(); 209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(NULL); 211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) { 214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(controller() != NULL); 215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); 216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(mock_screen_observer.get()); 217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateScreen* update_screen = controller()->GetUpdateScreen(); 218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(update_screen != NULL); 219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_EQ(controller()->current_screen(), update_screen); 220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateLibrary::Status status; 222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_ERROR; 223bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_screen_observer, 227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) 228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(NULL); 232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) { 235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(controller() != NULL); 236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); 237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(mock_screen_observer.get()); 238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateScreen* update_screen = controller()->GetUpdateScreen(); 239bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(update_screen != NULL); 240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_EQ(controller()->current_screen(), update_screen); 241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen UpdateLibrary::Status status; 243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_UPDATE_AVAILABLE; 245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.new_version = "latest and greatest"; 246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 248bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 249bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 250bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 251bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen status.status = UPDATE_STATUS_ERROR; 252bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_update_library_, status()) 253bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(AtLeast(1)) 254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .WillRepeatedly(ReturnRef(status)); 255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_CALL(*mock_screen_observer, 256bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OnExit(ScreenObserver::UPDATE_ERROR_UPDATING)) 257bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .Times(1); 258bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen update_screen->UpdateStatusChanged(mock_update_library_); 259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 260bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller()->set_observer(NULL); 261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 262bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 263bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 264