Skip to content

Commit 9d3eb8d

Browse files
authored
[webview_flutter_lwe] Add integration test based on upstream v4.13.1 (#1056)
1 parent 88e04d2 commit 9d3eb8d

43 files changed

Lines changed: 157 additions & 32 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/webview_flutter_lwe/CHANGELOG.md

Lines changed: 12 additions & 0 deletions

packages/webview_flutter_lwe/README.md

Lines changed: 1 addition & 1 deletion

packages/webview_flutter_lwe/example/integration_test/webview_flutter_test.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,36 @@ Future<void> main() async {
447447
final String? currentUrl = await controller.currentUrl();
448448
expect(currentUrl, secondaryUrl);
449449
});
450+
451+
testWidgets('can receive url changes', (WidgetTester tester) async {
452+
final Completer<void> pageLoaded = Completer<void>();
453+
454+
final WebViewController controller = WebViewController();
455+
unawaited(controller.setJavaScriptMode(JavaScriptMode.unrestricted));
456+
unawaited(
457+
controller.setNavigationDelegate(
458+
NavigationDelegate(onPageFinished: (_) => pageLoaded.complete()),
459+
),
460+
);
461+
unawaited(controller.loadRequest(Uri.parse(blankPageEncoded)));
462+
463+
await tester.pumpWidget(WebViewWidget(controller: controller));
464+
465+
await pageLoaded.future;
466+
467+
final Completer<String> urlChangeCompleter = Completer<String>();
468+
await controller.setNavigationDelegate(
469+
NavigationDelegate(
470+
onUrlChange: (UrlChange change) {
471+
urlChangeCompleter.complete(change.url);
472+
},
473+
),
474+
);
475+
476+
await controller.runJavaScript('location.href = "$primaryUrl"');
477+
478+
await expectLater(urlChangeCompleter.future, completion(primaryUrl));
479+
});
450480
});
451481
}
452482

packages/webview_flutter_lwe/lib/src/lwe_webview_controller.dart

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ class LweWebViewController extends PlatformWebViewController {
2525

2626
final LweWebView _webview;
2727
late LweNavigationDelegate _lweNavigationDelegate;
28+
int? _viewId;
2829

2930
/// Called when [TizenView] is created.
3031
void onCreate(int viewId) {
32+
_viewId = viewId;
3133
if (_webview.hasNavigationDelegate) {
3234
_lweNavigationDelegate.onCreate(viewId);
3335
}
@@ -142,6 +144,15 @@ class LweWebViewController extends PlatformWebViewController {
142144
) async {
143145
_lweNavigationDelegate = handler;
144146
_webview.hasNavigationDelegate = true;
147+
// If the view has already been created, the previous delegate's method
148+
// call handler is the one currently bound to the platform channel. Bind
149+
// the new delegate now so its callbacks (e.g. onUrlChange, onPageFinished)
150+
// are the ones invoked; otherwise events would keep going to the old
151+
// delegate and be dropped.
152+
final int? viewId = _viewId;
153+
if (viewId != null) {
154+
handler.onCreate(viewId);
155+
}
145156
}
146157

147158
@override
@@ -382,15 +393,21 @@ class LweNavigationDelegate extends PlatformNavigationDelegate {
382393
/// Creates a new [LweNavigationDelegate].
383394
LweNavigationDelegate(super.params) : super.implementation();
384395

385-
late final MethodChannel _navigationDelegateChannel;
396+
late MethodChannel _navigationDelegateChannel;
397+
int? _viewId;
386398
PageEventCallback? _onPageFinished;
387399
PageEventCallback? _onPageStarted;
388400
ProgressCallback? _onProgress;
389401
WebResourceErrorCallback? _onWebResourceError;
390402
NavigationRequestCallback? _onNavigationRequest;
403+
UrlChangeCallback? _onUrlChange;
391404

392405
/// Called when [TizenView] is created.
393406
void onCreate(int viewId) {
407+
if (_viewId == viewId) {
408+
return;
409+
}
410+
_viewId = viewId;
394411
_navigationDelegateChannel = MethodChannel(
395412
kLweNavigationDelegateChannelName + viewId.toString(),
396413
);
@@ -431,6 +448,11 @@ class LweNavigationDelegate extends PlatformNavigationDelegate {
431448
);
432449
}
433450
return null;
451+
case 'onUrlChange':
452+
if (_onUrlChange != null) {
453+
_onUrlChange!(UrlChange(url: arguments['url']! as String));
454+
}
455+
return null;
434456
}
435457

436458
throw MissingPluginException(
@@ -506,10 +528,7 @@ class LweNavigationDelegate extends PlatformNavigationDelegate {
506528

507529
@override
508530
Future<void> setOnUrlChange(UrlChangeCallback onUrlChange) async {
509-
throw UnimplementedError(
510-
'This version of `LweNavigationDelegate` currently has no '
511-
'implementation for `setOnUrlChange`',
512-
);
531+
_onUrlChange = onUrlChange;
513532
}
514533

515534
@override

packages/webview_flutter_lwe/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: webview_flutter_lwe
22
description: Tizen implementation of the webview_flutter plugin backed by Lightweight Web Engine.
33
homepage: https://github.com/flutter-tizen/plugins
44
repository: https://github.com/flutter-tizen/plugins/tree/master/packages/webview_flutter_lwe
5-
version: 0.4.1
5+
version: 0.5.0
66

77
environment:
88
sdk: ^3.8.0
0 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)