1 // Copyright 2015 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef NET_TEST_EMBEDDED_TEST_SERVER_ANDROID_EMBEDDED_TEST_SERVER_ANDROID_H_ 6 #define NET_TEST_EMBEDDED_TEST_SERVER_ANDROID_EMBEDDED_TEST_SERVER_ANDROID_H_ 7 8 #include <jni.h> 9 10 #include "base/android/jni_weak_ref.h" 11 #include "base/android/scoped_java_ref.h" 12 #include "base/memory/raw_ptr.h" 13 #include "net/test/embedded_test_server/embedded_test_server.h" 14 #include "net/test/embedded_test_server/embedded_test_server_connection_listener.h" 15 #include "net/test/embedded_test_server/http_request.h" 16 #include "net/test/embedded_test_server/http_response.h" 17 18 namespace net::test_server { 19 20 // The C++ side of the Java EmbeddedTestServer. 21 class EmbeddedTestServerAndroid { 22 public: 23 EmbeddedTestServerAndroid(JNIEnv* env, 24 const base::android::JavaRef<jobject>& obj, 25 jboolean jhttps); 26 27 EmbeddedTestServerAndroid(const EmbeddedTestServerAndroid&) = delete; 28 EmbeddedTestServerAndroid& operator=(const EmbeddedTestServerAndroid&) = 29 delete; 30 31 ~EmbeddedTestServerAndroid(); 32 33 void Destroy(JNIEnv* env); 34 35 jboolean Start(JNIEnv* env, jint port); 36 37 base::android::ScopedJavaLocalRef<jstring> GetRootCertPemPath( 38 JNIEnv* jenv) const; 39 40 jboolean ShutdownAndWaitUntilComplete(JNIEnv* env); 41 42 base::android::ScopedJavaLocalRef<jstring> GetURL( 43 JNIEnv* jenv, 44 const base::android::JavaParamRef<jstring>& jrelative_url) const; 45 46 base::android::ScopedJavaLocalRef<jstring> GetURLWithHostName( 47 JNIEnv* jenv, 48 const base::android::JavaParamRef<jstring>& jhostname, 49 const base::android::JavaParamRef<jstring>& jrelative_url) const; 50 51 void AddDefaultHandlers( 52 JNIEnv* jenv, 53 const base::android::JavaParamRef<jstring>& jdirectory_path); 54 55 void SetSSLConfig(JNIEnv* jenv, jint jserver_certificate); 56 57 void RegisterRequestHandler(JNIEnv* jenv, jlong handler); 58 59 void ServeFilesFromDirectory( 60 JNIEnv* env, 61 const base::android::JavaParamRef<jstring>& jdirectory_path); 62 63 private: 64 // Connection listener forwarding notifications to EmbeddedTestServerAndroid. 65 class ConnectionListener : public EmbeddedTestServerConnectionListener { 66 public: 67 explicit ConnectionListener(EmbeddedTestServerAndroid* test_server_android); 68 ~ConnectionListener() override; 69 70 std::unique_ptr<StreamSocket> AcceptedSocket( 71 std::unique_ptr<StreamSocket> socket) override; 72 void ReadFromSocket(const StreamSocket& socket, int rv) override; 73 void OnResponseCompletedSuccessfully( 74 std::unique_ptr<StreamSocket> socket) override; 75 76 private: 77 raw_ptr<EmbeddedTestServerAndroid> test_server_android_; 78 }; 79 80 // Forwards notifications to Java. See EmbeddedTestServerConnectionListener. 81 void AcceptedSocket(const void* socket_id); 82 void ReadFromSocket(const void* socket_id); 83 84 JavaObjectWeakGlobalRef weak_java_server_; 85 86 EmbeddedTestServer test_server_; 87 ConnectionListener connection_listener_; 88 }; 89 90 } // namespace net::test_server 91 92 #endif // NET_TEST_EMBEDDED_TEST_SERVER_ANDROID_EMBEDDED_TEST_SERVER_ANDROID_H_ 93