OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/test/android/java_handler_thread_for_testing.h" | 5 #include "base/test/android/java_handler_thread_for_testing.h" |
6 | 6 |
| 7 #include "base/memory/ptr_util.h" |
7 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "jni/JavaHandlerThreadTest_jni.h" |
8 | 10 |
9 namespace base { | 11 namespace base { |
10 namespace android { | 12 namespace android { |
11 | 13 |
12 base::android::ScopedJavaLocalRef<jobject> | 14 base::android::ScopedJavaLocalRef<jobject> |
13 TestJavaMessageHandlerFactory::CreateMessageHandler( | 15 TestJavaMessageHandlerFactory::CreateMessageHandler( |
14 JNIEnv* env, | 16 JNIEnv* env, |
15 base::MessagePump::Delegate* delegate, | 17 base::MessagePump::Delegate* delegate, |
16 MessagePumpForUI* message_pump, | 18 MessagePumpForUI* message_pump, |
17 WaitableEvent* test_done_event) { | 19 WaitableEvent* test_done_event) { |
18 return TestSystemMessageHandlerLink::CreateTestSystemMessageHandler( | 20 return TestSystemMessageHandlerLink::CreateTestSystemMessageHandler( |
19 env, delegate, message_pump, test_done_event); | 21 env, delegate, message_pump, test_done_event); |
20 } | 22 } |
21 | 23 |
| 24 // static |
| 25 std::unique_ptr<JavaHandlerThreadForTesting> |
| 26 JavaHandlerThreadForTesting::Create(const char* name, |
| 27 base::WaitableEvent* test_done_event) { |
| 28 return WrapUnique(new JavaHandlerThreadForTesting(name, test_done_event)); |
| 29 } |
| 30 |
| 31 // static |
| 32 std::unique_ptr<JavaHandlerThreadForTesting> |
| 33 JavaHandlerThreadForTesting::CreateJavaFirst( |
| 34 base::WaitableEvent* test_done_event) { |
| 35 return WrapUnique(new JavaHandlerThreadForTesting(test_done_event)); |
| 36 } |
| 37 |
22 JavaHandlerThreadForTesting::JavaHandlerThreadForTesting( | 38 JavaHandlerThreadForTesting::JavaHandlerThreadForTesting( |
23 const char* name, | 39 const char* name, |
24 base::WaitableEvent* test_done_event) | 40 base::WaitableEvent* test_done_event) |
25 : JavaHandlerThread(name), | 41 : JavaHandlerThread(name), |
26 message_handler_factory_(new TestJavaMessageHandlerFactory()), | 42 message_handler_factory_(new TestJavaMessageHandlerFactory()), |
27 test_done_event_(test_done_event) {} | 43 test_done_event_(test_done_event) {} |
28 | 44 |
| 45 JavaHandlerThreadForTesting::JavaHandlerThreadForTesting( |
| 46 base::WaitableEvent* test_done_event) |
| 47 : JavaHandlerThread(Java_JavaHandlerThreadTest_testAndGetJavaHandlerThread( |
| 48 base::android::AttachCurrentThread())), |
| 49 message_handler_factory_(new TestJavaMessageHandlerFactory()), |
| 50 test_done_event_(test_done_event) {} |
| 51 |
29 JavaHandlerThreadForTesting::~JavaHandlerThreadForTesting() = default; | 52 JavaHandlerThreadForTesting::~JavaHandlerThreadForTesting() = default; |
30 | 53 |
31 void JavaHandlerThreadForTesting::StartMessageLoop() { | 54 void JavaHandlerThreadForTesting::StartMessageLoop() { |
32 static_cast<MessageLoopForUI*>(message_loop_.get()) | 55 static_cast<MessageLoopForUI*>(message_loop_.get()) |
33 ->StartForTesting( | 56 ->StartForTesting(message_handler_factory_.get(), test_done_event_); |
34 message_handler_factory_.get(), | |
35 reinterpret_cast<base::WaitableEvent*>(test_done_event_)); | |
36 } | 57 } |
37 | 58 |
38 void JavaHandlerThreadForTesting::StopMessageLoop() { | 59 void JavaHandlerThreadForTesting::StopMessageLoop() { |
39 // Instead of calling MessageLoop::QuitWhenIdle here we call | 60 // Instead of calling MessageLoop::QuitWhenIdle here we call |
40 // MessageLoop::QuitNow. This is because QuitWhenIdle will have no effect on | 61 // MessageLoop::QuitNow. This is because QuitWhenIdle will have no effect on |
41 // the message loop after MessageLoop::Abort has been called (which should | 62 // the message loop after MessageLoop::Abort has been called (which should |
42 // have happened at this point). | 63 // have happened at this point). |
43 static_cast<MessageLoopForUI*>(message_loop_.get())->QuitNow(); | 64 static_cast<MessageLoopForUI*>(message_loop_.get())->QuitNow(); |
44 // The message loop must be destroyed on the thread it is attached to. | 65 // The message loop must be destroyed on the thread it is attached to. |
45 message_loop_.reset(); | 66 message_loop_.reset(); |
46 } | 67 } |
47 | 68 |
48 } // namespace base | 69 } // namespace base |
49 } // namespace android | 70 } // namespace android |
OLD | NEW |