Skip to content

[cronet_http] Update deps and jni/jnigen to 0.14 #1754

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pkgs/cronet_http/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ android {

dependencies {
if (dartDefines.cronetHttpNoPlay == 'true') {
implementation 'org.chromium.net:cronet-embedded:113.5672.61'
implementation 'org.chromium.net:cronet-embedded:119.6045.31'
} else {
implementation "com.google.android.gms:play-services-cronet:18.0.1"
implementation "com.google.android.gms:play-services-cronet:18.1.0"
}
}
4 changes: 2 additions & 2 deletions pkgs/cronet_http/android/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ pluginManagement {

plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.1.0" apply false
id "org.jetbrains.kotlin.android" version "1.7.21" apply false
id "com.android.application" version '8.9.2' apply false
id "org.jetbrains.kotlin.android" version "2.1.0" apply false
}

include ":app"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,54 +23,54 @@ import java.nio.ByteBuffer
class UrlRequestCallbackProxy(val callback: UrlRequestCallbackInterface) : UrlRequest.Callback() {
public interface UrlRequestCallbackInterface {
fun onRedirectReceived(
request: UrlRequest,
info: UrlResponseInfo,
newLocationUrl: String
request: UrlRequest?,
info: UrlResponseInfo?,
newLocationUrl: String?
)

fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo)
fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?)
fun onReadCompleted(
request: UrlRequest,
info: UrlResponseInfo,
byteBuffer: ByteBuffer
request: UrlRequest?,
info: UrlResponseInfo?,
byteBuffer: ByteBuffer?
)

fun onSucceeded(request: UrlRequest, info: UrlResponseInfo?)
fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?)
fun onFailed(
request: UrlRequest,
request: UrlRequest?,
info: UrlResponseInfo?,
error: CronetException
error: CronetException?
)
}

override fun onRedirectReceived(
request: UrlRequest,
info: UrlResponseInfo,
newLocationUrl: String
request: UrlRequest?,
info: UrlResponseInfo?,
newLocationUrl: String?
) {
callback.onRedirectReceived(request, info, newLocationUrl);
}

override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo) {
override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) {
callback.onResponseStarted(request, info);
}

override fun onReadCompleted(
request: UrlRequest,
info: UrlResponseInfo,
byteBuffer: ByteBuffer
request: UrlRequest?,
info: UrlResponseInfo?,
byteBuffer: ByteBuffer?
) {
callback.onReadCompleted(request, info, byteBuffer);
}

override fun onSucceeded(request: UrlRequest, info: UrlResponseInfo?) {
override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) {
callback.onSucceeded(request, info);
}

