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.
5 #ifndef CHROME_BROWSER_CHROMEOS_UI_IDLE_LOGOUT_DIALOG_VIEW_H_
6 #define CHROME_BROWSER_CHROMEOS_UI_IDLE_LOGOUT_DIALOG_VIEW_H_
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"
22 class IdleLogoutDialogView
;
23 class KioskModeSettings
;
25 // A class that holds the settings for IdleLogoutDialogView; this class
26 // can be overridden with a mock for testing.
27 class IdleLogoutSettingsProvider
{
29 IdleLogoutSettingsProvider();
30 virtual ~IdleLogoutSettingsProvider();
32 virtual base::TimeDelta
GetCountdownUpdateInterval();
33 virtual KioskModeSettings
* GetKioskModeSettings();
34 virtual void LogoutCurrentUser(IdleLogoutDialogView
* dialog
);
37 DISALLOW_COPY_AND_ASSIGN(IdleLogoutSettingsProvider
);
40 // A class to show the logout on idle dialog if the machine is in retail mode.
41 class IdleLogoutDialogView
: public views::DialogDelegateView
{
43 static void ShowDialog();
44 static void CloseDialog();
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
;
53 friend class MockIdleLogoutSettingsProvider
;
54 friend class IdleLogoutDialogViewTest
;
55 FRIEND_TEST_ALL_PREFIXES(IdleLogoutDialogViewTest
, ShowDialogAndCloseView
);
56 FRIEND_TEST_ALL_PREFIXES(IdleLogoutDialogViewTest
,
57 ShowDialogAndCloseViewClose
);
59 IdleLogoutDialogView();
60 virtual ~IdleLogoutDialogView();
62 // Adds the labels and adds them to the layout.
67 void UpdateCountdown();
70 static IdleLogoutDialogView
* current_instance();
71 static void set_settings_provider(IdleLogoutSettingsProvider
* provider
);
73 views::Label
* restart_label_
;
75 // Time at which the countdown is over and we should close the dialog.
76 base::Time countdown_end_time_
;
78 base::RepeatingTimer
<IdleLogoutDialogView
> timer_
;
80 base::WeakPtrFactory
<IdleLogoutDialogView
> weak_ptr_factory_
;
82 static IdleLogoutSettingsProvider
* provider_
;
84 DISALLOW_COPY_AND_ASSIGN(IdleLogoutDialogView
);
87 } // namespace chromeos
89 #endif // CHROME_BROWSER_CHROMEOS_UI_IDLE_LOGOUT_DIALOG_VIEW_H_