xref: /aosp_15_r20/external/cronet/net/test/embedded_test_server/android/embedded_test_server_android.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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