// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef REMOTING_CLIENT_CHROMOTING_CLIENT_RUNTIME_H_ #define REMOTING_CLIENT_CHROMOTING_CLIENT_RUNTIME_H_ #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "net/url_request/url_request_context_getter.h" #include "remoting/base/auto_thread.h" namespace base { class MessageLoopForUI; } // namespace base // Houses the global resources on which the Chromoting components run // (e.g. message loops and task runners). namespace remoting { class ChromotingClientRuntime { public: // Caller to create is responsible for creating and attaching a new ui thread // for use. Example: // // On Android, the UI thread is managed by Java, so we need to attach and // start a special type of message loop to allow Chromium code to run tasks. // // base::MessageLoopForUI *ui_loop = new base::MessageLoopForUI(); // ui_loop_->Start(); // scoped_ptr runtime = // ChromotingClientRuntime::Create(ui_loop); // // On iOS we created a new message loop and now attach it. // // base::MessageLoopForUI *ui_loop = new base::MessageLoopForUI(); // ui_loop_->Attach(); // scoped_ptr runtime = // ChromotingClientRuntime::Create(ui_loop); // static scoped_ptr Create( base::MessageLoopForUI* ui_loop); ~ChromotingClientRuntime(); scoped_refptr network_task_runner() { return network_task_runner_; } scoped_refptr ui_task_runner() { return ui_task_runner_; } scoped_refptr display_task_runner() { return display_task_runner_; } scoped_refptr file_task_runner() { return file_task_runner_; } scoped_refptr url_requester() { return url_requester_; } private: ChromotingClientRuntime(); ChromotingClientRuntime( scoped_refptr display_task_runner, scoped_refptr network_task_runner, scoped_refptr file_task_runner, scoped_refptr url_requester); // References to native threads. scoped_refptr ui_task_runner_; scoped_refptr display_task_runner_; scoped_refptr network_task_runner_; scoped_refptr file_task_runner_; scoped_refptr url_requester_; DISALLOW_COPY_AND_ASSIGN(ChromotingClientRuntime); }; } // namespace remoting #endif // REMOTING_CLIENT_CHROMOTING_CLIENT_RUNTIME_H_