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_CLIENT_CLIENT_CONTEXT_H_
6#define REMOTING_CLIENT_CLIENT_CONTEXT_H_
7
8#include <string>
9
10#include "base/threading/thread.h"
11
12namespace base {
13class SingleThreadTaskRunner;
14}  // namespace base
15
16namespace remoting {
17
18// A class that manages threads and running context for the chromoting client
19// process.
20class ClientContext {
21 public:
22  // |main_task_runner| is the task runner for the main plugin thread
23  // that is used for all PPAPI calls, e.g. network and graphics.
24  ClientContext(
25      const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner);
26  virtual ~ClientContext();
27
28  void Start();
29  void Stop();
30
31  base::SingleThreadTaskRunner* main_task_runner();
32  base::SingleThreadTaskRunner* decode_task_runner();
33  base::SingleThreadTaskRunner* audio_decode_task_runner();
34
35 private:
36  scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
37
38  // A thread that handles all video decode operations.
39  base::Thread decode_thread_;
40
41  // A thread that handles all audio decode operations.
42  base::Thread audio_decode_thread_;
43
44  DISALLOW_COPY_AND_ASSIGN(ClientContext);
45};
46
47}  // namespace remoting
48
49#endif  // REMOTING_CLIENT_CLIENT_CONTEXT_H_
50