blob: 98efbd898eb503945c441c7b69f2c45e82a632da [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.net.impl;
import static org.chromium.net.impl.HttpEngineNativeProvider.EXT_API_LEVEL;
import static org.chromium.net.impl.HttpEngineNativeProvider.EXT_VERSION;
import android.net.http.HttpException;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresExtension;
import java.nio.ByteBuffer;
import java.util.Objects;
@RequiresExtension(extension = EXT_API_LEVEL, version = EXT_VERSION)
@SuppressWarnings("Override")
class AndroidUrlRequestCallbackWrapper implements android.net.http.UrlRequest.Callback {
private final org.chromium.net.UrlRequest.Callback mBackend;
public AndroidUrlRequestCallbackWrapper(org.chromium.net.UrlRequest.Callback backend) {
Objects.requireNonNull(backend, "Callback is required.");
this.mBackend = backend;
}
/**
* @see <a
* href="https://developer.android.com/training/basics/network-ops/reading-network-state#listening-events">Foo
* Bar</a>
*/
@Override
public void onRedirectReceived(
android.net.http.UrlRequest request,
android.net.http.UrlResponseInfo info,
String newLocationUrl)
throws Exception {
CronetExceptionTranslationUtils.executeTranslatingCronetExceptions(
() -> {
AndroidUrlResponseInfoWrapper specializedResponseInfo =
AndroidUrlResponseInfoWrapper.createForUrlRequest(info);
AndroidUrlRequestWrapper specializedRequest =
new AndroidUrlRequestWrapper(request);
mBackend.onRedirectReceived(
specializedRequest, specializedResponseInfo, newLocationUrl);
return null;
},
Exception.class);
}
@Override
public void onResponseStarted(
android.net.http.UrlRequest request, android.net.http.UrlResponseInfo info)
throws Exception {
CronetExceptionTranslationUtils.executeTranslatingCronetExceptions(
() -> {
AndroidUrlResponseInfoWrapper specializedResponseInfo =
AndroidUrlResponseInfoWrapper.createForUrlRequest(info);
AndroidUrlRequestWrapper specializedRequest =
new AndroidUrlRequestWrapper(request);
mBackend.onResponseStarted(specializedRequest, specializedResponseInfo);
return null;
},
Exception.class);
}
@Override
public void onReadCompleted(
android.net.http.UrlRequest request,
android.net.http.UrlResponseInfo info,
ByteBuffer byteBuffer)
throws Exception {
CronetExceptionTranslationUtils.executeTranslatingCronetExceptions(
() -> {
AndroidUrlResponseInfoWrapper specializedResponseInfo =
AndroidUrlResponseInfoWrapper.createForUrlRequest(info);
AndroidUrlRequestWrapper specializedRequest =
new AndroidUrlRequestWrapper(request);
mBackend.onReadCompleted(
specializedRequest, specializedResponseInfo, byteBuffer);
return null;
},
Exception.class);
}
@Override
public void onSucceeded(
android.net.http.UrlRequest request, android.net.http.UrlResponseInfo info) {
AndroidUrlResponseInfoWrapper specializedResponseInfo =
AndroidUrlResponseInfoWrapper.createForUrlRequest(info);
AndroidUrlRequestWrapper specializedRequest = new AndroidUrlRequestWrapper(request);
mBackend.onSucceeded(specializedRequest, specializedResponseInfo);
}
@Override
public void onFailed(
android.net.http.UrlRequest request,
android.net.http.UrlResponseInfo info,
HttpException error) {
AndroidUrlResponseInfoWrapper specializedResponseInfo =
AndroidUrlResponseInfoWrapper.createForUrlRequest(info);
AndroidUrlRequestWrapper specializedRequest = new AndroidUrlRequestWrapper(request);
mBackend.onFailed(
specializedRequest,
specializedResponseInfo,
CronetExceptionTranslationUtils.translateCheckedAndroidCronetException(error));
}
@Override
public void onCanceled(
@NonNull android.net.http.UrlRequest request,
@Nullable android.net.http.UrlResponseInfo info) {
AndroidUrlResponseInfoWrapper specializedResponseInfo =
AndroidUrlResponseInfoWrapper.createForUrlRequest(info);
AndroidUrlRequestWrapper specializedRequest = new AndroidUrlRequestWrapper(request);
mBackend.onCanceled(specializedRequest, specializedResponseInfo);
}
}