override fun onFailed(
request: UrlRequest,
request: UrlRequest?,
info: UrlResponseInfo?,
error: CronetException
error: CronetException?
) {
callback.onFailed(request, info, error);
}
Expand Down
7 changes: 2 additions & 5 deletions pkgs/cronet_http/example/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ if (flutterVersionName == null) {

android {
compileSdkVersion flutter.compileSdkVersion
ndkVersion flutter.ndkVersion
ndkVersion = "27.0.12077973"
namespace 'io.flutter.cronet_http_example'

compileOptions {
Expand Down Expand Up @@ -66,11 +66,8 @@ flutter {
}

dependencies {
// TODO(#1112): org.jetbrains.kotlin:kotlin-bom artifact purpose is to align kotlin stdlib and related code versions.
// This should be removed when https://github.com/flutter/flutter/issues/125062 is fixed.
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
// ""com.google.android.gms:play-services-cronet" is only present so that
// `jnigen` will work. Applications should not include this line.
// The version should be synced with `pkgs/cronet_http/android/build.gradle`.
implementation "com.google.android.gms:play-services-cronet:18.0.1"
implementation "com.google.android.gms:play-services-cronet:18.1.0"
}
7 changes: 7 additions & 0 deletions pkgs/cronet_http/example/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ subprojects {
project.evaluationDependsOn(':app')
}

allprojects {
repositories {
google()
mavenCentral()
}
}

tasks.register("clean", Delete) {
delete rootProject.buildDir
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
4 changes: 2 additions & 2 deletions pkgs/cronet_http/example/android/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ pluginManagement {

plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.6.0" apply false
id "org.jetbrains.kotlin.android" version "1.7.21" apply false
id "com.android.application" version '8.9.2' apply false
id "org.jetbrains.kotlin.android" version "2.1.0" apply false
}

include ":app"
88 changes: 47 additions & 41 deletions pkgs/cronet_http/lib/src/cronet_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class CronetEngine {
bool? enableQuic,
String? storagePath,
String? userAgent}) {
final builder = jb.CronetEngine_Builder(
final builder = jb.CronetEngine$Builder(
JObject.fromReference(Jni.getCachedApplicationContext()));

try {
Expand Down Expand Up @@ -118,7 +118,7 @@ class CronetEngine {
builder.setUserAgent(userAgent.toJString());
}

return CronetEngine._(builder.build());
return CronetEngine._(builder.build()!);
} on JniException catch (e) {
// TODO: Decode this exception in a better way when
// https://github.com/dart-lang/jnigen/issues/239 is fixed.
Expand All @@ -141,12 +141,13 @@ class CronetEngine {
}

Map<String, String> _cronetToClientHeaders(
JMap<JString, JList<JString>> cronetHeaders) =>
cronetHeaders.map((key, value) => MapEntry(
key.toDartString(releaseOriginal: true).toLowerCase(),
value.join(',')));
JMap<JString?, JList<JString?>?>? cronetHeaders) =>
cronetHeaders?.map((key, value) => MapEntry(
key!.toDartString(releaseOriginal: true).toLowerCase(),
value?.join(',') ?? '')) ??
{};

jb.UrlRequestCallbackProxy_UrlRequestCallbackInterface _urlRequestCallbacks(
jb.UrlRequestCallbackProxy$UrlRequestCallbackInterface _urlRequestCallbacks(
BaseRequest request,
Completer<StreamedResponse> responseCompleter,
HttpClientRequestProfile? profile) {
Expand All @@ -156,12 +157,12 @@ jb.UrlRequestCallbackProxy_UrlRequestCallbackInterface _urlRequestCallbacks(

// The order of callbacks generated by Cronet is documented here:
// https://developer.android.com/guide/topics/connectivity/cronet/lifecycle
return jb.UrlRequestCallbackProxy_UrlRequestCallbackInterface.implement(
jb.$UrlRequestCallbackProxy_UrlRequestCallbackInterface(
return jb.UrlRequestCallbackProxy$UrlRequestCallbackInterface.implement(
jb.$UrlRequestCallbackProxy$UrlRequestCallbackInterface(
onResponseStarted: (urlRequest, responseInfo) {
responseStream = StreamController();
final responseHeaders =
_cronetToClientHeaders(responseInfo.getAllHeaders());
_cronetToClientHeaders(responseInfo?.getAllHeaders());
int? contentLength;

switch (responseHeaders['content-length']) {
Expand All @@ -171,20 +172,21 @@ jb.UrlRequestCallbackProxy_UrlRequestCallbackInterface _urlRequestCallbacks(
'Invalid content-length header [$contentLengthHeader].',
request.url,
));
urlRequest.cancel();
urlRequest?.cancel();
return;
case final contentLengthHeader?:
contentLength = int.parse(contentLengthHeader);
}
responseCompleter.complete(_StreamedResponseWithUrl(
responseStream!.stream,
responseInfo.getHttpStatusCode(),
responseInfo?.getHttpStatusCode() ?? 0,
url: Uri.parse(
responseInfo.getUrl().toDartString(releaseOriginal: true)),
responseInfo?.getUrl()?.toDartString(releaseOriginal: true) ??
request.url.toString()),
contentLength: contentLength,
reasonPhrase: responseInfo
.getHttpStatusText()
.toDartString(releaseOriginal: true),
?.getHttpStatusText()
?.toDartString(releaseOriginal: true),
request: request,
isRedirect: false,
headers: responseHeaders,
Expand All @@ -195,65 +197,68 @@ jb.UrlRequestCallbackProxy_UrlRequestCallbackInterface _urlRequestCallbacks(
?..contentLength = contentLength
..headersCommaValues = responseHeaders
..isRedirect = false
..reasonPhrase =
responseInfo.getHttpStatusText().toDartString(releaseOriginal: true)
..reasonPhrase = responseInfo
?.getHttpStatusText()
?.toDartString(releaseOriginal: true)
..startTime = DateTime.now()
..statusCode = responseInfo.getHttpStatusCode();
..statusCode = responseInfo?.getHttpStatusCode() ?? 0;
jByteBuffer = JByteBuffer.allocateDirect(_bufferSize);
urlRequest.read(jByteBuffer!);
urlRequest?.read(jByteBuffer!);
},
onRedirectReceived: (urlRequest, responseInfo, newLocationUrl) {
final responseHeaders =
_cronetToClientHeaders(responseInfo.getAllHeaders());
_cronetToClientHeaders(responseInfo?.getAllHeaders());

if (!request.followRedirects) {
urlRequest.cancel();
urlRequest?.cancel();
responseCompleter.complete(StreamedResponse(
const Stream.empty(), // Cronet provides no body for redirects.
responseInfo.getHttpStatusCode(),
responseInfo?.getHttpStatusCode() ?? 0,
contentLength: 0,
reasonPhrase: responseInfo
.getHttpStatusText()
.toDartString(releaseOriginal: true),
?.getHttpStatusText()
?.toDartString(releaseOriginal: true),
request: request,
isRedirect: true,
headers: _cronetToClientHeaders(responseInfo.getAllHeaders())));
headers: _cronetToClientHeaders(responseInfo?.getAllHeaders())));

profile?.responseData
?..headersCommaValues = responseHeaders
..isRedirect = true
..reasonPhrase = responseInfo
.getHttpStatusText()
.toDartString(releaseOriginal: true)
?.getHttpStatusText()
?.toDartString(releaseOriginal: true)
..startTime = DateTime.now()
..statusCode = responseInfo.getHttpStatusCode();
..statusCode = responseInfo?.getHttpStatusCode() ?? 0;

return;
}
++numRedirects;
if (numRedirects <= request.maxRedirects) {
profile?.responseData.addRedirect(HttpProfileRedirectData(
statusCode: responseInfo.getHttpStatusCode(),
statusCode: responseInfo?.getHttpStatusCode() ?? 0,
// This method is not correct for status codes 303 to 307. Cronet
// does not seem to have a way to get the method so we'd have to
// calculate it according to the rules in RFC-7231.
method: 'GET',
location: newLocationUrl.toDartString(releaseOriginal: true)));
urlRequest.followRedirect();
location:
newLocationUrl?.toDartString(releaseOriginal: true) ?? ''));
urlRequest?.followRedirect();
} else {
urlRequest.cancel();
urlRequest?.cancel();
responseCompleter.completeError(
ClientException('Redirect limit exceeded', request.url));
}
},
onReadCompleted: (urlRequest, responseInfo, byteBuffer) {
byteBuffer.flip();
final data = jByteBuffer!.asUint8List().sublist(0, byteBuffer.remaining);
byteBuffer?.flip();
final data =
jByteBuffer!.asUint8List().sublist(0, byteBuffer?.remaining ?? 0);
responseStream!.add(data);
profile?.responseData.bodySink.add(data);

byteBuffer.clear();
urlRequest.read(byteBuffer);
byteBuffer?.clear();
urlRequest?.read(byteBuffer!);
},
onSucceeded: (urlRequest, responseInfo) {
responseStream!.sink.close();
Expand All @@ -262,7 +267,8 @@ jb.UrlRequestCallbackProxy_UrlRequestCallbackInterface _urlRequestCallbacks(
},
onFailed: (urlRequest, responseInfo, cronetException) {
final error = ClientException(
'Cronet exception: ${cronetException.toString()}', request.url);
'Cronet exception: ${cronetException?.toString() ?? "unknown error"}',
request.url);
if (responseStream == null) {
responseCompleter.completeError(error);
} else {
Expand Down Expand Up @@ -380,7 +386,7 @@ class CronetClient extends BaseClient {
jb.UrlRequestCallbackProxy(
_urlRequestCallbacks(request, responseCompleter, profile)),
_executor,
)..setHttpMethod(request.method.toJString());
)?..setHttpMethod(request.method.toJString());

var headers = request.headers;
if (body.isNotEmpty &&
Expand All @@ -389,7 +395,7 @@ class CronetClient extends BaseClient {
// 'Content-Type' header.
headers = {...headers, 'content-type': 'application/octet-stream'};
}
headers.forEach((k, v) => builder.addHeader(k.toJString(), v.toJString()));
headers.forEach((k, v) => builder?.addHeader(k.toJString(), v.toJString()));

if (body.isNotEmpty) {
final JByteBuffer data;
Expand All @@ -406,10 +412,10 @@ class CronetClient extends BaseClient {
rethrow;
}

builder.setUploadDataProvider(
builder?.setUploadDataProvider(
jb.UploadDataProviders.create$2(data), _executor);
}
builder.build().start();
builder?.build()?.start();
return responseCompleter.future;
}
}
Expand Down
Loading
Loading