1// Copyright (c) 2012 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_WTS_SESSION_PROCESS_DELEGATE_H_
6#define REMOTING_HOST_WIN_WTS_SESSION_PROCESS_DELEGATE_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "base/memory/ref_counted.h"
11#include "base/memory/scoped_ptr.h"
12#include "base/threading/non_thread_safe.h"
13#include "remoting/host/win/worker_process_launcher.h"
14
15namespace base {
16class CommandLine;
17class SingleThreadTaskRunner;
18} // namespace base
19
20namespace IPC {
21class Message;
22} // namespace base
23
24namespace remoting {
25
26// Implements logic for launching and monitoring a worker process in a different
27// session.
28class WtsSessionProcessDelegate
29    : public base::NonThreadSafe,
30      public WorkerProcessLauncher::Delegate {
31 public:
32  WtsSessionProcessDelegate(
33      scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
34      scoped_ptr<base::CommandLine> target,
35      bool launch_elevated,
36      const std::string& channel_security);
37  ~WtsSessionProcessDelegate();
38
39  // Initializes the object returning true on success.
40  bool Initialize(uint32 session_id);
41
42  // WorkerProcessLauncher::Delegate implementation.
43  virtual void LaunchProcess(WorkerProcessLauncher* event_handler) OVERRIDE;
44  virtual void Send(IPC::Message* message) OVERRIDE;
45  virtual void CloseChannel() OVERRIDE;
46  virtual void KillProcess() OVERRIDE;
47
48 private:
49  // The actual implementation resides in WtsSessionProcessDelegate::Core class.
50  class Core;
51  scoped_refptr<Core> core_;
52
53  DISALLOW_COPY_AND_ASSIGN(WtsSessionProcessDelegate);
54};
55
56}  // namespace remoting
57
58#endif  // REMOTING_HOST_WIN_WTS_SESSION_PROCESS_DELEGATE_H_
59