Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
brianquinlan committed Jan 16, 2024
1 parent b2de957 commit ca5230e
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 18 deletions.
3 changes: 2 additions & 1 deletion pkgs/cronet_http/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
## 1.0.1-wip
## 1.1.0-wip

* Use `package:http_image_provider` in the example application.
* Support Android API 21+.
* Support `BaseResponseWithUrl`.

## 1.0.0

Expand Down
19 changes: 18 additions & 1 deletion pkgs/cronet_http/lib/src/cronet_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,21 @@ import 'jni/jni_bindings.dart' as jb;
final _digitRegex = RegExp(r'^\d+$');
const _bufferSize = 10 * 1024; // The size of the Cronet read buffer.

/// This class can be removed when `package:http` v2 is released.
class _StreamedResponseV2 extends StreamedResponse
implements BaseResponseWithUrl {
@override
final Uri url;

_StreamedResponseV2(super.stream, super.statusCode,
{required this.url,
super.contentLength,
super.request,
super.headers,
super.isRedirect,
super.reasonPhrase});
}

/// The type of caching to use when making HTTP requests.
enum CacheMode {
disabled,
Expand Down Expand Up @@ -163,9 +178,11 @@ jb.UrlRequestCallbackProxy_UrlRequestCallbackInterface _urlRequestCallbacks(
case final contentLengthHeader?:
contentLength = int.parse(contentLengthHeader);
}
responseCompleter.complete(StreamedResponse(
responseCompleter.complete(_StreamedResponseV2(
responseStream!.stream,
responseInfo.getHttpStatusCode(),
url: Uri.parse(
responseInfo.getUrl().toDartString(releaseOriginal: true)),
contentLength: contentLength,
reasonPhrase: responseInfo
.getHttpStatusText()
Expand Down
4 changes: 2 additions & 2 deletions pkgs/cronet_http/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: cronet_http
version: 1.0.1-wip
version: 1.1.0-wip
description: >-
An Android Flutter plugin that provides access to the Cronet HTTP client.
repository: https://github.com/dart-lang/http/tree/master/pkgs/cronet_http
Expand All @@ -11,7 +11,7 @@ environment:
dependencies:
flutter:
sdk: flutter
http: '>=0.13.4 <2.0.0'
http: ^1.2.0
jni: ^0.7.2

dev_dependencies:
Expand Down
3 changes: 2 additions & 1 deletion pkgs/cupertino_http/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
## 1.2.1-wip
## 1.3.0

* Use `package:http_image_provider` in the example application.
* Support `BaseResponseWithUrl`.

## 1.2.0

Expand Down
20 changes: 19 additions & 1 deletion pkgs/cupertino_http/lib/src/cupertino_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,27 @@ import 'cupertino_api.dart';

final _digitRegex = RegExp(r'^\d+$');

/// This class can be removed when `package:http` v2 is released.
class _StreamedResponseV2 extends StreamedResponse
implements BaseResponseWithUrl {
@override
final Uri url;

_StreamedResponseV2(super.stream, super.statusCode,
{required this.url,
super.contentLength,
super.request,
super.headers,
super.isRedirect,
super.reasonPhrase});
}

class _TaskTracker {
final responseCompleter = Completer<URLResponse>();
final BaseRequest request;
final responseController = StreamController<Uint8List>();
int numRedirects = 0;
Uri? lastUrl; // The last URL redirected to.

_TaskTracker(this.request);

Expand Down Expand Up @@ -180,6 +196,7 @@ class CupertinoClient extends BaseClient {
++taskTracker.numRedirects;
if (taskTracker.request.followRedirects &&
taskTracker.numRedirects <= taskTracker.request.maxRedirects) {
taskTracker.lastUrl = request.url;
return request;
}
return null;
Expand Down Expand Up @@ -292,9 +309,10 @@ class CupertinoClient extends BaseClient {
);
}

return StreamedResponse(
return _StreamedResponseV2(
taskTracker.responseController.stream,
response.statusCode,
url: taskTracker.lastUrl ?? request.url,
contentLength: response.expectedContentLength == -1
? null
: response.expectedContentLength,
Expand Down
4 changes: 2 additions & 2 deletions pkgs/cupertino_http/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: cupertino_http
version: 1.2.1-wip
version: 1.3.0-wip
description: >-
A macOS/iOS Flutter plugin that provides access to the Foundation URL
Loading System.
Expand All @@ -14,7 +14,7 @@ dependencies:
ffi: ^2.1.0
flutter:
sdk: flutter
http: '>=0.13.4 <2.0.0'
http: ^1.2.0

dev_dependencies:
dart_flutter_team_lints: ^2.0.0
Expand Down
20 changes: 10 additions & 10 deletions pkgs/http_client_conformance_tests/lib/src/redirect_tests.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ void testRedirect(Client client, {bool redirectAlwaysAllowed = false}) async {
final response = await client.send(request);
expect(response.statusCode, 200);
expect(response.isRedirect, false);
if (response is BaseResponseV2) {
expect((response as BaseResponseV2).url, Uri.http(host, '/'));
if (response case BaseResponseWithUrl(url: final url)) {
expect(url, Uri.http(host, '/'));
}
});

Expand All @@ -44,8 +44,8 @@ void testRedirect(Client client, {bool redirectAlwaysAllowed = false}) async {
final response = await client.send(request);
expect(response.statusCode, 302);
expect(response.isRedirect, true);
if (response is BaseResponseV2) {
expect((response as BaseResponseV2).url, Uri.http(host, '/1'));
if (response case BaseResponseWithUrl(url: final url)) {
expect(url, Uri.http(host, '/1'));
}
}, skip: redirectAlwaysAllowed ? 'redirects always allowed' : false);

Expand All @@ -56,8 +56,8 @@ void testRedirect(Client client, {bool redirectAlwaysAllowed = false}) async {
final response = await client.send(request);
expect(response.statusCode, 302);
expect(response.isRedirect, true);
if (response is BaseResponseV2) {
expect((response as BaseResponseV2).url, Uri.http(host, '/1'));
if (response case BaseResponseWithUrl(url: final url)) {
expect(url, Uri.http(host, '/1'));
}
}, skip: redirectAlwaysAllowed ? 'redirects always allowed' : false);

Expand All @@ -67,8 +67,8 @@ void testRedirect(Client client, {bool redirectAlwaysAllowed = false}) async {
final response = await client.send(request);
expect(response.statusCode, 200);
expect(response.isRedirect, false);
if (response is BaseResponseV2) {
expect((response as BaseResponseV2).url, Uri.http(host, '/'));
if (response case BaseResponseWithUrl(url: final url)) {
expect(url, Uri.http(host, '/'));
}
});

Expand All @@ -89,8 +89,8 @@ void testRedirect(Client client, {bool redirectAlwaysAllowed = false}) async {
final response = await client.send(request);
expect(response.statusCode, 200);
expect(response.isRedirect, false);
if (response is BaseResponseV2) {
expect((response as BaseResponseV2).url, Uri.http(host, '/'));
if (response case BaseResponseWithUrl(url: final url)) {
expect(url, Uri.http(host, '/'));
}
}, skip: redirectAlwaysAllowed ? 'redirects always allowed' : false);

Expand Down

0 comments on commit ca5230e

Please sign in to comment.