Home | History | Annotate | Download | only in host
      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 #include "remoting/host/chromoting_host_context.h"
      6 
      7 #include <string>
      8 
      9 #include "base/bind.h"
     10 #include "remoting/base/auto_thread.h"
     11 #include "remoting/base/url_request_context_getter.h"
     12 
     13 namespace remoting {
     14 
     15 ChromotingHostContext::ChromotingHostContext(
     16     AutoThreadTaskRunner* ui_task_runner)
     17     : ui_task_runner_(ui_task_runner) {
     18 #if defined(OS_WIN)
     19   // On Windows the AudioCapturer requires COM, so we run a single-threaded
     20   // apartment, which requires a UI thread.
     21   audio_task_runner_ =
     22       AutoThread::CreateWithLoopAndComInitTypes("ChromotingAudioThread",
     23                                                 ui_task_runner_,
     24                                                 base::MessageLoop::TYPE_UI,
     25                                                 AutoThread::COM_INIT_STA);
     26 #else // !defined(OS_WIN)
     27   audio_task_runner_ = AutoThread::CreateWithType(
     28       "ChromotingAudioThread", ui_task_runner_, base::MessageLoop::TYPE_IO);
     29 #endif  // !defined(OS_WIN)
     30 
     31   file_task_runner_ = AutoThread::CreateWithType(
     32       "ChromotingFileThread", ui_task_runner_, base::MessageLoop::TYPE_IO);
     33   input_task_runner_ = AutoThread::CreateWithType(
     34       "ChromotingInputThread", ui_task_runner_, base::MessageLoop::TYPE_IO);
     35   network_task_runner_ = AutoThread::CreateWithType(
     36       "ChromotingNetworkThread", ui_task_runner_, base::MessageLoop::TYPE_IO);
     37   video_capture_task_runner_ =
     38       AutoThread::Create("ChromotingCaptureThread", ui_task_runner_);
     39   video_encode_task_runner_ = AutoThread::Create(
     40       "ChromotingEncodeThread", ui_task_runner_);
     41 
     42   url_request_context_getter_ = new URLRequestContextGetter(
     43       network_task_runner_, file_task_runner_);
     44 }
     45 
     46 ChromotingHostContext::~ChromotingHostContext() {
     47 }
     48 
     49 scoped_ptr<ChromotingHostContext> ChromotingHostContext::Create(
     50     scoped_refptr<AutoThreadTaskRunner> ui_task_runner) {
     51   DCHECK(ui_task_runner->BelongsToCurrentThread());
     52 
     53   scoped_ptr<ChromotingHostContext> context(
     54       new ChromotingHostContext(ui_task_runner.get()));
     55   if (!context->audio_task_runner_.get() || !context->file_task_runner_.get() ||
     56       !context->input_task_runner_.get() ||
     57       !context->network_task_runner_.get() ||
     58       !context->video_capture_task_runner_.get() ||
     59       !context->video_encode_task_runner_.get() ||
     60       !context->url_request_context_getter_.get()) {
     61     context.reset();
     62   }
     63 
     64   return context.Pass();
     65 }
     66 
     67 scoped_refptr<AutoThreadTaskRunner>
     68 ChromotingHostContext::audio_task_runner() {
     69   return audio_task_runner_;
     70 }
     71 
     72 scoped_refptr<AutoThreadTaskRunner>
     73 ChromotingHostContext::file_task_runner() {
     74   return file_task_runner_;
     75 }
     76 
     77 scoped_refptr<AutoThreadTaskRunner>
     78 ChromotingHostContext::input_task_runner() {
     79   return input_task_runner_;
     80 }
     81 
     82 scoped_refptr<AutoThreadTaskRunner>
     83 ChromotingHostContext::network_task_runner() {
     84   return network_task_runner_;
     85 }
     86 
     87 scoped_refptr<AutoThreadTaskRunner>
     88 ChromotingHostContext::ui_task_runner() {
     89   return ui_task_runner_;
     90 }
     91 
     92 scoped_refptr<AutoThreadTaskRunner>
     93 ChromotingHostContext::video_capture_task_runner() {
     94   return video_capture_task_runner_;
     95 }
     96 
     97 scoped_refptr<AutoThreadTaskRunner>
     98 ChromotingHostContext::video_encode_task_runner() {
     99   return video_encode_task_runner_;
    100 }
    101 
    102 scoped_refptr<net::URLRequestContextGetter>
    103 ChromotingHostContext::url_request_context_getter() {
    104   return url_request_context_getter_;
    105 }
    106 
    107 }  // namespace remoting
    108