summaryrefslogtreecommitdiffstats
path: root/remoting/host/curtain.h
blob: a0f973b9d81682e95dac4fa66bad0e34972d7a40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Copyright (c) 2011 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_CURTAIN_H_
#define REMOTING_HOST_CURTAIN_H_

namespace remoting {

// An interface for enabling or disabling "curtain mode" on a Chromoting host.
// Curtain mode is designed to ensure privacy for remote users. It guarantees
// the following:
//   1. The local display of the host does not display the remote user's
//      actions during the connection.
//   2. The local keyboard and mouse (and other input devices) do not interfere
//      with the remote user's session.
//   3. When the remote session terminates, the host computer is left in a
//      secure state (for example, locked).
class Curtain {
 public:
  virtual ~Curtain() { }

  // Enable or disable curtain mode. This method is called with |enable| = true
  // when a connection authenticates and with |enable| = false when a connection
  // terminates (even if due to abnormal termination of the host process).
  virtual void EnableCurtainMode(bool enable) = 0;

  // Create the platform-specific curtain mode implementation.
  // TODO(jamiewalch): Until the daemon architecture is implemented, curtain
  // mode implementations that cannot easily be reset by the user should check
  // to see if curtain mode is already enabled here and disable it if so. This
  // is to provide an easy way of recovering if the host process crashes while
  // a connection is active. Once the daemon architecture is in place, it will
  // be responsible for calling EnableCurtainMode(false) as part of its crash
  // recovery logic.
  static Curtain* Create();
};

}  // namespace remoting

#endif  // REMOTING_HOST_CURTAIN_H_