1// Copyright 2014 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 ASH_SYSTEM_CHROMEOS_SESSION_LOGOUT_CONFIRMATION_CONTROLLER_H_ 6#define ASH_SYSTEM_CHROMEOS_SESSION_LOGOUT_CONFIRMATION_CONTROLLER_H_ 7 8#include "ash/ash_export.h" 9#include "ash/shell_observer.h" 10#include "base/basictypes.h" 11#include "base/callback.h" 12#include "base/memory/scoped_ptr.h" 13#include "base/time/time.h" 14#include "base/timer/timer.h" 15 16namespace base { 17class TickClock; 18} 19 20namespace ash { 21 22class LogoutConfirmationDialog; 23 24// This class shows a dialog asking the user to confirm or deny logout and 25// terminates the session if the user either confirms or allows the countdown 26// shown in the dialog to expire. 27// It is guaranteed that no more than one confirmation dialog will be visible at 28// any given time. If there are multiple requests to show a confirmation dialog 29// at the same time, the dialog whose countdown expires first is shown. 30class ASH_EXPORT LogoutConfirmationController : public ShellObserver { 31 public: 32 // The |logout_closure| must be safe to call as long as |this| is alive. 33 explicit LogoutConfirmationController(const base::Closure& logout_closure); 34 virtual ~LogoutConfirmationController(); 35 36 base::TickClock* clock() const { return clock_.get(); } 37 38 // Shows a LogoutConfirmationDialog. If a confirmation dialog is already being 39 // shown, it is closed and a new one opened if |logout_time| is earlier than 40 // the current dialog's |logout_time_|. 41 void ConfirmLogout(base::TimeTicks logout_time); 42 43 void SetClockForTesting(scoped_ptr<base::TickClock> clock); 44 45 // ShellObserver: 46 virtual void OnLockStateChanged(bool locked) OVERRIDE; 47 48 // Called by the |dialog_| when the user confirms logout. 49 void OnLogoutConfirmed(); 50 51 // Called by the |dialog_| when it is closed. 52 void OnDialogClosed(); 53 54 LogoutConfirmationDialog* dialog_for_testing() const { return dialog_; } 55 56 private: 57 scoped_ptr<base::TickClock> clock_; 58 base::Closure logout_closure_; 59 60 base::TimeTicks logout_time_; 61 LogoutConfirmationDialog* dialog_; // Owned by the Views hierarchy. 62 base::Timer logout_timer_; 63 64 DISALLOW_COPY_AND_ASSIGN(LogoutConfirmationController); 65}; 66 67} // namespace ash 68 69#endif // ASH_SYSTEM_CHROMEOS_SESSION_LOGOUT_CONFIRMATION_CONTROLLER_H_ 70