// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/memory/ref_counted.h" #include "base/utf_string_conversions.h" #include "chrome/browser/chromeos/cros/mock_update_library.h" #include "chrome/browser/chromeos/update_observer.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/common/url_constants.h" #include "chrome/test/automation/dom_element_proxy.h" #include "chrome/test/in_process_browser_test.h" #include "chrome/test/ui_test_utils.h" using ::testing::AnyNumber; using ::testing::InvokeWithoutArgs; using ::testing::Return; using ::testing::ReturnRef; using ::testing::_; using ::testing::Invoke; using ::testing::Exactly; namespace { typedef ObserverList<chromeos::UpdateLibrary::Observer> Observers; void CallObservers(chromeos::MockUpdateLibrary* lib, Observers* observers, const chromeos::UpdateLibrary::Status& x) { EXPECT_CALL(*lib, status()) .Times(AnyNumber()) .WillRepeatedly((ReturnRef(x))) .RetiresOnSaturation(); FOR_EACH_OBSERVER(chromeos::UpdateLibrary::Observer, *observers, UpdateStatusChanged(lib)); } void FireSuccessSequence(chromeos::MockUpdateLibrary* lib, Observers* observer) { chromeos::UpdateLibrary::Status status; status.status = chromeos::UPDATE_STATUS_IDLE; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_CHECKING_FOR_UPDATE; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_UPDATE_AVAILABLE; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_DOWNLOADING; status.download_progress = 10; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_DOWNLOADING; status.download_progress = 50; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_DOWNLOADING; status.download_progress = 90; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_VERIFYING; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_FINALIZING; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_UPDATED_NEED_REBOOT; CallObservers(lib, observer, status); } void FireFailureSequence(chromeos::MockUpdateLibrary* lib, Observers* observer) { chromeos::UpdateLibrary::Status status; status.status = chromeos::UPDATE_STATUS_IDLE; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_CHECKING_FOR_UPDATE; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_UPDATE_AVAILABLE; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_DOWNLOADING; status.download_progress = 10; CallObservers(lib, observer, status); status.status = chromeos::UPDATE_STATUS_ERROR; status.download_progress = 10; CallObservers(lib, observer, status); } class UpdateBrowserTest : public InProcessBrowserTest { public: UpdateBrowserTest() {} }; IN_PROC_BROWSER_TEST_F(UpdateBrowserTest, Notifications) { scoped_ptr<chromeos::MockUpdateLibrary> lib( new chromeos::MockUpdateLibrary()); Observers observers; EXPECT_CALL(*lib, AddObserver(_)) .WillRepeatedly(Invoke(&observers, &Observers::AddObserver)); chromeos::UpdateObserver* observe = new chromeos::UpdateObserver(browser()->profile()); lib->AddObserver(observe); FireSuccessSequence(lib.get(), &observers); FireFailureSequence(lib.get(), &observers); } } // namespace