| Index: tools/android/forwarder2/host_controller.h
|
| diff --git a/tools/android/forwarder2/host_controller.h b/tools/android/forwarder2/host_controller.h
|
| index dc75f88e057760dbd9bd5261ee31b2d791d0334a..aaedb945e8e836a779120f333f083210b89414b6 100644
|
| --- a/tools/android/forwarder2/host_controller.h
|
| +++ b/tools/android/forwarder2/host_controller.h
|
| @@ -17,42 +17,53 @@
|
|
|
| namespace forwarder2 {
|
|
|
| -class HostProxy;
|
| -
|
| +// This class partners with DeviceController and has the same lifetime and
|
| +// threading characteristics as DeviceListener. In a nutshell, this class
|
| +// operates on its own thread and is destroyed on the thread it was constructed
|
| +// on. The class' deletion can happen in two different ways:
|
| +// - Its destructor was called by its owner (HostControllersManager).
|
| +// - Its internal thread requested self-deletion after an error happened. In
|
| +// this case the owner (HostControllersManager) is notified on the
|
| +// construction thread through the provided DeletionCallback invoked with the
|
| +// HostController instance. When this callback is invoked, it's up to the
|
| +// owner to delete the instance.
|
| class HostController {
|
| public:
|
| // Callback used for self-deletion that lets the client perform some cleanup
|
| // work before deleting the HostController instance.
|
| - typedef base::Callback<void (HostController*)> DeleteCallback;
|
| + typedef base::Callback<void (scoped_ptr<HostController>)> DeletionCallback;
|
|
|
| - // If |device_port| is zero, it dynamically allocates a port.
|
| - HostController(int device_port,
|
| - const std::string& forward_to_host,
|
| - int forward_to_host_port,
|
| - int adb_port,
|
| - int exit_notifier_fd,
|
| - const DeleteCallback& delete_callback);
|
| + // If |device_port| is zero then a dynamic port is allocated (and retrievable
|
| + // through device_port() below).
|
| + static scoped_ptr<HostController> Create(
|
| + int device_port,
|
| + int host_port,
|
| + int adb_port,
|
| + int exit_notifier_fd,
|
| + const DeletionCallback& deletion_callback);
|
|
|
| ~HostController();
|
|
|
| - // Connects to the device forwarder app and sets the |device_port_| to the
|
| - // dynamically allocated port (when the provided |device_port| is zero).
|
| - // Returns true on success. Clients must call Connect() before calling
|
| - // Start().
|
| - bool Connect();
|
| -
|
| // Starts the internal controller thread.
|
| void Start();
|
|
|
| int adb_port() const { return adb_port_; }
|
|
|
| - // Gets the current device allocated port. Must be called after Connect().
|
| int device_port() const { return device_port_; }
|
|
|
| private:
|
| - void ThreadHandler();
|
| + HostController(int device_port,
|
| + int host_port,
|
| + int adb_port,
|
| + int exit_notifier_fd,
|
| + const DeletionCallback& deletion_callback,
|
| + scoped_ptr<Socket> adb_control_socket,
|
| + scoped_ptr<PipeNotifier> delete_controller_notifier);
|
|
|
| - void StartForwarder(scoped_ptr<Socket> host_server_data_socket_ptr);
|
| + void ReadNextCommandSoon();
|
| + void ReadCommandOnInternalThread();
|
| +
|
| + void StartForwarder(scoped_ptr<Socket> host_server_data_socket);
|
|
|
| // Helper method that creates a socket and adds the appropriate event file
|
| // descriptors.
|
| @@ -60,19 +71,24 @@ class HostController {
|
|
|
| void SelfDelete();
|
|
|
| - Socket adb_control_socket_;
|
| - int device_port_;
|
| - const std::string forward_to_host_;
|
| - const int forward_to_host_port_;
|
| + static void SelfDeleteOnDeletionTaskRunner(
|
| + const DeletionCallback& deletion_callback,
|
| + scoped_ptr<HostController> controller);
|
| +
|
| + const int device_port_;
|
| + const int host_port_;
|
| const int adb_port_;
|
| // Used to notify the controller when the process is killed.
|
| const int global_exit_notifier_fd_;
|
| // Used to let the client delete the instance in case an error happened.
|
| - const DeleteCallback delete_callback_;
|
| + const DeletionCallback deletion_callback_;
|
| + scoped_ptr<Socket> adb_control_socket_;
|
| + scoped_ptr<PipeNotifier> delete_controller_notifier_;
|
| // Used to cancel the pending blocking IO operations when the host controller
|
| // instance is deleted.
|
| - PipeNotifier delete_controller_notifier_;
|
| - bool ready_;
|
| + // Task runner used for deletion set at construction time (i.e. the object is
|
| + // deleted on the same thread it is created on).
|
| + const scoped_refptr<base::SingleThreadTaskRunner> deletion_task_runner_;
|
| base::Thread thread_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(HostController);
|
|
|