diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index ff196d3bb1b6..05b0329717f1 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,3 +1,8 @@ +## 3.22.1 + +* Fixes exception from native `WKWebViewConfiguration.defaultWebpagePreferences` sometimes returning + `nil`. + ## 3.22.0 * Adds support to respond to recoverable SSL certificate errors. See `WebKitNavigationDelegate.setOnSSlAuthError`. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/WebViewConfigurationProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/WebViewConfigurationProxyAPITests.swift index 431b3915f979..b0596179014d 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/WebViewConfigurationProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/WebViewConfigurationProxyAPITests.swift @@ -135,4 +135,17 @@ class WebViewConfigurationProxyAPITests: XCTestCase { XCTAssertEqual(value, instance.defaultWebpagePreferences) } + + @available(iOS 13.0, macOS 10.15, *) + @MainActor func testSetDefaultWebpagePreferences() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = WKWebViewConfiguration() + let preferences = WKWebpagePreferences() + try? api.pigeonDelegate.setDefaultWebpagePreferences( + pigeonApi: api, pigeonInstance: instance, preferences: preferences) + + XCTAssertEqual(instance.defaultWebpagePreferences, preferences) + } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/WebpagePreferencesProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/WebpagePreferencesProxyAPITests.swift index aa11b48ad1ec..e0df443556b2 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/WebpagePreferencesProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/WebpagePreferencesProxyAPITests.swift @@ -8,6 +8,14 @@ import XCTest @testable import webview_flutter_wkwebview class WebpagePreferencesProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebpagePreferences(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api) + XCTAssertNotNil(instance) + } + @available(iOS 14.0, macOS 11.0, *) @MainActor func testSetAllowsContentJavaScript() { let registrar = TestProxyApiRegistrar() diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebKitLibrary.g.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebKitLibrary.g.swift index 1d4b6ccec0af..18a5a32fe3fc 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebKitLibrary.g.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebKitLibrary.g.swift @@ -3440,7 +3440,12 @@ protocol PigeonApiDelegateWKWebViewConfiguration { @available(iOS 13.0.0, macOS 10.15.0, *) func getDefaultWebpagePreferences( pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration - ) throws -> WKWebpagePreferences + ) throws -> WKWebpagePreferences? + /// The default preferences to use when loading and rendering content. + @available(iOS 13.0.0, macOS 10.15.0, *) + func setDefaultWebpagePreferences( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, + preferences: WKWebpagePreferences) throws } protocol PigeonApiProtocolWKWebViewConfiguration { @@ -3705,6 +3710,47 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura getDefaultWebpagePreferencesChannel.setMessageHandler(nil) } } + if #available(iOS 13.0.0, macOS 10.15.0, *) { + let setDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setDefaultWebpagePreferences", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setDefaultWebpagePreferencesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let preferencesArg = args[1] as! WKWebpagePreferences + do { + try api.pigeonDelegate.setDefaultWebpagePreferences( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, preferences: preferencesArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setDefaultWebpagePreferencesChannel.setMessageHandler(nil) + } + } else { + let setDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setDefaultWebpagePreferences", + binaryMessenger: binaryMessenger, codec: codec) + if api != nil { + setDefaultWebpagePreferencesChannel.setMessageHandler { message, reply in + reply( + wrapError( + FlutterError( + code: "PigeonUnsupportedOperationError", + message: + "Call to setDefaultWebpagePreferences requires @available(iOS 13.0.0, macOS 10.15.0, *).", + details: nil + ))) + } + } else { + setDefaultWebpagePreferencesChannel.setMessageHandler(nil) + } + } } ///Creates a Dart instance of WKWebViewConfiguration and attaches it to [pigeonInstance]. @@ -7150,6 +7196,10 @@ final class PigeonApiURL: PigeonApiProtocolURL { } } protocol PigeonApiDelegateWKWebpagePreferences { + /// Creates a `WKWebpagePreferences`. + @available(iOS 13.0.0, macOS 10.15.0, *) + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKWebpagePreferences) throws + -> WKWebpagePreferences /// A Boolean value that indicates whether JavaScript from web content is /// allowed to run. @available(iOS 13.0.0, macOS 10.15.0, *) @@ -7185,6 +7235,47 @@ final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() + if #available(iOS 13.0.0, macOS 10.15.0, *) { + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + pigeonDefaultConstructorChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonIdentifierArg = args[0] as! Int64 + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + pigeonDefaultConstructorChannel.setMessageHandler(nil) + } + } else { + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) + if api != nil { + pigeonDefaultConstructorChannel.setMessageHandler { message, reply in + reply( + wrapError( + FlutterError( + code: "PigeonUnsupportedOperationError", + message: + "Call to pigeonDefaultConstructor requires @available(iOS 13.0.0, macOS 10.15.0, *).", + details: nil + ))) + } + } else { + pigeonDefaultConstructorChannel.setMessageHandler(nil) + } + } if #available(iOS 13.0.0, macOS 10.15.0, *) { let setAllowsContentJavaScriptChannel = FlutterBasicMessageChannel( name: diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewConfigurationProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewConfigurationProxyAPIDelegate.swift index e6c6e85952a2..6fdb162c3654 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewConfigurationProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewConfigurationProxyAPIDelegate.swift @@ -96,7 +96,15 @@ class WebViewConfigurationProxyAPIDelegate: PigeonApiDelegateWKWebViewConfigurat @available(iOS 13.0, macOS 10.15, *) func getDefaultWebpagePreferences( pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration - ) throws -> WKWebpagePreferences { + ) throws -> WKWebpagePreferences? { return pigeonInstance.defaultWebpagePreferences } + + @available(iOS 13.0, macOS 10.15, *) + func setDefaultWebpagePreferences( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, + preferences: WKWebpagePreferences + ) throws { + pigeonInstance.defaultWebpagePreferences = preferences + } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebpagePreferencesProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebpagePreferencesProxyAPIDelegate.swift index 5c0721523c62..c38e1b2fc7e6 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebpagePreferencesProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebpagePreferencesProxyAPIDelegate.swift @@ -9,6 +9,13 @@ import WebKit /// This class may handle instantiating native object instances that are attached to a Dart instance /// or handle method calls on the associated native class or an instance of that class. class WebpagePreferencesProxyAPIDelegate: PigeonApiDelegateWKWebpagePreferences { + @available(iOS 13.0, macOS 10.15, *) + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKWebpagePreferences) throws + -> WKWebpagePreferences + { + return WKWebpagePreferences() + } + @available(iOS 13.0, macOS 10.15, *) func setAllowsContentJavaScript( pigeonApi: PigeonApiWKWebpagePreferences, pigeonInstance: WKWebpagePreferences, allow: Bool diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.g.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.g.dart index 49a132077b57..6f0a2eb2a80c 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.g.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.g.dart @@ -3698,7 +3698,7 @@ class WKWebViewConfiguration extends NSObject { } /// The default preferences to use when loading and rendering content. - Future getDefaultWebpagePreferences() async { + Future getDefaultWebpagePreferences() async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecWKWebViewConfiguration; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; @@ -3722,13 +3722,39 @@ class WKWebViewConfiguration extends NSObject { message: pigeonVar_replyList[1] as String?, details: pigeonVar_replyList[2], ); - } else if (pigeonVar_replyList[0] == null) { + } else { + return (pigeonVar_replyList[0] as WKWebpagePreferences?); + } + } + + /// The default preferences to use when loading and rendering content. + Future setDefaultWebpagePreferences( + WKWebpagePreferences preferences) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecWKWebViewConfiguration; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setDefaultWebpagePreferences'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, preferences]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); } else { - return (pigeonVar_replyList[0] as WKWebpagePreferences?)!; + return; } } @@ -8202,6 +8228,44 @@ class URL extends NSObject { /// /// See https://developer.apple.com/documentation/webkit/wkwebpagepreferences. class WKWebpagePreferences extends NSObject { + /// Creates a `WKWebpagePreferences`. + WKWebpagePreferences({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + super.observeValue, + }) : super.pigeon_detached() { + final int pigeonVar_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecWKWebpagePreferences; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.pigeon_defaultConstructor'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([pigeonVar_instanceIdentifier]); + () async { + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + }(); + } + /// Constructs [WKWebpagePreferences] without creating the associated native object. /// /// This should only be used by subclasses created by this library or to diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart index 5eef2a3d52bb..97c0018f1b7f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart @@ -512,8 +512,14 @@ class WebKitWebViewPlatformController extends WebViewPlatformController { Future _setJavaScriptMode(JavascriptMode mode) async { // Attempt to set the value that requires iOS 14+. try { - final WKWebpagePreferences webpagePreferences = + WKWebpagePreferences? webpagePreferences = await webView.configuration.getDefaultWebpagePreferences(); + if (webpagePreferences == null) { + webpagePreferences = webViewProxy.createWebpagePreferences(); + unawaited(webView.configuration.setDefaultWebpagePreferences( + webpagePreferences, + )); + } switch (mode) { case JavascriptMode.disabled: await webpagePreferences.setAllowsContentJavaScript(false); @@ -769,4 +775,9 @@ class WebViewWidgetProxy { didReceiveAuthenticationChallenge: didReceiveAuthenticationChallenge, ); } + + /// Constructs a [WKWebpagePreferences]. + WKWebpagePreferences createWebpagePreferences() { + return WKWebpagePreferences(); + } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_proxy.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_proxy.dart index f0736d741eed..582cbb61d992 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_proxy.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_proxy.dart @@ -31,6 +31,7 @@ class WebKitProxy { this.newPlatformWebView = PlatformWebView.new, this.newWKUIDelegate = WKUIDelegate.new, this.newUIScrollViewDelegate = UIScrollViewDelegate.new, + this.newWKWebpagePreferences = WKWebpagePreferences.new, this.createAsyncAuthenticationChallengeResponse = AuthenticationChallengeResponse.createAsync, this.withUserAsyncURLCredential = URLCredential.withUserAsync, @@ -187,6 +188,9 @@ class WebKitProxy { )? scrollViewDidScroll, }) newUIScrollViewDelegate; + /// Constructs [WKWebpagePreferences]. + final WKWebpagePreferences Function() newWKWebpagePreferences; + /// Calls to [AuthenticationChallengeResponse.createAsync]. final Future Function( UrlSessionAuthChallengeDisposition disposition, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart index f3e2cd202f61..0f2d13fda966 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart @@ -619,8 +619,15 @@ class WebKitWebViewController extends PlatformWebViewController { Future setJavaScriptMode(JavaScriptMode javaScriptMode) async { // Attempt to set the value that requires iOS 14+. try { - final WKWebpagePreferences webpagePreferences = + WKWebpagePreferences? webpagePreferences = await _webView.configuration.getDefaultWebpagePreferences(); + if (webpagePreferences == null) { + webpagePreferences = + _webKitParams.webKitProxy.newWKWebpagePreferences(); + unawaited(_webView.configuration.setDefaultWebpagePreferences( + webpagePreferences, + )); + } switch (javaScriptMode) { case JavaScriptMode.disabled: await webpagePreferences.setAllowsContentJavaScript(false); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart b/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart index 85ee67fa71a0..c198c5ab5be4 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart @@ -711,7 +711,10 @@ abstract class WKWebViewConfiguration extends NSObject { void setMediaTypesRequiringUserActionForPlayback(AudiovisualMediaType type); /// The default preferences to use when loading and rendering content. - WKWebpagePreferences getDefaultWebpagePreferences(); + WKWebpagePreferences? getDefaultWebpagePreferences(); + + /// The default preferences to use when loading and rendering content. + void setDefaultWebpagePreferences(WKWebpagePreferences preferences); } /// An object for managing interactions between JavaScript code and your web @@ -1213,6 +1216,9 @@ abstract class URL extends NSObject { ), ) abstract class WKWebpagePreferences extends NSObject { + /// Creates a `WKWebpagePreferences`. + WKWebpagePreferences(); + /// A Boolean value that indicates whether JavaScript from web content is /// allowed to run. void setAllowsContentJavaScript(bool allow); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 471b39b8fc07..4f8ce5e3457b 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_wkwebview description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 3.22.0 +version: 3.22.1 environment: sdk: ^3.5.0 diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.mocks.dart index f240bf566ff1..20ef405b1f43 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.mocks.dart @@ -161,9 +161,9 @@ class _FakeWKWebsiteDataStore_11 extends _i1.SmartFake ); } -class _FakeWKWebpagePreferences_12 extends _i1.SmartFake - implements _i2.WKWebpagePreferences { - _FakeWKWebpagePreferences_12( +class _FakeWKHTTPCookieStore_12 extends _i1.SmartFake + implements _i2.WKHTTPCookieStore { + _FakeWKHTTPCookieStore_12( Object parent, Invocation parentInvocation, ) : super( @@ -172,9 +172,8 @@ class _FakeWKWebpagePreferences_12 extends _i1.SmartFake ); } -class _FakeWKHTTPCookieStore_13 extends _i1.SmartFake - implements _i2.WKHTTPCookieStore { - _FakeWKHTTPCookieStore_13( +class _FakeWKUIDelegate_13 extends _i1.SmartFake implements _i2.WKUIDelegate { + _FakeWKUIDelegate_13( Object parent, Invocation parentInvocation, ) : super( @@ -183,8 +182,9 @@ class _FakeWKHTTPCookieStore_13 extends _i1.SmartFake ); } -class _FakeWKUIDelegate_14 extends _i1.SmartFake implements _i2.WKUIDelegate { - _FakeWKUIDelegate_14( +class _FakePlatformWebView_14 extends _i1.SmartFake + implements _i3.PlatformWebView { + _FakePlatformWebView_14( Object parent, Invocation parentInvocation, ) : super( @@ -193,9 +193,9 @@ class _FakeWKUIDelegate_14 extends _i1.SmartFake implements _i2.WKUIDelegate { ); } -class _FakePlatformWebView_15 extends _i1.SmartFake - implements _i3.PlatformWebView { - _FakePlatformWebView_15( +class _FakeWKWebpagePreferences_15 extends _i1.SmartFake + implements _i2.WKWebpagePreferences { + _FakeWKWebpagePreferences_15( Object parent, Invocation parentInvocation, ) : super( @@ -329,7 +329,10 @@ class MockUIScrollView extends _i1.Mock implements _i2.UIScrollView { @override _i4.Future setShowsVerticalScrollIndicator(bool? value) => (super.noSuchMethod( - Invocation.method(#setShowsVerticalScrollIndicator, [value]), + Invocation.method( + #setShowsVerticalScrollIndicator, + [value], + ), returnValue: _i4.Future.value(), returnValueForMissingStub: _i4.Future.value(), ) as _i4.Future); @@ -337,7 +340,10 @@ class MockUIScrollView extends _i1.Mock implements _i2.UIScrollView { @override _i4.Future setShowsHorizontalScrollIndicator(bool? value) => (super.noSuchMethod( - Invocation.method(#setShowsHorizontalScrollIndicator, [value]), + Invocation.method( + #setShowsHorizontalScrollIndicator, + [value], + ), returnValue: _i4.Future.value(), returnValueForMissingStub: _i4.Future.value(), ) as _i4.Future); @@ -1404,21 +1410,26 @@ class MockWKWebViewConfiguration extends _i1.Mock ) as _i4.Future); @override - _i4.Future<_i2.WKWebpagePreferences> getDefaultWebpagePreferences() => + _i4.Future<_i2.WKWebpagePreferences?> getDefaultWebpagePreferences() => (super.noSuchMethod( Invocation.method( #getDefaultWebpagePreferences, [], ), - returnValue: _i4.Future<_i2.WKWebpagePreferences>.value( - _FakeWKWebpagePreferences_12( - this, - Invocation.method( - #getDefaultWebpagePreferences, - [], - ), - )), - ) as _i4.Future<_i2.WKWebpagePreferences>); + returnValue: _i4.Future<_i2.WKWebpagePreferences?>.value(), + ) as _i4.Future<_i2.WKWebpagePreferences?>); + + @override + _i4.Future setDefaultWebpagePreferences( + _i2.WKWebpagePreferences? preferences) => + (super.noSuchMethod( + Invocation.method( + #setDefaultWebpagePreferences, + [preferences], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); @override _i2.WKWebViewConfiguration pigeon_copy() => (super.noSuchMethod( @@ -1484,7 +1495,7 @@ class MockWKWebsiteDataStore extends _i1.Mock @override _i2.WKHTTPCookieStore get httpCookieStore => (super.noSuchMethod( Invocation.getter(#httpCookieStore), - returnValue: _FakeWKHTTPCookieStore_13( + returnValue: _FakeWKHTTPCookieStore_12( this, Invocation.getter(#httpCookieStore), ), @@ -1505,7 +1516,7 @@ class MockWKWebsiteDataStore extends _i1.Mock #pigeonVar_httpCookieStore, [], ), - returnValue: _FakeWKHTTPCookieStore_13( + returnValue: _FakeWKHTTPCookieStore_12( this, Invocation.method( #pigeonVar_httpCookieStore, @@ -1653,7 +1664,7 @@ class MockWKUIDelegate extends _i1.Mock implements _i2.WKUIDelegate { #pigeon_copy, [], ), - returnValue: _FakeWKUIDelegate_14( + returnValue: _FakeWKUIDelegate_13( this, Invocation.method( #pigeon_copy, @@ -1957,7 +1968,7 @@ class MockWebViewWidgetProxy extends _i1.Mock [configuration], {#observeValue: observeValue}, ), - returnValue: _FakePlatformWebView_15( + returnValue: _FakePlatformWebView_14( this, Invocation.method( #createWebView, @@ -2021,7 +2032,7 @@ class MockWebViewWidgetProxy extends _i1.Mock [], {#onCreateWebView: onCreateWebView}, ), - returnValue: _FakeWKUIDelegate_14( + returnValue: _FakeWKUIDelegate_13( this, Invocation.method( #createUIDelgate, @@ -2112,6 +2123,21 @@ class MockWebViewWidgetProxy extends _i1.Mock ), ), ) as _i2.WKNavigationDelegate); + + @override + _i2.WKWebpagePreferences createWebpagePreferences() => (super.noSuchMethod( + Invocation.method( + #createWebpagePreferences, + [], + ), + returnValue: _FakeWKWebpagePreferences_15( + this, + Invocation.method( + #createWebpagePreferences, + [], + ), + ), + ) as _i2.WKWebpagePreferences); } /// A class which mocks [WKWebpagePreferences]. @@ -2149,7 +2175,7 @@ class MockWKWebpagePreferences extends _i1.Mock #pigeon_copy, [], ), - returnValue: _FakeWKWebpagePreferences_12( + returnValue: _FakeWKWebpagePreferences_15( this, Invocation.method( #pigeon_copy, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.mocks.dart index d17082e9f6d5..8721908f6ff7 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.mocks.dart @@ -139,9 +139,9 @@ class _FakeWKWebsiteDataStore_10 extends _i1.SmartFake ); } -class _FakeWKWebpagePreferences_11 extends _i1.SmartFake - implements _i2.WKWebpagePreferences { - _FakeWKWebpagePreferences_11( +class _FakeWKWebViewConfiguration_11 extends _i1.SmartFake + implements _i2.WKWebViewConfiguration { + _FakeWKWebViewConfiguration_11( Object parent, Invocation parentInvocation, ) : super( @@ -150,9 +150,9 @@ class _FakeWKWebpagePreferences_11 extends _i1.SmartFake ); } -class _FakeWKWebViewConfiguration_12 extends _i1.SmartFake - implements _i2.WKWebViewConfiguration { - _FakeWKWebViewConfiguration_12( +class _FakeWKWebpagePreferences_12 extends _i1.SmartFake + implements _i2.WKWebpagePreferences { + _FakeWKWebpagePreferences_12( Object parent, Invocation parentInvocation, ) : super( @@ -309,7 +309,10 @@ class MockUIScrollView extends _i1.Mock implements _i2.UIScrollView { @override _i3.Future setShowsVerticalScrollIndicator(bool? value) => (super.noSuchMethod( - Invocation.method(#setShowsVerticalScrollIndicator, [value]), + Invocation.method( + #setShowsVerticalScrollIndicator, + [value], + ), returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); @@ -317,7 +320,10 @@ class MockUIScrollView extends _i1.Mock implements _i2.UIScrollView { @override _i3.Future setShowsHorizontalScrollIndicator(bool? value) => (super.noSuchMethod( - Invocation.method(#setShowsHorizontalScrollIndicator, [value]), + Invocation.method( + #setShowsHorizontalScrollIndicator, + [value], + ), returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); @@ -1387,29 +1393,28 @@ class MockWKWebViewConfiguration extends _i1.Mock ) as _i3.Future); @override - _i3.Future<_i2.WKWebpagePreferences> getDefaultWebpagePreferences() => + _i3.Future<_i2.WKWebpagePreferences?> getDefaultWebpagePreferences() => (super.noSuchMethod( Invocation.method( #getDefaultWebpagePreferences, [], ), - returnValue: _i3.Future<_i2.WKWebpagePreferences>.value( - _FakeWKWebpagePreferences_11( - this, - Invocation.method( - #getDefaultWebpagePreferences, - [], - ), - )), - returnValueForMissingStub: _i3.Future<_i2.WKWebpagePreferences>.value( - _FakeWKWebpagePreferences_11( - this, - Invocation.method( - #getDefaultWebpagePreferences, - [], - ), - )), - ) as _i3.Future<_i2.WKWebpagePreferences>); + returnValue: _i3.Future<_i2.WKWebpagePreferences?>.value(), + returnValueForMissingStub: + _i3.Future<_i2.WKWebpagePreferences?>.value(), + ) as _i3.Future<_i2.WKWebpagePreferences?>); + + @override + _i3.Future setDefaultWebpagePreferences( + _i2.WKWebpagePreferences? preferences) => + (super.noSuchMethod( + Invocation.method( + #setDefaultWebpagePreferences, + [preferences], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); @override _i2.WKWebViewConfiguration pigeon_copy() => (super.noSuchMethod( @@ -1417,14 +1422,14 @@ class MockWKWebViewConfiguration extends _i1.Mock #pigeon_copy, [], ), - returnValue: _FakeWKWebViewConfiguration_12( + returnValue: _FakeWKWebViewConfiguration_11( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeWKWebViewConfiguration_12( + returnValueForMissingStub: _FakeWKWebViewConfiguration_11( this, Invocation.method( #pigeon_copy, @@ -1505,14 +1510,14 @@ class MockWKWebpagePreferences extends _i1.Mock #pigeon_copy, [], ), - returnValue: _FakeWKWebpagePreferences_11( + returnValue: _FakeWKWebpagePreferences_12( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeWKWebpagePreferences_11( + returnValueForMissingStub: _FakeWKWebpagePreferences_12( this, Invocation.method( #pigeon_copy, @@ -1565,11 +1570,11 @@ class MockUIViewWKWebView extends _i1.Mock implements _i2.UIViewWKWebView { @override _i2.WKWebViewConfiguration get configuration => (super.noSuchMethod( Invocation.getter(#configuration), - returnValue: _FakeWKWebViewConfiguration_12( + returnValue: _FakeWKWebViewConfiguration_11( this, Invocation.getter(#configuration), ), - returnValueForMissingStub: _FakeWKWebViewConfiguration_12( + returnValueForMissingStub: _FakeWKWebViewConfiguration_11( this, Invocation.getter(#configuration), ), @@ -1607,14 +1612,14 @@ class MockUIViewWKWebView extends _i1.Mock implements _i2.UIViewWKWebView { #pigeonVar_configuration, [], ), - returnValue: _FakeWKWebViewConfiguration_12( + returnValue: _FakeWKWebViewConfiguration_11( this, Invocation.method( #pigeonVar_configuration, [], ), ), - returnValueForMissingStub: _FakeWKWebViewConfiguration_12( + returnValueForMissingStub: _FakeWKWebViewConfiguration_11( this, Invocation.method( #pigeonVar_configuration, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.dart index 3ddfa7dd0984..9df4f9d270d6 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.dart @@ -200,6 +200,11 @@ WebKitWebViewController createTestWebViewController( newWKWebViewConfiguration: () { return MockWKWebViewConfiguration(); }, + newWKWebpagePreferences: () { + return WKWebpagePreferences.pigeon_detached( + pigeon_instanceManager: TestInstanceManager(), + ); + }, newWKUIDelegate: ({ dynamic onCreateWebView, dynamic requestMediaCapturePermission, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.mocks.dart index c25e07f617dd..646f3c40a9da 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.mocks.dart @@ -75,20 +75,9 @@ class _FakeWKPreferences_4 extends _i1.SmartFake implements _i2.WKPreferences { ); } -class _FakeWKWebpagePreferences_5 extends _i1.SmartFake - implements _i2.WKWebpagePreferences { - _FakeWKWebpagePreferences_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeWKWebViewConfiguration_6 extends _i1.SmartFake +class _FakeWKWebViewConfiguration_5 extends _i1.SmartFake implements _i2.WKWebViewConfiguration { - _FakeWKWebViewConfiguration_6( + _FakeWKWebViewConfiguration_5( Object parent, Invocation parentInvocation, ) : super( @@ -97,9 +86,9 @@ class _FakeWKWebViewConfiguration_6 extends _i1.SmartFake ); } -class _FakeUIScrollViewDelegate_7 extends _i1.SmartFake +class _FakeUIScrollViewDelegate_6 extends _i1.SmartFake implements _i2.UIScrollViewDelegate { - _FakeUIScrollViewDelegate_7( + _FakeUIScrollViewDelegate_6( Object parent, Invocation parentInvocation, ) : super( @@ -361,21 +350,26 @@ class MockWKWebViewConfiguration extends _i1.Mock ) as _i3.Future); @override - _i3.Future<_i2.WKWebpagePreferences> getDefaultWebpagePreferences() => + _i3.Future<_i2.WKWebpagePreferences?> getDefaultWebpagePreferences() => (super.noSuchMethod( Invocation.method( #getDefaultWebpagePreferences, [], ), - returnValue: _i3.Future<_i2.WKWebpagePreferences>.value( - _FakeWKWebpagePreferences_5( - this, - Invocation.method( - #getDefaultWebpagePreferences, - [], - ), - )), - ) as _i3.Future<_i2.WKWebpagePreferences>); + returnValue: _i3.Future<_i2.WKWebpagePreferences?>.value(), + ) as _i3.Future<_i2.WKWebpagePreferences?>); + + @override + _i3.Future setDefaultWebpagePreferences( + _i2.WKWebpagePreferences? preferences) => + (super.noSuchMethod( + Invocation.method( + #setDefaultWebpagePreferences, + [preferences], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); @override _i2.WKWebViewConfiguration pigeon_copy() => (super.noSuchMethod( @@ -383,7 +377,7 @@ class MockWKWebViewConfiguration extends _i1.Mock #pigeon_copy, [], ), - returnValue: _FakeWKWebViewConfiguration_6( + returnValue: _FakeWKWebViewConfiguration_5( this, Invocation.method( #pigeon_copy, @@ -453,7 +447,7 @@ class MockUIScrollViewDelegate extends _i1.Mock #pigeon_copy, [], ), - returnValue: _FakeUIScrollViewDelegate_7( + returnValue: _FakeUIScrollViewDelegate_6( this, Invocation.method( #pigeon_copy,