// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef REMOTING_HOST_CONTINUE_WINDOW_H_
#define REMOTING_HOST_CONTINUE_WINDOW_H_

#include "base/basictypes.h"
#include "base/memory/weak_ptr.h"
#include "base/timer/timer.h"
#include "remoting/host/host_window.h"

namespace remoting {

class ContinueWindow : public HostWindow {
 public:
  virtual ~ContinueWindow();

  // HostWindow override.
  virtual void Start(
      const base::WeakPtr<ClientSessionControl>& client_session_control)
      OVERRIDE;

  // Resumes paused client session.
  void ContinueSession();

  // Disconnects the client session.
  void DisconnectSession();

 protected:
  ContinueWindow();

  // Shows and hides the UI.
  virtual void ShowUi() = 0;
  virtual void HideUi() = 0;

 private:
  // Invoked periodically to ask for the local user whether the session should
  // be continued.
  void OnSessionExpired();

  // Used to disconnect the client session.
  base::WeakPtr<ClientSessionControl> client_session_control_;

  // Used to disconnect the client session when timeout expires.
  base::OneShotTimer<ContinueWindow> disconnect_timer_;

  // Used to ask the local user whether the session should be continued.
  base::OneShotTimer<ContinueWindow> session_expired_timer_;

  DISALLOW_COPY_AND_ASSIGN(ContinueWindow);
};

}  // namespace remoting

#endif  // REMOTING_HOST_CONTINUE_WINDOW_H_
