| // 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 BASE_ANDROID_JAVA_HANDLER_THREAD_H_ | 
 | #define BASE_ANDROID_JAVA_HANDLER_THREAD_H_ | 
 |  | 
 | #include <jni.h> | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "base/android/scoped_java_ref.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | class MessageLoop; | 
 |  | 
 | namespace android { | 
 |  | 
 | // A Java Thread with a native message loop. To run tasks, post them | 
 | // to the message loop and they will be scheduled along with Java tasks | 
 | // on the thread. | 
 | // This is useful for callbacks where the receiver expects a thread | 
 | // with a prepared Looper. | 
 | class BASE_EXPORT JavaHandlerThread { | 
 |  public: | 
 |   JavaHandlerThread(const char* name); | 
 |   virtual ~JavaHandlerThread(); | 
 |  | 
 |   base::MessageLoop* message_loop() const { return message_loop_.get(); } | 
 |   void Start(); | 
 |   void Stop(); | 
 |  | 
 |   // Called from java on the newly created thread. | 
 |   // Start() will not return before this methods has finished. | 
 |   void InitializeThread(JNIEnv* env, | 
 |                         const JavaParamRef<jobject>& obj, | 
 |                         jlong event); | 
 |   void StopThread(JNIEnv* env, | 
 |                   const JavaParamRef<jobject>& obj, | 
 |                   jlong event); | 
 |  | 
 |   virtual void StartMessageLoop(); | 
 |   virtual void StopMessageLoop(); | 
 |  | 
 |   static bool RegisterBindings(JNIEnv* env); | 
 |  | 
 |  protected: | 
 |   std::unique_ptr<base::MessageLoop> message_loop_; | 
 |  | 
 |  private: | 
 |   ScopedJavaGlobalRef<jobject> java_thread_; | 
 | }; | 
 |  | 
 | }  // namespace android | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_ANDROID_JAVA_HANDLER_THREAD_H_ |