Skip to content

Commit 6abb674

Browse files
committed
Fixes crash when sending undefined message via javascript channel
1 parent dfaf90b commit 6abb674

File tree

5 files changed

+48
-3
lines changed

5 files changed

+48
-3
lines changed

packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 3.18.4
2+
3+
* Fixes crash when sending undefined message via javascript channel.
4+
15
## 3.18.3
26

37
* Fixes crash where the native `AuthenticationChallengeResponse` could not be found for auth

packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,47 @@ Future<void> main() async {
278278
await expectLater(channelCompleter.future, completion('hello'));
279279
});
280280

281+
testWidgets('JavascriptChannel can receive undefined',
282+
(WidgetTester tester) async {
283+
final Completer<void> pageFinished = Completer<void>();
284+
final PlatformWebViewController controller = PlatformWebViewController(
285+
const PlatformWebViewControllerCreationParams(),
286+
);
287+
unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
288+
final PlatformNavigationDelegate delegate = PlatformNavigationDelegate(
289+
const PlatformNavigationDelegateCreationParams(),
290+
);
291+
unawaited(delegate.setOnPageFinished((_) => pageFinished.complete()));
292+
unawaited(controller.setPlatformNavigationDelegate(delegate));
293+
294+
final Completer<String> channelCompleter = Completer<String>();
295+
await controller.addJavaScriptChannel(
296+
JavaScriptChannelParams(
297+
name: 'Channel',
298+
onMessageReceived: (JavaScriptMessage message) {
299+
channelCompleter.complete(message.message);
300+
},
301+
),
302+
);
303+
304+
await controller.loadHtmlString(
305+
'data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+',
306+
);
307+
308+
await tester.pumpWidget(Builder(
309+
builder: (BuildContext context) {
310+
return PlatformWebViewWidget(
311+
PlatformWebViewWidgetCreationParams(controller: controller),
312+
).build(context);
313+
},
314+
));
315+
316+
await pageFinished.future;
317+
318+
await controller.runJavaScript('Channel.postMessage(undefined);');
319+
await expectLater(channelCompleter.future, completion(''));
320+
});
321+
281322
testWidgets('resize webview', (WidgetTester tester) async {
282323
final Completer<void> buttonTapResizeCompleter = Completer<void>();
283324
final Completer<void> onPageFinished = Completer<void>();

packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/weak_reference_utils.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
/// ) {
1919
/// weakReference.target?.onJavascriptChannelMessage(
2020
/// message.name,
21-
/// message.body!.toString(),
21+
/// message.body?.toString() ?? '',
2222
/// );
2323
/// };
2424
/// },

packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,7 @@ class WebKitJavaScriptChannelParams extends JavaScriptChannelParams {
906906
return (_, __, WKScriptMessage message) {
907907
if (weakReference.target != null) {
908908
weakReference.target!(
909-
JavaScriptMessage(message: message.body!.toString()),
909+
JavaScriptMessage(message: message.body?.toString() ?? ''),
910910
);
911911
}
912912
};

packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: webview_flutter_wkwebview
22
description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control.
33
repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
5-
version: 3.18.3
5+
version: 3.18.4
66

77
environment:
88
sdk: ^3.5.0

0 commit comments

Comments
 (0)