1// Copyright (c) 2013 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 REMOTING_HOST_WIN_RDP_CLIENT_H_
6#define REMOTING_HOST_WIN_RDP_CLIENT_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/memory/ref_counted.h"
12#include "base/memory/scoped_ptr.h"
13#include "base/threading/non_thread_safe.h"
14
15namespace base {
16class SingleThreadTaskRunner;
17}  // namespace base
18
19namespace webrtc {
20class DesktopSize;
21}  // namespace webrtc
22
23namespace remoting {
24
25// Establishes a loopback RDP connection to spawn a new Windows session.
26class RdpClient : public base::NonThreadSafe {
27 public:
28  class EventHandler {
29   public:
30    virtual ~EventHandler() {}
31
32    // Notifies the event handler that an RDP connection has been established
33    // successfully.
34    virtual void OnRdpConnected() = 0;
35
36    // Notifies that the RDP connection has been closed.
37    virtual void OnRdpClosed() = 0;
38  };
39
40  RdpClient(
41      scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
42      scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
43      const webrtc::DesktopSize& screen_size,
44      const std::string& terminal_id,
45      EventHandler* event_handler);
46  virtual ~RdpClient();
47
48  // Sends Secure Attention Sequence to the session.
49  void InjectSas();
50
51 private:
52  // The actual implementation resides in Core class.
53  class Core;
54  scoped_refptr<Core> core_;
55
56  DISALLOW_COPY_AND_ASSIGN(RdpClient);
57};
58
59}  // namespace remoting
60
61#endif  // REMOTING_HOST_WIN_RDP_CLIENT_H_
62