Home | History | Annotate | Download | only in session
      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 
     16 namespace base {
     17 class TickClock;
     18 }
     19 
     20 namespace ash {
     21 
     22 class 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.
     30 class 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