| // Copyright 2013 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 TOOLS_ANDROID_FORWARDER2_FORWARDERS_MANAGER_H_ | 
 | #define TOOLS_ANDROID_FORWARDER2_FORWARDERS_MANAGER_H_ | 
 |  | 
 | #include "base/memory/scoped_ptr.h" | 
 | #include "base/memory/scoped_vector.h" | 
 | #include "base/threading/thread.h" | 
 | #include "tools/android/forwarder2/pipe_notifier.h" | 
 |  | 
 | namespace forwarder2 { | 
 |  | 
 | class Forwarder; | 
 | class Socket; | 
 |  | 
 | // Creates, owns and notifies Forwarder instances on its own internal thread. | 
 | class ForwardersManager { | 
 |  public: | 
 |   ForwardersManager(); | 
 |  | 
 |   // Must be called on the thread the constructor was called on. | 
 |   ~ForwardersManager(); | 
 |  | 
 |   // Can be called on any thread. | 
 |   void CreateAndStartNewForwarder(scoped_ptr<Socket> socket1, | 
 |                                   scoped_ptr<Socket> socket2); | 
 |  | 
 |  private: | 
 |   void CreateNewForwarderOnInternalThread(scoped_ptr<Socket> socket1, | 
 |                                           scoped_ptr<Socket> socket2); | 
 |  | 
 |   void WaitForEventsOnInternalThreadSoon(); | 
 |   void WaitForEventsOnInternalThread(); | 
 |  | 
 |   ScopedVector<Forwarder> forwarders_; | 
 |   PipeNotifier deletion_notifier_; | 
 |   PipeNotifier wakeup_notifier_; | 
 |   base::Thread thread_; | 
 | }; | 
 |  | 
 | }  // namespace forwarder2 | 
 |  | 
 | #endif  // TOOLS_ANDROID_FORWARDER2_FORWARDERS_MANAGER_H_ |