Skip to content

Commit 796808b

Browse files
committed
Add unpinned HTTP/3 test button
1 parent 9c27e62 commit 796808b

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,5 @@ dependencies {
6363
implementation 'com.datatheorem.android.trustkit:trustkit:1.1.3'
6464
implementation 'androidx.preference:preference-ktx:1.1.1'
6565
implementation 'com.appmattus.certificatetransparency:certificatetransparency-android:2.5.18'
66+
implementation 'org.chromium.net:cronet-embedded:119.6045.31'
6667
}

app/src/main/java/tech/httptoolkit/pinning_demo/MainActivity.kt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,45 @@ class MainActivity : AppCompatActivity() {
153153
}
154154
}
155155

156+
fun sendUnpinnedHttp3(view: View) {
157+
onStart(R.id.http3_unpinned)
158+
val context = this@MainActivity
159+
160+
val cronetEngine = org.chromium.net.CronetEngine.Builder(context)
161+
.enableQuic(true)
162+
.addQuicHint("www.google.com", 443, 443)
163+
.build()
164+
val requestBuilder = cronetEngine.newUrlRequestBuilder(
165+
"https://www.google.com/",
166+
object : org.chromium.net.UrlRequest.Callback() {
167+
override fun onRedirectReceived(request: org.chromium.net.UrlRequest, info: org.chromium.net.UrlResponseInfo, newLocationUrl: String) {}
168+
override fun onReadCompleted(request: org.chromium.net.UrlRequest, info: org.chromium.net.UrlResponseInfo, byteBuffer: java.nio.ByteBuffer) {}
169+
override fun onSucceeded(request: org.chromium.net.UrlRequest, info: org.chromium.net.UrlResponseInfo) {}
170+
171+
override fun onResponseStarted(request: org.chromium.net.UrlRequest, info: org.chromium.net.UrlResponseInfo) {
172+
request.cancel()
173+
if (info.negotiatedProtocol == "h3") {
174+
onSuccess(R.id.http3_unpinned)
175+
} else {
176+
onError(R.id.http3_unpinned, "Expected HTTP/3, got ${info.negotiatedProtocol}")
177+
onSuccess(R.id.http3_unpinned)
178+
}
179+
}
180+
181+
override fun onFailed(request: org.chromium.net.UrlRequest, info: org.chromium.net.UrlResponseInfo?, error: org.chromium.net.CronetException) {
182+
println("h3 request failed: $error")
183+
onError(R.id.http3_unpinned, error.toString())
184+
}
185+
},
186+
java.util.concurrent.Executors.newSingleThreadExecutor()
187+
)
188+
189+
requestBuilder
190+
.disableCache()
191+
.build()
192+
.start()
193+
}
194+
156195
fun sendConfigPinned(view: View) {
157196
GlobalScope.launch(Dispatchers.IO) {
158197
onStart(R.id.config_pinned)

app/src/main/res/layout/activity_main.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@
3737
android:onClick="sendUnpinnedWebView"
3838
android:text="Unpinned WebView request" />
3939

40+
<Button
41+
android:id="@+id/http3_unpinned"
42+
android:layout_width="match_parent"
43+
android:layout_height="wrap_content"
44+
android:onClick="sendUnpinnedHttp3"
45+
android:text="Unpinned HTTP/3 request" />
46+
4047
<View
4148
android:layout_width="match_parent"
4249
android:layout_height="1dp"

0 commit comments

Comments
 (0)