1 // Copyright (c) 2010 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 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_UPDATE_SCREEN_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_UPDATE_SCREEN_H_ 7 #pragma once 8 9 #include "base/timer.h" 10 #include "chrome/browser/chromeos/cros/update_library.h" 11 #include "chrome/browser/chromeos/login/update_view.h" 12 #include "chrome/browser/chromeos/login/view_screen.h" 13 14 namespace chromeos { 15 16 class UpdateController { 17 public: 18 // Starts update. 19 virtual void StartUpdate() = 0; 20 // Cancels pending update without error. 21 virtual void CancelUpdate() = 0; 22 }; 23 24 class UpdateScreen: public DefaultViewScreen<chromeos::UpdateView>, 25 public UpdateLibrary::Observer, 26 public UpdateController { 27 public: 28 explicit UpdateScreen(WizardScreenDelegate* delegate); 29 virtual ~UpdateScreen(); 30 31 // UpdateLibrary::Observer implementation: 32 virtual void UpdateStatusChanged(UpdateLibrary* library); 33 34 // Overridden from UpdateController: 35 virtual void StartUpdate(); 36 virtual void CancelUpdate(); 37 38 // Overridden from ViewScreen. 39 virtual void Show(); 40 41 enum ExitReason { 42 REASON_UPDATE_CANCELED, 43 REASON_UPDATE_INIT_FAILED, 44 REASON_UPDATE_NON_CRITICAL, 45 REASON_UPDATE_ENDED 46 }; 47 48 // Reports update results to the ScreenObserver. 49 virtual void ExitUpdate(ExitReason reason); 50 51 // Reboot check delay get/set, in seconds. reboot_check_delay()52 int reboot_check_delay() const { return reboot_check_delay_; } 53 void SetRebootCheckDelay(int seconds); 54 55 // Returns true if there is critical system update that requires installation 56 // and immediate reboot. 57 bool HasCriticalUpdate(); 58 59 // Set flag to treat all updates as critical (for test purpose mainly). 60 // Default value is false. 61 void SetAllUpdatesCritical(bool is_critical); 62 63 // Returns true if this instance is still active (i.e. has not been deleted). 64 static bool HasInstance(UpdateScreen* inst); 65 66 private: 67 // Timer notification handlers. 68 void OnWaitForRebootTimeElapsed(); 69 70 // Checks that screen is shown, shows if not. 71 void MakeSureScreenIsShown(); 72 73 // Timer for the interval to wait for the reboot. 74 // If reboot didn't happen - ask user to reboot manually. 75 base::OneShotTimer<UpdateScreen> reboot_timer_; 76 77 // Returns a static InstanceSet. 78 typedef std::set<UpdateScreen*> InstanceSet; 79 static InstanceSet& GetInstanceSet(); 80 81 // True if in the process of checking for update. 82 bool checking_for_update_; 83 84 // Time in seconds after which we decide that the device has not rebooted 85 // automatically. If reboot didn't happen during this interval, ask user to 86 // reboot device manually. 87 int reboot_check_delay_; 88 89 // Flag that is used to detect when update download has just started. 90 bool is_downloading_update_; 91 92 // Is all updates critical? If true, update deadlines are ignored. 93 bool is_all_updates_critical_; 94 95 DISALLOW_COPY_AND_ASSIGN(UpdateScreen); 96 }; 97 98 } // namespace chromeos 99 100 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_UPDATE_SCREEN_H_ 101