blob: 8bf0cf94feff8f70b5db5a128068a3e178ce2f4b [file] [log] [blame]
// 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.
#include "base/test/android/java_handler_thread_for_testing.h"
#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop.h"
#include "jni/JavaHandlerThreadTest_jni.h"
namespace base {
namespace android {
base::android::ScopedJavaLocalRef<jobject>
TestJavaMessageHandlerFactory::CreateMessageHandler(
JNIEnv* env,
base::MessagePump::Delegate* delegate,
MessagePumpForUI* message_pump,
WaitableEvent* test_done_event) {
return TestSystemMessageHandlerLink::CreateTestSystemMessageHandler(
env, delegate, message_pump, test_done_event);
}
// static
std::unique_ptr<JavaHandlerThreadForTesting>
JavaHandlerThreadForTesting::Create(const char* name,
base::WaitableEvent* test_done_event) {
return WrapUnique(new JavaHandlerThreadForTesting(name, test_done_event));
}
// static
std::unique_ptr<JavaHandlerThreadForTesting>
JavaHandlerThreadForTesting::CreateJavaFirst(
base::WaitableEvent* test_done_event) {
return WrapUnique(new JavaHandlerThreadForTesting(test_done_event));
}
JavaHandlerThreadForTesting::JavaHandlerThreadForTesting(
const char* name,
base::WaitableEvent* test_done_event)
: JavaHandlerThread(name),
message_handler_factory_(new TestJavaMessageHandlerFactory()),
test_done_event_(test_done_event) {}
JavaHandlerThreadForTesting::JavaHandlerThreadForTesting(
base::WaitableEvent* test_done_event)
: JavaHandlerThread(Java_JavaHandlerThreadTest_testAndGetJavaHandlerThread(
base::android::AttachCurrentThread())),
message_handler_factory_(new TestJavaMessageHandlerFactory()),
test_done_event_(test_done_event) {}
JavaHandlerThreadForTesting::~JavaHandlerThreadForTesting() = default;
void JavaHandlerThreadForTesting::StartMessageLoop() {
static_cast<MessageLoopForUI*>(message_loop_.get())
->StartForTesting(message_handler_factory_.get(), test_done_event_);
}
void JavaHandlerThreadForTesting::StopMessageLoop() {
// Instead of calling MessageLoop::QuitWhenIdle here we call
// MessageLoop::QuitNow. This is because QuitWhenIdle will have no effect on
// the message loop after MessageLoop::Abort has been called (which should
// have happened at this point).
static_cast<MessageLoopForUI*>(message_loop_.get())->QuitNow();
// The message loop must be destroyed on the thread it is attached to.
message_loop_.reset();
}
} // namespace base
} // namespace android