Chromium Code Reviews| Index: android_webview/embeddedtestserver/aw_embedded_test_server_android.cc |
| diff --git a/android_webview/embeddedtestserver/aw_embedded_test_server_android.cc b/android_webview/embeddedtestserver/aw_embedded_test_server_android.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3ff2903f78edbb61cb6b691cb994a13df92c83f3 |
| --- /dev/null |
| +++ b/android_webview/embeddedtestserver/aw_embedded_test_server_android.cc |
| @@ -0,0 +1,120 @@ |
| +// Copyright 2017 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 "android_webview/embeddedtestserver/aw_embedded_test_server_android.h" |
| + |
| +#include "android_webview/embeddedtestserver/custom_handlers.h" |
| +#include "android_webview/test/jni/AwEmbeddedTestServerImpl_jni.h" |
| +#include "base/android/jni_array.h" |
| +#include "base/android/jni_string.h" |
| +#include "base/android/scoped_java_ref.h" |
| +#include "base/bind.h" |
| +#include "base/files/file_path.h" |
| +#include "base/test/test_support_android.h" |
| +#include "base/trace_event/trace_event.h" |
| + |
| +using base::android::JavaParamRef; |
| +using base::android::JavaRef; |
| +using base::android::ScopedJavaLocalRef; |
| + |
| +namespace net { |
| +namespace test_server { |
| + |
| +AwEmbeddedTestServerAndroid::AwEmbeddedTestServerAndroid( |
| + JNIEnv* env, |
| + const JavaRef<jobject>& jobj) |
| + : weak_java_server_(env, jobj), test_server_() { |
| + Java_AwEmbeddedTestServerImpl_setNativePtr(env, jobj, |
| + reinterpret_cast<intptr_t>(this)); |
| +} |
| + |
| +AwEmbeddedTestServerAndroid::~AwEmbeddedTestServerAndroid() { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + Java_AwEmbeddedTestServerImpl_clearNativePtr(env, weak_java_server_.get(env)); |
| +} |
| + |
| +jboolean AwEmbeddedTestServerAndroid::Start(JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj) { |
| + return test_server_.Start(); |
| +} |
| + |
| +jboolean AwEmbeddedTestServerAndroid::ShutdownAndWaitUntilComplete( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj) { |
| + return test_server_.ShutdownAndWaitUntilComplete(); |
| +} |
| + |
| +ScopedJavaLocalRef<jstring> AwEmbeddedTestServerAndroid::GetURL( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj, |
| + const JavaParamRef<jstring>& jrelative_url) const { |
| + const GURL gurl(test_server_.GetURL( |
| + base::android::ConvertJavaStringToUTF8(env, jrelative_url))); |
| + return base::android::ConvertUTF8ToJavaString(env, gurl.spec()); |
| +} |
| + |
| +void AwEmbeddedTestServerAndroid::AddDefaultHandlers( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj, |
| + const JavaParamRef<jstring>& jdirectory_path) { |
| + const base::FilePath directory( |
| + base::android::ConvertJavaStringToUTF8(env, jdirectory_path)); |
| + test_server_.AddDefaultHandlers(directory); |
| +} |
| + |
| +ScopedJavaLocalRef<jlongArray> AwEmbeddedTestServerAndroid::GetCustomHandlers( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj) { |
| + return base::android::ToJavaLongArray(env, getHandlers()); |
| +} |
| + |
| +void AwEmbeddedTestServerAndroid::RegisterRequestHandler( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj, |
| + jlong handler) { |
| + // test_server_.RegisterRequestHandler( |
| + // base::Bind(&AwEmbeddedTestServerAndroid::getHandlerUniquePtr, |
| + // handler)); |
| + test_server_.RegisterRequestHandler(base::Bind(&HandleClickRedirect)); |
|
shenghuazhang
2017/03/04 00:22:21
Hard coded handler here.
|
| +} |
| + |
| +std::unique_ptr<HttpResponse> AwEmbeddedTestServerAndroid::getHandlerUniquePtr( |
| + jlong handler) { |
| + std::unique_ptr<HttpResponse> http_response( |
| + reinterpret_cast<HttpResponse*>(handler)); |
| + return std::move(http_response); |
| +} |
| + |
| +void AwEmbeddedTestServerAndroid::ServeFilesFromDirectory( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj, |
| + const JavaParamRef<jstring>& jdirectory_path) { |
| + const base::FilePath directory( |
| + base::android::ConvertJavaStringToUTF8(env, jdirectory_path)); |
| + test_server_.ServeFilesFromDirectory(directory); |
| +} |
| + |
| +void AwEmbeddedTestServerAndroid::Destroy(JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj) { |
| + delete this; |
| +} |
| + |
| +static void Init(JNIEnv* env, |
| + const JavaParamRef<jobject>& jobj, |
| + const JavaParamRef<jstring>& jtest_data_dir) { |
| + TRACE_EVENT0("native", "AwEmbeddedTestServerAndroid::Init"); |
| + base::FilePath test_data_dir( |
| + base::android::ConvertJavaStringToUTF8(env, jtest_data_dir)); |
| + base::InitAndroidTestPaths(test_data_dir); |
| + new AwEmbeddedTestServerAndroid(env, jobj); |
| +} |
| + |
| +// static |
| +bool AwEmbeddedTestServerAndroid::RegisterAwEmbeddedTestServerAndroid( |
| + JNIEnv* env) { |
| + return RegisterNativesImpl(env); |
| +} |
| + |
| +} // namespace test_server |
| +} // namespace net |