diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart index 1ddd6f3d9f0f..f6faa8e74331 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart @@ -29,6 +29,8 @@ const String _nullStringIdentifier = ''; /// To learn more about WebView and alternatives for serving web content, read /// the documentation on /// [Web-based content](https://developer.android.com/guide/webapps). +/// +/// When a [WebView] is no longer needed [release] must be called. class WebView { /// Constructs a new WebView. WebView({this.useHybridComposition = false}) { @@ -40,9 +42,6 @@ class WebView { static WebViewHostApiImpl api = WebViewHostApiImpl(); WebViewClient? _currentWebViewClient; - DownloadListener? _currentDownloadListener; - WebChromeClient? _currentWebChromeClient; - Set _javaScriptChannels = {}; /// Whether the [WebView] will be rendered with an [AndroidViewSurface]. /// @@ -187,18 +186,8 @@ class WebView { /// /// This will replace the current handler. Future setWebViewClient(WebViewClient webViewClient) { - final WebViewClient? currentWebViewClient = _currentWebViewClient; - - if (webViewClient == currentWebViewClient) { - return Future.value(); - } - - if (currentWebViewClient != null) { - WebViewClient.api.disposeFromInstance(currentWebViewClient); - } - - WebViewClient.api.createFromInstance(webViewClient); _currentWebViewClient = webViewClient; + WebViewClient.api.createFromInstance(webViewClient); return api.setWebViewClientFromInstance(this, webViewClient); } @@ -227,7 +216,6 @@ class WebView { /// content is ever loaded into the WebView even inside an iframe. Future addJavaScriptChannel(JavaScriptChannel javaScriptChannel) { JavaScriptChannel.api.createFromInstance(javaScriptChannel); - _javaScriptChannels.add(javaScriptChannel); return api.addJavaScriptChannelFromInstance(this, javaScriptChannel); } @@ -236,27 +224,15 @@ class WebView { /// Note that the removal will not be reflected in JavaScript until the page /// is next (re)loaded. See [addJavaScriptChannel]. Future removeJavaScriptChannel(JavaScriptChannel javaScriptChannel) { - _javaScriptChannels.remove(javaScriptChannel); - api.removeJavaScriptChannelFromInstance(this, javaScriptChannel); - return JavaScriptChannel.api.disposeFromInstance(javaScriptChannel); + JavaScriptChannel.api.createFromInstance(javaScriptChannel); + return api.removeJavaScriptChannelFromInstance(this, javaScriptChannel); } /// Registers the interface to be used when content can not be handled by the rendering engine, and should be downloaded instead. /// /// This will replace the current handler. Future setDownloadListener(DownloadListener listener) { - final DownloadListener? currentDownloadListener = _currentDownloadListener; - - if (listener == currentDownloadListener) { - return Future.value(); - } - - if (currentDownloadListener != null) { - DownloadListener.api.disposeFromInstance(currentDownloadListener); - } - DownloadListener.api.createFromInstance(listener); - _currentDownloadListener = listener; return api.setDownloadListenerFromInstance(this, listener); } @@ -266,26 +242,26 @@ class WebView { /// JavaScript dialogs, favicons, titles, and the progress. This will replace /// the current handler. Future setWebChromeClient(WebChromeClient client) { - final WebChromeClient? currentWebChromeClient = _currentWebChromeClient; - - if (client == currentWebChromeClient) { - return Future.value(); - } - - if (currentWebChromeClient != null) { - WebChromeClient.api.disposeFromInstance(currentWebChromeClient); - } - - final WebViewClient? currentWebViewClient = _currentWebViewClient; + // WebView requires a WebViewClient because of a bug fix that makes + // calls to WebViewClient.requestLoading/WebViewClient.urlLoading when a new + // window is opened. This is to make sure a url opened by `Window.open` has + // a secure url. assert( - currentWebViewClient != null, + _currentWebViewClient != null, "Can't set a WebChromeClient without setting a WebViewClient first.", ); - - WebChromeClient.api.createFromInstance(client, currentWebViewClient!); - _currentWebChromeClient = client; + WebChromeClient.api.createFromInstance(client, _currentWebViewClient!); return api.setWebChromeClientFromInstance(this, client); } + + /// Releases all resources used by the [WebView]. + /// + /// Any methods called after [release] will throw an exception. + Future release() { + _currentWebViewClient = null; + WebSettings.api.disposeFromInstance(settings); + return api.disposeFromInstance(this); + } } /// Manages settings state for a [WebView]. @@ -332,7 +308,7 @@ class WebSettings { /// /// The default is false. Future setSupportMultipleWindows(bool support) { - return api.setSupportZoomFromInstance(this, support); + return api.setSupportMultipleWindowsFromInstance(this, support); } /// Tells the WebView to enable JavaScript execution. @@ -423,7 +399,9 @@ class WebSettings { /// See [WebView.addJavaScriptChannel]. abstract class JavaScriptChannel { /// Constructs a [JavaScriptChannel]. - JavaScriptChannel(this.channelName); + JavaScriptChannel(this.channelName) { + AndroidWebViewFlutterApis.instance.ensureSetUp(); + } /// Pigeon Host Api implementation for [JavaScriptChannel]. @visibleForTesting @@ -433,61 +411,95 @@ abstract class JavaScriptChannel { final String channelName; /// Callback method when javaScript calls `postMessage` on the object instance passed. - void postMessage(String message) {} + void postMessage(String message); } /// Receive various notifications and requests for [WebView]. abstract class WebViewClient { /// Constructs a [WebViewClient]. - WebViewClient({this.shouldOverrideUrlLoading = true}); + WebViewClient({this.shouldOverrideUrlLoading = true}) { + AndroidWebViewFlutterApis.instance.ensureSetUp(); + } /// User authentication failed on server. - static const int errorAuthentication = 0xfffffffc; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_AUTHENTICATION + static const int errorAuthentication = -4; /// Malformed URL. - static const int errorBadUrl = 0xfffffff4; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_BAD_URL + static const int errorBadUrl = -12; /// Failed to connect to the server. - static const int errorConnect = 0xfffffffa; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_CONNECT + static const int errorConnect = -6; /// Failed to perform SSL handshake. - static const int errorFailedSslHandshake = 0xfffffff5; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_FAILED_SSL_HANDSHAKE + static const int errorFailedSslHandshake = -11; /// Generic file error. - static const int errorFile = 0xfffffff3; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_FILE + static const int errorFile = -13; /// File not found. - static const int errorFileNotFound = 0xfffffff2; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_FILE_NOT_FOUND + static const int errorFileNotFound = -14; /// Server or proxy hostname lookup failed. - static const int errorHostLookup = 0xfffffffe; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_HOST_LOOKUP + static const int errorHostLookup = -2; /// Failed to read or write to the server. - static const int errorIO = 0xfffffff9; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_IO + static const int errorIO = -7; /// User authentication failed on proxy. - static const int errorProxyAuthentication = 0xfffffffb; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_PROXY_AUTHENTICATION + static const int errorProxyAuthentication = -5; /// Too many redirects. - static const int errorRedirectLoop = 0xfffffff7; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_REDIRECT_LOOP + static const int errorRedirectLoop = -9; /// Connection timed out. - static const int errorTimeout = 0xfffffff8; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_TIMEOUT + static const int errorTimeout = -8; /// Too many requests during this load. - static const int errorTooManyRequests = 0xfffffff1; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_TOO_MANY_REQUESTS + static const int errorTooManyRequests = -15; /// Generic error. - static const int errorUnknown = 0xffffffff; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_UNKNOWN + static const int errorUnknown = -1; /// Resource load was canceled by Safe Browsing. - static const int errorUnsafeResource = 0xfffffff0; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_UNSAFE_RESOURCE + static const int errorUnsafeResource = -16; /// Unsupported authentication scheme (not basic or digest). - static const int errorUnsupportedAuthScheme = 0xfffffffd; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_UNSUPPORTED_AUTH_SCHEME + static const int errorUnsupportedAuthScheme = -3; /// Unsupported URI scheme. - static const int errorUnsupportedScheme = 0xfffffff6; + /// + /// See https://developer.android.com/reference/android/webkit/WebViewClient#ERROR_UNSUPPORTED_SCHEME + static const int errorUnsupportedScheme = -10; /// Pigeon Host Api implementation for [WebViewClient]. @visibleForTesting @@ -573,6 +585,11 @@ abstract class WebViewClient { /// The interface to be used when content can not be handled by the rendering engine for [WebView], and should be downloaded instead. abstract class DownloadListener { + /// Constructs a [DownloadListener]. + DownloadListener() { + AndroidWebViewFlutterApis.instance.ensureSetUp(); + } + /// Pigeon Host Api implementation for [DownloadListener]. @visibleForTesting static DownloadListenerHostApiImpl api = DownloadListenerHostApiImpl(); @@ -589,12 +606,17 @@ abstract class DownloadListener { /// Handles JavaScript dialogs, favicons, titles, and the progress for [WebView]. abstract class WebChromeClient { + /// Constructs a [WebChromeClient]. + WebChromeClient() { + AndroidWebViewFlutterApis.instance.ensureSetUp(); + } + /// Pigeon Host Api implementation for [WebChromeClient]. @visibleForTesting static WebChromeClientHostApiImpl api = WebChromeClientHostApiImpl(); /// Notify the host application that a file should be downloaded. - void onProgressChanged(WebView webView, int progress); + void onProgressChanged(WebView webView, int progress) {} } /// Encompasses parameters to the [WebViewClient.requestLoading] method. @@ -609,24 +631,24 @@ class WebResourceRequest { required this.requestHeaders, }); - /// Gets the URL for which the resource request was made. + /// The URL for which the resource request was made. final String url; - /// Gets whether the request was made in order to fetch the main frame's document. - final isForMainFrame; + /// Whether the request was made in order to fetch the main frame's document. + final bool isForMainFrame; - /// Gets whether the request was a result of a server-side redirect. + /// Whether the request was a result of a server-side redirect. /// /// Only supported on Android version >= 24. final bool? isRedirect; - /// Gets whether a gesture (such as a click) was associated with the request. + /// Whether a gesture (such as a click) was associated with the request. final bool hasGesture; - /// Gets the method associated with the request, for example "GET". + /// The method associated with the request, for example "GET". final String method; - /// Gets the headers associated with the request. + /// The headers associated with the request. final Map requestHeaders; } diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart index 81ec7c7bf80e..7fb95f1dd942 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v1.0.7), do not edit directly. +// Autogenerated from Pigeon (v1.0.9), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name // @dart = 2.12 @@ -1039,31 +1039,6 @@ class JavaScriptChannelHostApi { return; } } - - Future dispose(int arg_instanceId) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaScriptChannelHostApi.dispose', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_instanceId]) as Map?; - if (replyMap == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - details: null, - ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; - throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], - ); - } else { - return; - } - } } class _JavaScriptChannelFlutterApiCodec extends StandardMessageCodec { @@ -1074,11 +1049,33 @@ abstract class JavaScriptChannelFlutterApi { static const MessageCodec codec = _JavaScriptChannelFlutterApiCodec(); + void dispose(int instanceId); void postMessage(int instanceId, String message); - static void setup(JavaScriptChannelFlutterApi? api) { + static void setup(JavaScriptChannelFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.JavaScriptChannelFlutterApi.dispose', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.JavaScriptChannelFlutterApi.dispose was null.'); + final List args = (message as List?)!; + final int? arg_instanceId = (args[0] as int?); + assert(arg_instanceId != null, + 'Argument for dev.flutter.pigeon.JavaScriptChannelFlutterApi.dispose was null, expected non-null int.'); + api.dispose(arg_instanceId!); + return; + }); + } + } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaScriptChannelFlutterApi.postMessage', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.JavaScriptChannelFlutterApi.postMessage', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1086,10 +1083,10 @@ abstract class JavaScriptChannelFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.JavaScriptChannelFlutterApi.postMessage was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.JavaScriptChannelFlutterApi.postMessage was null, expected non-null int.'); - final String? arg_message = args[1] as String?; + final String? arg_message = (args[1] as String?); assert(arg_message != null, 'Argument for dev.flutter.pigeon.JavaScriptChannelFlutterApi.postMessage was null, expected non-null String.'); api.postMessage(arg_instanceId!, arg_message!); @@ -1141,31 +1138,6 @@ class WebViewClientHostApi { return; } } - - Future dispose(int arg_instanceId) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewClientHostApi.dispose', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_instanceId]) as Map?; - if (replyMap == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - details: null, - ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; - throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], - ); - } else { - return; - } - } } class _WebViewClientFlutterApiCodec extends StandardMessageCodec { @@ -1178,9 +1150,6 @@ class _WebViewClientFlutterApiCodec extends StandardMessageCodec { } else if (value is WebResourceRequestData) { buffer.putUint8(129); writeValue(buffer, value.encode()); - } else if (value is WebResourceRequestData) { - buffer.putUint8(130); - writeValue(buffer, value.encode()); } else { super.writeValue(buffer, value); } @@ -1195,9 +1164,6 @@ class _WebViewClientFlutterApiCodec extends StandardMessageCodec { case 129: return WebResourceRequestData.decode(readValue(buffer)!); - case 130: - return WebResourceRequestData.decode(readValue(buffer)!); - default: return super.readValueOfType(type, buffer); } @@ -1207,6 +1173,7 @@ class _WebViewClientFlutterApiCodec extends StandardMessageCodec { abstract class WebViewClientFlutterApi { static const MessageCodec codec = _WebViewClientFlutterApiCodec(); + void dispose(int instanceId); void onPageStarted(int instanceId, int webViewInstanceId, String url); void onPageFinished(int instanceId, int webViewInstanceId, String url); void onReceivedRequestError(int instanceId, int webViewInstanceId, @@ -1216,10 +1183,31 @@ abstract class WebViewClientFlutterApi { void requestLoading( int instanceId, int webViewInstanceId, WebResourceRequestData request); void urlLoading(int instanceId, int webViewInstanceId, String url); - static void setup(WebViewClientFlutterApi? api) { + static void setup(WebViewClientFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewClientFlutterApi.dispose', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.dispose was null.'); + final List args = (message as List?)!; + final int? arg_instanceId = (args[0] as int?); + assert(arg_instanceId != null, + 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.dispose was null, expected non-null int.'); + api.dispose(arg_instanceId!); + return; + }); + } + } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewClientFlutterApi.onPageStarted', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewClientFlutterApi.onPageStarted', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1227,13 +1215,13 @@ abstract class WebViewClientFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onPageStarted was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onPageStarted was null, expected non-null int.'); - final int? arg_webViewInstanceId = args[1] as int?; + final int? arg_webViewInstanceId = (args[1] as int?); assert(arg_webViewInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onPageStarted was null, expected non-null int.'); - final String? arg_url = args[2] as String?; + final String? arg_url = (args[2] as String?); assert(arg_url != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onPageStarted was null, expected non-null String.'); api.onPageStarted(arg_instanceId!, arg_webViewInstanceId!, arg_url!); @@ -1242,8 +1230,9 @@ abstract class WebViewClientFlutterApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewClientFlutterApi.onPageFinished', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewClientFlutterApi.onPageFinished', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1251,13 +1240,13 @@ abstract class WebViewClientFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onPageFinished was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onPageFinished was null, expected non-null int.'); - final int? arg_webViewInstanceId = args[1] as int?; + final int? arg_webViewInstanceId = (args[1] as int?); assert(arg_webViewInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onPageFinished was null, expected non-null int.'); - final String? arg_url = args[2] as String?; + final String? arg_url = (args[2] as String?); assert(arg_url != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onPageFinished was null, expected non-null String.'); api.onPageFinished(arg_instanceId!, arg_webViewInstanceId!, arg_url!); @@ -1266,9 +1255,10 @@ abstract class WebViewClientFlutterApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( + final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedRequestError', - codec); + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1276,18 +1266,18 @@ abstract class WebViewClientFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedRequestError was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedRequestError was null, expected non-null int.'); - final int? arg_webViewInstanceId = args[1] as int?; + final int? arg_webViewInstanceId = (args[1] as int?); assert(arg_webViewInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedRequestError was null, expected non-null int.'); final WebResourceRequestData? arg_request = - args[2] as WebResourceRequestData?; + (args[2] as WebResourceRequestData?); assert(arg_request != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedRequestError was null, expected non-null WebResourceRequestData.'); final WebResourceErrorData? arg_error = - args[3] as WebResourceErrorData?; + (args[3] as WebResourceErrorData?); assert(arg_error != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedRequestError was null, expected non-null WebResourceErrorData.'); api.onReceivedRequestError(arg_instanceId!, arg_webViewInstanceId!, @@ -1297,8 +1287,9 @@ abstract class WebViewClientFlutterApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedError', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedError', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1306,19 +1297,19 @@ abstract class WebViewClientFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedError was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedError was null, expected non-null int.'); - final int? arg_webViewInstanceId = args[1] as int?; + final int? arg_webViewInstanceId = (args[1] as int?); assert(arg_webViewInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedError was null, expected non-null int.'); - final int? arg_errorCode = args[2] as int?; + final int? arg_errorCode = (args[2] as int?); assert(arg_errorCode != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedError was null, expected non-null int.'); - final String? arg_description = args[3] as String?; + final String? arg_description = (args[3] as String?); assert(arg_description != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedError was null, expected non-null String.'); - final String? arg_failingUrl = args[4] as String?; + final String? arg_failingUrl = (args[4] as String?); assert(arg_failingUrl != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.onReceivedError was null, expected non-null String.'); api.onReceivedError(arg_instanceId!, arg_webViewInstanceId!, @@ -1328,8 +1319,9 @@ abstract class WebViewClientFlutterApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewClientFlutterApi.requestLoading', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewClientFlutterApi.requestLoading', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1337,14 +1329,14 @@ abstract class WebViewClientFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.requestLoading was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.requestLoading was null, expected non-null int.'); - final int? arg_webViewInstanceId = args[1] as int?; + final int? arg_webViewInstanceId = (args[1] as int?); assert(arg_webViewInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.requestLoading was null, expected non-null int.'); final WebResourceRequestData? arg_request = - args[2] as WebResourceRequestData?; + (args[2] as WebResourceRequestData?); assert(arg_request != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.requestLoading was null, expected non-null WebResourceRequestData.'); api.requestLoading( @@ -1354,8 +1346,9 @@ abstract class WebViewClientFlutterApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewClientFlutterApi.urlLoading', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewClientFlutterApi.urlLoading', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1363,13 +1356,13 @@ abstract class WebViewClientFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.urlLoading was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.urlLoading was null, expected non-null int.'); - final int? arg_webViewInstanceId = args[1] as int?; + final int? arg_webViewInstanceId = (args[1] as int?); assert(arg_webViewInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.urlLoading was null, expected non-null int.'); - final String? arg_url = args[2] as String?; + final String? arg_url = (args[2] as String?); assert(arg_url != null, 'Argument for dev.flutter.pigeon.WebViewClientFlutterApi.urlLoading was null, expected non-null String.'); api.urlLoading(arg_instanceId!, arg_webViewInstanceId!, arg_url!); @@ -1419,31 +1412,6 @@ class DownloadListenerHostApi { return; } } - - Future dispose(int arg_instanceId) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.DownloadListenerHostApi.dispose', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_instanceId]) as Map?; - if (replyMap == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - details: null, - ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; - throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], - ); - } else { - return; - } - } } class _DownloadListenerFlutterApiCodec extends StandardMessageCodec { @@ -1453,13 +1421,35 @@ class _DownloadListenerFlutterApiCodec extends StandardMessageCodec { abstract class DownloadListenerFlutterApi { static const MessageCodec codec = _DownloadListenerFlutterApiCodec(); + void dispose(int instanceId); void onDownloadStart(int instanceId, String url, String userAgent, String contentDisposition, String mimetype, int contentLength); - static void setup(DownloadListenerFlutterApi? api) { + static void setup(DownloadListenerFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.DownloadListenerFlutterApi.dispose', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.dispose was null.'); + final List args = (message as List?)!; + final int? arg_instanceId = (args[0] as int?); + assert(arg_instanceId != null, + 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.dispose was null, expected non-null int.'); + api.dispose(arg_instanceId!); + return; + }); + } + } { - const BasicMessageChannel channel = BasicMessageChannel( + final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.DownloadListenerFlutterApi.onDownloadStart', - codec); + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1467,22 +1457,22 @@ abstract class DownloadListenerFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.onDownloadStart was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.onDownloadStart was null, expected non-null int.'); - final String? arg_url = args[1] as String?; + final String? arg_url = (args[1] as String?); assert(arg_url != null, 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.onDownloadStart was null, expected non-null String.'); - final String? arg_userAgent = args[2] as String?; + final String? arg_userAgent = (args[2] as String?); assert(arg_userAgent != null, 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.onDownloadStart was null, expected non-null String.'); - final String? arg_contentDisposition = args[3] as String?; + final String? arg_contentDisposition = (args[3] as String?); assert(arg_contentDisposition != null, 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.onDownloadStart was null, expected non-null String.'); - final String? arg_mimetype = args[4] as String?; + final String? arg_mimetype = (args[4] as String?); assert(arg_mimetype != null, 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.onDownloadStart was null, expected non-null String.'); - final int? arg_contentLength = args[5] as int?; + final int? arg_contentLength = (args[5] as int?); assert(arg_contentLength != null, 'Argument for dev.flutter.pigeon.DownloadListenerFlutterApi.onDownloadStart was null, expected non-null int.'); api.onDownloadStart(arg_instanceId!, arg_url!, arg_userAgent!, @@ -1535,31 +1525,6 @@ class WebChromeClientHostApi { return; } } - - Future dispose(int arg_instanceId) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebChromeClientHostApi.dispose', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_instanceId]) as Map?; - if (replyMap == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - details: null, - ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; - throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], - ); - } else { - return; - } - } } class _WebChromeClientFlutterApiCodec extends StandardMessageCodec { @@ -1569,12 +1534,34 @@ class _WebChromeClientFlutterApiCodec extends StandardMessageCodec { abstract class WebChromeClientFlutterApi { static const MessageCodec codec = _WebChromeClientFlutterApiCodec(); + void dispose(int instanceId); void onProgressChanged(int instanceId, int webViewInstanceId, int progress); - static void setup(WebChromeClientFlutterApi? api) { + static void setup(WebChromeClientFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebChromeClientFlutterApi.dispose', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.WebChromeClientFlutterApi.dispose was null.'); + final List args = (message as List?)!; + final int? arg_instanceId = (args[0] as int?); + assert(arg_instanceId != null, + 'Argument for dev.flutter.pigeon.WebChromeClientFlutterApi.dispose was null, expected non-null int.'); + api.dispose(arg_instanceId!); + return; + }); + } + } { - const BasicMessageChannel channel = BasicMessageChannel( + final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.WebChromeClientFlutterApi.onProgressChanged', - codec); + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMessageHandler(null); } else { @@ -1582,13 +1569,13 @@ abstract class WebChromeClientFlutterApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebChromeClientFlutterApi.onProgressChanged was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebChromeClientFlutterApi.onProgressChanged was null, expected non-null int.'); - final int? arg_webViewInstanceId = args[1] as int?; + final int? arg_webViewInstanceId = (args[1] as int?); assert(arg_webViewInstanceId != null, 'Argument for dev.flutter.pigeon.WebChromeClientFlutterApi.onProgressChanged was null, expected non-null int.'); - final int? arg_progress = args[2] as int?; + final int? arg_progress = (args[2] as int?); assert(arg_progress != null, 'Argument for dev.flutter.pigeon.WebChromeClientFlutterApi.onProgressChanged was null, expected non-null int.'); api.onProgressChanged( diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart index f909e49bd802..fba0dea0a421 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart @@ -8,6 +8,77 @@ import 'android_webview.dart'; import 'android_webview.pigeon.dart'; import 'instance_manager.dart'; +/// Converts [WebResourceRequestData] to [WebResourceRequest] +WebResourceRequest _toWebResourceRequest(WebResourceRequestData data) { + return WebResourceRequest( + url: data.url!, + isForMainFrame: data.isForMainFrame!, + isRedirect: data.isRedirect, + hasGesture: data.hasGesture!, + method: data.method!, + requestHeaders: + data.requestHeaders?.cast() ?? {}, + ); +} + +/// Converts [WebResourceErrorData] to [WebResourceError]. +WebResourceError _toWebResourceError(WebResourceErrorData data) { + return WebResourceError( + errorCode: data.errorCode!, + description: data.description!, + ); +} + +/// Handles initialization of Flutter APIs for Android WebView. +class AndroidWebViewFlutterApis { + /// Creates a [AndroidWebViewFlutterApis]. + AndroidWebViewFlutterApis({ + DownloadListenerFlutterApiImpl? downloadListenerFlutterApi, + WebViewClientFlutterApiImpl? webViewClientFlutterApi, + WebChromeClientFlutterApiImpl? webChromeClientFlutterApi, + JavaScriptChannelFlutterApiImpl? javaScriptChannelFlutterApi, + }) { + this.downloadListenerFlutterApi = + downloadListenerFlutterApi ?? DownloadListenerFlutterApiImpl(); + this.webViewClientFlutterApi = + webViewClientFlutterApi ?? WebViewClientFlutterApiImpl(); + this.webChromeClientFlutterApi = + webChromeClientFlutterApi ?? WebChromeClientFlutterApiImpl(); + this.javaScriptChannelFlutterApi = + javaScriptChannelFlutterApi ?? JavaScriptChannelFlutterApiImpl(); + } + + static bool _haveBeenSetUp = false; + + /// Mutable instance containing all Flutter Apis for Android WebView. + /// + /// This should only be changed for testing purposes. + static AndroidWebViewFlutterApis instance = AndroidWebViewFlutterApis(); + + /// Flutter Api for [DownloadListener]. + late final DownloadListenerFlutterApiImpl downloadListenerFlutterApi; + + /// Flutter Api for [WebViewClient]. + late final WebViewClientFlutterApiImpl webViewClientFlutterApi; + + /// Flutter Api for [WebChromeClient]. + late final WebChromeClientFlutterApiImpl webChromeClientFlutterApi; + + /// Flutter Api for [JavaScriptChannel]. + late final JavaScriptChannelFlutterApiImpl javaScriptChannelFlutterApi; + + /// Ensures all the Flutter APIs have been setup to receive calls from native code. + void ensureSetUp() { + if (!_haveBeenSetUp) { + DownloadListenerFlutterApi.setup(downloadListenerFlutterApi); + WebViewClientFlutterApi.setup(webViewClientFlutterApi); + WebChromeClientFlutterApi.setup(webChromeClientFlutterApi); + JavaScriptChannelFlutterApi.setup(javaScriptChannelFlutterApi); + _haveBeenSetUp = true; + } + } +} + /// Host api implementation for [WebView]. class WebViewHostApiImpl extends WebViewHostApi { /// Constructs a [WebViewHostApiImpl]. @@ -31,10 +102,11 @@ class WebViewHostApiImpl extends WebViewHostApi { /// Helper method to convert instances ids to objects. Future disposeFromInstance(WebView instance) async { - final int? instanceId = instanceManager.removeInstance(instance); + final int? instanceId = instanceManager.getInstanceId(instance); if (instanceId != null) { - return dispose(instanceId); + await dispose(instanceId); } + instanceManager.removeInstance(instance); } /// Helper method to convert instances ids to objects. @@ -239,7 +311,7 @@ class WebSettingsHostApiImpl extends WebSettingsHostApi { WebSettings instance, bool flag, ) { - return setJavaScriptCanOpenWindowsAutomatically( + return setJavaScriptEnabled( instanceManager.getInstanceId(instance)!, flag, ); @@ -337,26 +409,23 @@ class JavaScriptChannelHostApiImpl extends JavaScriptChannelHostApi { return create(instanceId, instance.channelName); } } - - /// Helper method to convert instances ids to objects. - Future disposeFromInstance(JavaScriptChannel instance) async { - final int? instanceId = instanceManager.removeInstance(instance); - if (instanceId != null) { - return dispose(instanceId); - } - } } /// Flutter api implementation for [JavaScriptChannel]. class JavaScriptChannelFlutterApiImpl extends JavaScriptChannelFlutterApi { /// Constructs a [JavaScriptChannelFlutterApiImpl]. - JavaScriptChannelHostApiImpl({InstanceManager? instanceManager}) { + JavaScriptChannelFlutterApiImpl({InstanceManager? instanceManager}) { this.instanceManager = instanceManager ?? InstanceManager.instance; } /// Maintains instances stored to communicate with java objects. late final InstanceManager instanceManager; + @override + void dispose(int instanceId) { + instanceManager.removeInstance(instanceId); + } + @override void postMessage(int instanceId, String message) { final JavaScriptChannel instance = @@ -385,14 +454,6 @@ class WebViewClientHostApiImpl extends WebViewClientHostApi { return create(instanceId, instance.shouldOverrideUrlLoading); } } - - /// Helper method to convert instances ids to objects. - Future disposeFromInstance(WebViewClient instance) async { - final int? instanceId = instanceManager.removeInstance(instance); - if (instanceId != null) { - return dispose(instanceId); - } - } } /// Flutter api implementation for [WebViewClient]. @@ -405,6 +466,11 @@ class WebViewClientFlutterApiImpl extends WebViewClientFlutterApi { /// Maintains instances stored to communicate with java objects. late final InstanceManager instanceManager; + @override + void dispose(int instanceId) { + instanceManager.removeInstance(instanceId); + } + @override void onPageFinished(int instanceId, int webViewInstanceId, String url) { final WebViewClient instance = @@ -455,18 +521,8 @@ class WebViewClientFlutterApiImpl extends WebViewClientFlutterApi { instanceManager.getInstance(instanceId) as WebViewClient; instance.onReceivedRequestError( instanceManager.getInstance(webViewInstanceId) as WebView, - WebResourceRequest( - url: request.url!, - isForMainFrame: request.isForMainFrame!, - isRedirect: request.isRedirect, - hasGesture: request.hasGesture!, - method: request.method!, - requestHeaders: request.requestHeaders!.cast(), - ), - WebResourceError( - errorCode: error.errorCode!, - description: error.description!, - ), + _toWebResourceRequest(request), + _toWebResourceError(error), ); } @@ -480,14 +536,7 @@ class WebViewClientFlutterApiImpl extends WebViewClientFlutterApi { instanceManager.getInstance(instanceId) as WebViewClient; instance.requestLoading( instanceManager.getInstance(webViewInstanceId) as WebView, - WebResourceRequest( - url: request.url!, - isForMainFrame: request.isForMainFrame!, - isRedirect: request.isRedirect, - hasGesture: request.hasGesture!, - method: request.method!, - requestHeaders: request.requestHeaders!.cast(), - ), + _toWebResourceRequest(request), ); } @@ -526,14 +575,6 @@ class DownloadListenerHostApiImpl extends DownloadListenerHostApi { return create(instanceId); } } - - /// Helper method to convert instances ids to objects. - Future disposeFromInstance(DownloadListener instance) async { - final int? instanceId = instanceManager.removeInstance(instance); - if (instanceId != null) { - return dispose(instanceId); - } - } } /// Flutter api implementation for [DownloadListener]. @@ -546,6 +587,11 @@ class DownloadListenerFlutterApiImpl extends DownloadListenerFlutterApi { /// Maintains instances stored to communicate with java objects. late final InstanceManager instanceManager; + @override + void dispose(int instanceId) { + instanceManager.removeInstance(instanceId); + } + @override void onDownloadStart( int instanceId, @@ -590,14 +636,6 @@ class WebChromeClientHostApiImpl extends WebChromeClientHostApi { return create(instanceId, instanceManager.getInstanceId(webViewClient)!); } } - - /// Helper method to convert instances ids to objects. - Future disposeFromInstance(WebChromeClient instance) async { - final int? instanceId = instanceManager.removeInstance(instance); - if (instanceId != null) { - return dispose(instanceId); - } - } } /// Flutter api implementation for [DownloadListener]. @@ -610,6 +648,11 @@ class WebChromeClientFlutterApiImpl extends WebChromeClientFlutterApi { /// Maintains instances stored to communicate with java objects. late final InstanceManager instanceManager; + @override + void dispose(int instanceId) { + instanceManager.removeInstance(instanceId); + } + @override void onProgressChanged(int instanceId, int webViewInstanceId, int progress) { final WebChromeClient instance = diff --git a/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart b/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart index 1877c1b91feb..47bc42058ba9 100644 --- a/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart +++ b/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart @@ -105,24 +105,24 @@ abstract class WebSettingsHostApi { @HostApi(dartHostTestHandler: 'TestJavaScriptChannelHostApi') abstract class JavaScriptChannelHostApi { void create(int instanceId, String channelName); - - void dispose(int instanceId); } @FlutterApi() abstract class JavaScriptChannelFlutterApi { + void dispose(int instanceId); + void postMessage(int instanceId, String message); } @HostApi(dartHostTestHandler: 'TestWebViewClientHostApi') abstract class WebViewClientHostApi { void create(int instanceId, bool shouldOverrideUrlLoading); - - void dispose(int instanceId); } @FlutterApi() abstract class WebViewClientFlutterApi { + void dispose(int instanceId); + void onPageStarted(int instanceId, int webViewInstanceId, String url); void onPageFinished(int instanceId, int webViewInstanceId, String url); @@ -154,11 +154,12 @@ abstract class WebViewClientFlutterApi { @HostApi(dartHostTestHandler: 'TestDownloadListenerHostApi') abstract class DownloadListenerHostApi { void create(int instanceId); - void dispose(int instanceId); } @FlutterApi() abstract class DownloadListenerFlutterApi { + void dispose(int instanceId); + void onDownloadStart( int instanceId, String url, @@ -172,10 +173,11 @@ abstract class DownloadListenerFlutterApi { @HostApi(dartHostTestHandler: 'TestWebChromeClientHostApi') abstract class WebChromeClientHostApi { void create(int instanceId, int webViewClientInstanceId); - void dispose(int instanceId); } @FlutterApi() abstract class WebChromeClientFlutterApi { + void dispose(int instanceId); + void onProgressChanged(int instanceId, int webViewInstanceId, int progress); } diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index 9f9998e28d58..2fe03c888d6b 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -22,10 +22,12 @@ dependencies: webview_flutter_platform_interface: ^1.2.0 dev_dependencies: + build_runner: ^2.1.4 flutter_driver: sdk: flutter flutter_test: sdk: flutter - pigeon: 1.0.7 + mockito: ^5.0.16 + pigeon: 1.0.9 pedantic: ^1.10.0 diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart index 70aa53ca2610..4173663b6248 100644 --- a/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart +++ b/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v1.0.7), do not edit directly. +// Autogenerated from Pigeon (v1.0.9), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, avoid_relative_lib_imports // @dart = 2.12 @@ -43,10 +43,12 @@ abstract class TestWebViewHostApi { void removeJavaScriptChannel(int instanceId, int javaScriptChannelInstanceId); void setDownloadListener(int instanceId, int listenerInstanceId); void setWebChromeClient(int instanceId, int clientInstanceId); - static void setup(TestWebViewHostApi? api) { + static void setup(TestWebViewHostApi? api, + {BinaryMessenger? binaryMessenger}) { { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.create', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -54,10 +56,10 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.create was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.create was null, expected non-null int.'); - final bool? arg_useHybridComposition = args[1] as bool?; + final bool? arg_useHybridComposition = (args[1] as bool?); assert(arg_useHybridComposition != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.create was null, expected non-null bool.'); api.create(arg_instanceId!, arg_useHybridComposition!); @@ -66,8 +68,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.dispose', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.dispose', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -75,7 +78,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.dispose was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.dispose was null, expected non-null int.'); api.dispose(arg_instanceId!); @@ -84,8 +87,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.loadUrl', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.loadUrl', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -93,14 +97,14 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.loadUrl was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.loadUrl was null, expected non-null int.'); - final String? arg_url = args[1] as String?; + final String? arg_url = (args[1] as String?); assert(arg_url != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.loadUrl was null, expected non-null String.'); final Map? arg_headers = - args[2] as Map?; + (args[2] as Map?)?.cast(); assert(arg_headers != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.loadUrl was null, expected non-null Map.'); api.loadUrl(arg_instanceId!, arg_url!, arg_headers!); @@ -109,8 +113,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.getUrl', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.getUrl', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -118,7 +123,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.getUrl was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.getUrl was null, expected non-null int.'); final String output = api.getUrl(arg_instanceId!); @@ -127,8 +132,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.canGoBack', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.canGoBack', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -136,7 +142,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.canGoBack was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.canGoBack was null, expected non-null int.'); final bool output = api.canGoBack(arg_instanceId!); @@ -145,8 +151,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.canGoForward', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.canGoForward', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -154,7 +161,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.canGoForward was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.canGoForward was null, expected non-null int.'); final bool output = api.canGoForward(arg_instanceId!); @@ -163,8 +170,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.goBack', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.goBack', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -172,7 +180,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.goBack was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.goBack was null, expected non-null int.'); api.goBack(arg_instanceId!); @@ -181,8 +189,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.goForward', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.goForward', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -190,7 +199,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.goForward was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.goForward was null, expected non-null int.'); api.goForward(arg_instanceId!); @@ -199,8 +208,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.reload', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.reload', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -208,7 +218,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.reload was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.reload was null, expected non-null int.'); api.reload(arg_instanceId!); @@ -217,8 +227,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.clearCache', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.clearCache', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -226,10 +237,10 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.clearCache was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.clearCache was null, expected non-null int.'); - final bool? arg_includeDiskFiles = args[1] as bool?; + final bool? arg_includeDiskFiles = (args[1] as bool?); assert(arg_includeDiskFiles != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.clearCache was null, expected non-null bool.'); api.clearCache(arg_instanceId!, arg_includeDiskFiles!); @@ -238,8 +249,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.evaluateJavascript', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.evaluateJavascript', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -247,10 +259,10 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.evaluateJavascript was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.evaluateJavascript was null, expected non-null int.'); - final String? arg_javascriptString = args[1] as String?; + final String? arg_javascriptString = (args[1] as String?); assert(arg_javascriptString != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.evaluateJavascript was null, expected non-null String.'); final String output = await api.evaluateJavascript( @@ -260,8 +272,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.getTitle', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.getTitle', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -269,7 +282,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.getTitle was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.getTitle was null, expected non-null int.'); final String output = api.getTitle(arg_instanceId!); @@ -278,8 +291,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.scrollTo', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.scrollTo', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -287,13 +301,13 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.scrollTo was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.scrollTo was null, expected non-null int.'); - final int? arg_x = args[1] as int?; + final int? arg_x = (args[1] as int?); assert(arg_x != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.scrollTo was null, expected non-null int.'); - final int? arg_y = args[2] as int?; + final int? arg_y = (args[2] as int?); assert(arg_y != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.scrollTo was null, expected non-null int.'); api.scrollTo(arg_instanceId!, arg_x!, arg_y!); @@ -302,8 +316,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.scrollBy', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.scrollBy', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -311,13 +326,13 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.scrollBy was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.scrollBy was null, expected non-null int.'); - final int? arg_x = args[1] as int?; + final int? arg_x = (args[1] as int?); assert(arg_x != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.scrollBy was null, expected non-null int.'); - final int? arg_y = args[2] as int?; + final int? arg_y = (args[2] as int?); assert(arg_y != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.scrollBy was null, expected non-null int.'); api.scrollBy(arg_instanceId!, arg_x!, arg_y!); @@ -326,8 +341,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.getScrollX', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.getScrollX', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -335,7 +351,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.getScrollX was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.getScrollX was null, expected non-null int.'); final int output = api.getScrollX(arg_instanceId!); @@ -344,8 +360,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.getScrollY', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.getScrollY', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -353,7 +370,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.getScrollY was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.getScrollY was null, expected non-null int.'); final int output = api.getScrollY(arg_instanceId!); @@ -362,9 +379,10 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( + final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.WebViewHostApi.setWebContentsDebuggingEnabled', - codec); + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -372,7 +390,7 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setWebContentsDebuggingEnabled was null.'); final List args = (message as List?)!; - final bool? arg_enabled = args[0] as bool?; + final bool? arg_enabled = (args[0] as bool?); assert(arg_enabled != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setWebContentsDebuggingEnabled was null, expected non-null bool.'); api.setWebContentsDebuggingEnabled(arg_enabled!); @@ -381,8 +399,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.setWebViewClient', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.setWebViewClient', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -390,10 +409,10 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setWebViewClient was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setWebViewClient was null, expected non-null int.'); - final int? arg_webViewClientInstanceId = args[1] as int?; + final int? arg_webViewClientInstanceId = (args[1] as int?); assert(arg_webViewClientInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setWebViewClient was null, expected non-null int.'); api.setWebViewClient(arg_instanceId!, arg_webViewClientInstanceId!); @@ -402,8 +421,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.addJavaScriptChannel', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.addJavaScriptChannel', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -411,10 +431,10 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.addJavaScriptChannel was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.addJavaScriptChannel was null, expected non-null int.'); - final int? arg_javaScriptChannelInstanceId = args[1] as int?; + final int? arg_javaScriptChannelInstanceId = (args[1] as int?); assert(arg_javaScriptChannelInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.addJavaScriptChannel was null, expected non-null int.'); api.addJavaScriptChannel( @@ -424,8 +444,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.removeJavaScriptChannel', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.removeJavaScriptChannel', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -433,10 +454,10 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.removeJavaScriptChannel was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.removeJavaScriptChannel was null, expected non-null int.'); - final int? arg_javaScriptChannelInstanceId = args[1] as int?; + final int? arg_javaScriptChannelInstanceId = (args[1] as int?); assert(arg_javaScriptChannelInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.removeJavaScriptChannel was null, expected non-null int.'); api.removeJavaScriptChannel( @@ -446,8 +467,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.setDownloadListener', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.setDownloadListener', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -455,10 +477,10 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setDownloadListener was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setDownloadListener was null, expected non-null int.'); - final int? arg_listenerInstanceId = args[1] as int?; + final int? arg_listenerInstanceId = (args[1] as int?); assert(arg_listenerInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setDownloadListener was null, expected non-null int.'); api.setDownloadListener(arg_instanceId!, arg_listenerInstanceId!); @@ -467,8 +489,9 @@ abstract class TestWebViewHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewHostApi.setWebChromeClient', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewHostApi.setWebChromeClient', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -476,10 +499,10 @@ abstract class TestWebViewHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setWebChromeClient was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setWebChromeClient was null, expected non-null int.'); - final int? arg_clientInstanceId = args[1] as int?; + final int? arg_clientInstanceId = (args[1] as int?); assert(arg_clientInstanceId != null, 'Argument for dev.flutter.pigeon.WebViewHostApi.setWebChromeClient was null, expected non-null int.'); api.setWebChromeClient(arg_instanceId!, arg_clientInstanceId!); @@ -510,10 +533,12 @@ abstract class TestWebSettingsHostApi { void setUseWideViewPort(int instanceId, bool use); void setDisplayZoomControls(int instanceId, bool enabled); void setBuiltInZoomControls(int instanceId, bool enabled); - static void setup(TestWebSettingsHostApi? api) { + static void setup(TestWebSettingsHostApi? api, + {BinaryMessenger? binaryMessenger}) { { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.create', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -521,10 +546,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.create was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.create was null, expected non-null int.'); - final int? arg_webViewInstanceId = args[1] as int?; + final int? arg_webViewInstanceId = (args[1] as int?); assert(arg_webViewInstanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.create was null, expected non-null int.'); api.create(arg_instanceId!, arg_webViewInstanceId!); @@ -533,8 +558,9 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.dispose', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.dispose', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -542,7 +568,7 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.dispose was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.dispose was null, expected non-null int.'); api.dispose(arg_instanceId!); @@ -551,8 +577,9 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.setDomStorageEnabled', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.setDomStorageEnabled', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -560,10 +587,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setDomStorageEnabled was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setDomStorageEnabled was null, expected non-null int.'); - final bool? arg_flag = args[1] as bool?; + final bool? arg_flag = (args[1] as bool?); assert(arg_flag != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setDomStorageEnabled was null, expected non-null bool.'); api.setDomStorageEnabled(arg_instanceId!, arg_flag!); @@ -572,9 +599,10 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( + final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptCanOpenWindowsAutomatically', - codec); + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -582,10 +610,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptCanOpenWindowsAutomatically was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptCanOpenWindowsAutomatically was null, expected non-null int.'); - final bool? arg_flag = args[1] as bool?; + final bool? arg_flag = (args[1] as bool?); assert(arg_flag != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptCanOpenWindowsAutomatically was null, expected non-null bool.'); api.setJavaScriptCanOpenWindowsAutomatically( @@ -595,9 +623,10 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( + final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.WebSettingsHostApi.setSupportMultipleWindows', - codec); + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -605,10 +634,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setSupportMultipleWindows was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setSupportMultipleWindows was null, expected non-null int.'); - final bool? arg_support = args[1] as bool?; + final bool? arg_support = (args[1] as bool?); assert(arg_support != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setSupportMultipleWindows was null, expected non-null bool.'); api.setSupportMultipleWindows(arg_instanceId!, arg_support!); @@ -617,8 +646,9 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptEnabled', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptEnabled', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -626,10 +656,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptEnabled was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptEnabled was null, expected non-null int.'); - final bool? arg_flag = args[1] as bool?; + final bool? arg_flag = (args[1] as bool?); assert(arg_flag != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptEnabled was null, expected non-null bool.'); api.setJavaScriptEnabled(arg_instanceId!, arg_flag!); @@ -638,8 +668,9 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.setUserAgentString', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.setUserAgentString', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -647,10 +678,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setUserAgentString was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setUserAgentString was null, expected non-null int.'); - final String? arg_userAgentString = args[1] as String?; + final String? arg_userAgentString = (args[1] as String?); assert(arg_userAgentString != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setUserAgentString was null, expected non-null String.'); api.setUserAgentString(arg_instanceId!, arg_userAgentString!); @@ -659,9 +690,10 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( + final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.WebSettingsHostApi.setMediaPlaybackRequiresUserGesture', - codec); + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -669,10 +701,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setMediaPlaybackRequiresUserGesture was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setMediaPlaybackRequiresUserGesture was null, expected non-null int.'); - final bool? arg_require = args[1] as bool?; + final bool? arg_require = (args[1] as bool?); assert(arg_require != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setMediaPlaybackRequiresUserGesture was null, expected non-null bool.'); api.setMediaPlaybackRequiresUserGesture( @@ -682,8 +714,9 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.setSupportZoom', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.setSupportZoom', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -691,10 +724,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setSupportZoom was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setSupportZoom was null, expected non-null int.'); - final bool? arg_support = args[1] as bool?; + final bool? arg_support = (args[1] as bool?); assert(arg_support != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setSupportZoom was null, expected non-null bool.'); api.setSupportZoom(arg_instanceId!, arg_support!); @@ -703,9 +736,10 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( + final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.WebSettingsHostApi.setLoadWithOverviewMode', - codec); + codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -713,10 +747,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setLoadWithOverviewMode was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setLoadWithOverviewMode was null, expected non-null int.'); - final bool? arg_overview = args[1] as bool?; + final bool? arg_overview = (args[1] as bool?); assert(arg_overview != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setLoadWithOverviewMode was null, expected non-null bool.'); api.setLoadWithOverviewMode(arg_instanceId!, arg_overview!); @@ -725,8 +759,9 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.setUseWideViewPort', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.setUseWideViewPort', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -734,10 +769,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setUseWideViewPort was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setUseWideViewPort was null, expected non-null int.'); - final bool? arg_use = args[1] as bool?; + final bool? arg_use = (args[1] as bool?); assert(arg_use != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setUseWideViewPort was null, expected non-null bool.'); api.setUseWideViewPort(arg_instanceId!, arg_use!); @@ -746,9 +781,9 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.setDisplayZoomControls', - codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.setDisplayZoomControls', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -756,10 +791,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setDisplayZoomControls was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setDisplayZoomControls was null, expected non-null int.'); - final bool? arg_enabled = args[1] as bool?; + final bool? arg_enabled = (args[1] as bool?); assert(arg_enabled != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setDisplayZoomControls was null, expected non-null bool.'); api.setDisplayZoomControls(arg_instanceId!, arg_enabled!); @@ -768,9 +803,9 @@ abstract class TestWebSettingsHostApi { } } { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebSettingsHostApi.setBuiltInZoomControls', - codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebSettingsHostApi.setBuiltInZoomControls', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -778,10 +813,10 @@ abstract class TestWebSettingsHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setBuiltInZoomControls was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setBuiltInZoomControls was null, expected non-null int.'); - final bool? arg_enabled = args[1] as bool?; + final bool? arg_enabled = (args[1] as bool?); assert(arg_enabled != null, 'Argument for dev.flutter.pigeon.WebSettingsHostApi.setBuiltInZoomControls was null, expected non-null bool.'); api.setBuiltInZoomControls(arg_instanceId!, arg_enabled!); @@ -801,11 +836,12 @@ abstract class TestJavaScriptChannelHostApi { _TestJavaScriptChannelHostApiCodec(); void create(int instanceId, String channelName); - void dispose(int instanceId); - static void setup(TestJavaScriptChannelHostApi? api) { + static void setup(TestJavaScriptChannelHostApi? api, + {BinaryMessenger? binaryMessenger}) { { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaScriptChannelHostApi.create', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.JavaScriptChannelHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -813,10 +849,10 @@ abstract class TestJavaScriptChannelHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.JavaScriptChannelHostApi.create was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.JavaScriptChannelHostApi.create was null, expected non-null int.'); - final String? arg_channelName = args[1] as String?; + final String? arg_channelName = (args[1] as String?); assert(arg_channelName != null, 'Argument for dev.flutter.pigeon.JavaScriptChannelHostApi.create was null, expected non-null String.'); api.create(arg_instanceId!, arg_channelName!); @@ -824,24 +860,6 @@ abstract class TestJavaScriptChannelHostApi { }); } } - { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.JavaScriptChannelHostApi.dispose', codec); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.JavaScriptChannelHostApi.dispose was null.'); - final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; - assert(arg_instanceId != null, - 'Argument for dev.flutter.pigeon.JavaScriptChannelHostApi.dispose was null, expected non-null int.'); - api.dispose(arg_instanceId!); - return {}; - }); - } - } } } @@ -853,11 +871,12 @@ abstract class TestWebViewClientHostApi { static const MessageCodec codec = _TestWebViewClientHostApiCodec(); void create(int instanceId, bool shouldOverrideUrlLoading); - void dispose(int instanceId); - static void setup(TestWebViewClientHostApi? api) { + static void setup(TestWebViewClientHostApi? api, + {BinaryMessenger? binaryMessenger}) { { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewClientHostApi.create', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebViewClientHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -865,10 +884,10 @@ abstract class TestWebViewClientHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebViewClientHostApi.create was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebViewClientHostApi.create was null, expected non-null int.'); - final bool? arg_shouldOverrideUrlLoading = args[1] as bool?; + final bool? arg_shouldOverrideUrlLoading = (args[1] as bool?); assert(arg_shouldOverrideUrlLoading != null, 'Argument for dev.flutter.pigeon.WebViewClientHostApi.create was null, expected non-null bool.'); api.create(arg_instanceId!, arg_shouldOverrideUrlLoading!); @@ -876,24 +895,6 @@ abstract class TestWebViewClientHostApi { }); } } - { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebViewClientHostApi.dispose', codec); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.WebViewClientHostApi.dispose was null.'); - final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; - assert(arg_instanceId != null, - 'Argument for dev.flutter.pigeon.WebViewClientHostApi.dispose was null, expected non-null int.'); - api.dispose(arg_instanceId!); - return {}; - }); - } - } } } @@ -906,11 +907,12 @@ abstract class TestDownloadListenerHostApi { _TestDownloadListenerHostApiCodec(); void create(int instanceId); - void dispose(int instanceId); - static void setup(TestDownloadListenerHostApi? api) { + static void setup(TestDownloadListenerHostApi? api, + {BinaryMessenger? binaryMessenger}) { { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.DownloadListenerHostApi.create', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.DownloadListenerHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -918,7 +920,7 @@ abstract class TestDownloadListenerHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.DownloadListenerHostApi.create was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.DownloadListenerHostApi.create was null, expected non-null int.'); api.create(arg_instanceId!); @@ -926,24 +928,6 @@ abstract class TestDownloadListenerHostApi { }); } } - { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.DownloadListenerHostApi.dispose', codec); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.DownloadListenerHostApi.dispose was null.'); - final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; - assert(arg_instanceId != null, - 'Argument for dev.flutter.pigeon.DownloadListenerHostApi.dispose was null, expected non-null int.'); - api.dispose(arg_instanceId!); - return {}; - }); - } - } } } @@ -955,11 +939,12 @@ abstract class TestWebChromeClientHostApi { static const MessageCodec codec = _TestWebChromeClientHostApiCodec(); void create(int instanceId, int webViewClientInstanceId); - void dispose(int instanceId); - static void setup(TestWebChromeClientHostApi? api) { + static void setup(TestWebChromeClientHostApi? api, + {BinaryMessenger? binaryMessenger}) { { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebChromeClientHostApi.create', codec); + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.WebChromeClientHostApi.create', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { @@ -967,10 +952,10 @@ abstract class TestWebChromeClientHostApi { assert(message != null, 'Argument for dev.flutter.pigeon.WebChromeClientHostApi.create was null.'); final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; + final int? arg_instanceId = (args[0] as int?); assert(arg_instanceId != null, 'Argument for dev.flutter.pigeon.WebChromeClientHostApi.create was null, expected non-null int.'); - final int? arg_webViewClientInstanceId = args[1] as int?; + final int? arg_webViewClientInstanceId = (args[1] as int?); assert(arg_webViewClientInstanceId != null, 'Argument for dev.flutter.pigeon.WebChromeClientHostApi.create was null, expected non-null int.'); api.create(arg_instanceId!, arg_webViewClientInstanceId!); @@ -978,23 +963,5 @@ abstract class TestWebChromeClientHostApi { }); } } - { - const BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.WebChromeClientHostApi.dispose', codec); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.WebChromeClientHostApi.dispose was null.'); - final List args = (message as List?)!; - final int? arg_instanceId = args[0] as int?; - assert(arg_instanceId != null, - 'Argument for dev.flutter.pigeon.WebChromeClientHostApi.dispose was null, expected non-null int.'); - api.dispose(arg_instanceId!); - return {}; - }); - } - } } } diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart index 462670abdb83..24cd35c9b3cf 100644 --- a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart +++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart @@ -3,371 +3,592 @@ // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; import 'package:webview_flutter_android/src/android_webview.dart'; +import 'package:webview_flutter_android/src/android_webview.pigeon.dart'; import 'package:webview_flutter_android/src/android_webview_api_impls.dart'; import 'package:webview_flutter_android/src/instance_manager.dart'; import 'android_webview.pigeon.dart'; - +import 'android_webview_test.mocks.dart'; + +@GenerateMocks([ + DownloadListener, + JavaScriptChannel, + TestDownloadListenerHostApi, + TestJavaScriptChannelHostApi, + TestWebChromeClientHostApi, + TestWebSettingsHostApi, + TestWebViewClientHostApi, + TestWebViewHostApi, + WebChromeClient, + WebView, + WebViewClient, +]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('Android WebView', () { group('$WebView', () { - setUpAll(() { - TestWebViewHostApi.setup(TestWebViewHostApiImpl()); - }); + late MockTestWebViewHostApi mockPlatformHostApi; + + late InstanceManager instanceManager; + + late WebView webView; + late int webViewInstanceId; setUp(() { - WebView.api = WebViewHostApiImpl(instanceManager: InstanceManager()); + mockPlatformHostApi = MockTestWebViewHostApi(); + TestWebViewHostApi.setup(mockPlatformHostApi); + + instanceManager = InstanceManager(); + WebView.api = WebViewHostApiImpl(instanceManager: instanceManager); + + webView = WebView(); + webViewInstanceId = instanceManager.getInstanceId(webView)!; }); test('create', () { - final WebView webView = WebView(); - expect(WebView.api.instanceManager.getInstanceId(webView), isNotNull); + verify(mockPlatformHostApi.create(webViewInstanceId, false)); }); - }); - group('$WebSettings', () { - setUpAll(() { - TestWebViewHostApi.setup(TestWebViewHostApiImpl()); - TestWebSettingsHostApi.setup(TestWebSettingsHostApiImpl()); + test('setWebContentsDebuggingEnabled', () { + WebView.setWebContentsDebuggingEnabled(true); + verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(true)); }); - setUp(() { - final InstanceManager instanceManager = InstanceManager(); - WebView.api = WebViewHostApiImpl(instanceManager: instanceManager); - WebSettings.api = WebSettingsHostApiImpl( - instanceManager: instanceManager, - ); + test('loadUrl', () { + webView.loadUrl('hello', {'a': 'header'}); + verify(mockPlatformHostApi.loadUrl( + webViewInstanceId, + 'hello', + {'a': 'header'}, + )); }); - test('create', () { - final WebView webView = WebView(); - final WebSettings webSettings = WebSettings(webView); - expect( - WebSettings.api.instanceManager.getInstanceId(webSettings), - isNotNull, - ); + test('canGoBack', () { + when(mockPlatformHostApi.canGoBack(webViewInstanceId)) + .thenReturn(false); + expect(webView.canGoBack(), completion(false)); }); - }); - group('$JavaScriptChannel', () { - setUpAll(() { - TestWebViewHostApi.setup(TestWebViewHostApiImpl()); - TestJavaScriptChannelHostApi.setup(TestJavaScriptChannelHostApiImpl()); + test('canGoForward', () { + when(mockPlatformHostApi.canGoForward(webViewInstanceId)) + .thenReturn(true); + expect(webView.canGoForward(), completion(true)); }); - setUp(() { - final InstanceManager instanceManager = InstanceManager(); - WebView.api = WebViewHostApiImpl(instanceManager: instanceManager); - JavaScriptChannel.api = JavaScriptChannelHostApiImpl( - instanceManager: instanceManager, - ); + test('goBack', () { + webView.goBack(); + verify(mockPlatformHostApi.goBack(webViewInstanceId)); }); - test('create', () { - final WebView webView = WebView(); - final JavaScriptChannel channel = TestJavaScriptChannel('myChannel'); + test('goForward', () { + webView.goForward(); + verify(mockPlatformHostApi.goForward(webViewInstanceId)); + }); - webView.addJavaScriptChannel(channel); - expect( - JavaScriptChannel.api.instanceManager.getInstanceId(channel), - isNotNull, - ); + test('reload', () { + webView.reload(); + verify(mockPlatformHostApi.reload(webViewInstanceId)); + }); + + test('clearCache', () { + webView.clearCache(false); + verify(mockPlatformHostApi.clearCache(webViewInstanceId, false)); + }); - webView.removeJavaScriptChannel(channel); + test('evaluateJavascript', () { + when( + mockPlatformHostApi.evaluateJavascript( + webViewInstanceId, 'runJavaScript'), + ).thenAnswer((_) => Future.value('returnValue')); expect( - JavaScriptChannel.api.instanceManager.getInstanceId(channel), - isNull, + webView.evaluateJavascript('runJavaScript'), + completion('returnValue'), ); }); - }); - group('$WebViewClient', () { - setUpAll(() { - TestWebViewHostApi.setup(TestWebViewHostApiImpl()); - TestWebViewClientHostApi.setup(TestWebViewClientHostApiImpl()); + test('getTitle', () { + when(mockPlatformHostApi.getTitle(webViewInstanceId)) + .thenReturn('aTitle'); + expect(webView.getTitle(), completion('aTitle')); }); - setUp(() { - final InstanceManager instanceManager = InstanceManager(); - WebView.api = WebViewHostApiImpl(instanceManager: instanceManager); + test('scrollTo', () { + webView.scrollTo(12, 13); + verify(mockPlatformHostApi.scrollTo(webViewInstanceId, 12, 13)); + }); + + test('scrollBy', () { + webView.scrollBy(12, 14); + verify(mockPlatformHostApi.scrollBy(webViewInstanceId, 12, 14)); + }); + + test('getScrollX', () { + when(mockPlatformHostApi.getScrollX(webViewInstanceId)).thenReturn(67); + expect(webView.getScrollX(), completion(67)); + }); + + test('getScrollY', () { + when(mockPlatformHostApi.getScrollY(webViewInstanceId)).thenReturn(56); + expect(webView.getScrollY(), completion(56)); + }); + + test('setWebViewClient', () { + TestWebViewClientHostApi.setup(MockTestWebViewClientHostApi()); WebViewClient.api = WebViewClientHostApiImpl( instanceManager: instanceManager, ); - }); - test('create', () { - final WebView webView = WebView(); - final WebViewClient webViewClient1 = TestWebViewClient(); - final WebViewClient webViewClient2 = TestWebViewClient(); + final WebViewClient mockWebViewClient = MockWebViewClient(); + when(mockWebViewClient.shouldOverrideUrlLoading).thenReturn(false); + webView.setWebViewClient(mockWebViewClient); - webView.setWebViewClient(webViewClient1); - expect( - WebViewClient.api.instanceManager.getInstanceId(webViewClient1), - isNotNull, - ); + final int webViewClientInstanceId = + instanceManager.getInstanceId(mockWebViewClient)!; + verify(mockPlatformHostApi.setWebViewClient( + webViewInstanceId, + webViewClientInstanceId, + )); + }); - webView.setWebViewClient(webViewClient2); - expect( - WebViewClient.api.instanceManager.getInstanceId(webViewClient1), - isNull, + test('addJavaScriptChannel', () { + TestJavaScriptChannelHostApi.setup(MockTestJavaScriptChannelHostApi()); + JavaScriptChannel.api = JavaScriptChannelHostApiImpl( + instanceManager: instanceManager, ); - }); - }); - group('$DownloadListener', () { - setUpAll(() { - TestWebViewHostApi.setup(TestWebViewHostApiImpl()); - TestDownloadListenerHostApi.setup(TestDownloadListenerHostApiImpl()); + final JavaScriptChannel mockJavaScriptChannel = MockJavaScriptChannel(); + when(mockJavaScriptChannel.channelName).thenReturn('aChannel'); + + webView.addJavaScriptChannel(mockJavaScriptChannel); + + final int javaScriptChannelInstanceId = + instanceManager.getInstanceId(mockJavaScriptChannel)!; + verify(mockPlatformHostApi.addJavaScriptChannel( + webViewInstanceId, + javaScriptChannelInstanceId, + )); }); - setUp(() { - final InstanceManager instanceManager = InstanceManager(); - WebView.api = WebViewHostApiImpl(instanceManager: instanceManager); - DownloadListener.api = DownloadListenerHostApiImpl( + test('removeJavaScriptChannel', () { + TestJavaScriptChannelHostApi.setup(MockTestJavaScriptChannelHostApi()); + JavaScriptChannel.api = JavaScriptChannelHostApiImpl( instanceManager: instanceManager, ); - }); - test('create', () { - final WebView webView = WebView(); - final DownloadListener downloadListener1 = TestDownloadListener(); - final DownloadListener downloadListener2 = TestDownloadListener(); + final JavaScriptChannel mockJavaScriptChannel = MockJavaScriptChannel(); + when(mockJavaScriptChannel.channelName).thenReturn('aChannel'); - webView.setDownloadListener(downloadListener1); expect( - DownloadListener.api.instanceManager.getInstanceId(downloadListener1), - isNotNull, + webView.removeJavaScriptChannel(mockJavaScriptChannel), + completes, ); - webView.setDownloadListener(downloadListener2); - expect( - DownloadListener.api.instanceManager.getInstanceId(downloadListener1), - isNull, - ); + webView.addJavaScriptChannel(mockJavaScriptChannel); + webView.removeJavaScriptChannel(mockJavaScriptChannel); + + final int javaScriptChannelInstanceId = + instanceManager.getInstanceId(mockJavaScriptChannel)!; + verify(mockPlatformHostApi.removeJavaScriptChannel( + webViewInstanceId, + javaScriptChannelInstanceId, + )); }); - }); - group('$WebChromeClient', () { - setUpAll(() { - TestWebViewHostApi.setup(TestWebViewHostApiImpl()); - TestWebViewClientHostApi.setup(TestWebViewClientHostApiImpl()); - TestWebChromeClientHostApi.setup(TestWebChromeClientHostApiImpl()); + test('setDownloadListener', () { + TestDownloadListenerHostApi.setup(MockTestDownloadListenerHostApi()); + DownloadListener.api = DownloadListenerHostApiImpl( + instanceManager: instanceManager, + ); + + final DownloadListener mockDownloadListener = MockDownloadListener(); + webView.setDownloadListener(mockDownloadListener); + + final int downloadListenerInstanceId = + instanceManager.getInstanceId(mockDownloadListener)!; + verify(mockPlatformHostApi.setDownloadListener( + webViewInstanceId, + downloadListenerInstanceId, + )); }); - setUp(() { - final InstanceManager instanceManager = InstanceManager(); - WebView.api = WebViewHostApiImpl(instanceManager: instanceManager); + test('setWebChromeClient', () { + // Setting a WebChromeClient requires setting a WebViewClient first. + TestWebViewClientHostApi.setup(MockTestWebViewClientHostApi()); WebViewClient.api = WebViewClientHostApiImpl( instanceManager: instanceManager, ); + final WebViewClient mockWebViewClient = MockWebViewClient(); + when(mockWebViewClient.shouldOverrideUrlLoading).thenReturn(false); + webView.setWebViewClient(mockWebViewClient); + + TestWebChromeClientHostApi.setup(MockTestWebChromeClientHostApi()); WebChromeClient.api = WebChromeClientHostApiImpl( instanceManager: instanceManager, ); + + final WebChromeClient mockWebChromeClient = MockWebChromeClient(); + webView.setWebChromeClient(mockWebChromeClient); + + final int webChromeClientInstanceId = + instanceManager.getInstanceId(mockWebChromeClient)!; + verify(mockPlatformHostApi.setWebChromeClient( + webViewInstanceId, + webChromeClientInstanceId, + )); }); - test('create', () { - final WebView webView = WebView(); - webView.setWebViewClient(TestWebViewClient()); + test('release', () { + final MockTestWebSettingsHostApi mockWebSettingsPlatformHostApi = + MockTestWebSettingsHostApi(); + TestWebSettingsHostApi.setup(mockWebSettingsPlatformHostApi); - final WebChromeClient webChromeClient1 = TestWebChromeClient(); - final WebChromeClient webChromeClient2 = TestWebChromeClient(); + WebSettings.api = + WebSettingsHostApiImpl(instanceManager: instanceManager); + final int webSettingsInstanceId = + instanceManager.getInstanceId(webView.settings)!; - webView.setWebChromeClient(webChromeClient1); - expect( - WebChromeClient.api.instanceManager.getInstanceId(webChromeClient1), - isNotNull, - ); + webView.release(); + verify(mockWebSettingsPlatformHostApi.dispose(webSettingsInstanceId)); + verify(mockPlatformHostApi.dispose(webViewInstanceId)); + }); + }); - webView.setWebChromeClient(webChromeClient2); - expect( - WebChromeClient.api.instanceManager.getInstanceId(webChromeClient1), - isNull, + group('$WebSettings', () { + late MockTestWebSettingsHostApi mockPlatformHostApi; + + late InstanceManager instanceManager; + + late WebSettings webSettings; + late int webSettingsInstanceId; + + setUp(() { + instanceManager = InstanceManager(); + + TestWebViewHostApi.setup(MockTestWebViewHostApi()); + WebView.api = WebViewHostApiImpl(instanceManager: instanceManager); + + mockPlatformHostApi = MockTestWebSettingsHostApi(); + TestWebSettingsHostApi.setup(mockPlatformHostApi); + + WebSettings.api = WebSettingsHostApiImpl( + instanceManager: instanceManager, ); + + webSettings = WebSettings(WebView()); + webSettingsInstanceId = instanceManager.getInstanceId(webSettings)!; }); - }); - }); -} -class TestJavaScriptChannel extends JavaScriptChannel { - TestJavaScriptChannel(String channelName) : super(channelName); + test('create', () { + verify(mockPlatformHostApi.create(webSettingsInstanceId, any)); + }); - @override - void postMessage(String message) {} -} + test('setDomStorageEnabled', () { + webSettings.setDomStorageEnabled(false); + verify(mockPlatformHostApi.setDomStorageEnabled( + webSettingsInstanceId, + false, + )); + }); -class TestWebViewClient extends WebViewClient {} - -class TestDownloadListener extends DownloadListener { - @override - void onDownloadStart( - String url, - String userAgent, - String contentDisposition, - String mimetype, - int contentLength, - ) {} -} + test('setJavaScriptCanOpenWindowsAutomatically', () { + webSettings.setJavaScriptCanOpenWindowsAutomatically(true); + verify(mockPlatformHostApi.setJavaScriptCanOpenWindowsAutomatically( + webSettingsInstanceId, + true, + )); + }); -class TestWebChromeClient extends WebChromeClient { - @override - void onProgressChanged(WebView webView, int progress) {} -} + test('setSupportMultipleWindows', () { + webSettings.setSupportMultipleWindows(false); + verify(mockPlatformHostApi.setSupportMultipleWindows( + webSettingsInstanceId, + false, + )); + }); + + test('setJavaScriptEnabled', () { + webSettings.setJavaScriptEnabled(true); + verify(mockPlatformHostApi.setJavaScriptEnabled( + webSettingsInstanceId, + true, + )); + }); -class TestWebViewHostApiImpl extends TestWebViewHostApi { - @override - void addJavaScriptChannel(int instanceId, int javaScriptChannelInstanceId) {} + test('setUserAgentString', () { + webSettings.setUserAgentString('hola'); + verify(mockPlatformHostApi.setUserAgentString( + webSettingsInstanceId, + 'hola', + )); + }); - @override - bool canGoBack(int instanceId) { - throw UnimplementedError(); - } + test('setMediaPlaybackRequiresUserGesture', () { + webSettings.setMediaPlaybackRequiresUserGesture(false); + verify(mockPlatformHostApi.setMediaPlaybackRequiresUserGesture( + webSettingsInstanceId, + false, + )); + }); - @override - bool canGoForward(int instanceId) { - throw UnimplementedError(); - } + test('setSupportZoom', () { + webSettings.setSupportZoom(true); + verify(mockPlatformHostApi.setSupportZoom( + webSettingsInstanceId, + true, + )); + }); + + test('setLoadWithOverviewMode', () { + webSettings.setLoadWithOverviewMode(false); + verify(mockPlatformHostApi.setLoadWithOverviewMode( + webSettingsInstanceId, + false, + )); + }); - @override - void clearCache(int instanceId, bool includeDiskFiles) {} + test('setUseWideViewPort', () { + webSettings.setUseWideViewPort(true); + verify(mockPlatformHostApi.setUseWideViewPort( + webSettingsInstanceId, + true, + )); + }); - @override - void create(int instanceId, bool useHybridComposition) {} + test('setDisplayZoomControls', () { + webSettings.setDisplayZoomControls(false); + verify(mockPlatformHostApi.setDisplayZoomControls( + webSettingsInstanceId, + false, + )); + }); - @override - void dispose(int instanceId) {} + test('setBuiltInZoomControls', () { + webSettings.setBuiltInZoomControls(true); + verify(mockPlatformHostApi.setBuiltInZoomControls( + webSettingsInstanceId, + true, + )); + }); + }); - @override - Future evaluateJavascript(int instanceId, String javascriptString) { - throw UnimplementedError(); - } + group('$JavaScriptChannel', () { + late JavaScriptChannelFlutterApiImpl flutterApi; - @override - int getScrollX(int instanceId) { - throw UnimplementedError(); - } + late InstanceManager instanceManager; - @override - int getScrollY(int instanceId) { - throw UnimplementedError(); - } + late MockJavaScriptChannel mockJavaScriptChannel; + late int mockJavaScriptChannelInstanceId; - @override - String getTitle(int instanceId) { - throw UnimplementedError(); - } + setUp(() { + instanceManager = InstanceManager(); + flutterApi = JavaScriptChannelFlutterApiImpl( + instanceManager: instanceManager, + ); - @override - String getUrl(int instanceId) { - throw UnimplementedError(); - } + mockJavaScriptChannel = MockJavaScriptChannel(); + mockJavaScriptChannelInstanceId = + instanceManager.tryAddInstance(mockJavaScriptChannel)!; + }); - @override - void goBack(int instanceId) {} + test('postMessage', () { + flutterApi.postMessage( + mockJavaScriptChannelInstanceId, + 'Hello, World!', + ); + verify(mockJavaScriptChannel.postMessage('Hello, World!')); + }); + }); - @override - void goForward(int instanceId) {} + group('$WebViewClient', () { + late WebViewClientFlutterApiImpl flutterApi; - @override - void loadUrl(int instanceId, String url, Map headers) {} + late InstanceManager instanceManager; - @override - void reload(int instanceId) {} + late MockWebViewClient mockWebViewClient; + late int mockWebViewClientInstanceId; - @override - void removeJavaScriptChannel( - int instanceId, int javaScriptChannelInstanceId) {} + late MockWebView mockWebView; + late int mockWebViewInstanceId; - @override - void scrollBy(int instanceId, int x, int y) {} + setUp(() { + instanceManager = InstanceManager(); + flutterApi = WebViewClientFlutterApiImpl( + instanceManager: instanceManager, + ); - @override - void scrollTo(int instanceId, int x, int y) {} + mockWebViewClient = MockWebViewClient(); + mockWebViewClientInstanceId = + instanceManager.tryAddInstance(mockWebViewClient)!; - @override - void setDownloadListener(int instanceId, int listenerInstanceId) {} + mockWebView = MockWebView(); + mockWebViewInstanceId = instanceManager.tryAddInstance(mockWebView)!; + }); - @override - void setWebContentsDebuggingEnabled(bool enabled) {} + test('onPageStarted', () { + flutterApi.onPageStarted( + mockWebViewClientInstanceId, + mockWebViewInstanceId, + 'https://www.google.com', + ); + verify(mockWebViewClient.onPageStarted( + mockWebView, + 'https://www.google.com', + )); + }); - @override - void setWebViewClient(int instanceId, int webViewClientInstanceId) {} + test('onPageFinished', () { + flutterApi.onPageFinished( + mockWebViewClientInstanceId, + mockWebViewInstanceId, + 'https://www.google.com', + ); + verify(mockWebViewClient.onPageFinished( + mockWebView, + 'https://www.google.com', + )); + }); - @override - void setWebChromeClient(int instanceId, int clientInstanceId) {} -} + test('onReceivedRequestError', () { + flutterApi.onReceivedRequestError( + mockWebViewClientInstanceId, + mockWebViewInstanceId, + WebResourceRequestData() + ..url = 'https://www.google.com' + ..isForMainFrame = true + ..hasGesture = true + ..method = 'POST', + WebResourceErrorData() + ..errorCode = 34 + ..description = 'error description', + ); -class TestWebSettingsHostApiImpl extends TestWebSettingsHostApi { - @override - void create(int instanceId, int webViewInstanceId) {} + verify(mockWebViewClient.onReceivedRequestError( + mockWebView, + argThat(isNotNull), + argThat(isNotNull), + )); + }); - @override - void dispose(int instanceId) {} + test('onReceivedError', () { + flutterApi.onReceivedError( + mockWebViewClientInstanceId, + mockWebViewInstanceId, + 14, + 'desc', + 'https://www.google.com', + ); - @override - void setBuiltInZoomControls(int instanceId, bool enabled) {} + verify(mockWebViewClient.onReceivedError( + mockWebView, + 14, + 'desc', + 'https://www.google.com', + )); + }); - @override - void setDisplayZoomControls(int instanceId, bool enabled) {} + test('requestLoading', () { + flutterApi.requestLoading( + mockWebViewClientInstanceId, + mockWebViewInstanceId, + WebResourceRequestData() + ..url = 'https://www.google.com' + ..isForMainFrame = true + ..hasGesture = true + ..method = 'POST', + ); - @override - void setDomStorageEnabled(int instanceId, bool flag) {} + verify(mockWebViewClient.requestLoading( + mockWebView, + argThat(isNotNull), + )); + }); - @override - void setJavaScriptCanOpenWindowsAutomatically(int instanceId, bool flag) {} + test('urlLoading', () { + flutterApi.urlLoading(mockWebViewClientInstanceId, + mockWebViewInstanceId, 'https://www.google.com'); - @override - void setJavaScriptEnabled(int instanceId, bool flag) {} + verify(mockWebViewClient.urlLoading( + mockWebView, + 'https://www.google.com', + )); + }); + }); - @override - void setLoadWithOverviewMode(int instanceId, bool overview) {} + group('$DownloadListener', () { + late DownloadListenerFlutterApiImpl flutterApi; - @override - void setMediaPlaybackRequiresUserGesture(int instanceId, bool require) {} + late InstanceManager instanceManager; - @override - void setSupportMultipleWindows(int instanceId, bool support) {} + late MockDownloadListener mockDownloadListener; + late int mockDownloadListenerInstanceId; - @override - void setSupportZoom(int instanceId, bool support) {} + setUp(() { + instanceManager = InstanceManager(); + flutterApi = DownloadListenerFlutterApiImpl( + instanceManager: instanceManager, + ); - @override - void setUseWideViewPort(int instanceId, bool use) {} + mockDownloadListener = MockDownloadListener(); + mockDownloadListenerInstanceId = + instanceManager.tryAddInstance(mockDownloadListener)!; + }); - @override - void setUserAgentString(int instanceId, String userAgentString) {} -} + test('onPageStarted', () { + flutterApi.onDownloadStart( + mockDownloadListenerInstanceId, + 'url', + 'userAgent', + 'contentDescription', + 'mimetype', + 45, + ); + verify(mockDownloadListener.onDownloadStart( + 'url', + 'userAgent', + 'contentDescription', + 'mimetype', + 45, + )); + }); + }); -class TestJavaScriptChannelHostApiImpl extends TestJavaScriptChannelHostApi { - @override - void create(int instanceId, String channelName) {} + group('$WebChromeClient', () { + late WebChromeClientFlutterApiImpl flutterApi; - @override - void dispose(int instanceId) {} -} + late InstanceManager instanceManager; -class TestWebViewClientHostApiImpl extends TestWebViewClientHostApi { - @override - void create(int instanceId, bool shouldOverrideUrlLoading) {} + late MockWebChromeClient mockWebChromeClient; + late int mockWebChromeClientInstanceId; - @override - void dispose(int instanceId) {} -} + late MockWebView mockWebView; + late int mockWebViewInstanceId; -class TestDownloadListenerHostApiImpl extends TestDownloadListenerHostApi { - @override - void create(int instanceId) {} + setUp(() { + instanceManager = InstanceManager(); + flutterApi = WebChromeClientFlutterApiImpl( + instanceManager: instanceManager, + ); - @override - void dispose(int instanceId) {} -} + mockWebChromeClient = MockWebChromeClient(); + mockWebChromeClientInstanceId = + instanceManager.tryAddInstance(mockWebChromeClient)!; -class TestWebChromeClientHostApiImpl extends TestWebChromeClientHostApi { - @override - void create(int instanceId, int webViewClientInstanceId) {} + mockWebView = MockWebView(); + mockWebViewInstanceId = instanceManager.tryAddInstance(mockWebView)!; + }); - @override - void dispose(int instanceId) {} + test('onPageStarted', () { + flutterApi.onProgressChanged( + mockWebChromeClientInstanceId, + mockWebViewInstanceId, + 76, + ); + verify(mockWebChromeClient.onProgressChanged(mockWebView, 76)); + }); + }); + }); } diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart new file mode 100644 index 000000000000..4378ed7abf77 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart @@ -0,0 +1,505 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Mocks generated by Mockito 5.0.16 from annotations +// in webview_flutter_android/test/android_webview_test.dart. +// Do not manually edit this file. + +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:webview_flutter_android/src/android_webview.dart' as _i2; + +import 'android_webview.pigeon.dart' as _i3; + +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types + +class _FakeWebSettings_0 extends _i1.Fake implements _i2.WebSettings {} + +/// A class which mocks [DownloadListener]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockDownloadListener extends _i1.Mock implements _i2.DownloadListener { + MockDownloadListener() { + _i1.throwOnMissingStub(this); + } + + @override + void onDownloadStart(String? url, String? userAgent, + String? contentDisposition, String? mimetype, int? contentLength) => + super.noSuchMethod( + Invocation.method(#onDownloadStart, + [url, userAgent, contentDisposition, mimetype, contentLength]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [JavaScriptChannel]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockJavaScriptChannel extends _i1.Mock implements _i2.JavaScriptChannel { + MockJavaScriptChannel() { + _i1.throwOnMissingStub(this); + } + + @override + String get channelName => + (super.noSuchMethod(Invocation.getter(#channelName), returnValue: '') + as String); + @override + void postMessage(String? message) => + super.noSuchMethod(Invocation.method(#postMessage, [message]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [TestDownloadListenerHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestDownloadListenerHostApi extends _i1.Mock + implements _i3.TestDownloadListenerHostApi { + MockTestDownloadListenerHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create(int? instanceId) => + super.noSuchMethod(Invocation.method(#create, [instanceId]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [TestJavaScriptChannelHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestJavaScriptChannelHostApi extends _i1.Mock + implements _i3.TestJavaScriptChannelHostApi { + MockTestJavaScriptChannelHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create(int? instanceId, String? channelName) => + super.noSuchMethod(Invocation.method(#create, [instanceId, channelName]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [TestWebChromeClientHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestWebChromeClientHostApi extends _i1.Mock + implements _i3.TestWebChromeClientHostApi { + MockTestWebChromeClientHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create(int? instanceId, int? webViewClientInstanceId) => + super.noSuchMethod( + Invocation.method(#create, [instanceId, webViewClientInstanceId]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [TestWebSettingsHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestWebSettingsHostApi extends _i1.Mock + implements _i3.TestWebSettingsHostApi { + MockTestWebSettingsHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create(int? instanceId, int? webViewInstanceId) => super.noSuchMethod( + Invocation.method(#create, [instanceId, webViewInstanceId]), + returnValueForMissingStub: null); + @override + void dispose(int? instanceId) => + super.noSuchMethod(Invocation.method(#dispose, [instanceId]), + returnValueForMissingStub: null); + @override + void setDomStorageEnabled(int? instanceId, bool? flag) => super.noSuchMethod( + Invocation.method(#setDomStorageEnabled, [instanceId, flag]), + returnValueForMissingStub: null); + @override + void setJavaScriptCanOpenWindowsAutomatically(int? instanceId, bool? flag) => + super.noSuchMethod( + Invocation.method( + #setJavaScriptCanOpenWindowsAutomatically, [instanceId, flag]), + returnValueForMissingStub: null); + @override + void setSupportMultipleWindows(int? instanceId, bool? support) => + super.noSuchMethod( + Invocation.method(#setSupportMultipleWindows, [instanceId, support]), + returnValueForMissingStub: null); + @override + void setJavaScriptEnabled(int? instanceId, bool? flag) => super.noSuchMethod( + Invocation.method(#setJavaScriptEnabled, [instanceId, flag]), + returnValueForMissingStub: null); + @override + void setUserAgentString(int? instanceId, String? userAgentString) => + super.noSuchMethod( + Invocation.method(#setUserAgentString, [instanceId, userAgentString]), + returnValueForMissingStub: null); + @override + void setMediaPlaybackRequiresUserGesture(int? instanceId, bool? require) => + super.noSuchMethod( + Invocation.method( + #setMediaPlaybackRequiresUserGesture, [instanceId, require]), + returnValueForMissingStub: null); + @override + void setSupportZoom(int? instanceId, bool? support) => super.noSuchMethod( + Invocation.method(#setSupportZoom, [instanceId, support]), + returnValueForMissingStub: null); + @override + void setLoadWithOverviewMode(int? instanceId, bool? overview) => + super.noSuchMethod( + Invocation.method(#setLoadWithOverviewMode, [instanceId, overview]), + returnValueForMissingStub: null); + @override + void setUseWideViewPort(int? instanceId, bool? use) => super.noSuchMethod( + Invocation.method(#setUseWideViewPort, [instanceId, use]), + returnValueForMissingStub: null); + @override + void setDisplayZoomControls(int? instanceId, bool? enabled) => + super.noSuchMethod( + Invocation.method(#setDisplayZoomControls, [instanceId, enabled]), + returnValueForMissingStub: null); + @override + void setBuiltInZoomControls(int? instanceId, bool? enabled) => + super.noSuchMethod( + Invocation.method(#setBuiltInZoomControls, [instanceId, enabled]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [TestWebViewClientHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestWebViewClientHostApi extends _i1.Mock + implements _i3.TestWebViewClientHostApi { + MockTestWebViewClientHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create(int? instanceId, bool? shouldOverrideUrlLoading) => + super.noSuchMethod( + Invocation.method(#create, [instanceId, shouldOverrideUrlLoading]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [TestWebViewHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestWebViewHostApi extends _i1.Mock + implements _i3.TestWebViewHostApi { + MockTestWebViewHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create(int? instanceId, bool? useHybridComposition) => + super.noSuchMethod( + Invocation.method(#create, [instanceId, useHybridComposition]), + returnValueForMissingStub: null); + @override + void dispose(int? instanceId) => + super.noSuchMethod(Invocation.method(#dispose, [instanceId]), + returnValueForMissingStub: null); + @override + void loadUrl(int? instanceId, String? url, Map? headers) => + super.noSuchMethod( + Invocation.method(#loadUrl, [instanceId, url, headers]), + returnValueForMissingStub: null); + @override + String getUrl(int? instanceId) => + (super.noSuchMethod(Invocation.method(#getUrl, [instanceId]), + returnValue: '') as String); + @override + bool canGoBack(int? instanceId) => + (super.noSuchMethod(Invocation.method(#canGoBack, [instanceId]), + returnValue: false) as bool); + @override + bool canGoForward(int? instanceId) => + (super.noSuchMethod(Invocation.method(#canGoForward, [instanceId]), + returnValue: false) as bool); + @override + void goBack(int? instanceId) => + super.noSuchMethod(Invocation.method(#goBack, [instanceId]), + returnValueForMissingStub: null); + @override + void goForward(int? instanceId) => + super.noSuchMethod(Invocation.method(#goForward, [instanceId]), + returnValueForMissingStub: null); + @override + void reload(int? instanceId) => + super.noSuchMethod(Invocation.method(#reload, [instanceId]), + returnValueForMissingStub: null); + @override + void clearCache(int? instanceId, bool? includeDiskFiles) => + super.noSuchMethod( + Invocation.method(#clearCache, [instanceId, includeDiskFiles]), + returnValueForMissingStub: null); + @override + _i4.Future evaluateJavascript( + int? instanceId, String? javascriptString) => + (super.noSuchMethod( + Invocation.method( + #evaluateJavascript, [instanceId, javascriptString]), + returnValue: Future.value('')) as _i4.Future); + @override + String getTitle(int? instanceId) => + (super.noSuchMethod(Invocation.method(#getTitle, [instanceId]), + returnValue: '') as String); + @override + void scrollTo(int? instanceId, int? x, int? y) => + super.noSuchMethod(Invocation.method(#scrollTo, [instanceId, x, y]), + returnValueForMissingStub: null); + @override + void scrollBy(int? instanceId, int? x, int? y) => + super.noSuchMethod(Invocation.method(#scrollBy, [instanceId, x, y]), + returnValueForMissingStub: null); + @override + int getScrollX(int? instanceId) => + (super.noSuchMethod(Invocation.method(#getScrollX, [instanceId]), + returnValue: 0) as int); + @override + int getScrollY(int? instanceId) => + (super.noSuchMethod(Invocation.method(#getScrollY, [instanceId]), + returnValue: 0) as int); + @override + void setWebContentsDebuggingEnabled(bool? enabled) => super.noSuchMethod( + Invocation.method(#setWebContentsDebuggingEnabled, [enabled]), + returnValueForMissingStub: null); + @override + void setWebViewClient(int? instanceId, int? webViewClientInstanceId) => + super.noSuchMethod( + Invocation.method( + #setWebViewClient, [instanceId, webViewClientInstanceId]), + returnValueForMissingStub: null); + @override + void addJavaScriptChannel( + int? instanceId, int? javaScriptChannelInstanceId) => + super.noSuchMethod( + Invocation.method( + #addJavaScriptChannel, [instanceId, javaScriptChannelInstanceId]), + returnValueForMissingStub: null); + @override + void removeJavaScriptChannel( + int? instanceId, int? javaScriptChannelInstanceId) => + super.noSuchMethod( + Invocation.method(#removeJavaScriptChannel, + [instanceId, javaScriptChannelInstanceId]), + returnValueForMissingStub: null); + @override + void setDownloadListener(int? instanceId, int? listenerInstanceId) => + super.noSuchMethod( + Invocation.method( + #setDownloadListener, [instanceId, listenerInstanceId]), + returnValueForMissingStub: null); + @override + void setWebChromeClient(int? instanceId, int? clientInstanceId) => + super.noSuchMethod( + Invocation.method( + #setWebChromeClient, [instanceId, clientInstanceId]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [WebChromeClient]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockWebChromeClient extends _i1.Mock implements _i2.WebChromeClient { + MockWebChromeClient() { + _i1.throwOnMissingStub(this); + } + + @override + void onProgressChanged(_i2.WebView? webView, int? progress) => super + .noSuchMethod(Invocation.method(#onProgressChanged, [webView, progress]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +} + +/// A class which mocks [WebView]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockWebView extends _i1.Mock implements _i2.WebView { + MockWebView() { + _i1.throwOnMissingStub(this); + } + + @override + bool get useHybridComposition => + (super.noSuchMethod(Invocation.getter(#useHybridComposition), + returnValue: false) as bool); + @override + _i2.WebSettings get settings => + (super.noSuchMethod(Invocation.getter(#settings), + returnValue: _FakeWebSettings_0()) as _i2.WebSettings); + @override + _i4.Future loadUrl(String? url, Map? headers) => + (super.noSuchMethod(Invocation.method(#loadUrl, [url, headers]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future getUrl() => + (super.noSuchMethod(Invocation.method(#getUrl, []), + returnValue: Future.value()) as _i4.Future); + @override + _i4.Future canGoBack() => + (super.noSuchMethod(Invocation.method(#canGoBack, []), + returnValue: Future.value(false)) as _i4.Future); + @override + _i4.Future canGoForward() => + (super.noSuchMethod(Invocation.method(#canGoForward, []), + returnValue: Future.value(false)) as _i4.Future); + @override + _i4.Future goBack() => + (super.noSuchMethod(Invocation.method(#goBack, []), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future goForward() => + (super.noSuchMethod(Invocation.method(#goForward, []), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future reload() => + (super.noSuchMethod(Invocation.method(#reload, []), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future clearCache(bool? includeDiskFiles) => + (super.noSuchMethod(Invocation.method(#clearCache, [includeDiskFiles]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future evaluateJavascript(String? javascriptString) => (super + .noSuchMethod(Invocation.method(#evaluateJavascript, [javascriptString]), + returnValue: Future.value()) as _i4.Future); + @override + _i4.Future getTitle() => + (super.noSuchMethod(Invocation.method(#getTitle, []), + returnValue: Future.value()) as _i4.Future); + @override + _i4.Future scrollTo(int? x, int? y) => + (super.noSuchMethod(Invocation.method(#scrollTo, [x, y]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future scrollBy(int? x, int? y) => + (super.noSuchMethod(Invocation.method(#scrollBy, [x, y]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future getScrollX() => + (super.noSuchMethod(Invocation.method(#getScrollX, []), + returnValue: Future.value(0)) as _i4.Future); + @override + _i4.Future getScrollY() => + (super.noSuchMethod(Invocation.method(#getScrollY, []), + returnValue: Future.value(0)) as _i4.Future); + @override + _i4.Future setWebViewClient(_i2.WebViewClient? webViewClient) => + (super.noSuchMethod(Invocation.method(#setWebViewClient, [webViewClient]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future addJavaScriptChannel( + _i2.JavaScriptChannel? javaScriptChannel) => + (super.noSuchMethod( + Invocation.method(#addJavaScriptChannel, [javaScriptChannel]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future removeJavaScriptChannel( + _i2.JavaScriptChannel? javaScriptChannel) => + (super.noSuchMethod( + Invocation.method(#removeJavaScriptChannel, [javaScriptChannel]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future setDownloadListener(_i2.DownloadListener? listener) => + (super.noSuchMethod(Invocation.method(#setDownloadListener, [listener]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future setWebChromeClient(_i2.WebChromeClient? client) => + (super.noSuchMethod(Invocation.method(#setWebChromeClient, [client]), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + _i4.Future release() => + (super.noSuchMethod(Invocation.method(#release, []), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override + String toString() => super.toString(); +} + +/// A class which mocks [WebViewClient]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockWebViewClient extends _i1.Mock implements _i2.WebViewClient { + MockWebViewClient() { + _i1.throwOnMissingStub(this); + } + + @override + bool get shouldOverrideUrlLoading => + (super.noSuchMethod(Invocation.getter(#shouldOverrideUrlLoading), + returnValue: false) as bool); + @override + void onPageStarted(_i2.WebView? webView, String? url) => + super.noSuchMethod(Invocation.method(#onPageStarted, [webView, url]), + returnValueForMissingStub: null); + @override + void onPageFinished(_i2.WebView? webView, String? url) => + super.noSuchMethod(Invocation.method(#onPageFinished, [webView, url]), + returnValueForMissingStub: null); + @override + void onReceivedRequestError(_i2.WebView? webView, + _i2.WebResourceRequest? request, _i2.WebResourceError? error) => + super.noSuchMethod( + Invocation.method(#onReceivedRequestError, [webView, request, error]), + returnValueForMissingStub: null); + @override + void onReceivedError(_i2.WebView? webView, int? errorCode, + String? description, String? failingUrl) => + super.noSuchMethod( + Invocation.method( + #onReceivedError, [webView, errorCode, description, failingUrl]), + returnValueForMissingStub: null); + @override + void requestLoading(_i2.WebView? webView, _i2.WebResourceRequest? request) => + super.noSuchMethod(Invocation.method(#requestLoading, [webView, request]), + returnValueForMissingStub: null); + @override + void urlLoading(_i2.WebView? webView, String? url) => + super.noSuchMethod(Invocation.method(#urlLoading, [webView, url]), + returnValueForMissingStub: null); + @override + String toString() => super.toString(); +}