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_CHROMOTING_HOST_CONTEXT_H_ 6 #define REMOTING_HOST_CHROMOTING_HOST_CONTEXT_H_ 7 8 #include "base/gtest_prod_util.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/scoped_ptr.h" 11 12 namespace net { 13 class URLRequestContextGetter; 14 } // namespace net 15 16 namespace remoting { 17 18 class AutoThreadTaskRunner; 19 20 // A class that manages threads and running context for the chromoting host 21 // process. This class is virtual only for testing purposes (see below). 22 class ChromotingHostContext { 23 public: 24 ~ChromotingHostContext(); 25 26 // Create threads and URLRequestContextGetter for use by a host. 27 // During shutdown the caller should tear-down the ChromotingHostContext and 28 // then continue to run until |ui_task_runner| is no longer referenced. 29 // NULL is returned if any threads fail to start. 30 static scoped_ptr<ChromotingHostContext> Create( 31 scoped_refptr<AutoThreadTaskRunner> ui_task_runner); 32 33 // Task runner for the thread used for audio capture and encoding. 34 scoped_refptr<AutoThreadTaskRunner> audio_task_runner(); 35 36 // Task runner for the thread that is used for blocking file 37 // IO. This thread is used by the URLRequestContext to read proxy 38 // configuration and by NatConfig to read policy configs. 39 scoped_refptr<AutoThreadTaskRunner> file_task_runner(); 40 41 // Task runner for the thread that is used by the InputInjector. 42 // 43 // TODO(sergeyu): Do we need a separate thread for InputInjector? 44 // Can we use some other thread instead? 45 scoped_refptr<AutoThreadTaskRunner> input_task_runner(); 46 47 // Task runner for the thread used for network IO. This thread runs 48 // a libjingle message loop, and is the only thread on which 49 // libjingle code may be run. 50 scoped_refptr<AutoThreadTaskRunner> network_task_runner(); 51 52 // Task runner for the thread that is used for the UI. 53 scoped_refptr<AutoThreadTaskRunner> ui_task_runner(); 54 55 // Task runner for the thread used by the ScreenRecorder to capture 56 // the screen. 57 scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner(); 58 59 // Task runner for the thread used to encode video streams. 60 scoped_refptr<AutoThreadTaskRunner> video_encode_task_runner(); 61 62 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter(); 63 64 private: 65 ChromotingHostContext(AutoThreadTaskRunner* ui_task_runner); 66 67 // Thread for audio capture and encoding. 68 scoped_refptr<AutoThreadTaskRunner> audio_task_runner_; 69 70 // Thread for I/O operations. 71 scoped_refptr<AutoThreadTaskRunner> file_task_runner_; 72 73 // Thread for input injection. 74 scoped_refptr<AutoThreadTaskRunner> input_task_runner_; 75 76 // Thread for network operations. 77 scoped_refptr<AutoThreadTaskRunner> network_task_runner_; 78 79 // Caller-supplied UI thread. This is usually the application main thread. 80 scoped_refptr<AutoThreadTaskRunner> ui_task_runner_; 81 82 // Thread for screen capture. 83 scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner_; 84 85 // Thread for video encoding. 86 scoped_refptr<AutoThreadTaskRunner> video_encode_task_runner_; 87 88 // Serves URLRequestContexts that use the network and UI task runners. 89 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 90 91 DISALLOW_COPY_AND_ASSIGN(ChromotingHostContext); 92 }; 93 94 } // namespace remoting 95 96 #endif // REMOTING_HOST_CHROMOTING_HOST_CONTEXT_H_ 97