1 // Copyright (c) 2011 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 "base/memory/ref_counted.h" 6 #include "base/utf_string_conversions.h" 7 #include "chrome/browser/chromeos/cros/mock_update_library.h" 8 #include "chrome/browser/chromeos/update_observer.h" 9 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser_list.h" 11 #include "chrome/common/url_constants.h" 12 #include "chrome/test/automation/dom_element_proxy.h" 13 #include "chrome/test/in_process_browser_test.h" 14 #include "chrome/test/ui_test_utils.h" 15 16 using ::testing::AnyNumber; 17 using ::testing::InvokeWithoutArgs; 18 using ::testing::Return; 19 using ::testing::ReturnRef; 20 using ::testing::_; 21 using ::testing::Invoke; 22 using ::testing::Exactly; 23 24 namespace { 25 26 typedef ObserverList<chromeos::UpdateLibrary::Observer> Observers; 27 28 void CallObservers(chromeos::MockUpdateLibrary* lib, 29 Observers* observers, 30 const chromeos::UpdateLibrary::Status& x) { 31 EXPECT_CALL(*lib, status()) 32 .Times(AnyNumber()) 33 .WillRepeatedly((ReturnRef(x))) 34 .RetiresOnSaturation(); 35 FOR_EACH_OBSERVER(chromeos::UpdateLibrary::Observer, *observers, 36 UpdateStatusChanged(lib)); 37 } 38 39 void FireSuccessSequence(chromeos::MockUpdateLibrary* lib, 40 Observers* observer) { 41 chromeos::UpdateLibrary::Status status; 42 43 status.status = chromeos::UPDATE_STATUS_IDLE; 44 CallObservers(lib, observer, status); 45 46 status.status = chromeos::UPDATE_STATUS_CHECKING_FOR_UPDATE; 47 CallObservers(lib, observer, status); 48 49 status.status = chromeos::UPDATE_STATUS_UPDATE_AVAILABLE; 50 CallObservers(lib, observer, status); 51 52 status.status = chromeos::UPDATE_STATUS_DOWNLOADING; 53 status.download_progress = 10; 54 CallObservers(lib, observer, status); 55 56 status.status = chromeos::UPDATE_STATUS_DOWNLOADING; 57 status.download_progress = 50; 58 CallObservers(lib, observer, status); 59 60 status.status = chromeos::UPDATE_STATUS_DOWNLOADING; 61 status.download_progress = 90; 62 CallObservers(lib, observer, status); 63 64 status.status = chromeos::UPDATE_STATUS_VERIFYING; 65 CallObservers(lib, observer, status); 66 67 status.status = chromeos::UPDATE_STATUS_FINALIZING; 68 CallObservers(lib, observer, status); 69 70 status.status = chromeos::UPDATE_STATUS_UPDATED_NEED_REBOOT; 71 CallObservers(lib, observer, status); 72 } 73 74 void FireFailureSequence(chromeos::MockUpdateLibrary* lib, 75 Observers* observer) { 76 chromeos::UpdateLibrary::Status status; 77 78 status.status = chromeos::UPDATE_STATUS_IDLE; 79 CallObservers(lib, observer, status); 80 81 status.status = chromeos::UPDATE_STATUS_CHECKING_FOR_UPDATE; 82 CallObservers(lib, observer, status); 83 84 status.status = chromeos::UPDATE_STATUS_UPDATE_AVAILABLE; 85 CallObservers(lib, observer, status); 86 87 status.status = chromeos::UPDATE_STATUS_DOWNLOADING; 88 status.download_progress = 10; 89 CallObservers(lib, observer, status); 90 91 status.status = chromeos::UPDATE_STATUS_ERROR; 92 status.download_progress = 10; 93 CallObservers(lib, observer, status); 94 } 95 96 class UpdateBrowserTest : public InProcessBrowserTest { 97 public: 98 UpdateBrowserTest() {} 99 }; 100 101 IN_PROC_BROWSER_TEST_F(UpdateBrowserTest, Notifications) { 102 scoped_ptr<chromeos::MockUpdateLibrary> lib( 103 new chromeos::MockUpdateLibrary()); 104 105 Observers observers; 106 107 EXPECT_CALL(*lib, AddObserver(_)) 108 .WillRepeatedly(Invoke(&observers, 109 &Observers::AddObserver)); 110 111 chromeos::UpdateObserver* observe = 112 new chromeos::UpdateObserver(browser()->profile()); 113 lib->AddObserver(observe); 114 115 FireSuccessSequence(lib.get(), &observers); 116 FireFailureSequence(lib.get(), &observers); 117 } 118 119 } // namespace 120