diff options
Diffstat (limited to 'remoting/host/chromoting_host_context.h')
-rw-r--r-- | remoting/host/chromoting_host_context.h | 64 |
1 files changed, 50 insertions, 14 deletions
diff --git a/remoting/host/chromoting_host_context.h b/remoting/host/chromoting_host_context.h index 7476986a..b693f1ef 100644 --- a/remoting/host/chromoting_host_context.h +++ b/remoting/host/chromoting_host_context.h @@ -8,10 +8,15 @@ #include <string> #include "base/gtest_prod_util.h" +#include "base/memory/ref_counted.h" #include "base/threading/platform_thread.h" #include "base/threading/thread.h" #include "remoting/jingle_glue/jingle_thread.h" +namespace base { +class SingleThreadTaskRunner; +} // namespace base + namespace net { class URLRequestContextGetter; } // namespace net @@ -23,7 +28,8 @@ namespace remoting { class ChromotingHostContext { public: // Create a context. - ChromotingHostContext(base::MessageLoopProxy* ui_message_loop); + ChromotingHostContext( + scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); virtual ~ChromotingHostContext(); // TODO(ajwong): Move the Start method out of this class. Then @@ -35,13 +41,45 @@ class ChromotingHostContext { virtual JingleThread* jingle_thread(); - virtual MessageLoop* main_message_loop(); - virtual MessageLoop* encode_message_loop(); - virtual base::MessageLoopProxy* network_message_loop(); - virtual MessageLoop* desktop_message_loop(); - virtual base::MessageLoopProxy* ui_message_loop(); - virtual base::MessageLoopProxy* io_message_loop(); - virtual base::MessageLoopProxy* file_message_loop(); + // Task runner for the thread that is used for the UI. In the NPAPI + // plugin this corresponds to the main plugin thread. + virtual base::SingleThreadTaskRunner* ui_task_runner(); + + // Task runner for the thread used by the ScreenRecorder to capture + // the screen. + virtual base::SingleThreadTaskRunner* capture_task_runner(); + + // Task runner for the thread used to encode video streams. + virtual base::SingleThreadTaskRunner* encode_task_runner(); + + // Task runner for the thread used for network IO. This thread runs + // a libjingle message loop, and is the only thread on which + // libjingle code may be run. + virtual base::SingleThreadTaskRunner* network_task_runner(); + + // Task runner for the thread that is used by the EventExecutor. + // + // TODO(sergeyu): Do we need a separate thread for EventExecutor? + // Can we use some other thread instead? + virtual base::SingleThreadTaskRunner* desktop_task_runner(); + + // Task runner for the thread that is used for chromium's network + // IO, particularly all HTTP requests (for OAuth and Relay servers). + // Chromium's HTTP stack cannot be used on the network_task_runner() + // because that thread runs libjingle's message loop, while + // chromium's sockets must be used on a thread with a + // MessageLoopForIO. + // + // TODO(sergeyu): Implement socket server for libjingle that works + // on a regular chromium thread and use it for network_task_runner() + // to avoid the need for io_task_runner(). + virtual base::SingleThreadTaskRunner* io_task_runner(); + + // Task runner for the thread that is used for blocking file + // IO. This thread is used by the URLRequestContext to read proxy + // configuration and by NatConfig to read policy configs. + virtual base::SingleThreadTaskRunner* file_task_runner(); + const scoped_refptr<net::URLRequestContextGetter>& url_request_context_getter(); @@ -51,15 +89,13 @@ class ChromotingHostContext { // A thread that hosts all network operations. JingleThread jingle_thread_; - // TODO(sergeyu): The "main" thread is used just by the - // capturer. Consider renaming it. - base::Thread main_thread_; + // A thread that hosts screen capture. + base::Thread capture_thread_; // A thread that hosts all encode operations. base::Thread encode_thread_; - // A thread that hosts desktop integration (capture, input injection, etc) - // This is NOT a Chrome-style UI thread. + // A thread that hosts input injection. base::Thread desktop_thread_; // Thread for non-blocking IO operations. @@ -68,7 +104,7 @@ class ChromotingHostContext { // Thread for blocking IO operations. base::Thread file_thread_; - scoped_refptr<base::MessageLoopProxy> ui_message_loop_; + scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; |