Skip to content

Commit a94ed29

Browse files
[webview_platform_interface] Adds WebResourceRequest to HttpResponseError (flutter#5790)
This is a copy of flutter/packages#4025 with updates from PR comments. The original didn't allow maintainers to update the code, so I create this branch.
1 parent ad79b99 commit a94ed29

File tree

8 files changed

+187
-4
lines changed

8 files changed

+187
-4
lines changed

packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.10.0
2+
3+
* Adds `WebResourceRequest` and `WebResourceResponse` to `HttpResponseError`.
4+
15
## 2.9.1
26

37
* Updates minimum required plugin_platform_interface version to 2.1.7.

packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/http_response_error.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
import 'package:flutter/foundation.dart';
66

7+
import 'web_resource_request.dart';
8+
import 'web_resource_response.dart';
9+
710
/// Error returned in `PlatformNavigationDelegate.setOnHttpError` when an HTTP
811
/// response error has been received.
912
///
@@ -37,9 +40,13 @@ import 'package:flutter/foundation.dart';
3740
class HttpResponseError {
3841
/// Used by the platform implementation to create a new [HttpResponseError].
3942
const HttpResponseError({
40-
required this.statusCode,
43+
this.request,
44+
this.response,
4145
});
4246

43-
/// The HTTP status code.
44-
final int statusCode;
47+
/// The associated request.
48+
final WebResourceRequest? request;
49+
50+
/// The associated response.
51+
final WebResourceResponse? response;
4552
}

packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ export 'platform_webview_widget_creation_params.dart';
2020
export 'scroll_position_change.dart';
2121
export 'url_change.dart';
2222
export 'web_resource_error.dart';
23+
export 'web_resource_request.dart';
24+
export 'web_resource_response.dart';
2325
export 'webview_cookie.dart';
2426
export 'webview_credential.dart';
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:flutter/foundation.dart';
6+
7+
/// Defines the parameters of the web resource request from the associated request.
8+
///
9+
/// Platform specific implementations can add additional fields by extending
10+
/// this class.
11+
///
12+
/// This example demonstrates how to extend the [WebResourceRequest] to
13+
/// provide additional platform specific parameters.
14+
///
15+
/// When extending [WebResourceRequest] additional parameters should always
16+
/// accept `null` or have a default value to prevent breaking changes.
17+
///
18+
/// ```dart
19+
/// class AndroidWebResourceRequest extends WebResourceRequest {
20+
/// WebResourceRequest._({
21+
/// required WebResourceRequest request,
22+
/// }) : super(
23+
/// uri: request.uri,
24+
/// );
25+
///
26+
/// factory AndroidWebResourceRequest.fromWebResourceRequest(
27+
/// WebResourceRequest request, {
28+
/// Map<String, String> headers,
29+
/// }) {
30+
/// return AndroidWebResourceRequest._(request, headers: headers);
31+
/// }
32+
///
33+
/// final Map<String, String> headers;
34+
/// }
35+
/// ```
36+
@immutable
37+
class WebResourceRequest {
38+
/// Used by the platform implementation to create a new [WebResourceRequest].
39+
const WebResourceRequest({required this.uri});
40+
41+
/// URI for the request.
42+
final Uri uri;
43+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:flutter/foundation.dart';
6+
7+
/// Contains information about the response for a request.
8+
///
9+
/// Platform specific implementations can add additional fields by extending
10+
/// this class.
11+
///
12+
/// This example demonstrates how to extend the [WebResourceResponse] to
13+
/// provide additional platform specific parameters.
14+
///
15+
/// When extending [WebResourceResponse] additional parameters should always
16+
/// accept `null` or have a default value to prevent breaking changes.
17+
///
18+
/// ```dart
19+
/// class AndroidWebResourceResponse extends WebResourceResponse {
20+
/// WebResourceResponse._({
21+
/// required WebResourceResponse response,
22+
/// }) : super(
23+
/// uri: response.uri,
24+
/// statusCode: response.statusCode,
25+
/// headers: response.headers,
26+
/// );
27+
///
28+
/// factory AndroidWebResourceResponse.fromWebResourceResponse(
29+
/// WebResourceResponse response, {
30+
/// Uri? historyUrl,
31+
/// }) {
32+
/// return AndroidWebResourceResponse._(response, historyUrl: historyUrl);
33+
/// }
34+
///
35+
/// final Uri? historyUrl;
36+
/// }
37+
/// ```
38+
@immutable
39+
class WebResourceResponse {
40+
/// Used by the platform implementation to create a new [WebResourceResponse].
41+
const WebResourceResponse({
42+
required this.uri,
43+
required this.statusCode,
44+
this.headers = const <String, String>{},
45+
});
46+
47+
/// The URI that this response is associated with.
48+
final Uri? uri;
49+
50+
/// The HTTP status code.
51+
final int statusCode;
52+
53+
/// Headers for the request.
54+
final Map<String, String> headers;
55+
}

packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/webview_flutt
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22
55
# NOTE: We strongly prefer non-breaking changes, even at the expense of a
66
# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
7-
version: 2.9.1
7+
version: 2.10.0
88

99
environment:
1010
sdk: ">=3.0.0 <4.0.0"
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:flutter_test/flutter_test.dart';
6+
import 'package:webview_flutter_platform_interface/src/types/types.dart';
7+
8+
void main() {
9+
group('types', () {
10+
test('WebResourceRequest', () {
11+
final Uri uri = Uri.parse('https://www.google.com');
12+
final WebResourceRequest request = WebResourceRequest(uri: uri);
13+
expect(request.uri, uri);
14+
});
15+
16+
test('WebResourceResponse', () {
17+
final Uri uri = Uri.parse('https://www.google.com');
18+
const int statusCode = 404;
19+
const Map<String, String> headers = <String, String>{'a': 'header'};
20+
21+
final WebResourceResponse response = WebResourceResponse(
22+
uri: uri,
23+
statusCode: statusCode,
24+
headers: headers,
25+
);
26+
27+
expect(response.uri, uri);
28+
expect(response.statusCode, statusCode);
29+
expect(response.headers, headers);
30+
});
31+
});
32+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// ignore_for_file: unnecessary_statements
6+
7+
import 'package:flutter_test/flutter_test.dart';
8+
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'
9+
as main_file;
10+
11+
void main() {
12+
test(
13+
'ensures webview_flutter_platform_interface.dart exports classes in types directory',
14+
() {
15+
main_file.JavaScriptConsoleMessage;
16+
main_file.JavaScriptLogLevel;
17+
main_file.JavaScriptMessage;
18+
main_file.JavaScriptMode;
19+
main_file.LoadRequestMethod;
20+
main_file.NavigationDecision;
21+
main_file.NavigationRequest;
22+
main_file.NavigationRequestCallback;
23+
main_file.PageEventCallback;
24+
main_file.PlatformNavigationDelegateCreationParams;
25+
main_file.PlatformWebViewControllerCreationParams;
26+
main_file.PlatformWebViewCookieManagerCreationParams;
27+
main_file.PlatformWebViewPermissionRequest;
28+
main_file.PlatformWebViewWidgetCreationParams;
29+
main_file.ProgressCallback;
30+
main_file.WebViewPermissionResourceType;
31+
main_file.WebResourceRequest;
32+
main_file.WebResourceResponse;
33+
main_file.WebResourceError;
34+
main_file.WebResourceErrorCallback;
35+
main_file.WebViewCookie;
36+
main_file.WebResourceErrorType;
37+
main_file.UrlChange;
38+
},
39+
);
40+
}

0 commit comments

Comments
 (0)