1 // Copyright (c) 2012 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_UI_IDLE_LOGOUT_DIALOG_VIEW_H_ 6 #define CHROME_BROWSER_CHROMEOS_UI_IDLE_LOGOUT_DIALOG_VIEW_H_ 7 8 #include "base/gtest_prod_util.h" 9 #include "base/memory/weak_ptr.h" 10 #include "base/timer/timer.h" 11 #include "ui/views/window/dialog_delegate.h" 12 13 namespace base { 14 class TimeDelta; 15 } 16 namespace views { 17 class Label; 18 } 19 20 namespace chromeos { 21 22 class IdleLogoutDialogView; 23 class KioskModeSettings; 24 25 // A class that holds the settings for IdleLogoutDialogView; this class 26 // can be overridden with a mock for testing. 27 class IdleLogoutSettingsProvider { 28 public: 29 IdleLogoutSettingsProvider(); 30 virtual ~IdleLogoutSettingsProvider(); 31 32 virtual base::TimeDelta GetCountdownUpdateInterval(); 33 virtual KioskModeSettings* GetKioskModeSettings(); 34 virtual void LogoutCurrentUser(IdleLogoutDialogView* dialog); 35 36 private: 37 DISALLOW_COPY_AND_ASSIGN(IdleLogoutSettingsProvider); 38 }; 39 40 // A class to show the logout on idle dialog if the machine is in retail mode. 41 class IdleLogoutDialogView : public views::DialogDelegateView { 42 public: 43 static void ShowDialog(); 44 static void CloseDialog(); 45 46 // views::DialogDelegateView: 47 virtual int GetDialogButtons() const OVERRIDE; 48 virtual ui::ModalType GetModalType() const OVERRIDE; 49 virtual base::string16 GetWindowTitle() const OVERRIDE; 50 virtual bool Close() OVERRIDE; 51 52 private: 53 friend class MockIdleLogoutSettingsProvider; 54 friend class IdleLogoutDialogViewTest; 55 FRIEND_TEST_ALL_PREFIXES(IdleLogoutDialogViewTest, ShowDialogAndCloseView); 56 FRIEND_TEST_ALL_PREFIXES(IdleLogoutDialogViewTest, 57 ShowDialogAndCloseViewClose); 58 59 IdleLogoutDialogView(); 60 virtual ~IdleLogoutDialogView(); 61 62 // Adds the labels and adds them to the layout. 63 void InitAndShow(); 64 65 void Show(); 66 67 void UpdateCountdown(); 68 69 // For testing. 70 static IdleLogoutDialogView* current_instance(); 71 static void set_settings_provider(IdleLogoutSettingsProvider* provider); 72 73 views::Label* restart_label_; 74 75 // Time at which the countdown is over and we should close the dialog. 76 base::Time countdown_end_time_; 77 78 base::RepeatingTimer<IdleLogoutDialogView> timer_; 79 80 static IdleLogoutSettingsProvider* provider_; 81 82 base::WeakPtrFactory<IdleLogoutDialogView> weak_ptr_factory_; 83 84 DISALLOW_COPY_AND_ASSIGN(IdleLogoutDialogView); 85 }; 86 87 } // namespace chromeos 88 89 #endif // CHROME_BROWSER_CHROMEOS_UI_IDLE_LOGOUT_DIALOG_VIEW_H_ 90