From 5a6b18f38411d8267a2f99ac7951929197edd305 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 4 Apr 2025 14:53:39 -0400 Subject: [PATCH 01/19] start of implementation --- .../GetTrustResultResponse.swift | 19 + ...tTrustResultResponseProxyAPIDelegate.swift | 38 + .../ProxyAPIRegistrar.swift | 12 + .../SecCertificateProxyAPIDelegate.swift | 25 + .../SecTrustProxyAPIDelegate.swift | 42 + .../SecWrappers.swift | 30 + .../URLProtectionSpaceProxyAPIDelegate.swift | 8 + .../WebKitLibrary.g.swift | 9580 +++++++++++------ .../ios/Runner.xcodeproj/project.pbxproj | 2 +- .../lib/src/common/web_kit.g.dart | 1104 +- .../pigeons/web_kit.dart | 88 + .../webview_flutter_wkwebview/pubspec.yaml | 6 +- 12 files changed, 7509 insertions(+), 3445 deletions(-) create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift new file mode 100644 index 00000000000..e9155f86524 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift @@ -0,0 +1,19 @@ +// 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. + +import Darwin + +/// Data class used to respond to `SecTrustGetTrustResult`. +/// +/// The native method needs to return two values, so this custom class is +/// created to support this. +class GetTrustResultResponse { + let result: SecTrustResultType + let resultCode: OSStatus + + init(result: SecTrustResultType, resultCode: OSStatus) { + self.result = result + self.resultCode = resultCode + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift new file mode 100644 index 00000000000..95b1f76fedb --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift @@ -0,0 +1,38 @@ +// 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. + +import Foundation + +/// ProxyApi implementation for `GetTrustResultResponse`. +/// +/// 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 GetTrustResultResponseProxyAPIDelegate : PigeonApiDelegateGetTrustResultResponse { + func result(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> DartSecTrustResultType { + switch pigeonInstance.result { + case .unspecified: + return .unspecified + case .proceed: + return .proceed + case .deny: + return .deny + case .recoverableTrustFailure: + return .recoverableTrustFailure + case .fatalTrustFailure: + return .fatalTrustFailure + case .otherError: + return .otherError + case .invalid: + return .invalid + case .confirm: + return .confirm + @unknown default: + return .unknown + } + } + + func resultCode(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> Int64 { + return Int64(pigeonInstance.resultCode) + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift index 607001b2bc5..30985ca18c6 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift @@ -280,4 +280,16 @@ class ProxyAPIDelegate: WebKitLibraryPigeonProxyApiDelegate { return PigeonApiWKWebpagePreferences( pigeonRegistrar: registrar, delegate: WebpagePreferencesProxyAPIDelegate()) } + + func pigeonApiGetTrustResultResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiGetTrustResultResponse { + return PigeonApiGetTrustResultResponse(pigeonRegistrar: registrar, delegate: GetTrustResultResponseProxyAPIDelegate()) + } + + func pigeonApiSecTrust(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiSecTrust { + return PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: SecTrustProxyAPIDelegate()) + } + + func pigeonApiSecCertificate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiSecCertificate { + return PigeonApiSecCertificate(pigeonRegistrar: registrar, delegate: SecCertificateProxyAPIDelegate()) + } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift new file mode 100644 index 00000000000..424765d9cb7 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift @@ -0,0 +1,25 @@ +// 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. + +#if os(iOS) + import Flutter + import UIKit +#elseif os(macOS) + import FlutterMacOS + import Foundation +#else + #error("Unsupported platform.") +#endif +import Foundation + +/// ProxyApi implementation for `SecCertificate`. +/// +/// 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 SecCertificateProxyAPIDelegate : PigeonApiDelegateSecCertificate { + func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws -> FlutterStandardTypedData { + let data = SecCertificateCopyData(certificate.value) + return FlutterStandardTypedData(bytes: data as Data) + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift new file mode 100644 index 00000000000..94d8e7f805c --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift @@ -0,0 +1,42 @@ +// 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. + +#if os(iOS) + import Flutter + import UIKit +#elseif os(macOS) + import FlutterMacOS + import Foundation +#else + #error("Unsupported platform.") +#endif +import Foundation + +/// ProxyApi implementation for `SecTrust`. +/// +/// 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 SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { + func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> Bool { + var error: Unmanaged? + let result = SecTrustEvaluateWithError(trust.value, &error) + return result + } + + func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData { + return SecTrust.copyExceptions(trust: trust) + } + + func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData) throws -> Bool { + return SecTrust.setExceptions(trust: trust, exceptions: exceptions) + } + + func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse { + return SecTrust.getTrustResult(trust: trust) + } + + func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [String] { + return SecTrust.copyCertificateChain(trust: trust) + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift new file mode 100644 index 00000000000..5c4f790d5cc --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift @@ -0,0 +1,30 @@ +// 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. + +/// Wrapper for `SecTrust`. +/// +/// Corefoundation types don't support being casted in Swift and will always succeed +/// by default. This wrapper is used to make the class compatible with generated pigeon +/// code. All instances of `SecTrust`should be replaced with this. +class SecTrustWrapper { + let value: SecTrust + + init(value: SecTrust) { + self.value = value + } +} + +/// Wrapper for `SecCertificate`. +/// +/// Corefoundation types don't support being casted in Swift and will always succeed +/// by default. This wrapper is used to make the class compatible with generated pigeon +/// code. All instances of `SecCertificate`should be replaced with this. +class SecCertificateWrapper { + let value: SecCertificate + + init(value: SecCertificate) { + self.value = value + } +} + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift index d7c59c67f28..289065f00ba 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift @@ -32,4 +32,12 @@ class URLProtectionSpaceProxyAPIDelegate: PigeonApiDelegateURLProtectionSpace { ) throws -> String? { return pigeonInstance.authenticationMethod } + + func getServerTrust(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> SecTrustWrapper? { + if let serverTrust = pigeonInstance.serverTrust { + return SecTrustWrapper(value: serverTrust) + } + + return nil + } } 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 177b66a2e6c..23f84d4112a 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 @@ -1,14 +1,13 @@ // 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. -// Autogenerated from Pigeon (v24.2.1), do not edit directly. +// Autogenerated from Pigeon (v25.2.0), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation import WebKit - #if !os(macOS) - import UIKit +import UIKit #endif #if os(iOS) @@ -64,9 +63,7 @@ private func wrapError(_ error: Any) -> [Any?] { } private func createConnectionError(withChannelName channelName: String) -> PigeonError { - return PigeonError( - code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", - details: "") + return PigeonError(code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") } private func isNullish(_ value: Any?) -> Bool { @@ -83,6 +80,7 @@ protocol WebKitLibraryPigeonInternalFinalizerDelegate: AnyObject { func onDeinit(identifier: Int64) } + // Attaches to an object to receive a callback when the object is deallocated. internal final class WebKitLibraryPigeonInternalFinalizer { private static let associatedObjectKey = malloc(1)! @@ -98,8 +96,7 @@ internal final class WebKitLibraryPigeonInternalFinalizer { } internal static func attach( - to instance: AnyObject, identifier: Int64, - delegate: WebKitLibraryPigeonInternalFinalizerDelegate + to instance: AnyObject, identifier: Int64, delegate: WebKitLibraryPigeonInternalFinalizerDelegate ) { let finalizer = WebKitLibraryPigeonInternalFinalizer(identifier: identifier, delegate: delegate) objc_setAssociatedObject(instance, associatedObjectKey, finalizer, .OBJC_ASSOCIATION_RETAIN) @@ -114,6 +111,7 @@ internal final class WebKitLibraryPigeonInternalFinalizer { } } + /// Maintains instances used to communicate with the corresponding objects in Dart. /// /// Objects stored in this container are represented by an object in Dart that is also stored in @@ -217,8 +215,7 @@ final class WebKitLibraryPigeonInstanceManager { identifiers.setObject(NSNumber(value: identifier), forKey: instance) weakInstances.setObject(instance, forKey: NSNumber(value: identifier)) strongInstances.setObject(instance, forKey: NSNumber(value: identifier)) - WebKitLibraryPigeonInternalFinalizer.attach( - to: instance, identifier: identifier, delegate: finalizerDelegate) + WebKitLibraryPigeonInternalFinalizer.attach(to: instance, identifier: identifier, delegate: finalizerDelegate) } /// Retrieves the identifier paired with an instance. @@ -295,6 +292,7 @@ final class WebKitLibraryPigeonInstanceManager { } } + private class WebKitLibraryPigeonInstanceManagerApi { /// The codec used for serializing messages. var codec: FlutterStandardMessageCodec { WebKitLibraryPigeonCodec.shared } @@ -307,14 +305,9 @@ private class WebKitLibraryPigeonInstanceManagerApi { } /// Sets up an instance of `WebKitLibraryPigeonInstanceManagerApi` to handle messages through the `binaryMessenger`. - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, instanceManager: WebKitLibraryPigeonInstanceManager? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, instanceManager: WebKitLibraryPigeonInstanceManager?) { let codec = WebKitLibraryPigeonCodec.shared - let removeStrongReferenceChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.removeStrongReference", - binaryMessenger: binaryMessenger, codec: codec) + let removeStrongReferenceChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.removeStrongReference", binaryMessenger: binaryMessenger, codec: codec) if let instanceManager = instanceManager { removeStrongReferenceChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -329,9 +322,7 @@ private class WebKitLibraryPigeonInstanceManagerApi { } else { removeStrongReferenceChannel.setMessageHandler(nil) } - let clearChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.clear", - binaryMessenger: binaryMessenger, codec: codec) + let clearChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.clear", binaryMessenger: binaryMessenger, codec: codec) if let instanceManager = instanceManager { clearChannel.setMessageHandler { _, reply in do { @@ -347,13 +338,9 @@ private class WebKitLibraryPigeonInstanceManagerApi { } /// Sends a message to the Dart `InstanceManager` to remove the strong reference of the instance associated with `identifier`. - func removeStrongReference( - identifier identifierArg: Int64, completion: @escaping (Result) -> Void - ) { - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.removeStrongReference" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + func removeStrongReference(identifier identifierArg: Int64, completion: @escaping (Result) -> Void) { + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.removeStrongReference" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([identifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -376,130 +363,111 @@ protocol WebKitLibraryPigeonProxyApiDelegate { func pigeonApiURLRequest(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLRequest /// An implementation of [PigeonApiHTTPURLResponse] used to add a new Dart instance of /// `HTTPURLResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiHTTPURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiHTTPURLResponse + func pigeonApiHTTPURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiHTTPURLResponse /// An implementation of [PigeonApiURLResponse] used to add a new Dart instance of /// `URLResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiURLResponse + func pigeonApiURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLResponse /// An implementation of [PigeonApiWKUserScript] used to add a new Dart instance of /// `WKUserScript` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKUserScript(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKUserScript + func pigeonApiWKUserScript(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKUserScript /// An implementation of [PigeonApiWKNavigationAction] used to add a new Dart instance of /// `WKNavigationAction` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKNavigationAction(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKNavigationAction + func pigeonApiWKNavigationAction(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKNavigationAction /// An implementation of [PigeonApiWKNavigationResponse] used to add a new Dart instance of /// `WKNavigationResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKNavigationResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKNavigationResponse + func pigeonApiWKNavigationResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKNavigationResponse /// An implementation of [PigeonApiWKFrameInfo] used to add a new Dart instance of /// `WKFrameInfo` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKFrameInfo(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKFrameInfo + func pigeonApiWKFrameInfo(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKFrameInfo /// An implementation of [PigeonApiNSError] used to add a new Dart instance of /// `NSError` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiNSError(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiNSError /// An implementation of [PigeonApiWKScriptMessage] used to add a new Dart instance of /// `WKScriptMessage` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKScriptMessage(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKScriptMessage + func pigeonApiWKScriptMessage(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKScriptMessage /// An implementation of [PigeonApiWKSecurityOrigin] used to add a new Dart instance of /// `WKSecurityOrigin` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKSecurityOrigin(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKSecurityOrigin + func pigeonApiWKSecurityOrigin(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKSecurityOrigin /// An implementation of [PigeonApiHTTPCookie] used to add a new Dart instance of /// `HTTPCookie` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiHTTPCookie(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiHTTPCookie /// An implementation of [PigeonApiAuthenticationChallengeResponse] used to add a new Dart instance of /// `AuthenticationChallengeResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiAuthenticationChallengeResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiAuthenticationChallengeResponse + func pigeonApiAuthenticationChallengeResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiAuthenticationChallengeResponse /// An implementation of [PigeonApiWKWebsiteDataStore] used to add a new Dart instance of /// `WKWebsiteDataStore` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKWebsiteDataStore(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKWebsiteDataStore + func pigeonApiWKWebsiteDataStore(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebsiteDataStore /// An implementation of [PigeonApiUIView] used to add a new Dart instance of /// `UIView` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiUIView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiUIView /// An implementation of [PigeonApiUIScrollView] used to add a new Dart instance of /// `UIScrollView` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiUIScrollView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiUIScrollView + func pigeonApiUIScrollView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiUIScrollView /// An implementation of [PigeonApiWKWebViewConfiguration] used to add a new Dart instance of /// `WKWebViewConfiguration` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKWebViewConfiguration(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKWebViewConfiguration + func pigeonApiWKWebViewConfiguration(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebViewConfiguration /// An implementation of [PigeonApiWKUserContentController] used to add a new Dart instance of /// `WKUserContentController` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKUserContentController(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKUserContentController + func pigeonApiWKUserContentController(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKUserContentController /// An implementation of [PigeonApiWKPreferences] used to add a new Dart instance of /// `WKPreferences` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKPreferences(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKPreferences + func pigeonApiWKPreferences(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKPreferences /// An implementation of [PigeonApiWKScriptMessageHandler] used to add a new Dart instance of /// `WKScriptMessageHandler` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKScriptMessageHandler(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKScriptMessageHandler + func pigeonApiWKScriptMessageHandler(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKScriptMessageHandler /// An implementation of [PigeonApiWKNavigationDelegate] used to add a new Dart instance of /// `WKNavigationDelegate` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKNavigationDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKNavigationDelegate + func pigeonApiWKNavigationDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKNavigationDelegate /// An implementation of [PigeonApiNSObject] used to add a new Dart instance of /// `NSObject` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiNSObject(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiNSObject /// An implementation of [PigeonApiUIViewWKWebView] used to add a new Dart instance of /// `UIViewWKWebView` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiUIViewWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiUIViewWKWebView + func pigeonApiUIViewWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiUIViewWKWebView /// An implementation of [PigeonApiNSViewWKWebView] used to add a new Dart instance of /// `NSViewWKWebView` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiNSViewWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiNSViewWKWebView + func pigeonApiNSViewWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiNSViewWKWebView /// An implementation of [PigeonApiWKWebView] used to add a new Dart instance of /// `WKWebView` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebView /// An implementation of [PigeonApiWKUIDelegate] used to add a new Dart instance of /// `WKUIDelegate` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKUIDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKUIDelegate + func pigeonApiWKUIDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKUIDelegate /// An implementation of [PigeonApiWKHTTPCookieStore] used to add a new Dart instance of /// `WKHTTPCookieStore` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKHTTPCookieStore(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKHTTPCookieStore + func pigeonApiWKHTTPCookieStore(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKHTTPCookieStore /// An implementation of [PigeonApiUIScrollViewDelegate] used to add a new Dart instance of /// `UIScrollViewDelegate` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiUIScrollViewDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiUIScrollViewDelegate + func pigeonApiUIScrollViewDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiUIScrollViewDelegate /// An implementation of [PigeonApiURLCredential] used to add a new Dart instance of /// `URLCredential` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiURLCredential(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiURLCredential + func pigeonApiURLCredential(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLCredential /// An implementation of [PigeonApiURLProtectionSpace] used to add a new Dart instance of /// `URLProtectionSpace` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiURLProtectionSpace(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiURLProtectionSpace + func pigeonApiURLProtectionSpace(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLProtectionSpace /// An implementation of [PigeonApiURLAuthenticationChallenge] used to add a new Dart instance of /// `URLAuthenticationChallenge` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiURLAuthenticationChallenge(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiURLAuthenticationChallenge + func pigeonApiURLAuthenticationChallenge(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLAuthenticationChallenge /// An implementation of [PigeonApiURL] used to add a new Dart instance of /// `URL` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiURL(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURL /// An implementation of [PigeonApiWKWebpagePreferences] used to add a new Dart instance of /// `WKWebpagePreferences` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKWebpagePreferences(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiWKWebpagePreferences + func pigeonApiWKWebpagePreferences(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebpagePreferences + /// An implementation of [PigeonApiGetTrustResultResponse] used to add a new Dart instance of + /// `GetTrustResultResponse` to the Dart `InstanceManager` and make calls to Dart. + func pigeonApiGetTrustResultResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiGetTrustResultResponse + /// An implementation of [PigeonApiSecTrust] used to add a new Dart instance of + /// `SecTrust` to the Dart `InstanceManager` and make calls to Dart. + func pigeonApiSecTrust(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiSecTrust + /// An implementation of [PigeonApiSecCertificate] used to add a new Dart instance of + /// `SecCertificate` to the Dart `InstanceManager` and make calls to Dart. + func pigeonApiSecCertificate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiSecCertificate } extension WebKitLibraryPigeonProxyApiDelegate { - func pigeonApiURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) - -> PigeonApiURLResponse - { - return PigeonApiURLResponse( - pigeonRegistrar: registrar, delegate: PigeonApiDelegateURLResponse()) + func pigeonApiURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLResponse { + return PigeonApiURLResponse(pigeonRegistrar: registrar, delegate: PigeonApiDelegateURLResponse()) } func pigeonApiWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebView { return PigeonApiWKWebView(pigeonRegistrar: registrar, delegate: PigeonApiDelegateWKWebView()) @@ -544,68 +512,43 @@ open class WebKitLibraryPigeonProxyApiRegistrar { } func setUp() { - WebKitLibraryPigeonInstanceManagerApi.setUpMessageHandlers( - binaryMessenger: binaryMessenger, instanceManager: instanceManager) - PigeonApiURLRequest.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLRequest(self)) - PigeonApiWKUserScript.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUserScript(self)) - PigeonApiHTTPCookie.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiHTTPCookie(self)) - PigeonApiAuthenticationChallengeResponse.setUpMessageHandlers( - binaryMessenger: binaryMessenger, - api: apiDelegate.pigeonApiAuthenticationChallengeResponse(self)) - PigeonApiWKWebsiteDataStore.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebsiteDataStore(self)) - PigeonApiUIView.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIView(self)) - PigeonApiUIScrollView.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIScrollView(self)) - PigeonApiWKWebViewConfiguration.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebViewConfiguration(self)) - PigeonApiWKUserContentController.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUserContentController(self)) - PigeonApiWKPreferences.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKPreferences(self)) - PigeonApiWKScriptMessageHandler.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKScriptMessageHandler(self)) - PigeonApiWKNavigationDelegate.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKNavigationDelegate(self)) - PigeonApiNSObject.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiNSObject(self)) - PigeonApiUIViewWKWebView.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIViewWKWebView(self)) - PigeonApiNSViewWKWebView.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiNSViewWKWebView(self)) - PigeonApiWKUIDelegate.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUIDelegate(self)) - PigeonApiWKHTTPCookieStore.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKHTTPCookieStore(self)) - PigeonApiUIScrollViewDelegate.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIScrollViewDelegate(self)) - PigeonApiURLCredential.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLCredential(self)) - PigeonApiURLAuthenticationChallenge.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLAuthenticationChallenge(self)) - PigeonApiURL.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURL(self)) - PigeonApiWKWebpagePreferences.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebpagePreferences(self)) + WebKitLibraryPigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger: binaryMessenger, instanceManager: instanceManager) + PigeonApiURLRequest.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLRequest(self)) + PigeonApiWKUserScript.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUserScript(self)) + PigeonApiHTTPCookie.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiHTTPCookie(self)) + PigeonApiAuthenticationChallengeResponse.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiAuthenticationChallengeResponse(self)) + PigeonApiWKWebsiteDataStore.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebsiteDataStore(self)) + PigeonApiUIView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIView(self)) + PigeonApiUIScrollView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIScrollView(self)) + PigeonApiWKWebViewConfiguration.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebViewConfiguration(self)) + PigeonApiWKUserContentController.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUserContentController(self)) + PigeonApiWKPreferences.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKPreferences(self)) + PigeonApiWKScriptMessageHandler.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKScriptMessageHandler(self)) + PigeonApiWKNavigationDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKNavigationDelegate(self)) + PigeonApiNSObject.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiNSObject(self)) + PigeonApiUIViewWKWebView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIViewWKWebView(self)) + PigeonApiNSViewWKWebView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiNSViewWKWebView(self)) + PigeonApiWKUIDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUIDelegate(self)) + PigeonApiWKHTTPCookieStore.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKHTTPCookieStore(self)) + PigeonApiUIScrollViewDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIScrollViewDelegate(self)) + PigeonApiURLCredential.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLCredential(self)) + PigeonApiURLAuthenticationChallenge.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLAuthenticationChallenge(self)) + PigeonApiURL.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURL(self)) + PigeonApiWKWebpagePreferences.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebpagePreferences(self)) + PigeonApiSecTrust.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiSecTrust(self)) + PigeonApiSecCertificate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiSecCertificate(self)) } func tearDown() { - WebKitLibraryPigeonInstanceManagerApi.setUpMessageHandlers( - binaryMessenger: binaryMessenger, instanceManager: nil) + WebKitLibraryPigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger: binaryMessenger, instanceManager: nil) PigeonApiURLRequest.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKUserScript.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiHTTPCookie.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) - PigeonApiAuthenticationChallengeResponse.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: nil) + PigeonApiAuthenticationChallengeResponse.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKWebsiteDataStore.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiUIView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiUIScrollView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKWebViewConfiguration.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) - PigeonApiWKUserContentController.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: nil) + PigeonApiWKUserContentController.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKPreferences.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKScriptMessageHandler.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKNavigationDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) @@ -616,10 +559,11 @@ open class WebKitLibraryPigeonProxyApiRegistrar { PigeonApiWKHTTPCookieStore.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiUIScrollViewDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiURLCredential.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) - PigeonApiURLAuthenticationChallenge.setUpMessageHandlers( - binaryMessenger: binaryMessenger, api: nil) + PigeonApiURLAuthenticationChallenge.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiURL.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKWebpagePreferences.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) + PigeonApiSecTrust.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) + PigeonApiSecCertificate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) } } private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStandardReaderWriter { @@ -658,272 +602,252 @@ private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStand } override func writeValue(_ value: Any) { - if value is [Any] || value is Bool || value is Data || value is [AnyHashable: Any] - || value is Double || value is FlutterStandardTypedData || value is Int64 || value is String - || value is KeyValueObservingOptions || value is KeyValueChange - || value is KeyValueChangeKey || value is UserScriptInjectionTime - || value is AudiovisualMediaType || value is WebsiteDataType - || value is NavigationActionPolicy || value is NavigationResponsePolicy - || value is HttpCookiePropertyKey || value is NavigationType || value is PermissionDecision - || value is MediaCaptureType || value is UrlSessionAuthChallengeDisposition - || value is UrlCredentialPersistence - { + if value is [Any] || value is Bool || value is Data || value is [AnyHashable: Any] || value is Double || value is FlutterStandardTypedData || value is Int64 || value is String || value is KeyValueObservingOptions || value is KeyValueChange || value is KeyValueChangeKey || value is UserScriptInjectionTime || value is AudiovisualMediaType || value is WebsiteDataType || value is NavigationActionPolicy || value is NavigationResponsePolicy || value is HttpCookiePropertyKey || value is NavigationType || value is PermissionDecision || value is MediaCaptureType || value is UrlSessionAuthChallengeDisposition || value is UrlCredentialPersistence || value is DartSecTrustResultType { super.writeValue(value) return } + if let instance = value as? URLRequestWrapper { pigeonRegistrar.apiDelegate.pigeonApiURLRequest(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? HTTPURLResponse { pigeonRegistrar.apiDelegate.pigeonApiHTTPURLResponse(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? URLResponse { pigeonRegistrar.apiDelegate.pigeonApiURLResponse(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKUserScript { pigeonRegistrar.apiDelegate.pigeonApiWKUserScript(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKNavigationAction { pigeonRegistrar.apiDelegate.pigeonApiWKNavigationAction(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKNavigationResponse { - pigeonRegistrar.apiDelegate.pigeonApiWKNavigationResponse(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKNavigationResponse(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKFrameInfo { pigeonRegistrar.apiDelegate.pigeonApiWKFrameInfo(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? NSError { pigeonRegistrar.apiDelegate.pigeonApiNSError(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKScriptMessage { pigeonRegistrar.apiDelegate.pigeonApiWKScriptMessage(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKSecurityOrigin { pigeonRegistrar.apiDelegate.pigeonApiWKSecurityOrigin(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? HTTPCookie { pigeonRegistrar.apiDelegate.pigeonApiHTTPCookie(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? AuthenticationChallengeResponse { - pigeonRegistrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKWebsiteDataStore { pigeonRegistrar.apiDelegate.pigeonApiWKWebsiteDataStore(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } #if !os(macOS) - if let instance = value as? UIScrollView { - pigeonRegistrar.apiDelegate.pigeonApiUIScrollView(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) - return - } + if let instance = value as? UIScrollView { + pigeonRegistrar.apiDelegate.pigeonApiUIScrollView(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + return + } #endif if let instance = value as? WKWebViewConfiguration { - pigeonRegistrar.apiDelegate.pigeonApiWKWebViewConfiguration(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKWebViewConfiguration(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKUserContentController { - pigeonRegistrar.apiDelegate.pigeonApiWKUserContentController(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKUserContentController(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKPreferences { pigeonRegistrar.apiDelegate.pigeonApiWKPreferences(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKScriptMessageHandler { - pigeonRegistrar.apiDelegate.pigeonApiWKScriptMessageHandler(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKScriptMessageHandler(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKNavigationDelegate { - pigeonRegistrar.apiDelegate.pigeonApiWKNavigationDelegate(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKNavigationDelegate(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } #if !os(macOS) - if let instance = value as? WKWebView { - pigeonRegistrar.apiDelegate.pigeonApiUIViewWKWebView(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) - return - } + if let instance = value as? WKWebView { + pigeonRegistrar.apiDelegate.pigeonApiUIViewWKWebView(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + return + } #endif #if !os(macOS) - if let instance = value as? UIView { - pigeonRegistrar.apiDelegate.pigeonApiUIView(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) - return - } + if let instance = value as? UIView { + pigeonRegistrar.apiDelegate.pigeonApiUIView(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + return + } #endif #if !os(iOS) - if let instance = value as? WKWebView { - pigeonRegistrar.apiDelegate.pigeonApiNSViewWKWebView(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) - return - } + if let instance = value as? WKWebView { + pigeonRegistrar.apiDelegate.pigeonApiNSViewWKWebView(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + return + } #endif if let instance = value as? WKWebView { @@ -932,45 +856,42 @@ private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStand ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKUIDelegate { pigeonRegistrar.apiDelegate.pigeonApiWKUIDelegate(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? WKHTTPCookieStore { pigeonRegistrar.apiDelegate.pigeonApiWKHTTPCookieStore(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } #if !os(macOS) - if let instance = value as? UIScrollViewDelegate { - pigeonRegistrar.apiDelegate.pigeonApiUIScrollViewDelegate(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) - return - } + if let instance = value as? UIScrollViewDelegate { + pigeonRegistrar.apiDelegate.pigeonApiUIScrollViewDelegate(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + return + } #endif if let instance = value as? URLCredential { @@ -979,70 +900,100 @@ private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStand ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? URLProtectionSpace { pigeonRegistrar.apiDelegate.pigeonApiURLProtectionSpace(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? URLAuthenticationChallenge { - pigeonRegistrar.apiDelegate.pigeonApiURLAuthenticationChallenge(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiURLAuthenticationChallenge(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if let instance = value as? URL { pigeonRegistrar.apiDelegate.pigeonApiURL(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + if #available(iOS 13.0.0, macOS 10.15.0, *), let instance = value as? WKWebpagePreferences { - pigeonRegistrar.apiDelegate.pigeonApiWKWebpagePreferences(pigeonRegistrar) - .pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKWebpagePreferences(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + return + } + + + if let instance = value as? GetTrustResultResponse { + pigeonRegistrar.apiDelegate.pigeonApiGetTrustResultResponse(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } + + if let instance = value as? SecTrustWrapper { + pigeonRegistrar.apiDelegate.pigeonApiSecTrust(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + return + } + + + if let instance = value as? SecCertificateWrapper { + pigeonRegistrar.apiDelegate.pigeonApiSecCertificate(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + return + } + + if let instance = value as? NSObject { pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference( - forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) return } - if let instance = value as AnyObject?, - pigeonRegistrar.instanceManager.containsInstance(instance) + + if let instance = value as AnyObject?, pigeonRegistrar.instanceManager.containsInstance(instance) { super.writeByte(128) super.writeValue( @@ -1060,13 +1011,11 @@ private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStand } override func reader(with data: Data) -> FlutterStandardReader { - return WebKitLibraryPigeonInternalProxyApiCodecReader( - data: data, pigeonRegistrar: pigeonRegistrar) + return WebKitLibraryPigeonInternalProxyApiCodecReader(data: data, pigeonRegistrar: pigeonRegistrar) } override func writer(with data: NSMutableData) -> FlutterStandardWriter { - return WebKitLibraryPigeonInternalProxyApiCodecWriter( - data: data, pigeonRegistrar: pigeonRegistrar) + return WebKitLibraryPigeonInternalProxyApiCodecWriter(data: data, pigeonRegistrar: pigeonRegistrar) } } @@ -1335,6 +1284,31 @@ enum UrlCredentialPersistence: Int { case synchronizable = 3 } +/// Trust evaluation result codes. +/// +/// See https://developer.apple.com/documentation/security/sectrustresulttype?language=objc. +enum DartSecTrustResultType: Int { + /// The user did not specify a trust setting. + case unspecified = 0 + /// The user granted permission to trust the certificate for the purposes + /// designated in the specified policies. + case proceed = 1 + /// The user specified that the certificate should not be trusted. + case deny = 2 + /// Trust is denied, but recovery may be possible. + case recoverableTrustFailure = 3 + /// Trust is denied and no simple fix is available. + case fatalTrustFailure = 4 + /// A value that indicates a failure other than trust evaluation. + case otherError = 5 + /// An indication of an invalid setting or result. + case invalid = 6 + /// User confirmation is required before proceeding. + case confirm = 7 + /// The type is not recognized by this wrapper. + case unknown = 8 +} + private class WebKitLibraryPigeonCodecReader: FlutterStandardReader { override func readValue(ofType type: UInt8) -> Any? { switch type { @@ -1422,6 +1396,12 @@ private class WebKitLibraryPigeonCodecReader: FlutterStandardReader { return UrlCredentialPersistence(rawValue: enumResultAsInt) } return nil + case 143: + let enumResultAsInt: Int? = nilOrValue(self.readValue() as! Int?) + if let enumResultAsInt = enumResultAsInt { + return DartSecTrustResultType(rawValue: enumResultAsInt) + } + return nil default: return super.readValue(ofType: type) } @@ -1472,6 +1452,9 @@ private class WebKitLibraryPigeonCodecWriter: FlutterStandardWriter { } else if let value = value as? UrlCredentialPersistence { super.writeByte(142) super.writeValue(value.rawValue) + } else if let value = value as? DartSecTrustResultType { + super.writeByte(143) + super.writeValue(value.rawValue) } else { super.writeValue(value) } @@ -1493,36 +1476,27 @@ class WebKitLibraryPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable } protocol PigeonApiDelegateURLRequest { - func pigeonDefaultConstructor(pigeonApi: PigeonApiURLRequest, url: String) throws - -> URLRequestWrapper + func pigeonDefaultConstructor(pigeonApi: PigeonApiURLRequest, url: String) throws -> URLRequestWrapper /// The URL being requested. func getUrl(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> String? /// The HTTP request method. - func setHttpMethod( - pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, method: String?) throws + func setHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, method: String?) throws /// The HTTP request method. - func getHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws - -> String? + func getHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> String? /// The request body. - func setHttpBody( - pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, - body: FlutterStandardTypedData?) throws + func setHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, body: FlutterStandardTypedData?) throws /// The request body. - func getHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws - -> FlutterStandardTypedData? + func getHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> FlutterStandardTypedData? /// A dictionary containing all of the HTTP header fields for a request. - func setAllHttpHeaderFields( - pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, fields: [String: String]?) - throws + func setAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, fields: [String: String]?) throws /// A dictionary containing all of the HTTP header fields for a request. - func getAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) - throws -> [String: String]? + func getAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> [String: String]? } protocol PigeonApiProtocolURLRequest { } -final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { +final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateURLRequest ///An implementation of [NSObject] used to access callback methods @@ -1530,23 +1504,17 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLRequest) - { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLRequest) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLRequest? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLRequest?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.pigeon_defaultConstructor", - binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) if let api = api { pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -1554,8 +1522,8 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { let urlArg = args[1] as! String do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, url: urlArg), - withIdentifier: pigeonIdentifierArg) +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, url: urlArg), +withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1564,16 +1532,13 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } - let getUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getUrl", - binaryMessenger: binaryMessenger, codec: codec) + let getUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getUrl", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getUrlChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper do { - let result = try api.pigeonDelegate.getUrl( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -1582,17 +1547,14 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } else { getUrlChannel.setMessageHandler(nil) } - let setHttpMethodChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setHttpMethod", - binaryMessenger: binaryMessenger, codec: codec) + let setHttpMethodChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setHttpMethod", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setHttpMethodChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper let methodArg: String? = nilOrValue(args[1]) do { - try api.pigeonDelegate.setHttpMethod( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, method: methodArg) + try api.pigeonDelegate.setHttpMethod(pigeonApi: api, pigeonInstance: pigeonInstanceArg, method: methodArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1601,16 +1563,13 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } else { setHttpMethodChannel.setMessageHandler(nil) } - let getHttpMethodChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getHttpMethod", - binaryMessenger: binaryMessenger, codec: codec) + let getHttpMethodChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getHttpMethod", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getHttpMethodChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper do { - let result = try api.pigeonDelegate.getHttpMethod( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getHttpMethod(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -1619,17 +1578,14 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } else { getHttpMethodChannel.setMessageHandler(nil) } - let setHttpBodyChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setHttpBody", - binaryMessenger: binaryMessenger, codec: codec) + let setHttpBodyChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setHttpBody", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setHttpBodyChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper let bodyArg: FlutterStandardTypedData? = nilOrValue(args[1]) do { - try api.pigeonDelegate.setHttpBody( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, body: bodyArg) + try api.pigeonDelegate.setHttpBody(pigeonApi: api, pigeonInstance: pigeonInstanceArg, body: bodyArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1638,16 +1594,13 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } else { setHttpBodyChannel.setMessageHandler(nil) } - let getHttpBodyChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getHttpBody", - binaryMessenger: binaryMessenger, codec: codec) + let getHttpBodyChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getHttpBody", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getHttpBodyChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper do { - let result = try api.pigeonDelegate.getHttpBody( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getHttpBody(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -1656,17 +1609,14 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } else { getHttpBodyChannel.setMessageHandler(nil) } - let setAllHttpHeaderFieldsChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setAllHttpHeaderFields", - binaryMessenger: binaryMessenger, codec: codec) + let setAllHttpHeaderFieldsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setAllHttpHeaderFields", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setAllHttpHeaderFieldsChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper let fieldsArg: [String: String]? = nilOrValue(args[1]) do { - try api.pigeonDelegate.setAllHttpHeaderFields( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, fields: fieldsArg) + try api.pigeonDelegate.setAllHttpHeaderFields(pigeonApi: api, pigeonInstance: pigeonInstanceArg, fields: fieldsArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1675,16 +1625,13 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } else { setAllHttpHeaderFieldsChannel.setMessageHandler(nil) } - let getAllHttpHeaderFieldsChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getAllHttpHeaderFields", - binaryMessenger: binaryMessenger, codec: codec) + let getAllHttpHeaderFieldsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getAllHttpHeaderFields", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getAllHttpHeaderFieldsChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper do { - let result = try api.pigeonDelegate.getAllHttpHeaderFields( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getAllHttpHeaderFields(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -1696,26 +1643,21 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } ///Creates a Dart instance of URLRequest and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: URLRequestWrapper, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: URLRequestWrapper, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -1733,16 +1675,197 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { } } } + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `URLRequest`. +/// +/// 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 RequestProxyAPIDelegate : PigeonApiDelegateURLRequest { + func pigeonDefaultConstructor(pigeonApi: PigeonApiURLRequest, url: String) throws -> URLRequestWrapper { + return URLRequest(,url: url) + } + + func getUrl(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> String? { + return pigeonInstance.url + } + + func setHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, method: String?) throws { + pigeonInstance.httpMethod = method: method + } + + func getHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> String? { + return pigeonInstance.httpMethod + } + + func setHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, body: FlutterStandardTypedData?) throws { + pigeonInstance.httpBody = body: body + } + + func getHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> FlutterStandardTypedData? { + return pigeonInstance.httpBody + } + + func setAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, fields: [String: String]?) throws { + pigeonInstance.allHttpHeaderFields = fields: fields + } + + func getAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> [String: String]? { + return pigeonInstance.allHttpHeaderFields + } + +} +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class RequestProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, url: "myString") + XCTAssertNotNil(instance) + } + + func testGetUrl() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) + + let instance = TestRequest() + let value = api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getUrlCalled) + XCTAssertEqual(value, instance.getUrl()) + } + + func testSetHttpMethod() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) + + let instance = TestRequest() + let method = "myString" + api.pigeonDelegate.setHttpMethod(pigeonApi: api, pigeonInstance: instance, method: method) + + XCTAssertEqual(instance.setHttpMethodArgs, [method]) + } + + func testGetHttpMethod() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) + + let instance = TestRequest() + let value = api.pigeonDelegate.getHttpMethod(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getHttpMethodCalled) + XCTAssertEqual(value, instance.getHttpMethod()) + } + + func testSetHttpBody() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) + + let instance = TestRequest() + let body = byteArrayOf(0xA1.toByte()) + api.pigeonDelegate.setHttpBody(pigeonApi: api, pigeonInstance: instance, body: body) + + XCTAssertEqual(instance.setHttpBodyArgs, [body]) + } + + func testGetHttpBody() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) + + let instance = TestRequest() + let value = api.pigeonDelegate.getHttpBody(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getHttpBodyCalled) + XCTAssertEqual(value, instance.getHttpBody()) + } + + func testSetAllHttpHeaderFields() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) + + let instance = TestRequest() + let fields = ["myString": "myString"] + api.pigeonDelegate.setAllHttpHeaderFields(pigeonApi: api, pigeonInstance: instance, fields: fields) + + XCTAssertEqual(instance.setAllHttpHeaderFieldsArgs, [fields]) + } + + func testGetAllHttpHeaderFields() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) + + let instance = TestRequest() + let value = api.pigeonDelegate.getAllHttpHeaderFields(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getAllHttpHeaderFieldsCalled) + XCTAssertEqual(value, instance.getAllHttpHeaderFields()) + } + +} +class TestRequest: URLRequest { + var getUrlCalled = false + var setHttpMethodArgs: [AnyHashable?]? = nil + var getHttpMethodCalled = false + var setHttpBodyArgs: [AnyHashable?]? = nil + var getHttpBodyCalled = false + var setAllHttpHeaderFieldsArgs: [AnyHashable?]? = nil + var getAllHttpHeaderFieldsCalled = false + + + override func getUrl() { + getUrlCalled = true + } + override func setHttpMethod() { + setHttpMethodArgs = [method] + } + override func getHttpMethod() { + getHttpMethodCalled = true + } + override func setHttpBody() { + setHttpBodyArgs = [body] + } + override func getHttpBody() { + getHttpBodyCalled = true + } + override func setAllHttpHeaderFields() { + setAllHttpHeaderFieldsArgs = [fields] + } + override func getAllHttpHeaderFields() { + getAllHttpHeaderFieldsCalled = true + } +} +*/ + protocol PigeonApiDelegateHTTPURLResponse { /// The response’s HTTP status code. - func statusCode(pigeonApi: PigeonApiHTTPURLResponse, pigeonInstance: HTTPURLResponse) throws - -> Int64 + func statusCode(pigeonApi: PigeonApiHTTPURLResponse, pigeonInstance: HTTPURLResponse) throws -> Int64 } protocol PigeonApiProtocolHTTPURLResponse { } -final class PigeonApiHTTPURLResponse: PigeonApiProtocolHTTPURLResponse { +final class PigeonApiHTTPURLResponse: PigeonApiProtocolHTTPURLResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateHTTPURLResponse ///An implementation of [URLResponse] used to access callback methods @@ -1750,36 +1873,27 @@ final class PigeonApiHTTPURLResponse: PigeonApiProtocolHTTPURLResponse { return pigeonRegistrar.apiDelegate.pigeonApiURLResponse(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateHTTPURLResponse - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateHTTPURLResponse) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of HTTPURLResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: HTTPURLResponse, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: HTTPURLResponse, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let statusCodeArg = try! pigeonDelegate.statusCode( - pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let statusCodeArg = try! pigeonDelegate.statusCode(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPURLResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPURLResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg, statusCodeArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -1797,13 +1911,60 @@ final class PigeonApiHTTPURLResponse: PigeonApiProtocolHTTPURLResponse { } } } + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `HTTPURLResponse`. +/// +/// 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 ResponseProxyAPIDelegate : PigeonApiDelegateHTTPURLResponse { + func statusCode(pigeonApi: PigeonApiHTTPURLResponse, pigeonInstance: HTTPURLResponse) throws -> Int64 { + return pigeonInstance.statusCode + } + +} +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ResponseProxyAPITests: XCTestCase { + func testStatusCode() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiHTTPURLResponse(registrar) + + let instance = TestResponse() + let value = try? api.pigeonDelegate.statusCode(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.statusCode) + } + +} +*/ + open class PigeonApiDelegateURLResponse { } protocol PigeonApiProtocolURLResponse { } -final class PigeonApiURLResponse: PigeonApiProtocolURLResponse { +final class PigeonApiURLResponse: PigeonApiProtocolURLResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateURLResponse ///An implementation of [NSObject] used to access callback methods @@ -1811,33 +1972,26 @@ final class PigeonApiURLResponse: PigeonApiProtocolURLResponse { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLResponse - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLResponse) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of URLResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: URLResponse, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: URLResponse, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.URLResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -1855,53 +2009,74 @@ final class PigeonApiURLResponse: PigeonApiProtocolURLResponse { } } } -protocol PigeonApiDelegateWKUserScript { - /// Creates a user script object that contains the specified source code and - /// attributes. - func pigeonDefaultConstructor( - pigeonApi: PigeonApiWKUserScript, source: String, injectionTime: UserScriptInjectionTime, - isForMainFrameOnly: Bool - ) throws -> WKUserScript - /// The script’s source code. - func source(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> String - /// The time at which to inject the script into the webpage. - func injectionTime(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws - -> UserScriptInjectionTime - /// A Boolean value that indicates whether to inject the script into the main - /// frame or all frames. - func isForMainFrameOnly(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws - -> Bool -} -protocol PigeonApiProtocolWKUserScript { +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `URLResponse`. +/// +/// 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 ResponseProxyAPIDelegate : PigeonApiDelegateURLResponse { } +*/ -final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { - unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ResponseProxyAPITests: XCTestCase { +} +*/ + +protocol PigeonApiDelegateWKUserScript { + /// Creates a user script object that contains the specified source code and + /// attributes. + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUserScript, source: String, injectionTime: UserScriptInjectionTime, isForMainFrameOnly: Bool) throws -> WKUserScript + /// The script’s source code. + func source(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> String + /// The time at which to inject the script into the webpage. + func injectionTime(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> UserScriptInjectionTime + /// A Boolean value that indicates whether to inject the script into the main + /// frame or all frames. + func isForMainFrameOnly(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> Bool +} + +protocol PigeonApiProtocolWKUserScript { +} + +final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKUserScript ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUserScript - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUserScript) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUserScript? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUserScript?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserScript.pigeon_defaultConstructor", - binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserScript.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) if let api = api { pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -1911,10 +2086,8 @@ final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { let isForMainFrameOnlyArg = args[3] as! Bool do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.pigeonDefaultConstructor( - pigeonApi: api, source: sourceArg, injectionTime: injectionTimeArg, - isForMainFrameOnly: isForMainFrameOnlyArg), - withIdentifier: pigeonIdentifierArg) +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, source: sourceArg, injectionTime: injectionTimeArg, isForMainFrameOnly: isForMainFrameOnlyArg), +withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1926,34 +2099,25 @@ final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { } ///Creates a Dart instance of WKUserScript and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKUserScript, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKUserScript, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let sourceArg = try! pigeonDelegate.source(pigeonApi: self, pigeonInstance: pigeonInstance) - let injectionTimeArg = try! pigeonDelegate.injectionTime( - pigeonApi: self, pigeonInstance: pigeonInstance) - let isForMainFrameOnlyArg = try! pigeonDelegate.isForMainFrameOnly( - pigeonApi: self, pigeonInstance: pigeonInstance) + let injectionTimeArg = try! pigeonDelegate.injectionTime(pigeonApi: self, pigeonInstance: pigeonInstance) + let isForMainFrameOnlyArg = try! pigeonDelegate.isForMainFrameOnly(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserScript.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage( - [pigeonIdentifierArg, sourceArg, injectionTimeArg, isForMainFrameOnlyArg] as [Any?] - ) { response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserScript.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, sourceArg, injectionTimeArg, isForMainFrameOnlyArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -1970,24 +2134,115 @@ final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { } } } + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKUserScript`. +/// +/// 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 UserScriptProxyAPIDelegate : PigeonApiDelegateWKUserScript { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUserScript, source: String, injectionTime: UserScriptInjectionTime, isForMainFrameOnly: Bool) throws -> WKUserScript { + return WKUserScript() + } + + func source(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> String { + return pigeonInstance.source + } + + func injectionTime(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> UserScriptInjectionTime { + switch pigeonInstance.injectionTime { + case .atDocumentStart: + return .atDocumentStart + case .atDocumentEnd: + return .atDocumentEnd + @unknown default: + return .unknown + } + } + + func isForMainFrameOnly(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> Bool { + return pigeonInstance.isForMainFrameOnly + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class UserScriptProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserScript(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api source: "myString", injectionTime: .atDocumentStart, isForMainFrameOnly: true) + XCTAssertNotNil(instance) + } + + func testSource() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserScript(registrar) + + let instance = TestUserScript() + let value = try? api.pigeonDelegate.source(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.source) + } + + func testInjectionTime() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserScript(registrar) + + let instance = TestUserScript() + let value = try? api.pigeonDelegate.injectionTime(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.injectionTime) + } + + func testIsForMainFrameOnly() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserScript(registrar) + + let instance = TestUserScript() + let value = try? api.pigeonDelegate.isForMainFrameOnly(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.isForMainFrameOnly) + } + +} +*/ + protocol PigeonApiDelegateWKNavigationAction { /// The URL request object associated with the navigation action. - func request(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws - -> URLRequestWrapper + func request(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> URLRequestWrapper /// The frame in which to display the new content. /// /// If the target of the navigation is a new window, this property is nil. - func targetFrame(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) - throws -> WKFrameInfo? + func targetFrame(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> WKFrameInfo? /// The type of action that triggered the navigation. - func navigationType(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) - throws -> NavigationType + func navigationType(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> NavigationType } protocol PigeonApiProtocolWKNavigationAction { } -final class PigeonApiWKNavigationAction: PigeonApiProtocolWKNavigationAction { +final class PigeonApiWKNavigationAction: PigeonApiProtocolWKNavigationAction { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKNavigationAction ///An implementation of [NSObject] used to access callback methods @@ -1995,42 +2250,30 @@ final class PigeonApiWKNavigationAction: PigeonApiProtocolWKNavigationAction { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKNavigationAction - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKNavigationAction) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKNavigationAction and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKNavigationAction, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKNavigationAction, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let requestArg = try! pigeonDelegate.request(pigeonApi: self, pigeonInstance: pigeonInstance) - let targetFrameArg = try! pigeonDelegate.targetFrame( - pigeonApi: self, pigeonInstance: pigeonInstance) - let navigationTypeArg = try! pigeonDelegate.navigationType( - pigeonApi: self, pigeonInstance: pigeonInstance) + let targetFrameArg = try! pigeonDelegate.targetFrame(pigeonApi: self, pigeonInstance: pigeonInstance) + let navigationTypeArg = try! pigeonDelegate.navigationType(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationAction.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage( - [pigeonIdentifierArg, requestArg, targetFrameArg, navigationTypeArg] as [Any?] - ) { response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationAction.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, requestArg, targetFrameArg, navigationTypeArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2047,21 +2290,108 @@ final class PigeonApiWKNavigationAction: PigeonApiProtocolWKNavigationAction { } } } + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKNavigationAction`. +/// +/// 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 NavigationActionProxyAPIDelegate : PigeonApiDelegateWKNavigationAction { + func request(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> URLRequestWrapper { + return pigeonInstance.request + } + + func targetFrame(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> WKFrameInfo? { + return pigeonInstance.targetFrame + } + + func navigationType(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> NavigationType { + switch pigeonInstance.navigationType { + case .linkActivated: + return .linkActivated + case .formSubmitted: + return .formSubmitted + case .backForward: + return .backForward + case .reload: + return .reload + case .formResubmitted: + return .formResubmitted + case .other: + return .other + @unknown default: + return .unknown + } + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class NavigationActionProxyAPITests: XCTestCase { + func testRequest() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKNavigationAction(registrar) + + let instance = TestNavigationAction() + let value = try? api.pigeonDelegate.request(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.request) + } + + func testTargetFrame() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKNavigationAction(registrar) + + let instance = TestNavigationAction() + let value = try? api.pigeonDelegate.targetFrame(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.targetFrame) + } + + func testNavigationType() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKNavigationAction(registrar) + + let instance = TestNavigationAction() + let value = try? api.pigeonDelegate.navigationType(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.navigationType) + } + +} +*/ + protocol PigeonApiDelegateWKNavigationResponse { /// The frame’s response. - func response(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) - throws -> URLResponse + func response(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) throws -> URLResponse /// A Boolean value that indicates whether the response targets the web view’s /// main frame. - func isForMainFrame( - pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse - ) throws -> Bool + func isForMainFrame(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) throws -> Bool } protocol PigeonApiProtocolWKNavigationResponse { } -final class PigeonApiWKNavigationResponse: PigeonApiProtocolWKNavigationResponse { +final class PigeonApiWKNavigationResponse: PigeonApiProtocolWKNavigationResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKNavigationResponse ///An implementation of [NSObject] used to access callback methods @@ -2069,40 +2399,29 @@ final class PigeonApiWKNavigationResponse: PigeonApiProtocolWKNavigationResponse return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKNavigationResponse - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKNavigationResponse) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKNavigationResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKNavigationResponse, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKNavigationResponse, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let responseArg = try! pigeonDelegate.response( - pigeonApi: self, pigeonInstance: pigeonInstance) - let isForMainFrameArg = try! pigeonDelegate.isForMainFrame( - pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let responseArg = try! pigeonDelegate.response(pigeonApi: self, pigeonInstance: pigeonInstance) + let isForMainFrameArg = try! pigeonDelegate.isForMainFrame(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, responseArg, isForMainFrameArg] as [Any?]) { - response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, responseArg, isForMainFrameArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2119,19 +2438,79 @@ final class PigeonApiWKNavigationResponse: PigeonApiProtocolWKNavigationResponse } } } + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKNavigationResponse`. +/// +/// 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 NavigationResponseProxyAPIDelegate : PigeonApiDelegateWKNavigationResponse { + func response(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) throws -> URLResponse { + return pigeonInstance.response + } + + func isForMainFrame(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) throws -> Bool { + return pigeonInstance.isForMainFrame + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class NavigationResponseProxyAPITests: XCTestCase { + func testResponse() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKNavigationResponse(registrar) + + let instance = TestNavigationResponse() + let value = try? api.pigeonDelegate.response(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.response) + } + + func testIsForMainFrame() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKNavigationResponse(registrar) + + let instance = TestNavigationResponse() + let value = try? api.pigeonDelegate.isForMainFrame(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.isForMainFrame) + } + +} +*/ + protocol PigeonApiDelegateWKFrameInfo { /// A Boolean value indicating whether the frame is the web site's main frame /// or a subframe. func isMainFrame(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws -> Bool /// The frame’s current request. - func request(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws - -> URLRequestWrapper? + func request(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws -> URLRequestWrapper? } protocol PigeonApiProtocolWKFrameInfo { } -final class PigeonApiWKFrameInfo: PigeonApiProtocolWKFrameInfo { +final class PigeonApiWKFrameInfo: PigeonApiProtocolWKFrameInfo { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKFrameInfo ///An implementation of [NSObject] used to access callback methods @@ -2139,36 +2518,28 @@ final class PigeonApiWKFrameInfo: PigeonApiProtocolWKFrameInfo { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKFrameInfo - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKFrameInfo) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKFrameInfo and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKFrameInfo, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKFrameInfo, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let isMainFrameArg = try! pigeonDelegate.isMainFrame( - pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let isMainFrameArg = try! pigeonDelegate.isMainFrame(pigeonApi: self, pigeonInstance: pigeonInstance) let requestArg = try! pigeonDelegate.request(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKFrameInfo.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKFrameInfo.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg, isMainFrameArg, requestArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -2186,6 +2557,67 @@ final class PigeonApiWKFrameInfo: PigeonApiProtocolWKFrameInfo { } } } + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKFrameInfo`. +/// +/// 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 FrameInfoProxyAPIDelegate : PigeonApiDelegateWKFrameInfo { + func isMainFrame(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws -> Bool { + return pigeonInstance.isMainFrame + } + + func request(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws -> URLRequestWrapper? { + return pigeonInstance.request + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class FrameInfoProxyAPITests: XCTestCase { + func testIsMainFrame() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKFrameInfo(registrar) + + let instance = TestFrameInfo() + let value = try? api.pigeonDelegate.isMainFrame(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.isMainFrame) + } + + func testRequest() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKFrameInfo(registrar) + + let instance = TestFrameInfo() + let value = try? api.pigeonDelegate.request(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.request) + } + +} +*/ + protocol PigeonApiDelegateNSError { /// The error code. func code(pigeonApi: PigeonApiNSError, pigeonInstance: NSError) throws -> Int64 @@ -2198,7 +2630,7 @@ protocol PigeonApiDelegateNSError { protocol PigeonApiProtocolNSError { } -final class PigeonApiNSError: PigeonApiProtocolNSError { +final class PigeonApiNSError: PigeonApiProtocolNSError { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateNSError ///An implementation of [NSObject] used to access callback methods @@ -2211,32 +2643,25 @@ final class PigeonApiNSError: PigeonApiProtocolNSError { self.pigeonDelegate = delegate } ///Creates a Dart instance of NSError and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: NSError, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: NSError, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let codeArg = try! pigeonDelegate.code(pigeonApi: self, pigeonInstance: pigeonInstance) let domainArg = try! pigeonDelegate.domain(pigeonApi: self, pigeonInstance: pigeonInstance) - let userInfoArg = try! pigeonDelegate.userInfo( - pigeonApi: self, pigeonInstance: pigeonInstance) + let userInfoArg = try! pigeonDelegate.userInfo(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.NSError.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, codeArg, domainArg, userInfoArg] as [Any?]) { - response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.NSError.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, codeArg, domainArg, userInfoArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2253,6 +2678,81 @@ final class PigeonApiNSError: PigeonApiProtocolNSError { } } } + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `NSError`. +/// +/// 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 ErrorProxyAPIDelegate : PigeonApiDelegateNSError { + func code(pigeonApi: PigeonApiNSError, pigeonInstance: NSError) throws -> Int64 { + return pigeonInstance.code + } + + func domain(pigeonApi: PigeonApiNSError, pigeonInstance: NSError) throws -> String { + return pigeonInstance.domain + } + + func userInfo(pigeonApi: PigeonApiNSError, pigeonInstance: NSError) throws -> [String: Any?] { + return pigeonInstance.userInfo + } + +} +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ErrorProxyAPITests: XCTestCase { + func testCode() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSError(registrar) + + let instance = TestError() + let value = try? api.pigeonDelegate.code(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.code) + } + + func testDomain() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSError(registrar) + + let instance = TestError() + let value = try? api.pigeonDelegate.domain(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.domain) + } + + func testUserInfo() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSError(registrar) + + let instance = TestError() + let value = try? api.pigeonDelegate.userInfo(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.userInfo) + } + +} +*/ + protocol PigeonApiDelegateWKScriptMessage { /// The name of the message handler to which the message is sent. func name(pigeonApi: PigeonApiWKScriptMessage, pigeonInstance: WKScriptMessage) throws -> String @@ -2263,7 +2763,7 @@ protocol PigeonApiDelegateWKScriptMessage { protocol PigeonApiProtocolWKScriptMessage { } -final class PigeonApiWKScriptMessage: PigeonApiProtocolWKScriptMessage { +final class PigeonApiWKScriptMessage: PigeonApiProtocolWKScriptMessage { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKScriptMessage ///An implementation of [NSObject] used to access callback methods @@ -2271,36 +2771,28 @@ final class PigeonApiWKScriptMessage: PigeonApiProtocolWKScriptMessage { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKScriptMessage - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKScriptMessage) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKScriptMessage and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKScriptMessage, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKScriptMessage, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let nameArg = try! pigeonDelegate.name(pigeonApi: self, pigeonInstance: pigeonInstance) let bodyArg = try! pigeonDelegate.body(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessage.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessage.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg, nameArg, bodyArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -2318,61 +2810,111 @@ final class PigeonApiWKScriptMessage: PigeonApiProtocolWKScriptMessage { } } } -protocol PigeonApiDelegateWKSecurityOrigin { - /// The security origin’s host. - func host(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String - /// The security origin's port. - func port(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> Int64 - /// The security origin's protocol. - func securityProtocol(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) - throws -> String -} -protocol PigeonApiProtocolWKSecurityOrigin { -} +/* +// 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. -final class PigeonApiWKSecurityOrigin: PigeonApiProtocolWKSecurityOrigin { - unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKSecurityOrigin - ///An implementation of [NSObject] used to access callback methods - var pigeonApiNSObject: PigeonApiNSObject { - return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKScriptMessage`. +/// +/// 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 ScriptMessageProxyAPIDelegate : PigeonApiDelegateWKScriptMessage { + func name(pigeonApi: PigeonApiWKScriptMessage, pigeonInstance: WKScriptMessage) throws -> String { + return pigeonInstance.name } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKSecurityOrigin - ) { - self.pigeonRegistrar = pigeonRegistrar - self.pigeonDelegate = delegate + func body(pigeonApi: PigeonApiWKScriptMessage, pigeonInstance: WKScriptMessage) throws -> Any? { + return pigeonInstance.body } - ///Creates a Dart instance of WKSecurityOrigin and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKSecurityOrigin, completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ScriptMessageProxyAPITests: XCTestCase { + func testName() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKScriptMessage(registrar) + + let instance = TestScriptMessage() + let value = try? api.pigeonDelegate.name(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.name) + } + + func testBody() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKScriptMessage(registrar) + + let instance = TestScriptMessage() + let value = try? api.pigeonDelegate.body(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.body) + } + +} +*/ + +protocol PigeonApiDelegateWKSecurityOrigin { + /// The security origin’s host. + func host(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String + /// The security origin's port. + func port(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> Int64 + /// The security origin's protocol. + func securityProtocol(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String +} + +protocol PigeonApiProtocolWKSecurityOrigin { +} + +final class PigeonApiWKSecurityOrigin: PigeonApiProtocolWKSecurityOrigin { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateWKSecurityOrigin + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) + } + + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKSecurityOrigin) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate + } + ///Creates a Dart instance of WKSecurityOrigin and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: WKSecurityOrigin, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let hostArg = try! pigeonDelegate.host(pigeonApi: self, pigeonInstance: pigeonInstance) let portArg = try! pigeonDelegate.port(pigeonApi: self, pigeonInstance: pigeonInstance) - let securityProtocolArg = try! pigeonDelegate.securityProtocol( - pigeonApi: self, pigeonInstance: pigeonInstance) + let securityProtocolArg = try! pigeonDelegate.securityProtocol(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKSecurityOrigin.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, hostArg, portArg, securityProtocolArg] as [Any?]) { - response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKSecurityOrigin.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, hostArg, portArg, securityProtocolArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2389,19 +2931,91 @@ final class PigeonApiWKSecurityOrigin: PigeonApiProtocolWKSecurityOrigin { } } } + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKSecurityOrigin`. +/// +/// 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 SecurityOriginProxyAPIDelegate : PigeonApiDelegateWKSecurityOrigin { + func host(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String { + return pigeonInstance.host + } + + func port(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> Int64 { + return pigeonInstance.port + } + + func securityProtocol(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String { + return pigeonInstance.securityProtocol + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class SecurityOriginProxyAPITests: XCTestCase { + func testHost() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKSecurityOrigin(registrar) + + let instance = TestSecurityOrigin() + let value = try? api.pigeonDelegate.host(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.host) + } + + func testPort() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKSecurityOrigin(registrar) + + let instance = TestSecurityOrigin() + let value = try? api.pigeonDelegate.port(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.port) + } + + func testSecurityProtocol() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKSecurityOrigin(registrar) + + let instance = TestSecurityOrigin() + let value = try? api.pigeonDelegate.securityProtocol(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.securityProtocol) + } + +} +*/ + protocol PigeonApiDelegateHTTPCookie { - func pigeonDefaultConstructor( - pigeonApi: PigeonApiHTTPCookie, properties: [HttpCookiePropertyKey: Any] - ) throws -> HTTPCookie + func pigeonDefaultConstructor(pigeonApi: PigeonApiHTTPCookie, properties: [HttpCookiePropertyKey: Any]) throws -> HTTPCookie /// The cookie’s properties. - func getProperties(pigeonApi: PigeonApiHTTPCookie, pigeonInstance: HTTPCookie) throws - -> [HttpCookiePropertyKey: Any]? + func getProperties(pigeonApi: PigeonApiHTTPCookie, pigeonInstance: HTTPCookie) throws -> [HttpCookiePropertyKey: Any]? } protocol PigeonApiProtocolHTTPCookie { } -final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { +final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateHTTPCookie ///An implementation of [NSObject] used to access callback methods @@ -2409,23 +3023,17 @@ final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateHTTPCookie) - { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateHTTPCookie) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiHTTPCookie? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiHTTPCookie?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.pigeon_defaultConstructor", - binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) if let api = api { pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -2433,9 +3041,8 @@ final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { let propertiesArg = args[1] as? [HttpCookiePropertyKey: Any] do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.pigeonDefaultConstructor( - pigeonApi: api, properties: propertiesArg!), - withIdentifier: pigeonIdentifierArg) +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, properties: propertiesArg!), +withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -2444,16 +3051,13 @@ final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } - let getPropertiesChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.getProperties", - binaryMessenger: binaryMessenger, codec: codec) + let getPropertiesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.getProperties", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getPropertiesChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! HTTPCookie do { - let result = try api.pigeonDelegate.getProperties( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getProperties(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -2465,26 +3069,21 @@ final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { } ///Creates a Dart instance of HTTPCookie and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: HTTPCookie, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: HTTPCookie, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -2502,52 +3101,100 @@ final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { } } } + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `HTTPCookie`. +/// +/// 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 CookieProxyAPIDelegate : PigeonApiDelegateHTTPCookie { + func pigeonDefaultConstructor(pigeonApi: PigeonApiHTTPCookie, properties: [HttpCookiePropertyKey: Any]) throws -> HTTPCookie { + return HTTPCookie(,properties: properties) + } + + func getProperties(pigeonApi: PigeonApiHTTPCookie, pigeonInstance: HTTPCookie) throws -> [HttpCookiePropertyKey: Any]? { + return pigeonInstance.properties + } + +} +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class CookieProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiHTTPCookie(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, properties: [.comment: -1]) + XCTAssertNotNil(instance) + } + + func testGetProperties() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiHTTPCookie(registrar) + + let instance = TestCookie() + let value = api.pigeonDelegate.getProperties(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getPropertiesCalled) + XCTAssertEqual(value, instance.getProperties()) + } + +} +class TestCookie: HTTPCookie { + var getPropertiesCalled = false + + + override func getProperties() { + getPropertiesCalled = true + } +} +*/ + protocol PigeonApiDelegateAuthenticationChallengeResponse { - func pigeonDefaultConstructor( - pigeonApi: PigeonApiAuthenticationChallengeResponse, - disposition: UrlSessionAuthChallengeDisposition, credential: URLCredential? - ) throws -> AuthenticationChallengeResponse + func pigeonDefaultConstructor(pigeonApi: PigeonApiAuthenticationChallengeResponse, disposition: UrlSessionAuthChallengeDisposition, credential: URLCredential?) throws -> AuthenticationChallengeResponse /// The option to use to handle the challenge. - func disposition( - pigeonApi: PigeonApiAuthenticationChallengeResponse, - pigeonInstance: AuthenticationChallengeResponse - ) throws -> UrlSessionAuthChallengeDisposition + func disposition(pigeonApi: PigeonApiAuthenticationChallengeResponse, pigeonInstance: AuthenticationChallengeResponse) throws -> UrlSessionAuthChallengeDisposition /// The credential to use for authentication when the disposition parameter /// contains the value URLSession.AuthChallengeDisposition.useCredential. - func credential( - pigeonApi: PigeonApiAuthenticationChallengeResponse, - pigeonInstance: AuthenticationChallengeResponse - ) throws -> URLCredential? + func credential(pigeonApi: PigeonApiAuthenticationChallengeResponse, pigeonInstance: AuthenticationChallengeResponse) throws -> URLCredential? } protocol PigeonApiProtocolAuthenticationChallengeResponse { } -final class PigeonApiAuthenticationChallengeResponse: - PigeonApiProtocolAuthenticationChallengeResponse -{ +final class PigeonApiAuthenticationChallengeResponse: PigeonApiProtocolAuthenticationChallengeResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateAuthenticationChallengeResponse - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateAuthenticationChallengeResponse - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateAuthenticationChallengeResponse) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiAuthenticationChallengeResponse? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiAuthenticationChallengeResponse?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.AuthenticationChallengeResponse.pigeon_defaultConstructor", - binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.AuthenticationChallengeResponse.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) if let api = api { pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -2556,9 +3203,8 @@ final class PigeonApiAuthenticationChallengeResponse: let credentialArg: URLCredential? = nilOrValue(args[2]) do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.pigeonDefaultConstructor( - pigeonApi: api, disposition: dispositionArg, credential: credentialArg), - withIdentifier: pigeonIdentifierArg) +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, disposition: dispositionArg, credential: credentialArg), +withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -2570,33 +3216,24 @@ final class PigeonApiAuthenticationChallengeResponse: } ///Creates a Dart instance of AuthenticationChallengeResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: AuthenticationChallengeResponse, - completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: AuthenticationChallengeResponse, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let dispositionArg = try! pigeonDelegate.disposition( - pigeonApi: self, pigeonInstance: pigeonInstance) - let credentialArg = try! pigeonDelegate.credential( - pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let dispositionArg = try! pigeonDelegate.disposition(pigeonApi: self, pigeonInstance: pigeonInstance) + let credentialArg = try! pigeonDelegate.credential(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.AuthenticationChallengeResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, dispositionArg, credentialArg] as [Any?]) { - response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.AuthenticationChallengeResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, dispositionArg, credentialArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2613,23 +3250,103 @@ final class PigeonApiAuthenticationChallengeResponse: } } } + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `AuthenticationChallengeResponse`. +/// +/// 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 AuthenticationChallengeResponseProxyAPIDelegate : PigeonApiDelegateAuthenticationChallengeResponse { + func pigeonDefaultConstructor(pigeonApi: PigeonApiAuthenticationChallengeResponse, disposition: UrlSessionAuthChallengeDisposition, credential: URLCredential?) throws -> AuthenticationChallengeResponse { + return AuthenticationChallengeResponse() + } + + func disposition(pigeonApi: PigeonApiAuthenticationChallengeResponse, pigeonInstance: AuthenticationChallengeResponse) throws -> UrlSessionAuthChallengeDisposition { + switch pigeonInstance.disposition { + case .useCredential: + return .useCredential + case .performDefaultHandling: + return .performDefaultHandling + case .cancelAuthenticationChallenge: + return .cancelAuthenticationChallenge + case .rejectProtectionSpace: + return .rejectProtectionSpace + @unknown default: + return .unknown + } + } + + func credential(pigeonApi: PigeonApiAuthenticationChallengeResponse, pigeonInstance: AuthenticationChallengeResponse) throws -> URLCredential? { + return pigeonInstance.credential + } + +} +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class AuthenticationChallengeResponseProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api disposition: .useCredential, credential: TestCredential) + XCTAssertNotNil(instance) + } + + func testDisposition() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(registrar) + + let instance = TestAuthenticationChallengeResponse() + let value = try? api.pigeonDelegate.disposition(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.disposition) + } + + func testCredential() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(registrar) + + let instance = TestAuthenticationChallengeResponse() + let value = try? api.pigeonDelegate.credential(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.credential) + } + +} +*/ + protocol PigeonApiDelegateWKWebsiteDataStore { /// The default data store, which stores data persistently to disk. func defaultDataStore(pigeonApi: PigeonApiWKWebsiteDataStore) throws -> WKWebsiteDataStore /// The object that manages the HTTP cookies for your website. - func httpCookieStore(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore) - throws -> WKHTTPCookieStore + func httpCookieStore(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore) throws -> WKHTTPCookieStore /// Removes the specified types of website data from one or more data records. - func removeDataOfTypes( - pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore, - dataTypes: [WebsiteDataType], modificationTimeInSecondsSinceEpoch: Double, - completion: @escaping (Result) -> Void) + func removeDataOfTypes(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore, dataTypes: [WebsiteDataType], modificationTimeInSecondsSinceEpoch: Double, completion: @escaping (Result) -> Void) } protocol PigeonApiProtocolWKWebsiteDataStore { } -final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { +final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKWebsiteDataStore ///An implementation of [NSObject] used to access callback methods @@ -2637,33 +3354,23 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKWebsiteDataStore - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebsiteDataStore) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebsiteDataStore? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebsiteDataStore?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let defaultDataStoreChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.defaultDataStore", - binaryMessenger: binaryMessenger, codec: codec) + let defaultDataStoreChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.defaultDataStore", binaryMessenger: binaryMessenger, codec: codec) if let api = api { defaultDataStoreChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonIdentifierArg = args[0] as! Int64 do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.defaultDataStore(pigeonApi: api), - withIdentifier: pigeonIdentifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.defaultDataStore(pigeonApi: api), withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -2672,19 +3379,14 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { } else { defaultDataStoreChannel.setMessageHandler(nil) } - let httpCookieStoreChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.httpCookieStore", - binaryMessenger: binaryMessenger, codec: codec) + let httpCookieStoreChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.httpCookieStore", binaryMessenger: binaryMessenger, codec: codec) if let api = api { httpCookieStoreChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebsiteDataStore let pigeonIdentifierArg = args[1] as! Int64 do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.httpCookieStore( - pigeonApi: api, pigeonInstance: pigeonInstanceArg), - withIdentifier: pigeonIdentifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.httpCookieStore(pigeonApi: api, pigeonInstance: pigeonInstanceArg), withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -2693,19 +3395,14 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { } else { httpCookieStoreChannel.setMessageHandler(nil) } - let removeDataOfTypesChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.removeDataOfTypes", - binaryMessenger: binaryMessenger, codec: codec) + let removeDataOfTypesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.removeDataOfTypes", binaryMessenger: binaryMessenger, codec: codec) if let api = api { removeDataOfTypesChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebsiteDataStore let dataTypesArg = args[1] as! [WebsiteDataType] let modificationTimeInSecondsSinceEpochArg = args[2] as! Double - api.pigeonDelegate.removeDataOfTypes( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, dataTypes: dataTypesArg, - modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpochArg - ) { result in + api.pigeonDelegate.removeDataOfTypes(pigeonApi: api, pigeonInstance: pigeonInstanceArg, dataTypes: dataTypesArg, modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpochArg) { result in switch result { case .success(let res): reply(wrapResult(res)) @@ -2720,26 +3417,21 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { } ///Creates a Dart instance of WKWebsiteDataStore and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKWebsiteDataStore, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKWebsiteDataStore, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -2757,22 +3449,102 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { } } } + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKWebsiteDataStore`. +/// +/// 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 WebsiteDataStoreProxyAPIDelegate : PigeonApiDelegateWKWebsiteDataStore { + func defaultDataStore(pigeonApi: PigeonApiWKWebsiteDataStore): WKWebsiteDataStore { + return WKWebsiteDataStore.defaultDataStore + } + + func httpCookieStore(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore): WKHTTPCookieStore { + return pigeonInstance.httpCookieStore + } + + func removeDataOfTypes(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore, dataTypes: [WebsiteDataType], modificationTimeInSecondsSinceEpoch: Double, completion: @escaping (Result) -> Void) { + return pigeonInstance.removeDataOfTypes(dataTypes: dataTypes, modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpoch) + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class WebsiteDataStoreProxyAPITests: XCTestCase { + func testHttpCookieStore() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebsiteDataStore(registrar) + + let instance = TestWebsiteDataStore() + let value = try? api.pigeonDelegate.httpCookieStore(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.httpCookieStore) + } + + func testRemoveDataOfTypes() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebsiteDataStore(registrar) + + let instance = TestWebsiteDataStore() + let dataTypes = [.cookies] + let modificationTimeInSecondsSinceEpoch = 1.0 + let value = api.pigeonDelegate.removeDataOfTypes(pigeonApi: api, pigeonInstance: instance, dataTypes: dataTypes, modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpoch) + + XCTAssertEqual(instance.removeDataOfTypesArgs, [dataTypes, modificationTimeInSecondsSinceEpoch]) + XCTAssertEqual(value, instance.removeDataOfTypes(dataTypes: dataTypes, modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpoch)) + } + +} +class TestWebsiteDataStore: WKWebsiteDataStore { + private var httpCookieStoreTestValue = TestCookieStore + var removeDataOfTypesArgs: [AnyHashable?]? = nil + + override var httpCookieStore: WKHTTPCookieStore { + return httpCookieStoreTestValue + } + + override func removeDataOfTypes() { + removeDataOfTypesArgs = [dataTypes, modificationTimeInSecondsSinceEpoch] + return true + } +} +*/ + protocol PigeonApiDelegateUIView { #if !os(macOS) - /// The view’s background color. - func setBackgroundColor(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, value: Int64?) - throws + /// The view’s background color. + func setBackgroundColor(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, value: Int64?) throws #endif #if !os(macOS) - /// A Boolean value that determines whether the view is opaque. - func setOpaque(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, opaque: Bool) throws + /// A Boolean value that determines whether the view is opaque. + func setOpaque(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, opaque: Bool) throws #endif } protocol PigeonApiProtocolUIView { } -final class PigeonApiUIView: PigeonApiProtocolUIView { +final class PigeonApiUIView: PigeonApiProtocolUIView { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateUIView ///An implementation of [NSObject] used to access callback methods @@ -2788,162 +3560,215 @@ final class PigeonApiUIView: PigeonApiProtocolUIView { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() #if !os(macOS) - let setBackgroundColorChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.setBackgroundColor", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setBackgroundColorChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIView - let valueArg: Int64? = nilOrValue(args[1]) - do { - try api.pigeonDelegate.setBackgroundColor( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setBackgroundColorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.setBackgroundColor", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBackgroundColorChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIView + let valueArg: Int64? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setBackgroundColor(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setBackgroundColorChannel.setMessageHandler(nil) } + } else { + setBackgroundColorChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setOpaqueChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.setOpaque", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setOpaqueChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIView - let opaqueArg = args[1] as! Bool - do { - try api.pigeonDelegate.setOpaque( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, opaque: opaqueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setOpaqueChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.setOpaque", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setOpaqueChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIView + let opaqueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setOpaque(pigeonApi: api, pigeonInstance: pigeonInstanceArg, opaque: opaqueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setOpaqueChannel.setMessageHandler(nil) } + } else { + setOpaqueChannel.setMessageHandler(nil) + } #endif } #if !os(macOS) - ///Creates a Dart instance of UIView and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: UIView, completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } - } - } - } - #endif -} -protocol PigeonApiDelegateUIScrollView { - #if !os(macOS) - /// The point at which the origin of the content view is offset from the - /// origin of the scroll view. - func getContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView) throws - -> [Double] - #endif + ///Creates a Dart instance of UIView and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: UIView, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } + } + } + } + #endif +} + +/* +// 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. + +import Foundation +import UIKit + + +/// ProxyApi implementation for `UIView`. +/// +/// 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 ViewProxyAPIDelegate : PigeonApiDelegateUIView { + func setBackgroundColor(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, value: Int64?) throws { + pigeonInstance.backgroundColor = value: value + } + + func setOpaque(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, opaque: Bool) throws { + pigeonInstance.opaque = opaque: opaque + } + +} +*/ + +/* +// 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. + +import UIKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ViewProxyAPITests: XCTestCase { + func testSetBackgroundColor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIView(registrar) + + let instance = TestView() + let value = 0 + api.pigeonDelegate.setBackgroundColor(pigeonApi: api, pigeonInstance: instance, value: value) + + XCTAssertEqual(instance.setBackgroundColorArgs, [value]) + } + + func testSetOpaque() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIView(registrar) + + let instance = TestView() + let opaque = true + api.pigeonDelegate.setOpaque(pigeonApi: api, pigeonInstance: instance, opaque: opaque) + + XCTAssertEqual(instance.setOpaqueArgs, [opaque]) + } + +} +class TestView: UIView { + var setBackgroundColorArgs: [AnyHashable?]? = nil + var setOpaqueArgs: [AnyHashable?]? = nil + + + override func setBackgroundColor() { + setBackgroundColorArgs = [value] + } + override func setOpaque() { + setOpaqueArgs = [opaque] + } +} +*/ + +protocol PigeonApiDelegateUIScrollView { #if !os(macOS) - /// Move the scrolled position of your view. - /// - /// Convenience method to synchronize change to the x and y scroll position. - func scrollBy( - pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws + /// The point at which the origin of the content view is offset from the + /// origin of the scroll view. + func getContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView) throws -> [Double] #endif #if !os(macOS) - /// The point at which the origin of the content view is offset from the - /// origin of the scroll view. - func setContentOffset( - pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws + /// Move the scrolled position of your view. + /// + /// Convenience method to synchronize change to the x and y scroll position. + func scrollBy(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws + #endif + #if !os(macOS) + /// The point at which the origin of the content view is offset from the + /// origin of the scroll view. + func setContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws #endif #if !os(macOS) - /// The delegate of the scroll view. - func setDelegate( - pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, - delegate: UIScrollViewDelegate?) throws + /// The delegate of the scroll view. + func setDelegate(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, delegate: UIScrollViewDelegate?) throws #endif #if !os(macOS) - /// Whether the scroll view bounces past the edge of content and back again. - func setBounces(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) - throws + /// Whether the scroll view bounces past the edge of content and back again. + func setBounces(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws #endif #if !os(macOS) - /// Whether the scroll view bounces when it reaches the ends of its horizontal - /// axis. - func setBouncesHorizontally( - pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws + /// Whether the scroll view bounces when it reaches the ends of its horizontal + /// axis. + func setBouncesHorizontally(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws #endif #if !os(macOS) - /// Whether the scroll view bounces when it reaches the ends of its vertical - /// axis. - func setBouncesVertically( - pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws + /// Whether the scroll view bounces when it reaches the ends of its vertical + /// axis. + func setBouncesVertically(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws #endif #if !os(macOS) - /// Whether bouncing always occurs when vertical scrolling reaches the end of - /// the content. - /// - /// If the value of this property is true and `bouncesVertically` is true, the - /// scroll view allows vertical dragging even if the content is smaller than - /// the bounds of the scroll view. - func setAlwaysBounceVertical( - pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws + /// Whether bouncing always occurs when vertical scrolling reaches the end of + /// the content. + /// + /// If the value of this property is true and `bouncesVertically` is true, the + /// scroll view allows vertical dragging even if the content is smaller than + /// the bounds of the scroll view. + func setAlwaysBounceVertical(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws #endif #if !os(macOS) - /// Whether bouncing always occurs when horizontal scrolling reaches the end - /// of the content view. - /// - /// If the value of this property is true and `bouncesHorizontally` is true, - /// the scroll view allows horizontal dragging even if the content is smaller - /// than the bounds of the scroll view. - func setAlwaysBounceHorizontal( - pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws + /// Whether bouncing always occurs when horizontal scrolling reaches the end + /// of the content view. + /// + /// If the value of this property is true and `bouncesHorizontally` is true, + /// the scroll view allows horizontal dragging even if the content is smaller + /// than the bounds of the scroll view. + func setAlwaysBounceHorizontal(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws #endif } protocol PigeonApiProtocolUIScrollView { } -final class PigeonApiUIScrollView: PigeonApiProtocolUIScrollView { +final class PigeonApiUIScrollView: PigeonApiProtocolUIScrollView { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateUIScrollView ///An implementation of [UIView] used to access callback methods @@ -2951,309 +3776,461 @@ final class PigeonApiUIScrollView: PigeonApiProtocolUIScrollView { return pigeonRegistrar.apiDelegate.pigeonApiUIView(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateUIScrollView - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateUIScrollView) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIScrollView? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIScrollView?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() #if !os(macOS) - let getContentOffsetChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.getContentOffset", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getContentOffsetChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - do { - let result = try api.pigeonDelegate.getContentOffset( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getContentOffsetChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.getContentOffset", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getContentOffsetChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + do { + let result = try api.pigeonDelegate.getContentOffset(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - getContentOffsetChannel.setMessageHandler(nil) } + } else { + getContentOffsetChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let scrollByChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.scrollBy", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - scrollByChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let xArg = args[1] as! Double - let yArg = args[2] as! Double - do { - try api.pigeonDelegate.scrollBy( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, x: xArg, y: yArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let scrollByChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.scrollBy", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + scrollByChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let xArg = args[1] as! Double + let yArg = args[2] as! Double + do { + try api.pigeonDelegate.scrollBy(pigeonApi: api, pigeonInstance: pigeonInstanceArg, x: xArg, y: yArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - scrollByChannel.setMessageHandler(nil) } + } else { + scrollByChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setContentOffsetChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setContentOffset", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setContentOffsetChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let xArg = args[1] as! Double - let yArg = args[2] as! Double - do { - try api.pigeonDelegate.setContentOffset( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, x: xArg, y: yArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setContentOffsetChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setContentOffset", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setContentOffsetChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let xArg = args[1] as! Double + let yArg = args[2] as! Double + do { + try api.pigeonDelegate.setContentOffset(pigeonApi: api, pigeonInstance: pigeonInstanceArg, x: xArg, y: yArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setContentOffsetChannel.setMessageHandler(nil) } + } else { + setContentOffsetChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setDelegateChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setDelegate", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let delegateArg: UIScrollViewDelegate? = nilOrValue(args[1]) - do { - try api.pigeonDelegate.setDelegate( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setDelegate", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let delegateArg: UIScrollViewDelegate? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setDelegateChannel.setMessageHandler(nil) } + } else { + setDelegateChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setBouncesChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBounces", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setBouncesChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool - do { - try api.pigeonDelegate.setBounces( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setBouncesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBounces", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBouncesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setBounces(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setBouncesChannel.setMessageHandler(nil) } + } else { + setBouncesChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setBouncesHorizontallyChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBouncesHorizontally", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setBouncesHorizontallyChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool - do { - try api.pigeonDelegate.setBouncesHorizontally( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setBouncesHorizontallyChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBouncesHorizontally", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBouncesHorizontallyChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setBouncesHorizontally(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setBouncesHorizontallyChannel.setMessageHandler(nil) } + } else { + setBouncesHorizontallyChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setBouncesVerticallyChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBouncesVertically", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setBouncesVerticallyChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool - do { - try api.pigeonDelegate.setBouncesVertically( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setBouncesVerticallyChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBouncesVertically", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBouncesVerticallyChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setBouncesVertically(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setBouncesVerticallyChannel.setMessageHandler(nil) } + } else { + setBouncesVerticallyChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setAlwaysBounceVerticalChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setAlwaysBounceVertical", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setAlwaysBounceVerticalChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool - do { - try api.pigeonDelegate.setAlwaysBounceVertical( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setAlwaysBounceVerticalChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setAlwaysBounceVertical", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAlwaysBounceVerticalChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAlwaysBounceVertical(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setAlwaysBounceVerticalChannel.setMessageHandler(nil) } + } else { + setAlwaysBounceVerticalChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setAlwaysBounceHorizontalChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setAlwaysBounceHorizontal", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setAlwaysBounceHorizontalChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool - do { - try api.pigeonDelegate.setAlwaysBounceHorizontal( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setAlwaysBounceHorizontalChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setAlwaysBounceHorizontal", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAlwaysBounceHorizontalChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAlwaysBounceHorizontal(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setAlwaysBounceHorizontalChannel.setMessageHandler(nil) } + } else { + setAlwaysBounceHorizontalChannel.setMessageHandler(nil) + } #endif } #if !os(macOS) - ///Creates a Dart instance of UIScrollView and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: UIScrollView, completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } + ///Creates a Dart instance of UIScrollView and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: UIScrollView, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) } } } + } #endif } -protocol PigeonApiDelegateWKWebViewConfiguration { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKWebViewConfiguration) throws - -> WKWebViewConfiguration - /// The object that coordinates interactions between your app’s native code - /// and the webpage’s scripts and other content. - func setUserContentController( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, - controller: WKUserContentController) throws - /// The object that coordinates interactions between your app’s native code - /// and the webpage’s scripts and other content. - func getUserContentController( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration - ) throws -> WKUserContentController - /// The object you use to get and set the site’s cookies and to track the + +/* +// 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. + +import Foundation +import UIKit + + +/// ProxyApi implementation for `UIScrollView`. +/// +/// 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 ScrollViewProxyAPIDelegate : PigeonApiDelegateUIScrollView { + func getContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView) throws -> [Double] { + return pigeonInstance.contentOffset + } + + func scrollBy(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws { + pigeonInstance.scrollBy(x: x, y: y) + } + + func setContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws { + pigeonInstance.setContentOffset(x: x, y: y) + } + + func setDelegate(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, delegate: UIScrollViewDelegate?) throws { + pigeonInstance.delegate = delegate: delegate + } + + func setBounces(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { + pigeonInstance.bounces = value: value + } + + func setBouncesHorizontally(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { + pigeonInstance.bouncesHorizontally = value: value + } + + func setBouncesVertically(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { + pigeonInstance.bouncesVertically = value: value + } + + func setAlwaysBounceVertical(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { + pigeonInstance.alwaysBounceVertical = value: value + } + + func setAlwaysBounceHorizontal(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { + pigeonInstance.alwaysBounceHorizontal = value: value + } + +} +*/ + +/* +// 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. + +import UIKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ScrollViewProxyAPITests: XCTestCase { + func testGetContentOffset() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let value = api.pigeonDelegate.getContentOffset(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getContentOffsetCalled) + XCTAssertEqual(value, instance.getContentOffset()) + } + + func testScrollBy() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let x = 1.0 + let y = 1.0 + api.pigeonDelegate.scrollBy(pigeonApi: api, pigeonInstance: instance, x: x, y: y) + + XCTAssertEqual(instance.scrollByArgs, [x, y]) + } + + func testSetContentOffset() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let x = 1.0 + let y = 1.0 + api.pigeonDelegate.setContentOffset(pigeonApi: api, pigeonInstance: instance, x: x, y: y) + + XCTAssertEqual(instance.setContentOffsetArgs, [x, y]) + } + + func testSetDelegate() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let delegate = TestScrollViewDelegate + api.pigeonDelegate.setDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) + + XCTAssertEqual(instance.setDelegateArgs, [delegate]) + } + + func testSetBounces() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let value = true + api.pigeonDelegate.setBounces(pigeonApi: api, pigeonInstance: instance, value: value) + + XCTAssertEqual(instance.setBouncesArgs, [value]) + } + + func testSetBouncesHorizontally() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let value = true + api.pigeonDelegate.setBouncesHorizontally(pigeonApi: api, pigeonInstance: instance, value: value) + + XCTAssertEqual(instance.setBouncesHorizontallyArgs, [value]) + } + + func testSetBouncesVertically() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let value = true + api.pigeonDelegate.setBouncesVertically(pigeonApi: api, pigeonInstance: instance, value: value) + + XCTAssertEqual(instance.setBouncesVerticallyArgs, [value]) + } + + func testSetAlwaysBounceVertical() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let value = true + api.pigeonDelegate.setAlwaysBounceVertical(pigeonApi: api, pigeonInstance: instance, value: value) + + XCTAssertEqual(instance.setAlwaysBounceVerticalArgs, [value]) + } + + func testSetAlwaysBounceHorizontal() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) + + let instance = TestScrollView() + let value = true + api.pigeonDelegate.setAlwaysBounceHorizontal(pigeonApi: api, pigeonInstance: instance, value: value) + + XCTAssertEqual(instance.setAlwaysBounceHorizontalArgs, [value]) + } + +} +class TestScrollView: UIScrollView { + var getContentOffsetCalled = false + var scrollByArgs: [AnyHashable?]? = nil + var setContentOffsetArgs: [AnyHashable?]? = nil + var setDelegateArgs: [AnyHashable?]? = nil + var setBouncesArgs: [AnyHashable?]? = nil + var setBouncesHorizontallyArgs: [AnyHashable?]? = nil + var setBouncesVerticallyArgs: [AnyHashable?]? = nil + var setAlwaysBounceVerticalArgs: [AnyHashable?]? = nil + var setAlwaysBounceHorizontalArgs: [AnyHashable?]? = nil + + + override func getContentOffset() { + getContentOffsetCalled = true + } + override func scrollBy() { + scrollByArgs = [x, y] + } + override func setContentOffset() { + setContentOffsetArgs = [x, y] + } + override func setDelegate() { + setDelegateArgs = [delegate] + } + override func setBounces() { + setBouncesArgs = [value] + } + override func setBouncesHorizontally() { + setBouncesHorizontallyArgs = [value] + } + override func setBouncesVertically() { + setBouncesVerticallyArgs = [value] + } + override func setAlwaysBounceVertical() { + setAlwaysBounceVerticalArgs = [value] + } + override func setAlwaysBounceHorizontal() { + setAlwaysBounceHorizontalArgs = [value] + } +} +*/ + +protocol PigeonApiDelegateWKWebViewConfiguration { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKWebViewConfiguration) throws -> WKWebViewConfiguration + /// The object that coordinates interactions between your app’s native code + /// and the webpage’s scripts and other content. + func setUserContentController(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, controller: WKUserContentController) throws + /// The object that coordinates interactions between your app’s native code + /// and the webpage’s scripts and other content. + func getUserContentController(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKUserContentController + /// The object you use to get and set the site’s cookies and to track the /// cached data objects. - func setWebsiteDataStore( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, - dataStore: WKWebsiteDataStore) throws + func setWebsiteDataStore(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, dataStore: WKWebsiteDataStore) throws /// The object you use to get and set the site’s cookies and to track the /// cached data objects. - func getWebsiteDataStore( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration - ) throws -> WKWebsiteDataStore + func getWebsiteDataStore(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKWebsiteDataStore /// The object that manages the preference-related settings for the web view. - func setPreferences( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, - preferences: WKPreferences) throws + func setPreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, preferences: WKPreferences) throws /// The object that manages the preference-related settings for the web view. - func getPreferences( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration - ) throws -> WKPreferences + func getPreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKPreferences /// A Boolean value that indicates whether HTML5 videos play inline or use the /// native full-screen controller. - func setAllowsInlineMediaPlayback( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, allow: Bool) - throws + func setAllowsInlineMediaPlayback(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, allow: Bool) throws /// A Boolean value that indicates whether the web view limits navigation to /// pages within the app’s domain. - func setLimitsNavigationsToAppBoundDomains( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, limit: Bool) - throws + func setLimitsNavigationsToAppBoundDomains(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, limit: Bool) throws /// The media types that require a user gesture to begin playing. - func setMediaTypesRequiringUserActionForPlayback( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, - type: AudiovisualMediaType) throws + func setMediaTypesRequiringUserActionForPlayback(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, type: AudiovisualMediaType) throws /// The default preferences to use when loading and rendering content. @available(iOS 13.0.0, macOS 10.15.0, *) - func getDefaultWebpagePreferences( - pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration - ) throws -> WKWebpagePreferences + func getDefaultWebpagePreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKWebpagePreferences } protocol PigeonApiProtocolWKWebViewConfiguration { } -final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfiguration { +final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfiguration { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKWebViewConfiguration ///An implementation of [NSObject] used to access callback methods @@ -3261,34 +4238,25 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKWebViewConfiguration - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebViewConfiguration) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebViewConfiguration? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebViewConfiguration?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.pigeon_defaultConstructor", - binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.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) +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), +withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3297,18 +4265,14 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } - let setUserContentControllerChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setUserContentController", - binaryMessenger: binaryMessenger, codec: codec) + let setUserContentControllerChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setUserContentController", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setUserContentControllerChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration let controllerArg = args[1] as! WKUserContentController do { - try api.pigeonDelegate.setUserContentController( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, controller: controllerArg) + try api.pigeonDelegate.setUserContentController(pigeonApi: api, pigeonInstance: pigeonInstanceArg, controller: controllerArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3317,17 +4281,13 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { setUserContentControllerChannel.setMessageHandler(nil) } - let getUserContentControllerChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getUserContentController", - binaryMessenger: binaryMessenger, codec: codec) + let getUserContentControllerChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getUserContentController", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getUserContentControllerChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration do { - let result = try api.pigeonDelegate.getUserContentController( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getUserContentController(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -3336,18 +4296,14 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { getUserContentControllerChannel.setMessageHandler(nil) } - let setWebsiteDataStoreChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setWebsiteDataStore", - binaryMessenger: binaryMessenger, codec: codec) + let setWebsiteDataStoreChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setWebsiteDataStore", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setWebsiteDataStoreChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration let dataStoreArg = args[1] as! WKWebsiteDataStore do { - try api.pigeonDelegate.setWebsiteDataStore( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, dataStore: dataStoreArg) + try api.pigeonDelegate.setWebsiteDataStore(pigeonApi: api, pigeonInstance: pigeonInstanceArg, dataStore: dataStoreArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3356,17 +4312,13 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { setWebsiteDataStoreChannel.setMessageHandler(nil) } - let getWebsiteDataStoreChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getWebsiteDataStore", - binaryMessenger: binaryMessenger, codec: codec) + let getWebsiteDataStoreChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getWebsiteDataStore", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getWebsiteDataStoreChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration do { - let result = try api.pigeonDelegate.getWebsiteDataStore( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getWebsiteDataStore(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -3375,17 +4327,14 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { getWebsiteDataStoreChannel.setMessageHandler(nil) } - let setPreferencesChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setPreferences", - binaryMessenger: binaryMessenger, codec: codec) + let setPreferencesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setPreferences", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setPreferencesChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration let preferencesArg = args[1] as! WKPreferences do { - try api.pigeonDelegate.setPreferences( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, preferences: preferencesArg) + try api.pigeonDelegate.setPreferences(pigeonApi: api, pigeonInstance: pigeonInstanceArg, preferences: preferencesArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3394,16 +4343,13 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { setPreferencesChannel.setMessageHandler(nil) } - let getPreferencesChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getPreferences", - binaryMessenger: binaryMessenger, codec: codec) + let getPreferencesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getPreferences", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getPreferencesChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration do { - let result = try api.pigeonDelegate.getPreferences( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getPreferences(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -3412,18 +4358,14 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { getPreferencesChannel.setMessageHandler(nil) } - let setAllowsInlineMediaPlaybackChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setAllowsInlineMediaPlayback", - binaryMessenger: binaryMessenger, codec: codec) + let setAllowsInlineMediaPlaybackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setAllowsInlineMediaPlayback", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setAllowsInlineMediaPlaybackChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration let allowArg = args[1] as! Bool do { - try api.pigeonDelegate.setAllowsInlineMediaPlayback( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) + try api.pigeonDelegate.setAllowsInlineMediaPlayback(pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3432,18 +4374,14 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { setAllowsInlineMediaPlaybackChannel.setMessageHandler(nil) } - let setLimitsNavigationsToAppBoundDomainsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setLimitsNavigationsToAppBoundDomains", - binaryMessenger: binaryMessenger, codec: codec) + let setLimitsNavigationsToAppBoundDomainsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setLimitsNavigationsToAppBoundDomains", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setLimitsNavigationsToAppBoundDomainsChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration let limitArg = args[1] as! Bool do { - try api.pigeonDelegate.setLimitsNavigationsToAppBoundDomains( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, limit: limitArg) + try api.pigeonDelegate.setLimitsNavigationsToAppBoundDomains(pigeonApi: api, pigeonInstance: pigeonInstanceArg, limit: limitArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3452,18 +4390,14 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { setLimitsNavigationsToAppBoundDomainsChannel.setMessageHandler(nil) } - let setMediaTypesRequiringUserActionForPlaybackChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setMediaTypesRequiringUserActionForPlayback", - binaryMessenger: binaryMessenger, codec: codec) + let setMediaTypesRequiringUserActionForPlaybackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setMediaTypesRequiringUserActionForPlayback", binaryMessenger: binaryMessenger, codec: codec) if let api = api { setMediaTypesRequiringUserActionForPlaybackChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration let typeArg = args[1] as! AudiovisualMediaType do { - try api.pigeonDelegate.setMediaTypesRequiringUserActionForPlayback( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, type: typeArg) + try api.pigeonDelegate.setMediaTypesRequiringUserActionForPlayback(pigeonApi: api, pigeonInstance: pigeonInstanceArg, type: typeArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3473,17 +4407,13 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura setMediaTypesRequiringUserActionForPlaybackChannel.setMessageHandler(nil) } if #available(iOS 13.0.0, macOS 10.15.0, *) { - let getDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getDefaultWebpagePreferences", - binaryMessenger: binaryMessenger, codec: codec) + let getDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getDefaultWebpagePreferences", binaryMessenger: binaryMessenger, codec: codec) if let api = api { getDefaultWebpagePreferencesChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebViewConfiguration do { - let result = try api.pigeonDelegate.getDefaultWebpagePreferences( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getDefaultWebpagePreferences(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -3492,21 +4422,16 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } else { getDefaultWebpagePreferencesChannel.setMessageHandler(nil) } - } else { + } else { let getDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getDefaultWebpagePreferences", + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getDefaultWebpagePreferences", binaryMessenger: binaryMessenger, codec: codec) if api != nil { getDefaultWebpagePreferencesChannel.setMessageHandler { message, reply in - reply( - wrapError( - FlutterError( - code: "PigeonUnsupportedOperationError", - message: - "Call to getDefaultWebpagePreferences requires @available(iOS 13.0.0, macOS 10.15.0, *).", - details: nil - ))) + reply(wrapError(FlutterError(code: "PigeonUnsupportedOperationError", + message: "Call to getDefaultWebpagePreferences requires @available(iOS 13.0.0, macOS 10.15.0, *).", + details: nil + ))) } } else { getDefaultWebpagePreferencesChannel.setMessageHandler(nil) @@ -3515,27 +4440,21 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } ///Creates a Dart instance of WKWebViewConfiguration and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKWebViewConfiguration, - completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKWebViewConfiguration, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -3553,33 +4472,264 @@ final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfigura } } } + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKWebViewConfiguration`. +/// +/// 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 WebViewConfigurationProxyAPIDelegate : PigeonApiDelegateWKWebViewConfiguration { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKWebViewConfiguration) throws -> WKWebViewConfiguration { + return WKWebViewConfiguration() + } + + func setUserContentController(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, controller: WKUserContentController) throws { + pigeonInstance.userContentController = controller: controller + } + + func getUserContentController(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKUserContentController { + return pigeonInstance.userContentController + } + + func setWebsiteDataStore(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, dataStore: WKWebsiteDataStore) throws { + pigeonInstance.websiteDataStore = dataStore: dataStore + } + + func getWebsiteDataStore(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKWebsiteDataStore { + return pigeonInstance.websiteDataStore + } + + func setPreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, preferences: WKPreferences) throws { + pigeonInstance.preferences = preferences: preferences + } + + func getPreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKPreferences { + return pigeonInstance.preferences + } + + func setAllowsInlineMediaPlayback(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, allow: Bool) throws { + pigeonInstance.allowsInlineMediaPlayback = allow: allow + } + + func setLimitsNavigationsToAppBoundDomains(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, limit: Bool) throws { + pigeonInstance.limitsNavigationsToAppBoundDomains = limit: limit + } + + func setMediaTypesRequiringUserActionForPlayback(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, type: AudiovisualMediaType) throws { + pigeonInstance.mediaTypesRequiringUserActionForPlayback = type: type + } + + func getDefaultWebpagePreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKWebpagePreferences { + return pigeonInstance.defaultWebpagePreferences + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class WebViewConfigurationProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) + XCTAssertNotNil(instance) + } + + func testSetUserContentController() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let controller = TestUserContentController + api.pigeonDelegate.setUserContentController(pigeonApi: api, pigeonInstance: instance, controller: controller) + + XCTAssertEqual(instance.setUserContentControllerArgs, [controller]) + } + + func testGetUserContentController() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let value = api.pigeonDelegate.getUserContentController(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getUserContentControllerCalled) + XCTAssertEqual(value, instance.getUserContentController()) + } + + func testSetWebsiteDataStore() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let dataStore = TestWebsiteDataStore + api.pigeonDelegate.setWebsiteDataStore(pigeonApi: api, pigeonInstance: instance, dataStore: dataStore) + + XCTAssertEqual(instance.setWebsiteDataStoreArgs, [dataStore]) + } + + func testGetWebsiteDataStore() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let value = api.pigeonDelegate.getWebsiteDataStore(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getWebsiteDataStoreCalled) + XCTAssertEqual(value, instance.getWebsiteDataStore()) + } + + func testSetPreferences() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let preferences = TestPreferences + api.pigeonDelegate.setPreferences(pigeonApi: api, pigeonInstance: instance, preferences: preferences) + + XCTAssertEqual(instance.setPreferencesArgs, [preferences]) + } + + func testGetPreferences() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let value = api.pigeonDelegate.getPreferences(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getPreferencesCalled) + XCTAssertEqual(value, instance.getPreferences()) + } + + func testSetAllowsInlineMediaPlayback() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let allow = true + api.pigeonDelegate.setAllowsInlineMediaPlayback(pigeonApi: api, pigeonInstance: instance, allow: allow) + + XCTAssertEqual(instance.setAllowsInlineMediaPlaybackArgs, [allow]) + } + + func testSetLimitsNavigationsToAppBoundDomains() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let limit = true + api.pigeonDelegate.setLimitsNavigationsToAppBoundDomains(pigeonApi: api, pigeonInstance: instance, limit: limit) + + XCTAssertEqual(instance.setLimitsNavigationsToAppBoundDomainsArgs, [limit]) + } + + func testSetMediaTypesRequiringUserActionForPlayback() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let type = .none + api.pigeonDelegate.setMediaTypesRequiringUserActionForPlayback(pigeonApi: api, pigeonInstance: instance, type: type) + + XCTAssertEqual(instance.setMediaTypesRequiringUserActionForPlaybackArgs, [type]) + } + + func testGetDefaultWebpagePreferences() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) + + let instance = TestWebViewConfiguration() + let value = api.pigeonDelegate.getDefaultWebpagePreferences(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getDefaultWebpagePreferencesCalled) + XCTAssertEqual(value, instance.getDefaultWebpagePreferences()) + } + +} +class TestWebViewConfiguration: WKWebViewConfiguration { + var setUserContentControllerArgs: [AnyHashable?]? = nil + var getUserContentControllerCalled = false + var setWebsiteDataStoreArgs: [AnyHashable?]? = nil + var getWebsiteDataStoreCalled = false + var setPreferencesArgs: [AnyHashable?]? = nil + var getPreferencesCalled = false + var setAllowsInlineMediaPlaybackArgs: [AnyHashable?]? = nil + var setLimitsNavigationsToAppBoundDomainsArgs: [AnyHashable?]? = nil + var setMediaTypesRequiringUserActionForPlaybackArgs: [AnyHashable?]? = nil + var getDefaultWebpagePreferencesCalled = false + + + override func setUserContentController() { + setUserContentControllerArgs = [controller] + } + override func getUserContentController() { + getUserContentControllerCalled = true + } + override func setWebsiteDataStore() { + setWebsiteDataStoreArgs = [dataStore] + } + override func getWebsiteDataStore() { + getWebsiteDataStoreCalled = true + } + override func setPreferences() { + setPreferencesArgs = [preferences] + } + override func getPreferences() { + getPreferencesCalled = true + } + override func setAllowsInlineMediaPlayback() { + setAllowsInlineMediaPlaybackArgs = [allow] + } + override func setLimitsNavigationsToAppBoundDomains() { + setLimitsNavigationsToAppBoundDomainsArgs = [limit] + } + override func setMediaTypesRequiringUserActionForPlayback() { + setMediaTypesRequiringUserActionForPlaybackArgs = [type] + } + override func getDefaultWebpagePreferences() { + getDefaultWebpagePreferencesCalled = true + } +} +*/ + protocol PigeonApiDelegateWKUserContentController { /// Installs a message handler that you can call from your JavaScript code. - func addScriptMessageHandler( - pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, - handler: WKScriptMessageHandler, name: String) throws + func addScriptMessageHandler(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, handler: WKScriptMessageHandler, name: String) throws /// Uninstalls the custom message handler with the specified name from your /// JavaScript code. - func removeScriptMessageHandler( - pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, - name: String) throws + func removeScriptMessageHandler(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, name: String) throws /// Uninstalls all custom message handlers associated with the user content /// controller. - func removeAllScriptMessageHandlers( - pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws + func removeAllScriptMessageHandlers(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws /// Injects the specified script into the webpage’s content. - func addUserScript( - pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, - userScript: WKUserScript) throws + func addUserScript(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, userScript: WKUserScript) throws /// Removes all user scripts from the web view. - func removeAllUserScripts( - pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws + func removeAllUserScripts(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws } protocol PigeonApiProtocolWKUserContentController { } -final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentController { +final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentController { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKUserContentController ///An implementation of [NSObject] used to access callback methods @@ -3587,26 +4737,17 @@ final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentCont return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKUserContentController - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUserContentController) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUserContentController? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUserContentController?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let addScriptMessageHandlerChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.addScriptMessageHandler", - binaryMessenger: binaryMessenger, codec: codec) + let addScriptMessageHandlerChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.addScriptMessageHandler", binaryMessenger: binaryMessenger, codec: codec) if let api = api { addScriptMessageHandlerChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -3614,8 +4755,7 @@ final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentCont let handlerArg = args[1] as! WKScriptMessageHandler let nameArg = args[2] as! String do { - try api.pigeonDelegate.addScriptMessageHandler( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, handler: handlerArg, name: nameArg) + try api.pigeonDelegate.addScriptMessageHandler(pigeonApi: api, pigeonInstance: pigeonInstanceArg, handler: handlerArg, name: nameArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3624,18 +4764,14 @@ final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentCont } else { addScriptMessageHandlerChannel.setMessageHandler(nil) } - let removeScriptMessageHandlerChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeScriptMessageHandler", - binaryMessenger: binaryMessenger, codec: codec) + let removeScriptMessageHandlerChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeScriptMessageHandler", binaryMessenger: binaryMessenger, codec: codec) if let api = api { removeScriptMessageHandlerChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKUserContentController let nameArg = args[1] as! String do { - try api.pigeonDelegate.removeScriptMessageHandler( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, name: nameArg) + try api.pigeonDelegate.removeScriptMessageHandler(pigeonApi: api, pigeonInstance: pigeonInstanceArg, name: nameArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3644,17 +4780,13 @@ final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentCont } else { removeScriptMessageHandlerChannel.setMessageHandler(nil) } - let removeAllScriptMessageHandlersChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeAllScriptMessageHandlers", - binaryMessenger: binaryMessenger, codec: codec) + let removeAllScriptMessageHandlersChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeAllScriptMessageHandlers", binaryMessenger: binaryMessenger, codec: codec) if let api = api { removeAllScriptMessageHandlersChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKUserContentController do { - try api.pigeonDelegate.removeAllScriptMessageHandlers( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + try api.pigeonDelegate.removeAllScriptMessageHandlers(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3663,17 +4795,14 @@ final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentCont } else { removeAllScriptMessageHandlersChannel.setMessageHandler(nil) } - let addUserScriptChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.addUserScript", - binaryMessenger: binaryMessenger, codec: codec) + let addUserScriptChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.addUserScript", binaryMessenger: binaryMessenger, codec: codec) if let api = api { addUserScriptChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKUserContentController let userScriptArg = args[1] as! WKUserScript do { - try api.pigeonDelegate.addUserScript( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, userScript: userScriptArg) + try api.pigeonDelegate.addUserScript(pigeonApi: api, pigeonInstance: pigeonInstanceArg, userScript: userScriptArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3682,17 +4811,13 @@ final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentCont } else { addUserScriptChannel.setMessageHandler(nil) } - let removeAllUserScriptsChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeAllUserScripts", - binaryMessenger: binaryMessenger, codec: codec) + let removeAllUserScriptsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeAllUserScripts", binaryMessenger: binaryMessenger, codec: codec) if let api = api { removeAllUserScriptsChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKUserContentController do { - try api.pigeonDelegate.removeAllUserScripts( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + try api.pigeonDelegate.removeAllUserScripts(pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3704,27 +4829,21 @@ final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentCont } ///Creates a Dart instance of WKUserContentController and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKUserContentController, - completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKUserContentController, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -3742,82 +4861,199 @@ final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentCont } } } -protocol PigeonApiDelegateWKPreferences { - /// A Boolean value that indicates whether JavaScript is enabled. - func setJavaScriptEnabled( - pigeonApi: PigeonApiWKPreferences, pigeonInstance: WKPreferences, enabled: Bool) throws -} -protocol PigeonApiProtocolWKPreferences { -} +/* +// 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. -final class PigeonApiWKPreferences: PigeonApiProtocolWKPreferences { - unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKPreferences - ///An implementation of [NSObject] used to access callback methods - var pigeonApiNSObject: PigeonApiNSObject { - return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKUserContentController`. +/// +/// 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 UserContentControllerProxyAPIDelegate : PigeonApiDelegateWKUserContentController { + func addScriptMessageHandler(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, handler: WKScriptMessageHandler, name: String) throws { + pigeonInstance.addScriptMessageHandler(handler: handler, name: name) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKPreferences - ) { - self.pigeonRegistrar = pigeonRegistrar - self.pigeonDelegate = delegate + func removeScriptMessageHandler(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, name: String) throws { + pigeonInstance.removeScriptMessageHandler(name: name) } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKPreferences? - ) { - let codec: FlutterStandardMessageCodec = - api != nil - ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) - : FlutterStandardMessageCodec.sharedInstance() - let setJavaScriptEnabledChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferences.setJavaScriptEnabled", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setJavaScriptEnabledChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKPreferences - let enabledArg = args[1] as! Bool - do { - try api.pigeonDelegate.setJavaScriptEnabled( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, enabled: enabledArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } - } else { - setJavaScriptEnabledChannel.setMessageHandler(nil) - } + + func removeAllScriptMessageHandlers(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws { + pigeonInstance.removeAllScriptMessageHandlers() } - ///Creates a Dart instance of WKPreferences and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKPreferences, completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferences.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { + func addUserScript(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, userScript: WKUserScript) throws { + pigeonInstance.addUserScript(userScript: userScript) + } + + func removeAllUserScripts(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws { + pigeonInstance.removeAllUserScripts() + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class UserContentControllerProxyAPITests: XCTestCase { + func testAddScriptMessageHandler() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) + + let instance = TestUserContentController() + let handler = TestScriptMessageHandler + let name = "myString" + api.pigeonDelegate.addScriptMessageHandler(pigeonApi: api, pigeonInstance: instance, handler: handler, name: name) + + XCTAssertEqual(instance.addScriptMessageHandlerArgs, [handler, name]) + } + + func testRemoveScriptMessageHandler() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) + + let instance = TestUserContentController() + let name = "myString" + api.pigeonDelegate.removeScriptMessageHandler(pigeonApi: api, pigeonInstance: instance, name: name) + + XCTAssertEqual(instance.removeScriptMessageHandlerArgs, [name]) + } + + func testRemoveAllScriptMessageHandlers() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) + + let instance = TestUserContentController() + api.pigeonDelegate.removeAllScriptMessageHandlers(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.removeAllScriptMessageHandlersCalled) + } + + func testAddUserScript() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) + + let instance = TestUserContentController() + let userScript = TestUserScript + api.pigeonDelegate.addUserScript(pigeonApi: api, pigeonInstance: instance, userScript: userScript) + + XCTAssertEqual(instance.addUserScriptArgs, [userScript]) + } + + func testRemoveAllUserScripts() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) + + let instance = TestUserContentController() + api.pigeonDelegate.removeAllUserScripts(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.removeAllUserScriptsCalled) + } + +} +class TestUserContentController: WKUserContentController { + var addScriptMessageHandlerArgs: [AnyHashable?]? = nil + var removeScriptMessageHandlerArgs: [AnyHashable?]? = nil + var removeAllScriptMessageHandlersCalled = false + var addUserScriptArgs: [AnyHashable?]? = nil + var removeAllUserScriptsCalled = false + + + override func addScriptMessageHandler() { + addScriptMessageHandlerArgs = [handler, name] + } + override func removeScriptMessageHandler() { + removeScriptMessageHandlerArgs = [name] + } + override func removeAllScriptMessageHandlers() { + removeAllScriptMessageHandlersCalled = true + } + override func addUserScript() { + addUserScriptArgs = [userScript] + } + override func removeAllUserScripts() { + removeAllUserScriptsCalled = true + } +} +*/ + +protocol PigeonApiDelegateWKPreferences { + /// A Boolean value that indicates whether JavaScript is enabled. + func setJavaScriptEnabled(pigeonApi: PigeonApiWKPreferences, pigeonInstance: WKPreferences, enabled: Bool) throws +} + +protocol PigeonApiProtocolWKPreferences { +} + +final class PigeonApiWKPreferences: PigeonApiProtocolWKPreferences { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateWKPreferences + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) + } + + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKPreferences) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate + } + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKPreferences?) { + let codec: FlutterStandardMessageCodec = + api != nil + ? FlutterStandardMessageCodec( + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + : FlutterStandardMessageCodec.sharedInstance() + let setJavaScriptEnabledChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferences.setJavaScriptEnabled", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setJavaScriptEnabledChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKPreferences + let enabledArg = args[1] as! Bool + do { + try api.pigeonDelegate.setJavaScriptEnabled(pigeonApi: api, pigeonInstance: pigeonInstanceArg, enabled: enabledArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setJavaScriptEnabledChannel.setMessageHandler(nil) + } + } + + ///Creates a Dart instance of WKPreferences and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: WKPreferences, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferences.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return } @@ -3833,20 +5069,72 @@ final class PigeonApiWKPreferences: PigeonApiProtocolWKPreferences { } } } + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKPreferences`. +/// +/// 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 PreferencesProxyAPIDelegate : PigeonApiDelegateWKPreferences { + func setJavaScriptEnabled(pigeonApi: PigeonApiWKPreferences, pigeonInstance: WKPreferences, enabled: Bool) throws { + pigeonInstance.javaScriptEnabled = enabled: enabled + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class PreferencesProxyAPITests: XCTestCase { + func testSetJavaScriptEnabled() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKPreferences(registrar) + + let instance = TestPreferences() + let enabled = true + api.pigeonDelegate.setJavaScriptEnabled(pigeonApi: api, pigeonInstance: instance, enabled: enabled) + + XCTAssertEqual(instance.setJavaScriptEnabledArgs, [enabled]) + } + +} +class TestPreferences: WKPreferences { + var setJavaScriptEnabledArgs: [AnyHashable?]? = nil + + + override func setJavaScriptEnabled() { + setJavaScriptEnabledArgs = [enabled] + } +} +*/ + protocol PigeonApiDelegateWKScriptMessageHandler { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKScriptMessageHandler) throws - -> WKScriptMessageHandler + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKScriptMessageHandler) throws -> WKScriptMessageHandler } protocol PigeonApiProtocolWKScriptMessageHandler { /// Tells the handler that a webpage sent a script message. - func didReceiveScriptMessage( - pigeonInstance pigeonInstanceArg: WKScriptMessageHandler, - controller controllerArg: WKUserContentController, message messageArg: WKScriptMessage, - completion: @escaping (Result) -> Void) + func didReceiveScriptMessage(pigeonInstance pigeonInstanceArg: WKScriptMessageHandler, controller controllerArg: WKUserContentController, message messageArg: WKScriptMessage, completion: @escaping (Result) -> Void) } -final class PigeonApiWKScriptMessageHandler: PigeonApiProtocolWKScriptMessageHandler { +final class PigeonApiWKScriptMessageHandler: PigeonApiProtocolWKScriptMessageHandler { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKScriptMessageHandler ///An implementation of [NSObject] used to access callback methods @@ -3854,34 +5142,25 @@ final class PigeonApiWKScriptMessageHandler: PigeonApiProtocolWKScriptMessageHan return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKScriptMessageHandler - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKScriptMessageHandler) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKScriptMessageHandler? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKScriptMessageHandler?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandler.pigeon_defaultConstructor", - binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandler.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) +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), +withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3893,34 +5172,25 @@ final class PigeonApiWKScriptMessageHandler: PigeonApiProtocolWKScriptMessageHan } ///Creates a Dart instance of WKScriptMessageHandler and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKScriptMessageHandler, - completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKScriptMessageHandler, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { + } else { completion( .failure( PigeonError( code: "new-instance-error", - message: - "Error: Attempting to create a new Dart instance of WKScriptMessageHandler, but the class has a nonnull callback method.", - details: ""))) + message: "Error: Attempting to create a new Dart instance of WKScriptMessageHandler, but the class has a nonnull callback method.", details: ""))) } } /// Tells the handler that a webpage sent a script message. - func didReceiveScriptMessage( - pigeonInstance pigeonInstanceArg: WKScriptMessageHandler, - controller controllerArg: WKUserContentController, message messageArg: WKScriptMessage, - completion: @escaping (Result) -> Void - ) { + func didReceiveScriptMessage(pigeonInstance pigeonInstanceArg: WKScriptMessageHandler, controller controllerArg: WKUserContentController, message messageArg: WKScriptMessage, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -3931,10 +5201,8 @@ final class PigeonApiWKScriptMessageHandler: PigeonApiProtocolWKScriptMessageHan } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandler.didReceiveScriptMessage" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandler.didReceiveScriptMessage" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, controllerArg, messageArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -3952,45 +5220,102 @@ final class PigeonApiWKScriptMessageHandler: PigeonApiProtocolWKScriptMessageHan } } + +/* +// 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. + +import Foundation +import WebKit + +/// Implementation of `WKScriptMessageHandler` that calls to Dart in callback methods. +class ScriptMessageHandlerImpl: WKScriptMessageHandler { + let api: PigeonApiProtocolWKScriptMessageHandler + + init(api: PigeonApiProtocolWKScriptMessageHandler) { + self.api = api + } + + func fixMe() { + api.didReceiveScriptMessage(pigeonInstance: self, controller: controller, message: message) { _ in } + } +} + +/// ProxyApi implementation for `WKScriptMessageHandler`. +/// +/// 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 ScriptMessageHandlerProxyAPIDelegate : PigeonApiDelegateWKScriptMessageHandler { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKScriptMessageHandler) throws -> WKScriptMessageHandler { + return WKScriptMessageHandlerImpl(api: pigeonApi) + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ScriptMessageHandlerProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKScriptMessageHandler(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) + XCTAssertNotNil(instance) + } + + func testDidReceiveScriptMessage() { + let api = TestScriptMessageHandlerApi() + let instance = ScriptMessageHandlerImpl(api: api) + let controller = TestUserContentController + let message = TestScriptMessage + instance.didReceiveScriptMessage(controller: controller, message: message) + + XCTAssertEqual(api.didReceiveScriptMessageArgs, [controller, message]) + } + +} +class TestScriptMessageHandlerApi: PigeonApiProtocolWKScriptMessageHandler { + var didReceiveScriptMessageArgs: [AnyHashable?]? = nil + + func didReceiveScriptMessage(controller: WKUserContentController, message: WKScriptMessage) throws { + didReceiveScriptMessageArgs = [controllerArg, messageArg] + } +} +*/ + protocol PigeonApiDelegateWKNavigationDelegate { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKNavigationDelegate) throws - -> WKNavigationDelegate + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKNavigationDelegate) throws -> WKNavigationDelegate } protocol PigeonApiProtocolWKNavigationDelegate { /// Tells the delegate that navigation is complete. - func didFinishNavigation( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - url urlArg: String?, completion: @escaping (Result) -> Void) + func didFinishNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, url urlArg: String?, completion: @escaping (Result) -> Void) /// Tells the delegate that navigation from the main frame has started. - func didStartProvisionalNavigation( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - url urlArg: String?, completion: @escaping (Result) -> Void) + func didStartProvisionalNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, url urlArg: String?, completion: @escaping (Result) -> Void) /// Asks the delegate for permission to navigate to new content based on the /// specified action information. - func decidePolicyForNavigationAction( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - navigationAction navigationActionArg: WKNavigationAction, - completion: @escaping (Result) -> Void) + func decidePolicyForNavigationAction(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, navigationAction navigationActionArg: WKNavigationAction, completion: @escaping (Result) -> Void) /// Asks the delegate for permission to navigate to new content after the /// response to the navigation request is known. - func decidePolicyForNavigationResponse( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - navigationResponse navigationResponseArg: WKNavigationResponse, - completion: @escaping (Result) -> Void) + func decidePolicyForNavigationResponse(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, navigationResponse navigationResponseArg: WKNavigationResponse, completion: @escaping (Result) -> Void) /// Tells the delegate that an error occurred during navigation. - func didFailNavigation( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - error errorArg: NSError, completion: @escaping (Result) -> Void) + func didFailNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, error errorArg: NSError, completion: @escaping (Result) -> Void) /// Tells the delegate that an error occurred during the early navigation /// process. - func didFailProvisionalNavigation( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - error errorArg: NSError, completion: @escaping (Result) -> Void) + func didFailProvisionalNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, error errorArg: NSError, completion: @escaping (Result) -> Void) /// Tells the delegate that the web view’s content process was terminated. - func webViewWebContentProcessDidTerminate( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - completion: @escaping (Result) -> Void) + func webViewWebContentProcessDidTerminate(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, completion: @escaping (Result) -> Void) /// Asks the delegate to respond to an authentication challenge. /// /// This return value expects a List with: @@ -4002,13 +5327,10 @@ protocol PigeonApiProtocolWKNavigationDelegate { /// "password": "", /// "persistence": , /// ] - func didReceiveAuthenticationChallenge( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - challenge challengeArg: URLAuthenticationChallenge, - completion: @escaping (Result<[Any?], PigeonError>) -> Void) + func didReceiveAuthenticationChallenge(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, challenge challengeArg: URLAuthenticationChallenge, completion: @escaping (Result<[Any?], PigeonError>) -> Void) } -final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate { +final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKNavigationDelegate ///An implementation of [NSObject] used to access callback methods @@ -4016,34 +5338,25 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKNavigationDelegate - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKNavigationDelegate) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKNavigationDelegate? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKNavigationDelegate?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.pigeon_defaultConstructor", - binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.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) +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), +withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -4055,32 +5368,25 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } ///Creates a Dart instance of WKNavigationDelegate and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKNavigationDelegate, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: WKNavigationDelegate, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { + } else { completion( .failure( PigeonError( code: "new-instance-error", - message: - "Error: Attempting to create a new Dart instance of WKNavigationDelegate, but the class has a nonnull callback method.", - details: ""))) + message: "Error: Attempting to create a new Dart instance of WKNavigationDelegate, but the class has a nonnull callback method.", details: ""))) } } /// Tells the delegate that navigation is complete. - func didFinishNavigation( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - url urlArg: String?, completion: @escaping (Result) -> Void - ) { + func didFinishNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, url urlArg: String?, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4091,10 +5397,8 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFinishNavigation" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFinishNavigation" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, urlArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -4112,10 +5416,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } /// Tells the delegate that navigation from the main frame has started. - func didStartProvisionalNavigation( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - url urlArg: String?, completion: @escaping (Result) -> Void - ) { + func didStartProvisionalNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, url urlArg: String?, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4126,10 +5427,8 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didStartProvisionalNavigation" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didStartProvisionalNavigation" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, urlArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -4148,11 +5447,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate /// Asks the delegate for permission to navigate to new content based on the /// specified action information. - func decidePolicyForNavigationAction( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - navigationAction navigationActionArg: WKNavigationAction, - completion: @escaping (Result) -> Void - ) { + func decidePolicyForNavigationAction(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, navigationAction navigationActionArg: WKNavigationAction, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4163,12 +5458,9 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.decidePolicyForNavigationAction" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, navigationActionArg] as [Any?]) { - response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.decidePolicyForNavigationAction" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, navigationActionArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -4179,11 +5471,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { - completion( - .failure( - PigeonError( - code: "null-error", - message: "Flutter api returned null value for non-null return value.", details: ""))) + completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { let result = listResponse[0] as! NavigationActionPolicy completion(.success(result)) @@ -4193,11 +5481,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate /// Asks the delegate for permission to navigate to new content after the /// response to the navigation request is known. - func decidePolicyForNavigationResponse( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - navigationResponse navigationResponseArg: WKNavigationResponse, - completion: @escaping (Result) -> Void - ) { + func decidePolicyForNavigationResponse(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, navigationResponse navigationResponseArg: WKNavigationResponse, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4208,12 +5492,9 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.decidePolicyForNavigationResponse" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, navigationResponseArg] as [Any?]) { - response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.decidePolicyForNavigationResponse" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, navigationResponseArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -4224,11 +5505,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { - completion( - .failure( - PigeonError( - code: "null-error", - message: "Flutter api returned null value for non-null return value.", details: ""))) + completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { let result = listResponse[0] as! NavigationResponsePolicy completion(.success(result)) @@ -4237,10 +5514,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } /// Tells the delegate that an error occurred during navigation. - func didFailNavigation( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - error errorArg: NSError, completion: @escaping (Result) -> Void - ) { + func didFailNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, error errorArg: NSError, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4251,10 +5525,8 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFailNavigation" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFailNavigation" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, errorArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -4273,10 +5545,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate /// Tells the delegate that an error occurred during the early navigation /// process. - func didFailProvisionalNavigation( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - error errorArg: NSError, completion: @escaping (Result) -> Void - ) { + func didFailProvisionalNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, error errorArg: NSError, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4287,10 +5556,8 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFailProvisionalNavigation" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFailProvisionalNavigation" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, errorArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -4308,10 +5575,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } /// Tells the delegate that the web view’s content process was terminated. - func webViewWebContentProcessDidTerminate( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - completion: @escaping (Result) -> Void - ) { + func webViewWebContentProcessDidTerminate(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4322,10 +5586,8 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.webViewWebContentProcessDidTerminate" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.webViewWebContentProcessDidTerminate" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -4353,11 +5615,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate /// "password": "", /// "persistence": , /// ] - func didReceiveAuthenticationChallenge( - pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, - challenge challengeArg: URLAuthenticationChallenge, - completion: @escaping (Result<[Any?], PigeonError>) -> Void - ) { + func didReceiveAuthenticationChallenge(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, challenge challengeArg: URLAuthenticationChallenge, completion: @escaping (Result<[Any?], PigeonError>) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4368,10 +5626,8 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didReceiveAuthenticationChallenge" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didReceiveAuthenticationChallenge" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, challengeArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -4383,11 +5639,7 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { - completion( - .failure( - PigeonError( - code: "null-error", - message: "Flutter api returned null value for non-null return value.", details: ""))) + completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { let result = listResponse[0] as! [Any?] completion(.success(result)) @@ -4396,56 +5648,244 @@ final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate } } + +/* +// 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. + +import Foundation +import WebKit + +/// Implementation of `WKNavigationDelegate` that calls to Dart in callback methods. +class NavigationDelegateImpl: WKNavigationDelegate { + let api: PigeonApiProtocolWKNavigationDelegate + + init(api: PigeonApiProtocolWKNavigationDelegate) { + self.api = api + } + + func fixMe() { + api.didFinishNavigation(pigeonInstance: self, webView: webView, url: url) { _ in } + } + + func fixMe() { + api.didStartProvisionalNavigation(pigeonInstance: self, webView: webView, url: url) { _ in } + } + + func fixMe() { + api.decidePolicyForNavigationAction(pigeonInstance: self, webView: webView, navigationAction: navigationAction) { _ in } + } + + func fixMe() { + api.decidePolicyForNavigationResponse(pigeonInstance: self, webView: webView, navigationResponse: navigationResponse) { _ in } + } + + func fixMe() { + api.didFailNavigation(pigeonInstance: self, webView: webView, error: error) { _ in } + } + + func fixMe() { + api.didFailProvisionalNavigation(pigeonInstance: self, webView: webView, error: error) { _ in } + } + + func fixMe() { + api.webViewWebContentProcessDidTerminate(pigeonInstance: self, webView: webView) { _ in } + } + + func fixMe() { + api.didReceiveAuthenticationChallenge(pigeonInstance: self, webView: webView, challenge: challenge) { _ in } + } +} + +/// ProxyApi implementation for `WKNavigationDelegate`. +/// +/// 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 NavigationDelegateProxyAPIDelegate : PigeonApiDelegateWKNavigationDelegate { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKNavigationDelegate) throws -> WKNavigationDelegate { + return WKNavigationDelegateImpl(api: pigeonApi) + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class NavigationDelegateProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKNavigationDelegate(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) + XCTAssertNotNil(instance) + } + + func testDidFinishNavigation() { + let api = TestNavigationDelegateApi() + let instance = NavigationDelegateImpl(api: api) + let webView = TestWebView + let url = "myString" + instance.didFinishNavigation(webView: webView, url: url) + + XCTAssertEqual(api.didFinishNavigationArgs, [webView, url]) + } + + func testDidStartProvisionalNavigation() { + let api = TestNavigationDelegateApi() + let instance = NavigationDelegateImpl(api: api) + let webView = TestWebView + let url = "myString" + instance.didStartProvisionalNavigation(webView: webView, url: url) + + XCTAssertEqual(api.didStartProvisionalNavigationArgs, [webView, url]) + } + + func testDecidePolicyForNavigationAction() { + let api = TestNavigationDelegateApi() + let instance = NavigationDelegateImpl(api: api) + let webView = TestWebView + let navigationAction = TestNavigationAction + instance.decidePolicyForNavigationAction(webView: webView, navigationAction: navigationAction) + + XCTAssertEqual(api.decidePolicyForNavigationActionArgs, [webView, navigationAction]) + } + + func testDecidePolicyForNavigationResponse() { + let api = TestNavigationDelegateApi() + let instance = NavigationDelegateImpl(api: api) + let webView = TestWebView + let navigationResponse = TestNavigationResponse + instance.decidePolicyForNavigationResponse(webView: webView, navigationResponse: navigationResponse) + + XCTAssertEqual(api.decidePolicyForNavigationResponseArgs, [webView, navigationResponse]) + } + + func testDidFailNavigation() { + let api = TestNavigationDelegateApi() + let instance = NavigationDelegateImpl(api: api) + let webView = TestWebView + let error = TestError + instance.didFailNavigation(webView: webView, error: error) + + XCTAssertEqual(api.didFailNavigationArgs, [webView, error]) + } + + func testDidFailProvisionalNavigation() { + let api = TestNavigationDelegateApi() + let instance = NavigationDelegateImpl(api: api) + let webView = TestWebView + let error = TestError + instance.didFailProvisionalNavigation(webView: webView, error: error) + + XCTAssertEqual(api.didFailProvisionalNavigationArgs, [webView, error]) + } + + func testWebViewWebContentProcessDidTerminate() { + let api = TestNavigationDelegateApi() + let instance = NavigationDelegateImpl(api: api) + let webView = TestWebView + instance.webViewWebContentProcessDidTerminate(webView: webView) + + XCTAssertEqual(api.webViewWebContentProcessDidTerminateArgs, [webView]) + } + + func testDidReceiveAuthenticationChallenge() { + let api = TestNavigationDelegateApi() + let instance = NavigationDelegateImpl(api: api) + let webView = TestWebView + let challenge = TestAuthenticationChallenge + instance.didReceiveAuthenticationChallenge(webView: webView, challenge: challenge) + + XCTAssertEqual(api.didReceiveAuthenticationChallengeArgs, [webView, challenge]) + } + +} +class TestNavigationDelegateApi: PigeonApiProtocolWKNavigationDelegate { + var didFinishNavigationArgs: [AnyHashable?]? = nil + var didStartProvisionalNavigationArgs: [AnyHashable?]? = nil + var decidePolicyForNavigationActionArgs: [AnyHashable?]? = nil + var decidePolicyForNavigationResponseArgs: [AnyHashable?]? = nil + var didFailNavigationArgs: [AnyHashable?]? = nil + var didFailProvisionalNavigationArgs: [AnyHashable?]? = nil + var webViewWebContentProcessDidTerminateArgs: [AnyHashable?]? = nil + var didReceiveAuthenticationChallengeArgs: [AnyHashable?]? = nil + + func didFinishNavigation(webView: WKWebView, url: String?) throws { + didFinishNavigationArgs = [webViewArg, urlArg] + } + func didStartProvisionalNavigation(webView: WKWebView, url: String?) throws { + didStartProvisionalNavigationArgs = [webViewArg, urlArg] + } + func decidePolicyForNavigationAction(webView: WKWebView, navigationAction: WKNavigationAction) throws -> NavigationActionPolicy { + decidePolicyForNavigationActionArgs = [webViewArg, navigationActionArg] + } + func decidePolicyForNavigationResponse(webView: WKWebView, navigationResponse: WKNavigationResponse) throws -> NavigationResponsePolicy { + decidePolicyForNavigationResponseArgs = [webViewArg, navigationResponseArg] + } + func didFailNavigation(webView: WKWebView, error: NSError) throws { + didFailNavigationArgs = [webViewArg, errorArg] + } + func didFailProvisionalNavigation(webView: WKWebView, error: NSError) throws { + didFailProvisionalNavigationArgs = [webViewArg, errorArg] + } + func webViewWebContentProcessDidTerminate(webView: WKWebView) throws { + webViewWebContentProcessDidTerminateArgs = [webViewArg] + } + func didReceiveAuthenticationChallenge(webView: WKWebView, challenge: URLAuthenticationChallenge) throws -> [Any?] { + didReceiveAuthenticationChallengeArgs = [webViewArg, challengeArg] + } +} +*/ + protocol PigeonApiDelegateNSObject { func pigeonDefaultConstructor(pigeonApi: PigeonApiNSObject) throws -> NSObject /// Registers the observer object to receive KVO notifications for the key /// path relative to the object receiving this message. - func addObserver( - pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String, - options: [KeyValueObservingOptions]) throws + func addObserver(pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String, options: [KeyValueObservingOptions]) throws /// Stops the observer object from receiving change notifications for the /// property specified by the key path relative to the object receiving this /// message. - func removeObserver( - pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String) - throws + func removeObserver(pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String) throws } protocol PigeonApiProtocolNSObject { /// Informs the observing object when the value at the specified key path /// relative to the observed object has changed. - func observeValue( - pigeonInstance pigeonInstanceArg: NSObject, keyPath keyPathArg: String?, - object objectArg: NSObject?, change changeArg: [KeyValueChangeKey: Any?]?, - completion: @escaping (Result) -> Void) + func observeValue(pigeonInstance pigeonInstanceArg: NSObject, keyPath keyPathArg: String?, object objectArg: NSObject?, change changeArg: [KeyValueChangeKey: Any?]?, completion: @escaping (Result) -> Void) } -final class PigeonApiNSObject: PigeonApiProtocolNSObject { +final class PigeonApiNSObject: PigeonApiProtocolNSObject { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateNSObject init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateNSObject) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiNSObject?) - { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiNSObject?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.pigeon_defaultConstructor", - binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.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) +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), +withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -4454,9 +5894,7 @@ final class PigeonApiNSObject: PigeonApiProtocolNSObject { } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } - let addObserverChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.addObserver", - binaryMessenger: binaryMessenger, codec: codec) + let addObserverChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.addObserver", binaryMessenger: binaryMessenger, codec: codec) if let api = api { addObserverChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -4465,9 +5903,7 @@ final class PigeonApiNSObject: PigeonApiProtocolNSObject { let keyPathArg = args[2] as! String let optionsArg = args[3] as! [KeyValueObservingOptions] do { - try api.pigeonDelegate.addObserver( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, observer: observerArg, - keyPath: keyPathArg, options: optionsArg) + try api.pigeonDelegate.addObserver(pigeonApi: api, pigeonInstance: pigeonInstanceArg, observer: observerArg, keyPath: keyPathArg, options: optionsArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -4476,9 +5912,7 @@ final class PigeonApiNSObject: PigeonApiProtocolNSObject { } else { addObserverChannel.setMessageHandler(nil) } - let removeObserverChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.removeObserver", - binaryMessenger: binaryMessenger, codec: codec) + let removeObserverChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.removeObserver", binaryMessenger: binaryMessenger, codec: codec) if let api = api { removeObserverChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -4486,9 +5920,7 @@ final class PigeonApiNSObject: PigeonApiProtocolNSObject { let observerArg = args[1] as! NSObject let keyPathArg = args[2] as! String do { - try api.pigeonDelegate.removeObserver( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, observer: observerArg, - keyPath: keyPathArg) + try api.pigeonDelegate.removeObserver(pigeonApi: api, pigeonInstance: pigeonInstanceArg, observer: observerArg, keyPath: keyPathArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -4500,26 +5932,21 @@ final class PigeonApiNSObject: PigeonApiProtocolNSObject { } ///Creates a Dart instance of NSObject and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: NSObject, completion: @escaping (Result) -> Void - ) { + func pigeonNewInstance(pigeonInstance: NSObject, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -4538,11 +5965,7 @@ final class PigeonApiNSObject: PigeonApiProtocolNSObject { } /// Informs the observing object when the value at the specified key path /// relative to the observed object has changed. - func observeValue( - pigeonInstance pigeonInstanceArg: NSObject, keyPath keyPathArg: String?, - object objectArg: NSObject?, change changeArg: [KeyValueChangeKey: Any?]?, - completion: @escaping (Result) -> Void - ) { + func observeValue(pigeonInstance pigeonInstanceArg: NSObject, keyPath keyPathArg: String?, object objectArg: NSObject?, change changeArg: [KeyValueChangeKey: Any?]?, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -4554,10 +5977,8 @@ final class PigeonApiNSObject: PigeonApiProtocolNSObject { let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.observeValue" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, keyPathArg, objectArg, changeArg] as [Any?]) { - response in + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, keyPathArg, objectArg, changeArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -4574,127 +5995,226 @@ final class PigeonApiNSObject: PigeonApiProtocolNSObject { } } + +/* +// 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. + +import Foundation + + +/// Implementation of `NSObject` that calls to Dart in callback methods. +class ObjectImpl: NSObject { + let api: PigeonApiProtocolNSObject + + init(api: PigeonApiProtocolNSObject) { + self.api = api + } + + func fixMe() { + api.observeValue(pigeonInstance: self, keyPath: keyPath, object: object, change: change) { _ in } + } +} + +/// ProxyApi implementation for `NSObject`. +/// +/// 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 ObjectProxyAPIDelegate : PigeonApiDelegateNSObject { + func pigeonDefaultConstructor(pigeonApi: PigeonApiNSObject) throws -> NSObject { + return NSObjectImpl(api: pigeonApi) + } + + func addObserver(pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String, options: [KeyValueObservingOptions]) throws { + pigeonInstance.addObserver(observer: observer, keyPath: keyPath, options: options) + } + + func removeObserver(pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String) throws { + pigeonInstance.removeObserver(observer: observer, keyPath: keyPath) + } + +} +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ObjectProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSObject(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) + XCTAssertNotNil(instance) + } + + func testAddObserver() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSObject(registrar) + + let instance = TestObject() + let observer = TestObject + let keyPath = "myString" + let options = [.newValue] + api.pigeonDelegate.addObserver(pigeonApi: api, pigeonInstance: instance, observer: observer, keyPath: keyPath, options: options) + + XCTAssertEqual(instance.addObserverArgs, [observer, keyPath, options]) + } + + func testRemoveObserver() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSObject(registrar) + + let instance = TestObject() + let observer = TestObject + let keyPath = "myString" + api.pigeonDelegate.removeObserver(pigeonApi: api, pigeonInstance: instance, observer: observer, keyPath: keyPath) + + XCTAssertEqual(instance.removeObserverArgs, [observer, keyPath]) + } + + func testObserveValue() { + let api = TestObjectApi() + let instance = ObjectImpl(api: api) + let keyPath = "myString" + let object = TestObject + let change = [.indexes: -1] + instance.observeValue(keyPath: keyPath, object: object, change: change) + + XCTAssertEqual(api.observeValueArgs, [keyPath, object, change]) + } + +} +class TestObject: NSObject { + var addObserverArgs: [AnyHashable?]? = nil + var removeObserverArgs: [AnyHashable?]? = nil + + + override func addObserver() { + addObserverArgs = [observer, keyPath, options] + } + override func removeObserver() { + removeObserverArgs = [observer, keyPath] + } +} +class TestObjectApi: PigeonApiProtocolNSObject { + var observeValueArgs: [AnyHashable?]? = nil + + func observeValue(keyPath: String?, object: NSObject?, change: [KeyValueChangeKey: Any?]?) throws { + observeValueArgs = [keyPathArg, objectArg, changeArg] + } +} +*/ + protocol PigeonApiDelegateUIViewWKWebView { #if !os(macOS) - func pigeonDefaultConstructor( - pigeonApi: PigeonApiUIViewWKWebView, initialConfiguration: WKWebViewConfiguration - ) throws -> WKWebView + func pigeonDefaultConstructor(pigeonApi: PigeonApiUIViewWKWebView, initialConfiguration: WKWebViewConfiguration) throws -> WKWebView #endif #if !os(macOS) - /// The object that contains the configuration details for the web view. - func configuration(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws - -> WKWebViewConfiguration + /// The object that contains the configuration details for the web view. + func configuration(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> WKWebViewConfiguration #endif #if !os(macOS) - /// The scroll view associated with the web view. - func scrollView(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws - -> UIScrollView + /// The scroll view associated with the web view. + func scrollView(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> UIScrollView #endif #if !os(macOS) - /// The object you use to integrate custom user interface elements, such as - /// contextual menus or panels, into web view interactions. - func setUIDelegate( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws + /// The object you use to integrate custom user interface elements, such as + /// contextual menus or panels, into web view interactions. + func setUIDelegate(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws #endif #if !os(macOS) - /// The object you use to manage navigation behavior for the web view. - func setNavigationDelegate( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate - ) throws + /// The object you use to manage navigation behavior for the web view. + func setNavigationDelegate(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate) throws #endif #if !os(macOS) - /// The URL for the current webpage. - func getUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? + /// The URL for the current webpage. + func getUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? #endif #if !os(macOS) - /// An estimate of what fraction of the current navigation has been loaded. - func getEstimatedProgress(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws - -> Double + /// An estimate of what fraction of the current navigation has been loaded. + func getEstimatedProgress(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Double #endif #if !os(macOS) - /// Loads the web content that the specified URL request object references and - /// navigates to that content. - func load( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) - throws + /// Loads the web content that the specified URL request object references and + /// navigates to that content. + func load(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) throws #endif #if !os(macOS) - /// Loads the contents of the specified HTML string and navigates to it. - func loadHtmlString( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, string: String, - baseUrl: String?) throws + /// Loads the contents of the specified HTML string and navigates to it. + func loadHtmlString(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, string: String, baseUrl: String?) throws #endif #if !os(macOS) - /// Loads the web content from the specified file and navigates to it. - func loadFileUrl( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, url: String, - readAccessUrl: String) throws + /// Loads the web content from the specified file and navigates to it. + func loadFileUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, url: String, readAccessUrl: String) throws #endif #if !os(macOS) - /// Convenience method to load a Flutter asset. - func loadFlutterAsset( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, key: String) throws + /// Convenience method to load a Flutter asset. + func loadFlutterAsset(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, key: String) throws #endif #if !os(macOS) - /// A Boolean value that indicates whether there is a valid back item in the - /// back-forward list. - func canGoBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool + /// A Boolean value that indicates whether there is a valid back item in the + /// back-forward list. + func canGoBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool #endif #if !os(macOS) - /// A Boolean value that indicates whether there is a valid forward item in - /// the back-forward list. - func canGoForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool + /// A Boolean value that indicates whether there is a valid forward item in + /// the back-forward list. + func canGoForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool #endif #if !os(macOS) - /// Navigates to the back item in the back-forward list. - func goBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + /// Navigates to the back item in the back-forward list. + func goBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws #endif #if !os(macOS) - /// Navigates to the forward item in the back-forward list. - func goForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + /// Navigates to the forward item in the back-forward list. + func goForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws #endif #if !os(macOS) - /// Reloads the current webpage. - func reload(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + /// Reloads the current webpage. + func reload(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws #endif #if !os(macOS) - /// The page title. - func getTitle(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? + /// The page title. + func getTitle(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? #endif #if !os(macOS) - /// A Boolean value that indicates whether horizontal swipe gestures trigger - /// backward and forward page navigation. - func setAllowsBackForwardNavigationGestures( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws + /// A Boolean value that indicates whether horizontal swipe gestures trigger + /// backward and forward page navigation. + func setAllowsBackForwardNavigationGestures(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws #endif #if !os(macOS) - /// The custom user agent string. - func setCustomUserAgent( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws + /// The custom user agent string. + func setCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws #endif #if !os(macOS) - /// Evaluates the specified JavaScript string. - func evaluateJavaScript( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, - completion: @escaping (Result) -> Void) + /// Evaluates the specified JavaScript string. + func evaluateJavaScript(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, completion: @escaping (Result) -> Void) #endif #if !os(macOS) - /// A Boolean value that indicates whether you can inspect the view with - /// Safari Web Inspector. - func setInspectable( - pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws + /// A Boolean value that indicates whether you can inspect the view with + /// Safari Web Inspector. + func setInspectable(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws #endif #if !os(macOS) - /// The custom user agent string. - func getCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws - -> String? + /// The custom user agent string. + func getCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? #endif } protocol PigeonApiProtocolUIViewWKWebView { } -final class PigeonApiUIViewWKWebView: PigeonApiProtocolUIViewWKWebView { +final class PigeonApiUIViewWKWebView: PigeonApiProtocolUIViewWKWebView { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateUIViewWKWebView ///An implementation of [UIView] used to access callback methods @@ -4707,644 +6227,991 @@ final class PigeonApiUIViewWKWebView: PigeonApiProtocolUIViewWKWebView { return pigeonRegistrar.apiDelegate.pigeonApiWKWebView(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateUIViewWKWebView - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateUIViewWKWebView) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIViewWKWebView? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIViewWKWebView?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() #if !os(macOS) - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.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 - let initialConfigurationArg = args[1] as! WKWebViewConfiguration - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.pigeonDefaultConstructor( - pigeonApi: api, initialConfiguration: initialConfigurationArg), - withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.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 + let initialConfigurationArg = args[1] as! WKWebViewConfiguration + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, initialConfiguration: initialConfigurationArg), +withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - pigeonDefaultConstructorChannel.setMessageHandler(nil) } + } else { + pigeonDefaultConstructorChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let configurationChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.configuration", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - configurationChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let pigeonIdentifierArg = args[1] as! Int64 - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.configuration( - pigeonApi: api, pigeonInstance: pigeonInstanceArg), - withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let configurationChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.configuration", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + configurationChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let pigeonIdentifierArg = args[1] as! Int64 + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.configuration(pigeonApi: api, pigeonInstance: pigeonInstanceArg), withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - configurationChannel.setMessageHandler(nil) } + } else { + configurationChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let scrollViewChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.scrollView", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - scrollViewChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let pigeonIdentifierArg = args[1] as! Int64 - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.scrollView(pigeonApi: api, pigeonInstance: pigeonInstanceArg), - withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let scrollViewChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.scrollView", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + scrollViewChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let pigeonIdentifierArg = args[1] as! Int64 + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.scrollView(pigeonApi: api, pigeonInstance: pigeonInstanceArg), withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - scrollViewChannel.setMessageHandler(nil) } + } else { + scrollViewChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setUIDelegateChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setUIDelegate", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setUIDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let delegateArg = args[1] as! WKUIDelegate - do { - try api.pigeonDelegate.setUIDelegate( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setUIDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setUIDelegate", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setUIDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let delegateArg = args[1] as! WKUIDelegate + do { + try api.pigeonDelegate.setUIDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setUIDelegateChannel.setMessageHandler(nil) } + } else { + setUIDelegateChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setNavigationDelegateChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setNavigationDelegate", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setNavigationDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let delegateArg = args[1] as! WKNavigationDelegate - do { - try api.pigeonDelegate.setNavigationDelegate( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setNavigationDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setNavigationDelegate", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setNavigationDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let delegateArg = args[1] as! WKNavigationDelegate + do { + try api.pigeonDelegate.setNavigationDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setNavigationDelegateChannel.setMessageHandler(nil) } + } else { + setNavigationDelegateChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let getUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getUrl", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getUrlChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getUrl( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getUrl", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - getUrlChannel.setMessageHandler(nil) } + } else { + getUrlChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let getEstimatedProgressChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getEstimatedProgress", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getEstimatedProgressChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getEstimatedProgress( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getEstimatedProgressChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getEstimatedProgress", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getEstimatedProgressChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getEstimatedProgress(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - getEstimatedProgressChannel.setMessageHandler(nil) } + } else { + getEstimatedProgressChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let loadChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.load", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let requestArg = args[1] as! URLRequestWrapper - do { - try api.pigeonDelegate.load( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, request: requestArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let loadChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.load", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let requestArg = args[1] as! URLRequestWrapper + do { + try api.pigeonDelegate.load(pigeonApi: api, pigeonInstance: pigeonInstanceArg, request: requestArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - loadChannel.setMessageHandler(nil) } + } else { + loadChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let loadHtmlStringChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadHtmlString", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadHtmlStringChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let stringArg = args[1] as! String - let baseUrlArg: String? = nilOrValue(args[2]) - do { - try api.pigeonDelegate.loadHtmlString( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, string: stringArg, - baseUrl: baseUrlArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let loadHtmlStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadHtmlString", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadHtmlStringChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let stringArg = args[1] as! String + let baseUrlArg: String? = nilOrValue(args[2]) + do { + try api.pigeonDelegate.loadHtmlString(pigeonApi: api, pigeonInstance: pigeonInstanceArg, string: stringArg, baseUrl: baseUrlArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - loadHtmlStringChannel.setMessageHandler(nil) } + } else { + loadHtmlStringChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let loadFileUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadFileUrl", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadFileUrlChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let urlArg = args[1] as! String - let readAccessUrlArg = args[2] as! String - do { - try api.pigeonDelegate.loadFileUrl( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, url: urlArg, - readAccessUrl: readAccessUrlArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let loadFileUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadFileUrl", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadFileUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let urlArg = args[1] as! String + let readAccessUrlArg = args[2] as! String + do { + try api.pigeonDelegate.loadFileUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg, url: urlArg, readAccessUrl: readAccessUrlArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - loadFileUrlChannel.setMessageHandler(nil) } + } else { + loadFileUrlChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let loadFlutterAssetChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadFlutterAsset", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadFlutterAssetChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let keyArg = args[1] as! String - do { - try api.pigeonDelegate.loadFlutterAsset( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, key: keyArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let loadFlutterAssetChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadFlutterAsset", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadFlutterAssetChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let keyArg = args[1] as! String + do { + try api.pigeonDelegate.loadFlutterAsset(pigeonApi: api, pigeonInstance: pigeonInstanceArg, key: keyArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - loadFlutterAssetChannel.setMessageHandler(nil) } + } else { + loadFlutterAssetChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let canGoBackChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.canGoBack", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - canGoBackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.canGoBack( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let canGoBackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.canGoBack", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + canGoBackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.canGoBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - canGoBackChannel.setMessageHandler(nil) } + } else { + canGoBackChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let canGoForwardChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.canGoForward", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - canGoForwardChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.canGoForward( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let canGoForwardChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.canGoForward", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + canGoForwardChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.canGoForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - canGoForwardChannel.setMessageHandler(nil) } + } else { + canGoForwardChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let goBackChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.goBack", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - goBackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let goBackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.goBack", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + goBackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - goBackChannel.setMessageHandler(nil) } + } else { + goBackChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let goForwardChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.goForward", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - goForwardChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let goForwardChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.goForward", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + goForwardChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - goForwardChannel.setMessageHandler(nil) } + } else { + goForwardChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let reloadChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.reload", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - reloadChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let reloadChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.reload", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + reloadChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - reloadChannel.setMessageHandler(nil) } + } else { + reloadChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let getTitleChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getTitle", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getTitleChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getTitle( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getTitleChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getTitle", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getTitleChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getTitle(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - getTitleChannel.setMessageHandler(nil) } + } else { + getTitleChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setAllowsBackForwardNavigationGesturesChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setAllowsBackForwardNavigationGestures", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setAllowsBackForwardNavigationGesturesChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let allowArg = args[1] as! Bool - do { - try api.pigeonDelegate.setAllowsBackForwardNavigationGestures( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setAllowsBackForwardNavigationGesturesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setAllowsBackForwardNavigationGestures", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAllowsBackForwardNavigationGesturesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let allowArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAllowsBackForwardNavigationGestures(pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setAllowsBackForwardNavigationGesturesChannel.setMessageHandler(nil) } + } else { + setAllowsBackForwardNavigationGesturesChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setCustomUserAgentChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setCustomUserAgent", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setCustomUserAgentChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let userAgentArg: String? = nilOrValue(args[1]) - do { - try api.pigeonDelegate.setCustomUserAgent( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, userAgent: userAgentArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setCustomUserAgentChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setCustomUserAgent", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setCustomUserAgentChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let userAgentArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setCustomUserAgent(pigeonApi: api, pigeonInstance: pigeonInstanceArg, userAgent: userAgentArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setCustomUserAgentChannel.setMessageHandler(nil) } + } else { + setCustomUserAgentChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let evaluateJavaScriptChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.evaluateJavaScript", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - evaluateJavaScriptChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let javaScriptStringArg = args[1] as! String - api.pigeonDelegate.evaluateJavaScript( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, javaScriptString: javaScriptStringArg - ) { result in - switch result { - case .success(let res): - reply(wrapResult(res)) - case .failure(let error): - reply(wrapError(error)) - } + let evaluateJavaScriptChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.evaluateJavaScript", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + evaluateJavaScriptChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let javaScriptStringArg = args[1] as! String + api.pigeonDelegate.evaluateJavaScript(pigeonApi: api, pigeonInstance: pigeonInstanceArg, javaScriptString: javaScriptStringArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) } } - } else { - evaluateJavaScriptChannel.setMessageHandler(nil) } + } else { + evaluateJavaScriptChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let setInspectableChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setInspectable", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setInspectableChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let inspectableArg = args[1] as! Bool - do { - try api.pigeonDelegate.setInspectable( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, inspectable: inspectableArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setInspectableChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setInspectable", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setInspectableChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let inspectableArg = args[1] as! Bool + do { + try api.pigeonDelegate.setInspectable(pigeonApi: api, pigeonInstance: pigeonInstanceArg, inspectable: inspectableArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setInspectableChannel.setMessageHandler(nil) } + } else { + setInspectableChannel.setMessageHandler(nil) + } #endif #if !os(macOS) - let getCustomUserAgentChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getCustomUserAgent", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getCustomUserAgentChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getCustomUserAgent( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getCustomUserAgentChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getCustomUserAgent", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getCustomUserAgentChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getCustomUserAgent(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - getCustomUserAgentChannel.setMessageHandler(nil) } + } else { + getCustomUserAgentChannel.setMessageHandler(nil) + } #endif } #if !os(macOS) - ///Creates a Dart instance of UIViewWKWebView and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKWebView, completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } + ///Creates a Dart instance of UIViewWKWebView and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: WKWebView, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) } } } - #endif -} -protocol PigeonApiDelegateNSViewWKWebView { - #if !os(iOS) - func pigeonDefaultConstructor( - pigeonApi: PigeonApiNSViewWKWebView, initialConfiguration: WKWebViewConfiguration - ) throws -> WKWebView - #endif - #if !os(iOS) - /// The object that contains the configuration details for the web view. - func configuration(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - -> WKWebViewConfiguration - #endif - #if !os(iOS) - /// The object you use to integrate custom user interface elements, such as - /// contextual menus or panels, into web view interactions. - func setUIDelegate( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws - #endif - #if !os(iOS) - /// The object you use to manage navigation behavior for the web view. - func setNavigationDelegate( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate - ) throws - #endif - #if !os(iOS) - /// The URL for the current webpage. - func getUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? - #endif - #if !os(iOS) - /// An estimate of what fraction of the current navigation has been loaded. - func getEstimatedProgress(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - -> Double - #endif - #if !os(iOS) - /// Loads the web content that the specified URL request object references and - /// navigates to that content. - func load( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) - throws - #endif - #if !os(iOS) - /// Loads the contents of the specified HTML string and navigates to it. - func loadHtmlString( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, string: String, - baseUrl: String?) throws - #endif - #if !os(iOS) - /// Loads the web content from the specified file and navigates to it. - func loadFileUrl( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, url: String, - readAccessUrl: String) throws - #endif - #if !os(iOS) - /// Convenience method to load a Flutter asset. - func loadFlutterAsset( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, key: String) throws - #endif - #if !os(iOS) - /// A Boolean value that indicates whether there is a valid back item in the - /// back-forward list. - func canGoBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool - #endif - #if !os(iOS) - /// A Boolean value that indicates whether there is a valid forward item in - /// the back-forward list. - func canGoForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool - #endif - #if !os(iOS) - /// Navigates to the back item in the back-forward list. - func goBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - #endif - #if !os(iOS) - /// Navigates to the forward item in the back-forward list. - func goForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - #endif - #if !os(iOS) - /// Reloads the current webpage. - func reload(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - #endif - #if !os(iOS) - /// The page title. - func getTitle(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? - #endif - #if !os(iOS) - /// A Boolean value that indicates whether horizontal swipe gestures trigger - /// backward and forward page navigation. - func setAllowsBackForwardNavigationGestures( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws - #endif - #if !os(iOS) - /// The custom user agent string. - func setCustomUserAgent( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws - #endif - #if !os(iOS) - /// Evaluates the specified JavaScript string. - func evaluateJavaScript( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, - completion: @escaping (Result) -> Void) - #endif - #if !os(iOS) - /// A Boolean value that indicates whether you can inspect the view with - /// Safari Web Inspector. - func setInspectable( - pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws - #endif - #if !os(iOS) - /// The custom user agent string. - func getCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - -> String? + } #endif } -protocol PigeonApiProtocolNSViewWKWebView { -} +/* +// 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. + +import Foundation +import UIKit +import WebKit + + +/// ProxyApi implementation for `UIViewWKWebView`. +/// +/// 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 ViewWKWebViewProxyAPIDelegate : PigeonApiDelegateUIViewWKWebView { + func pigeonDefaultConstructor(pigeonApi: PigeonApiUIViewWKWebView, initialConfiguration: WKWebViewConfiguration) throws -> WKWebView { + return UIViewWKWebView(,initialConfiguration: initialConfiguration) + } + + func configuration(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: UIViewWKWebView): WKWebViewConfiguration { + return pigeonInstance.configuration + } + + func scrollView(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: UIViewWKWebView): UIScrollView { + return pigeonInstance.scrollView + } + + func setUIDelegate(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws { + pigeonInstance.uIDelegate = delegate: delegate + } + + func setNavigationDelegate(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate) throws { + pigeonInstance.navigationDelegate = delegate: delegate + } + + func getUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? { + return pigeonInstance.url + } + + func getEstimatedProgress(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Double { + return pigeonInstance.estimatedProgress + } + + func load(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) throws { + pigeonInstance.load(request: request) + } + + func loadHtmlString(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, string: String, baseUrl: String?) throws { + pigeonInstance.loadHtmlString(string: string, baseUrl: baseUrl) + } + + func loadFileUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, url: String, readAccessUrl: String) throws { + pigeonInstance.loadFileUrl(url: url, readAccessUrl: readAccessUrl) + } + + func loadFlutterAsset(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, key: String) throws { + pigeonInstance.loadFlutterAsset(key: key) + } + + func canGoBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool { + return pigeonInstance.canGoBack() + } + + func canGoForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool { + return pigeonInstance.canGoForward() + } + + func goBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws { + pigeonInstance.goBack() + } + + func goForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws { + pigeonInstance.goForward() + } + + func reload(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws { + pigeonInstance.reload() + } + + func getTitle(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? { + return pigeonInstance.title + } + + func setAllowsBackForwardNavigationGestures(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws { + pigeonInstance.allowsBackForwardNavigationGestures = allow: allow + } + + func setCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws { + pigeonInstance.customUserAgent = userAgent: userAgent + } + + func evaluateJavaScript(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, completion: @escaping (Result) -> Void) { + return pigeonInstance.evaluateJavaScript(javaScriptString: javaScriptString) + } + + func setInspectable(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws { + pigeonInstance.inspectable = inspectable: inspectable + } + + func getCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? { + return pigeonInstance.customUserAgent + } + +} +*/ + +/* +// 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. + +import UIKit +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ViewWKWebViewProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, initialConfiguration: TestWebViewConfiguration) + XCTAssertNotNil(instance) + } + + func testConfiguration() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = try? api.pigeonDelegate.configuration(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.configuration) + } + + func testScrollView() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = try? api.pigeonDelegate.scrollView(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.scrollView) + } + + func testSetUIDelegate() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let delegate = TestDelegate + api.pigeonDelegate.setUIDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) + + XCTAssertEqual(instance.setUIDelegateArgs, [delegate]) + } + + func testSetNavigationDelegate() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let delegate = TestNavigationDelegate + api.pigeonDelegate.setNavigationDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) + + XCTAssertEqual(instance.setNavigationDelegateArgs, [delegate]) + } + + func testGetUrl() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getUrlCalled) + XCTAssertEqual(value, instance.getUrl()) + } + + func testGetEstimatedProgress() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.getEstimatedProgress(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getEstimatedProgressCalled) + XCTAssertEqual(value, instance.getEstimatedProgress()) + } + + func testLoad() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let request = TestRequest + api.pigeonDelegate.load(pigeonApi: api, pigeonInstance: instance, request: request) + + XCTAssertEqual(instance.loadArgs, [request]) + } + + func testLoadHtmlString() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let string = "myString" + let baseUrl = "myString" + api.pigeonDelegate.loadHtmlString(pigeonApi: api, pigeonInstance: instance, string: string, baseUrl: baseUrl) + + XCTAssertEqual(instance.loadHtmlStringArgs, [string, baseUrl]) + } + + func testLoadFileUrl() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let url = "myString" + let readAccessUrl = "myString" + api.pigeonDelegate.loadFileUrl(pigeonApi: api, pigeonInstance: instance, url: url, readAccessUrl: readAccessUrl) + + XCTAssertEqual(instance.loadFileUrlArgs, [url, readAccessUrl]) + } + + func testLoadFlutterAsset() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let key = "myString" + api.pigeonDelegate.loadFlutterAsset(pigeonApi: api, pigeonInstance: instance, key: key) + + XCTAssertEqual(instance.loadFlutterAssetArgs, [key]) + } + + func testCanGoBack() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.canGoBack(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.canGoBackCalled) + XCTAssertEqual(value, instance.canGoBack()) + } + + func testCanGoForward() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.canGoForward(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.canGoForwardCalled) + XCTAssertEqual(value, instance.canGoForward()) + } + + func testGoBack() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.goBackCalled) + } + + func testGoForward() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.goForwardCalled) + } + + func testReload() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.reloadCalled) + } + + func testGetTitle() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.getTitle(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getTitleCalled) + XCTAssertEqual(value, instance.getTitle()) + } -final class PigeonApiNSViewWKWebView: PigeonApiProtocolNSViewWKWebView { + func testSetAllowsBackForwardNavigationGestures() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let allow = true + api.pigeonDelegate.setAllowsBackForwardNavigationGestures(pigeonApi: api, pigeonInstance: instance, allow: allow) + + XCTAssertEqual(instance.setAllowsBackForwardNavigationGesturesArgs, [allow]) + } + + func testSetCustomUserAgent() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let userAgent = "myString" + api.pigeonDelegate.setCustomUserAgent(pigeonApi: api, pigeonInstance: instance, userAgent: userAgent) + + XCTAssertEqual(instance.setCustomUserAgentArgs, [userAgent]) + } + + func testEvaluateJavaScript() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let javaScriptString = "myString" + let value = api.pigeonDelegate.evaluateJavaScript(pigeonApi: api, pigeonInstance: instance, javaScriptString: javaScriptString) + + XCTAssertEqual(instance.evaluateJavaScriptArgs, [javaScriptString]) + XCTAssertEqual(value, instance.evaluateJavaScript(javaScriptString: javaScriptString)) + } + + func testSetInspectable() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let inspectable = true + api.pigeonDelegate.setInspectable(pigeonApi: api, pigeonInstance: instance, inspectable: inspectable) + + XCTAssertEqual(instance.setInspectableArgs, [inspectable]) + } + + func testGetCustomUserAgent() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.getCustomUserAgent(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getCustomUserAgentCalled) + XCTAssertEqual(value, instance.getCustomUserAgent()) + } + +} +class TestViewWKWebView: UIViewWKWebView { + private var configurationTestValue = TestWebViewConfiguration + private var scrollViewTestValue = TestScrollView + var setUIDelegateArgs: [AnyHashable?]? = nil + var setNavigationDelegateArgs: [AnyHashable?]? = nil + var getUrlCalled = false + var getEstimatedProgressCalled = false + var loadArgs: [AnyHashable?]? = nil + var loadHtmlStringArgs: [AnyHashable?]? = nil + var loadFileUrlArgs: [AnyHashable?]? = nil + var loadFlutterAssetArgs: [AnyHashable?]? = nil + var canGoBackCalled = false + var canGoForwardCalled = false + var goBackCalled = false + var goForwardCalled = false + var reloadCalled = false + var getTitleCalled = false + var setAllowsBackForwardNavigationGesturesArgs: [AnyHashable?]? = nil + var setCustomUserAgentArgs: [AnyHashable?]? = nil + var evaluateJavaScriptArgs: [AnyHashable?]? = nil + var setInspectableArgs: [AnyHashable?]? = nil + var getCustomUserAgentCalled = false + + override var configuration: WKWebViewConfiguration { + return configurationTestValue + } + override var scrollView: UIScrollView { + return scrollViewTestValue + } + + override func setUIDelegate() { + setUIDelegateArgs = [delegate] + } + override func setNavigationDelegate() { + setNavigationDelegateArgs = [delegate] + } + override func getUrl() { + getUrlCalled = true + } + override func getEstimatedProgress() { + getEstimatedProgressCalled = true + } + override func load() { + loadArgs = [request] + } + override func loadHtmlString() { + loadHtmlStringArgs = [string, baseUrl] + } + override func loadFileUrl() { + loadFileUrlArgs = [url, readAccessUrl] + } + override func loadFlutterAsset() { + loadFlutterAssetArgs = [key] + } + override func canGoBack() { + canGoBackCalled = true + } + override func canGoForward() { + canGoForwardCalled = true + } + override func goBack() { + goBackCalled = true + } + override func goForward() { + goForwardCalled = true + } + override func reload() { + reloadCalled = true + } + override func getTitle() { + getTitleCalled = true + } + override func setAllowsBackForwardNavigationGestures() { + setAllowsBackForwardNavigationGesturesArgs = [allow] + } + override func setCustomUserAgent() { + setCustomUserAgentArgs = [userAgent] + } + override func evaluateJavaScript() { + evaluateJavaScriptArgs = [javaScriptString] + return -1 + } + override func setInspectable() { + setInspectableArgs = [inspectable] + } + override func getCustomUserAgent() { + getCustomUserAgentCalled = true + } +} +*/ + +protocol PigeonApiDelegateNSViewWKWebView { + #if !os(iOS) + func pigeonDefaultConstructor(pigeonApi: PigeonApiNSViewWKWebView, initialConfiguration: WKWebViewConfiguration) throws -> WKWebView + #endif + #if !os(iOS) + /// The object that contains the configuration details for the web view. + func configuration(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> WKWebViewConfiguration + #endif + #if !os(iOS) + /// The object you use to integrate custom user interface elements, such as + /// contextual menus or panels, into web view interactions. + func setUIDelegate(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws + #endif + #if !os(iOS) + /// The object you use to manage navigation behavior for the web view. + func setNavigationDelegate(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate) throws + #endif + #if !os(iOS) + /// The URL for the current webpage. + func getUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? + #endif + #if !os(iOS) + /// An estimate of what fraction of the current navigation has been loaded. + func getEstimatedProgress(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Double + #endif + #if !os(iOS) + /// Loads the web content that the specified URL request object references and + /// navigates to that content. + func load(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) throws + #endif + #if !os(iOS) + /// Loads the contents of the specified HTML string and navigates to it. + func loadHtmlString(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, string: String, baseUrl: String?) throws + #endif + #if !os(iOS) + /// Loads the web content from the specified file and navigates to it. + func loadFileUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, url: String, readAccessUrl: String) throws + #endif + #if !os(iOS) + /// Convenience method to load a Flutter asset. + func loadFlutterAsset(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, key: String) throws + #endif + #if !os(iOS) + /// A Boolean value that indicates whether there is a valid back item in the + /// back-forward list. + func canGoBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool + #endif + #if !os(iOS) + /// A Boolean value that indicates whether there is a valid forward item in + /// the back-forward list. + func canGoForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool + #endif + #if !os(iOS) + /// Navigates to the back item in the back-forward list. + func goBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + #endif + #if !os(iOS) + /// Navigates to the forward item in the back-forward list. + func goForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + #endif + #if !os(iOS) + /// Reloads the current webpage. + func reload(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + #endif + #if !os(iOS) + /// The page title. + func getTitle(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? + #endif + #if !os(iOS) + /// A Boolean value that indicates whether horizontal swipe gestures trigger + /// backward and forward page navigation. + func setAllowsBackForwardNavigationGestures(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws + #endif + #if !os(iOS) + /// The custom user agent string. + func setCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws + #endif + #if !os(iOS) + /// Evaluates the specified JavaScript string. + func evaluateJavaScript(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, completion: @escaping (Result) -> Void) + #endif + #if !os(iOS) + /// A Boolean value that indicates whether you can inspect the view with + /// Safari Web Inspector. + func setInspectable(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws + #endif + #if !os(iOS) + /// The custom user agent string. + func getCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? + #endif +} + +protocol PigeonApiProtocolNSViewWKWebView { +} + +final class PigeonApiNSViewWKWebView: PigeonApiProtocolNSViewWKWebView { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateNSViewWKWebView ///An implementation of [NSObject] used to access callback methods @@ -5357,546 +7224,1389 @@ final class PigeonApiNSViewWKWebView: PigeonApiProtocolNSViewWKWebView { return pigeonRegistrar.apiDelegate.pigeonApiWKWebView(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateNSViewWKWebView - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateNSViewWKWebView) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiNSViewWKWebView? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiNSViewWKWebView?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() #if !os(iOS) - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.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 - let initialConfigurationArg = args[1] as! WKWebViewConfiguration - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.pigeonDefaultConstructor( - pigeonApi: api, initialConfiguration: initialConfigurationArg), - withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.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 + let initialConfigurationArg = args[1] as! WKWebViewConfiguration + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( +try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, initialConfiguration: initialConfigurationArg), +withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - pigeonDefaultConstructorChannel.setMessageHandler(nil) } + } else { + pigeonDefaultConstructorChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let configurationChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.configuration", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - configurationChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let pigeonIdentifierArg = args[1] as! Int64 - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.configuration( - pigeonApi: api, pigeonInstance: pigeonInstanceArg), - withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } - } else { - configurationChannel.setMessageHandler(nil) - } + let configurationChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.configuration", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + configurationChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let pigeonIdentifierArg = args[1] as! Int64 + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.configuration(pigeonApi: api, pigeonInstance: pigeonInstanceArg), withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + configurationChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let setUIDelegateChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setUIDelegate", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setUIDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let delegateArg = args[1] as! WKUIDelegate - do { - try api.pigeonDelegate.setUIDelegate( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setUIDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setUIDelegate", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setUIDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let delegateArg = args[1] as! WKUIDelegate + do { + try api.pigeonDelegate.setUIDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setUIDelegateChannel.setMessageHandler(nil) } + } else { + setUIDelegateChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let setNavigationDelegateChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setNavigationDelegate", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setNavigationDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let delegateArg = args[1] as! WKNavigationDelegate - do { - try api.pigeonDelegate.setNavigationDelegate( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setNavigationDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setNavigationDelegate", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setNavigationDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let delegateArg = args[1] as! WKNavigationDelegate + do { + try api.pigeonDelegate.setNavigationDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setNavigationDelegateChannel.setMessageHandler(nil) } + } else { + setNavigationDelegateChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let getUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getUrl", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getUrlChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getUrl( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getUrl", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - getUrlChannel.setMessageHandler(nil) } + } else { + getUrlChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let getEstimatedProgressChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getEstimatedProgress", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getEstimatedProgressChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getEstimatedProgress( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getEstimatedProgressChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getEstimatedProgress", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getEstimatedProgressChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getEstimatedProgress(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - getEstimatedProgressChannel.setMessageHandler(nil) } + } else { + getEstimatedProgressChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let loadChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.load", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let requestArg = args[1] as! URLRequestWrapper - do { - try api.pigeonDelegate.load( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, request: requestArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let loadChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.load", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let requestArg = args[1] as! URLRequestWrapper + do { + try api.pigeonDelegate.load(pigeonApi: api, pigeonInstance: pigeonInstanceArg, request: requestArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - loadChannel.setMessageHandler(nil) } + } else { + loadChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let loadHtmlStringChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadHtmlString", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadHtmlStringChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let stringArg = args[1] as! String - let baseUrlArg: String? = nilOrValue(args[2]) - do { - try api.pigeonDelegate.loadHtmlString( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, string: stringArg, - baseUrl: baseUrlArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let loadHtmlStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadHtmlString", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadHtmlStringChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let stringArg = args[1] as! String + let baseUrlArg: String? = nilOrValue(args[2]) + do { + try api.pigeonDelegate.loadHtmlString(pigeonApi: api, pigeonInstance: pigeonInstanceArg, string: stringArg, baseUrl: baseUrlArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - loadHtmlStringChannel.setMessageHandler(nil) } + } else { + loadHtmlStringChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let loadFileUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadFileUrl", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadFileUrlChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let urlArg = args[1] as! String - let readAccessUrlArg = args[2] as! String - do { - try api.pigeonDelegate.loadFileUrl( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, url: urlArg, - readAccessUrl: readAccessUrlArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let loadFileUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadFileUrl", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadFileUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let urlArg = args[1] as! String + let readAccessUrlArg = args[2] as! String + do { + try api.pigeonDelegate.loadFileUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg, url: urlArg, readAccessUrl: readAccessUrlArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - loadFileUrlChannel.setMessageHandler(nil) } + } else { + loadFileUrlChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let loadFlutterAssetChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadFlutterAsset", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadFlutterAssetChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let keyArg = args[1] as! String - do { - try api.pigeonDelegate.loadFlutterAsset( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, key: keyArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let loadFlutterAssetChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadFlutterAsset", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadFlutterAssetChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let keyArg = args[1] as! String + do { + try api.pigeonDelegate.loadFlutterAsset(pigeonApi: api, pigeonInstance: pigeonInstanceArg, key: keyArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - loadFlutterAssetChannel.setMessageHandler(nil) } + } else { + loadFlutterAssetChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let canGoBackChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.canGoBack", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - canGoBackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.canGoBack( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let canGoBackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.canGoBack", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + canGoBackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.canGoBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - canGoBackChannel.setMessageHandler(nil) } + } else { + canGoBackChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let canGoForwardChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.canGoForward", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - canGoForwardChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.canGoForward( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let canGoForwardChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.canGoForward", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + canGoForwardChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.canGoForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - canGoForwardChannel.setMessageHandler(nil) } + } else { + canGoForwardChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let goBackChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.goBack", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - goBackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let goBackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.goBack", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + goBackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - goBackChannel.setMessageHandler(nil) } + } else { + goBackChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let goForwardChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.goForward", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - goForwardChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let goForwardChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.goForward", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + goForwardChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - goForwardChannel.setMessageHandler(nil) } + } else { + goForwardChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let reloadChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.reload", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - reloadChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let reloadChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.reload", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + reloadChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - reloadChannel.setMessageHandler(nil) } + } else { + reloadChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let getTitleChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getTitle", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getTitleChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getTitle( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getTitleChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getTitle", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getTitleChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getTitle(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - getTitleChannel.setMessageHandler(nil) } + } else { + getTitleChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let setAllowsBackForwardNavigationGesturesChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setAllowsBackForwardNavigationGestures", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setAllowsBackForwardNavigationGesturesChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let allowArg = args[1] as! Bool - do { - try api.pigeonDelegate.setAllowsBackForwardNavigationGestures( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setAllowsBackForwardNavigationGesturesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setAllowsBackForwardNavigationGestures", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAllowsBackForwardNavigationGesturesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let allowArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAllowsBackForwardNavigationGestures(pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setAllowsBackForwardNavigationGesturesChannel.setMessageHandler(nil) } + } else { + setAllowsBackForwardNavigationGesturesChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let setCustomUserAgentChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setCustomUserAgent", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setCustomUserAgentChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let userAgentArg: String? = nilOrValue(args[1]) - do { - try api.pigeonDelegate.setCustomUserAgent( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, userAgent: userAgentArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setCustomUserAgentChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setCustomUserAgent", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setCustomUserAgentChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let userAgentArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setCustomUserAgent(pigeonApi: api, pigeonInstance: pigeonInstanceArg, userAgent: userAgentArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setCustomUserAgentChannel.setMessageHandler(nil) } + } else { + setCustomUserAgentChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let evaluateJavaScriptChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.evaluateJavaScript", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - evaluateJavaScriptChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let javaScriptStringArg = args[1] as! String - api.pigeonDelegate.evaluateJavaScript( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, javaScriptString: javaScriptStringArg - ) { result in - switch result { - case .success(let res): - reply(wrapResult(res)) - case .failure(let error): - reply(wrapError(error)) - } + let evaluateJavaScriptChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.evaluateJavaScript", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + evaluateJavaScriptChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let javaScriptStringArg = args[1] as! String + api.pigeonDelegate.evaluateJavaScript(pigeonApi: api, pigeonInstance: pigeonInstanceArg, javaScriptString: javaScriptStringArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) } } - } else { - evaluateJavaScriptChannel.setMessageHandler(nil) } + } else { + evaluateJavaScriptChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let setInspectableChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setInspectable", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setInspectableChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let inspectableArg = args[1] as! Bool - do { - try api.pigeonDelegate.setInspectable( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, inspectable: inspectableArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let setInspectableChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setInspectable", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setInspectableChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let inspectableArg = args[1] as! Bool + do { + try api.pigeonDelegate.setInspectable(pigeonApi: api, pigeonInstance: pigeonInstanceArg, inspectable: inspectableArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } - } else { - setInspectableChannel.setMessageHandler(nil) } + } else { + setInspectableChannel.setMessageHandler(nil) + } #endif #if !os(iOS) - let getCustomUserAgentChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getCustomUserAgent", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getCustomUserAgentChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getCustomUserAgent( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } + let getCustomUserAgentChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getCustomUserAgent", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getCustomUserAgentChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getCustomUserAgent(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getCustomUserAgentChannel.setMessageHandler(nil) + } + #endif + } + + #if !os(iOS) + ///Creates a Dart instance of NSViewWKWebView and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: WKWebView, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } + } + } + } + #endif +} + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `NSViewWKWebView`. +/// +/// 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 ViewWKWebViewProxyAPIDelegate : PigeonApiDelegateNSViewWKWebView { + func pigeonDefaultConstructor(pigeonApi: PigeonApiNSViewWKWebView, initialConfiguration: WKWebViewConfiguration) throws -> WKWebView { + return NSViewWKWebView(,initialConfiguration: initialConfiguration) + } + + func configuration(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: NSViewWKWebView): WKWebViewConfiguration { + return pigeonInstance.configuration + } + + func setUIDelegate(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws { + pigeonInstance.uIDelegate = delegate: delegate + } + + func setNavigationDelegate(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate) throws { + pigeonInstance.navigationDelegate = delegate: delegate + } + + func getUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? { + return pigeonInstance.url + } + + func getEstimatedProgress(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Double { + return pigeonInstance.estimatedProgress + } + + func load(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) throws { + pigeonInstance.load(request: request) + } + + func loadHtmlString(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, string: String, baseUrl: String?) throws { + pigeonInstance.loadHtmlString(string: string, baseUrl: baseUrl) + } + + func loadFileUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, url: String, readAccessUrl: String) throws { + pigeonInstance.loadFileUrl(url: url, readAccessUrl: readAccessUrl) + } + + func loadFlutterAsset(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, key: String) throws { + pigeonInstance.loadFlutterAsset(key: key) + } + + func canGoBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool { + return pigeonInstance.canGoBack() + } + + func canGoForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool { + return pigeonInstance.canGoForward() + } + + func goBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws { + pigeonInstance.goBack() + } + + func goForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws { + pigeonInstance.goForward() + } + + func reload(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws { + pigeonInstance.reload() + } + + func getTitle(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? { + return pigeonInstance.title + } + + func setAllowsBackForwardNavigationGestures(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws { + pigeonInstance.allowsBackForwardNavigationGestures = allow: allow + } + + func setCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws { + pigeonInstance.customUserAgent = userAgent: userAgent + } + + func evaluateJavaScript(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, completion: @escaping (Result) -> Void) { + return pigeonInstance.evaluateJavaScript(javaScriptString: javaScriptString) + } + + func setInspectable(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws { + pigeonInstance.inspectable = inspectable: inspectable + } + + func getCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? { + return pigeonInstance.customUserAgent + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ViewWKWebViewProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, initialConfiguration: TestWebViewConfiguration) + XCTAssertNotNil(instance) + } + + func testConfiguration() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = try? api.pigeonDelegate.configuration(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.configuration) + } + + func testSetUIDelegate() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let delegate = TestDelegate + api.pigeonDelegate.setUIDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) + + XCTAssertEqual(instance.setUIDelegateArgs, [delegate]) + } + + func testSetNavigationDelegate() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let delegate = TestNavigationDelegate + api.pigeonDelegate.setNavigationDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) + + XCTAssertEqual(instance.setNavigationDelegateArgs, [delegate]) + } + + func testGetUrl() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getUrlCalled) + XCTAssertEqual(value, instance.getUrl()) + } + + func testGetEstimatedProgress() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.getEstimatedProgress(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getEstimatedProgressCalled) + XCTAssertEqual(value, instance.getEstimatedProgress()) + } + + func testLoad() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let request = TestRequest + api.pigeonDelegate.load(pigeonApi: api, pigeonInstance: instance, request: request) + + XCTAssertEqual(instance.loadArgs, [request]) + } + + func testLoadHtmlString() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let string = "myString" + let baseUrl = "myString" + api.pigeonDelegate.loadHtmlString(pigeonApi: api, pigeonInstance: instance, string: string, baseUrl: baseUrl) + + XCTAssertEqual(instance.loadHtmlStringArgs, [string, baseUrl]) + } + + func testLoadFileUrl() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let url = "myString" + let readAccessUrl = "myString" + api.pigeonDelegate.loadFileUrl(pigeonApi: api, pigeonInstance: instance, url: url, readAccessUrl: readAccessUrl) + + XCTAssertEqual(instance.loadFileUrlArgs, [url, readAccessUrl]) + } + + func testLoadFlutterAsset() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let key = "myString" + api.pigeonDelegate.loadFlutterAsset(pigeonApi: api, pigeonInstance: instance, key: key) + + XCTAssertEqual(instance.loadFlutterAssetArgs, [key]) + } + + func testCanGoBack() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.canGoBack(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.canGoBackCalled) + XCTAssertEqual(value, instance.canGoBack()) + } + + func testCanGoForward() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.canGoForward(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.canGoForwardCalled) + XCTAssertEqual(value, instance.canGoForward()) + } + + func testGoBack() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.goBackCalled) + } + + func testGoForward() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.goForwardCalled) + } + + func testReload() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.reloadCalled) + } + + func testGetTitle() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.getTitle(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getTitleCalled) + XCTAssertEqual(value, instance.getTitle()) + } + + func testSetAllowsBackForwardNavigationGestures() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let allow = true + api.pigeonDelegate.setAllowsBackForwardNavigationGestures(pigeonApi: api, pigeonInstance: instance, allow: allow) + + XCTAssertEqual(instance.setAllowsBackForwardNavigationGesturesArgs, [allow]) + } + + func testSetCustomUserAgent() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let userAgent = "myString" + api.pigeonDelegate.setCustomUserAgent(pigeonApi: api, pigeonInstance: instance, userAgent: userAgent) + + XCTAssertEqual(instance.setCustomUserAgentArgs, [userAgent]) + } + + func testEvaluateJavaScript() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let javaScriptString = "myString" + let value = api.pigeonDelegate.evaluateJavaScript(pigeonApi: api, pigeonInstance: instance, javaScriptString: javaScriptString) + + XCTAssertEqual(instance.evaluateJavaScriptArgs, [javaScriptString]) + XCTAssertEqual(value, instance.evaluateJavaScript(javaScriptString: javaScriptString)) + } + + func testSetInspectable() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let inspectable = true + api.pigeonDelegate.setInspectable(pigeonApi: api, pigeonInstance: instance, inspectable: inspectable) + + XCTAssertEqual(instance.setInspectableArgs, [inspectable]) + } + + func testGetCustomUserAgent() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) + + let instance = TestViewWKWebView() + let value = api.pigeonDelegate.getCustomUserAgent(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getCustomUserAgentCalled) + XCTAssertEqual(value, instance.getCustomUserAgent()) + } + +} +class TestViewWKWebView: NSViewWKWebView { + private var configurationTestValue = TestWebViewConfiguration + var setUIDelegateArgs: [AnyHashable?]? = nil + var setNavigationDelegateArgs: [AnyHashable?]? = nil + var getUrlCalled = false + var getEstimatedProgressCalled = false + var loadArgs: [AnyHashable?]? = nil + var loadHtmlStringArgs: [AnyHashable?]? = nil + var loadFileUrlArgs: [AnyHashable?]? = nil + var loadFlutterAssetArgs: [AnyHashable?]? = nil + var canGoBackCalled = false + var canGoForwardCalled = false + var goBackCalled = false + var goForwardCalled = false + var reloadCalled = false + var getTitleCalled = false + var setAllowsBackForwardNavigationGesturesArgs: [AnyHashable?]? = nil + var setCustomUserAgentArgs: [AnyHashable?]? = nil + var evaluateJavaScriptArgs: [AnyHashable?]? = nil + var setInspectableArgs: [AnyHashable?]? = nil + var getCustomUserAgentCalled = false + + override var configuration: WKWebViewConfiguration { + return configurationTestValue + } + + override func setUIDelegate() { + setUIDelegateArgs = [delegate] + } + override func setNavigationDelegate() { + setNavigationDelegateArgs = [delegate] + } + override func getUrl() { + getUrlCalled = true + } + override func getEstimatedProgress() { + getEstimatedProgressCalled = true + } + override func load() { + loadArgs = [request] + } + override func loadHtmlString() { + loadHtmlStringArgs = [string, baseUrl] + } + override func loadFileUrl() { + loadFileUrlArgs = [url, readAccessUrl] + } + override func loadFlutterAsset() { + loadFlutterAssetArgs = [key] + } + override func canGoBack() { + canGoBackCalled = true + } + override func canGoForward() { + canGoForwardCalled = true + } + override func goBack() { + goBackCalled = true + } + override func goForward() { + goForwardCalled = true + } + override func reload() { + reloadCalled = true + } + override func getTitle() { + getTitleCalled = true + } + override func setAllowsBackForwardNavigationGestures() { + setAllowsBackForwardNavigationGesturesArgs = [allow] + } + override func setCustomUserAgent() { + setCustomUserAgentArgs = [userAgent] + } + override func evaluateJavaScript() { + evaluateJavaScriptArgs = [javaScriptString] + return -1 + } + override func setInspectable() { + setInspectableArgs = [inspectable] + } + override func getCustomUserAgent() { + getCustomUserAgentCalled = true + } +} +*/ + +open class PigeonApiDelegateWKWebView { +} + +protocol PigeonApiProtocolWKWebView { +} + +final class PigeonApiWKWebView: PigeonApiProtocolWKWebView { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateWKWebView + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) + } + + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebView) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate + } + ///Creates a Dart instance of WKWebView and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: WKWebView, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) } + } + } + } +} + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKWebView`. +/// +/// 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 WebViewProxyAPIDelegate : PigeonApiDelegateWKWebView { +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class WebViewProxyAPITests: XCTestCase { +} +*/ + +protocol PigeonApiDelegateWKUIDelegate { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUIDelegate) throws -> WKUIDelegate +} + +protocol PigeonApiProtocolWKUIDelegate { + /// Creates a new web view. + func onCreateWebView(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, configuration configurationArg: WKWebViewConfiguration, navigationAction navigationActionArg: WKNavigationAction, completion: @escaping (Result) -> Void) + /// Determines whether a web resource, which the security origin object + /// describes, can access to the device’s microphone audio and camera video. + func requestMediaCapturePermission(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, origin originArg: WKSecurityOrigin, frame frameArg: WKFrameInfo, type typeArg: MediaCaptureType, completion: @escaping (Result) -> Void) + /// Displays a JavaScript alert panel. + func runJavaScriptAlertPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, message messageArg: String, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) + /// Displays a JavaScript confirm panel. + func runJavaScriptConfirmPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, message messageArg: String, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) + /// Displays a JavaScript text input panel. + func runJavaScriptTextInputPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, prompt promptArg: String, defaultText defaultTextArg: String?, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) +} + +final class PigeonApiWKUIDelegate: PigeonApiProtocolWKUIDelegate { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateWKUIDelegate + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) + } + + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUIDelegate) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate + } + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUIDelegate?) { + let codec: FlutterStandardMessageCodec = + api != nil + ? FlutterStandardMessageCodec( + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + : FlutterStandardMessageCodec.sharedInstance() + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.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) + } + } + + ///Creates a Dart instance of WKUIDelegate and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: WKUIDelegate, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + completion( + .failure( + PigeonError( + code: "new-instance-error", + message: "Error: Attempting to create a new Dart instance of WKUIDelegate, but the class has a nonnull callback method.", details: ""))) + } + } + /// Creates a new web view. + func onCreateWebView(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, configuration configurationArg: WKWebViewConfiguration, navigationAction navigationActionArg: WKNavigationAction, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + return + } + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.onCreateWebView" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, configurationArg, navigationActionArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } + } + } + + /// Determines whether a web resource, which the security origin object + /// describes, can access to the device’s microphone audio and camera video. + func requestMediaCapturePermission(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, origin originArg: WKSecurityOrigin, frame frameArg: WKFrameInfo, type typeArg: MediaCaptureType, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + return + } + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.requestMediaCapturePermission" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, originArg, frameArg, typeArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else if listResponse[0] == nil { + completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) + } else { + let result = listResponse[0] as! PermissionDecision + completion(.success(result)) + } + } + } + + /// Displays a JavaScript alert panel. + func runJavaScriptAlertPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, message messageArg: String, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + return + } + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptAlertPanel" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, messageArg, frameArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } + } + } + + /// Displays a JavaScript confirm panel. + func runJavaScriptConfirmPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, message messageArg: String, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + return + } + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptConfirmPanel" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, messageArg, frameArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else if listResponse[0] == nil { + completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) } else { - getCustomUserAgentChannel.setMessageHandler(nil) + let result = listResponse[0] as! Bool + completion(.success(result)) } - #endif + } } - #if !os(iOS) - ///Creates a Dart instance of NSViewWKWebView and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKWebView, completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) + /// Displays a JavaScript text input panel. + func runJavaScriptTextInputPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, prompt promptArg: String, defaultText defaultTextArg: String?, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + return + } + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptTextInputPanel" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, promptArg, defaultTextArg, frameArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } - } + let result: String? = nilOrValue(listResponse[0]) + completion(.success(result)) } } - #endif + } + } -open class PigeonApiDelegateWKWebView { + +/* +// 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. + +import Foundation +import WebKit + +/// Implementation of `WKUIDelegate` that calls to Dart in callback methods. +class DelegateImpl: WKUIDelegate { + let api: PigeonApiProtocolWKUIDelegate + + init(api: PigeonApiProtocolWKUIDelegate) { + self.api = api + } + + func fixMe() { + api.onCreateWebView(pigeonInstance: self, webView: webView, configuration: configuration, navigationAction: navigationAction) { _ in } + } + + func fixMe() { + api.requestMediaCapturePermission(pigeonInstance: self, webView: webView, origin: origin, frame: frame, type: type) { _ in } + } + + func fixMe() { + api.runJavaScriptAlertPanel(pigeonInstance: self, webView: webView, message: message, frame: frame) { _ in } + } + + func fixMe() { + api.runJavaScriptConfirmPanel(pigeonInstance: self, webView: webView, message: message, frame: frame) { _ in } + } + + func fixMe() { + api.runJavaScriptTextInputPanel(pigeonInstance: self, webView: webView, prompt: prompt, defaultText: defaultText, frame: frame) { _ in } + } } -protocol PigeonApiProtocolWKWebView { +/// ProxyApi implementation for `WKUIDelegate`. +/// +/// 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 DelegateProxyAPIDelegate : PigeonApiDelegateWKUIDelegate { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUIDelegate) throws -> WKUIDelegate { + return WKUIDelegateImpl(api: pigeonApi) + } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class DelegateProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKUIDelegate(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) + XCTAssertNotNil(instance) + } + + func testOnCreateWebView() { + let api = TestDelegateApi() + let instance = DelegateImpl(api: api) + let webView = TestWebView + let configuration = TestWebViewConfiguration + let navigationAction = TestNavigationAction + instance.onCreateWebView(webView: webView, configuration: configuration, navigationAction: navigationAction) + + XCTAssertEqual(api.onCreateWebViewArgs, [webView, configuration, navigationAction]) + } + + func testRequestMediaCapturePermission() { + let api = TestDelegateApi() + let instance = DelegateImpl(api: api) + let webView = TestWebView + let origin = TestSecurityOrigin + let frame = TestFrameInfo + let type = .camera + instance.requestMediaCapturePermission(webView: webView, origin: origin, frame: frame, type: type) + + XCTAssertEqual(api.requestMediaCapturePermissionArgs, [webView, origin, frame, type]) + } + + func testRunJavaScriptAlertPanel() { + let api = TestDelegateApi() + let instance = DelegateImpl(api: api) + let webView = TestWebView + let message = "myString" + let frame = TestFrameInfo + instance.runJavaScriptAlertPanel(webView: webView, message: message, frame: frame) + + XCTAssertEqual(api.runJavaScriptAlertPanelArgs, [webView, message, frame]) + } + + func testRunJavaScriptConfirmPanel() { + let api = TestDelegateApi() + let instance = DelegateImpl(api: api) + let webView = TestWebView + let message = "myString" + let frame = TestFrameInfo + instance.runJavaScriptConfirmPanel(webView: webView, message: message, frame: frame) + + XCTAssertEqual(api.runJavaScriptConfirmPanelArgs, [webView, message, frame]) + } + + func testRunJavaScriptTextInputPanel() { + let api = TestDelegateApi() + let instance = DelegateImpl(api: api) + let webView = TestWebView + let prompt = "myString" + let defaultText = "myString" + let frame = TestFrameInfo + instance.runJavaScriptTextInputPanel(webView: webView, prompt: prompt, defaultText: defaultText, frame: frame) + + XCTAssertEqual(api.runJavaScriptTextInputPanelArgs, [webView, prompt, defaultText, frame]) + } + +} +class TestDelegateApi: PigeonApiProtocolWKUIDelegate { + var onCreateWebViewArgs: [AnyHashable?]? = nil + var requestMediaCapturePermissionArgs: [AnyHashable?]? = nil + var runJavaScriptAlertPanelArgs: [AnyHashable?]? = nil + var runJavaScriptConfirmPanelArgs: [AnyHashable?]? = nil + var runJavaScriptTextInputPanelArgs: [AnyHashable?]? = nil + + func onCreateWebView(webView: WKWebView, configuration: WKWebViewConfiguration, navigationAction: WKNavigationAction) throws { + onCreateWebViewArgs = [webViewArg, configurationArg, navigationActionArg] + } + func requestMediaCapturePermission(webView: WKWebView, origin: WKSecurityOrigin, frame: WKFrameInfo, type: MediaCaptureType) throws -> PermissionDecision { + requestMediaCapturePermissionArgs = [webViewArg, originArg, frameArg, typeArg] + } + func runJavaScriptAlertPanel(webView: WKWebView, message: String, frame: WKFrameInfo) throws { + runJavaScriptAlertPanelArgs = [webViewArg, messageArg, frameArg] + } + func runJavaScriptConfirmPanel(webView: WKWebView, message: String, frame: WKFrameInfo) throws -> Bool { + runJavaScriptConfirmPanelArgs = [webViewArg, messageArg, frameArg] + } + func runJavaScriptTextInputPanel(webView: WKWebView, prompt: String, defaultText: String?, frame: WKFrameInfo) throws -> String? { + runJavaScriptTextInputPanelArgs = [webViewArg, promptArg, defaultTextArg, frameArg] + } +} +*/ + +protocol PigeonApiDelegateWKHTTPCookieStore { + /// Sets a cookie policy that indicates whether the cookie store allows cookie + /// storage. + func setCookie(pigeonApi: PigeonApiWKHTTPCookieStore, pigeonInstance: WKHTTPCookieStore, cookie: HTTPCookie, completion: @escaping (Result) -> Void) +} + +protocol PigeonApiProtocolWKHTTPCookieStore { } -final class PigeonApiWKWebView: PigeonApiProtocolWKWebView { +final class PigeonApiWKHTTPCookieStore: PigeonApiProtocolWKHTTPCookieStore { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKWebView + let pigeonDelegate: PigeonApiDelegateWKHTTPCookieStore ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebView) - { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKHTTPCookieStore) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - ///Creates a Dart instance of WKWebView and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKWebView, completion: @escaping (Result) -> Void - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKHTTPCookieStore?) { + let codec: FlutterStandardMessageCodec = + api != nil + ? FlutterStandardMessageCodec( + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + : FlutterStandardMessageCodec.sharedInstance() + let setCookieChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKHTTPCookieStore.setCookie", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setCookieChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKHTTPCookieStore + let cookieArg = args[1] as! HTTPCookie + api.pigeonDelegate.setCookie(pigeonApi: api, pigeonInstance: pigeonInstanceArg, cookie: cookieArg) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + setCookieChannel.setMessageHandler(nil) + } + } + + ///Creates a Dart instance of WKHTTPCookieStore and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: WKHTTPCookieStore, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKHTTPCookieStore.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -5914,196 +8624,159 @@ final class PigeonApiWKWebView: PigeonApiProtocolWKWebView { } } } -protocol PigeonApiDelegateWKUIDelegate { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUIDelegate) throws -> WKUIDelegate -} -protocol PigeonApiProtocolWKUIDelegate { - /// Creates a new web view. - func onCreateWebView( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - configuration configurationArg: WKWebViewConfiguration, - navigationAction navigationActionArg: WKNavigationAction, - completion: @escaping (Result) -> Void) - /// Determines whether a web resource, which the security origin object - /// describes, can access to the device’s microphone audio and camera video. - func requestMediaCapturePermission( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - origin originArg: WKSecurityOrigin, frame frameArg: WKFrameInfo, type typeArg: MediaCaptureType, - completion: @escaping (Result) -> Void) - /// Displays a JavaScript alert panel. - func runJavaScriptAlertPanel( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - message messageArg: String, frame frameArg: WKFrameInfo, - completion: @escaping (Result) -> Void) - /// Displays a JavaScript confirm panel. - func runJavaScriptConfirmPanel( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - message messageArg: String, frame frameArg: WKFrameInfo, - completion: @escaping (Result) -> Void) - /// Displays a JavaScript text input panel. - func runJavaScriptTextInputPanel( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - prompt promptArg: String, defaultText defaultTextArg: String?, frame frameArg: WKFrameInfo, - completion: @escaping (Result) -> Void) -} +/* +// 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. -final class PigeonApiWKUIDelegate: PigeonApiProtocolWKUIDelegate { - unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKUIDelegate - ///An implementation of [NSObject] used to access callback methods - var pigeonApiNSObject: PigeonApiNSObject { - return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) - } +import Foundation +import WebKit - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUIDelegate - ) { - self.pigeonRegistrar = pigeonRegistrar - self.pigeonDelegate = delegate + +/// ProxyApi implementation for `WKHTTPCookieStore`. +/// +/// 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 CookieStoreProxyAPIDelegate : PigeonApiDelegateWKHTTPCookieStore { + func setCookie(pigeonApi: PigeonApiWKHTTPCookieStore, pigeonInstance: WKHTTPCookieStore, cookie: HTTPCookie, completion: @escaping (Result) -> Void) { + pigeonInstance.cookie = cookie: cookie } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUIDelegate? - ) { - let codec: FlutterStandardMessageCodec = - api != nil - ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) - : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.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) - } + +} +*/ + +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class CookieStoreProxyAPITests: XCTestCase { + func testSetCookie() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKHTTPCookieStore(registrar) + + let instance = TestCookieStore() + let cookie = TestCookie + api.pigeonDelegate.setCookie(pigeonApi: api, pigeonInstance: instance, cookie: cookie) + + XCTAssertEqual(instance.setCookieArgs, [cookie]) } - ///Creates a Dart instance of WKUIDelegate and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKUIDelegate, completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - completion( - .failure( - PigeonError( - code: "new-instance-error", - message: - "Error: Attempting to create a new Dart instance of WKUIDelegate, but the class has a nonnull callback method.", - details: ""))) - } +} +class TestCookieStore: WKHTTPCookieStore { + var setCookieArgs: [AnyHashable?]? = nil + + + override func setCookie() { + setCookieArgs = [cookie] } - /// Creates a new web view. - func onCreateWebView( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - configuration configurationArg: WKWebViewConfiguration, - navigationAction navigationActionArg: WKNavigationAction, - completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - return - } - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.onCreateWebView" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage( - [pigeonInstanceArg, webViewArg, configurationArg, navigationActionArg] as [Any?] - ) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) +} +*/ + +protocol PigeonApiDelegateUIScrollViewDelegate { + #if !os(macOS) + func pigeonDefaultConstructor(pigeonApi: PigeonApiUIScrollViewDelegate) throws -> UIScrollViewDelegate + #endif +} + +protocol PigeonApiProtocolUIScrollViewDelegate { + #if !os(macOS) + /// Tells the delegate when the user scrolls the content view within the + /// scroll view. + /// + /// Note that this is a convenient method that includes the `contentOffset` of + /// the `scrollView`. + func scrollViewDidScroll(pigeonInstance pigeonInstanceArg: UIScrollViewDelegate, scrollView scrollViewArg: UIScrollView, x xArg: Double, y yArg: Double, completion: @escaping (Result) -> Void) #endif + +} + +final class PigeonApiUIScrollViewDelegate: PigeonApiProtocolUIScrollViewDelegate { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateUIScrollViewDelegate + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) + } + + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateUIScrollViewDelegate) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate + } + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIScrollViewDelegate?) { + let codec: FlutterStandardMessageCodec = + api != nil + ? FlutterStandardMessageCodec( + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + : FlutterStandardMessageCodec.sharedInstance() + #if !os(macOS) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.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) } + #endif } - /// Determines whether a web resource, which the security origin object - /// describes, can access to the device’s microphone audio and camera video. - func requestMediaCapturePermission( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - origin originArg: WKSecurityOrigin, frame frameArg: WKFrameInfo, type typeArg: MediaCaptureType, - completion: @escaping (Result) -> Void - ) { + #if !os(macOS) + ///Creates a Dart instance of UIScrollViewDelegate and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: UIScrollViewDelegate, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - return - } - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.requestMediaCapturePermission" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, originArg, frameArg, typeArg] as [Any?]) { - response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else if listResponse[0] == nil { - completion( - .failure( - PigeonError( - code: "null-error", - message: "Flutter api returned null value for non-null return value.", details: ""))) - } else { - let result = listResponse[0] as! PermissionDecision - completion(.success(result)) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } - - /// Displays a JavaScript alert panel. - func runJavaScriptAlertPanel( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - message messageArg: String, frame frameArg: WKFrameInfo, - completion: @escaping (Result) -> Void - ) { + #endif + #if !os(macOS) + /// Tells the delegate when the user scrolls the content view within the + /// scroll view. + /// + /// Note that this is a convenient method that includes the `contentOffset` of + /// the `scrollView`. + func scrollViewDidScroll(pigeonInstance pigeonInstanceArg: UIScrollViewDelegate, scrollView scrollViewArg: UIScrollView, x xArg: Double, y yArg: Double, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -6114,12 +8787,9 @@ final class PigeonApiWKUIDelegate: PigeonApiProtocolWKUIDelegate { } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptAlertPanel" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, messageArg, frameArg] as [Any?]) { - response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.scrollViewDidScroll" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, scrollViewArg, xArg, yArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -6134,172 +8804,261 @@ final class PigeonApiWKUIDelegate: PigeonApiProtocolWKUIDelegate { } } } + #endif - /// Displays a JavaScript confirm panel. - func runJavaScriptConfirmPanel( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - message messageArg: String, frame frameArg: WKFrameInfo, - completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - return - } - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptConfirmPanel" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, messageArg, frameArg] as [Any?]) { - response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else if listResponse[0] == nil { - completion( - .failure( - PigeonError( - code: "null-error", - message: "Flutter api returned null value for non-null return value.", details: ""))) - } else { - let result = listResponse[0] as! Bool - completion(.success(result)) - } - } +} + +/* +// 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. + +import Foundation +import UIKit + +/// Implementation of `UIScrollViewDelegate` that calls to Dart in callback methods. +class ScrollViewDelegateImpl: UIScrollViewDelegate { + let api: PigeonApiProtocolUIScrollViewDelegate + + init(api: PigeonApiProtocolUIScrollViewDelegate) { + self.api = api } - /// Displays a JavaScript text input panel. - func runJavaScriptTextInputPanel( - pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, - prompt promptArg: String, defaultText defaultTextArg: String?, frame frameArg: WKFrameInfo, - completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - return - } - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptTextInputPanel" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage( - [pigeonInstanceArg, webViewArg, promptArg, defaultTextArg, frameArg] as [Any?] - ) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - let result: String? = nilOrValue(listResponse[0]) - completion(.success(result)) - } - } + func fixMe() { + api.scrollViewDidScroll(pigeonInstance: self, scrollView: scrollView, x: x, y: y) { _ in } + } +} + +/// ProxyApi implementation for `UIScrollViewDelegate`. +/// +/// 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 ScrollViewDelegateProxyAPIDelegate : PigeonApiDelegateUIScrollViewDelegate { + func pigeonDefaultConstructor(pigeonApi: PigeonApiUIScrollViewDelegate) throws -> UIScrollViewDelegate { + return UIScrollViewDelegateImpl(api: pigeonApi) } } -protocol PigeonApiDelegateWKHTTPCookieStore { - /// Sets a cookie policy that indicates whether the cookie store allows cookie - /// storage. - func setCookie( - pigeonApi: PigeonApiWKHTTPCookieStore, pigeonInstance: WKHTTPCookieStore, cookie: HTTPCookie, - completion: @escaping (Result) -> Void) +*/ + +/* +// 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. + +import UIKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ScrollViewDelegateProxyAPITests: XCTestCase { + func testPigeonDefaultConstructor() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiUIScrollViewDelegate(registrar) + + let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) + XCTAssertNotNil(instance) + } + + func testScrollViewDidScroll() { + let api = TestScrollViewDelegateApi() + let instance = ScrollViewDelegateImpl(api: api) + let scrollView = TestScrollView + let x = 1.0 + let y = 1.0 + instance.scrollViewDidScroll(scrollView: scrollView, x: x, y: y) + + XCTAssertEqual(api.scrollViewDidScrollArgs, [scrollView, x, y]) + } + } +class TestScrollViewDelegateApi: PigeonApiProtocolUIScrollViewDelegate { + var scrollViewDidScrollArgs: [AnyHashable?]? = nil -protocol PigeonApiProtocolWKHTTPCookieStore { + func scrollViewDidScroll(scrollView: UIScrollView, x: Double, y: Double) throws { + scrollViewDidScrollArgs = [scrollViewArg, xArg, yArg] + } +} +*/ + +protocol PigeonApiDelegateURLCredential { + /// Creates a URL credential instance for internet password authentication + /// with a given user name and password, using a given persistence setting. + func withUser(pigeonApi: PigeonApiURLCredential, user: String, password: String, persistence: UrlCredentialPersistence) throws -> URLCredential +} + +protocol PigeonApiProtocolURLCredential { } -final class PigeonApiWKHTTPCookieStore: PigeonApiProtocolWKHTTPCookieStore { +final class PigeonApiURLCredential: PigeonApiProtocolURLCredential { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKHTTPCookieStore + let pigeonDelegate: PigeonApiDelegateURLCredential ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKHTTPCookieStore - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLCredential) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKHTTPCookieStore? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLCredential?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let setCookieChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKHTTPCookieStore.setCookie", - binaryMessenger: binaryMessenger, codec: codec) + let withUserChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLCredential.withUser", binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setCookieChannel.setMessageHandler { message, reply in + withUserChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKHTTPCookieStore - let cookieArg = args[1] as! HTTPCookie - api.pigeonDelegate.setCookie( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, cookie: cookieArg - ) { result in - switch result { - case .success: - reply(wrapResult(nil)) - case .failure(let error): - reply(wrapError(error)) - } + let pigeonIdentifierArg = args[0] as! Int64 + let userArg = args[1] as! String + let passwordArg = args[2] as! String + let persistenceArg = args[3] as! UrlCredentialPersistence + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( +try api.pigeonDelegate.withUser(pigeonApi: api, user: userArg, password: passwordArg, persistence: persistenceArg), +withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) } } } else { - setCookieChannel.setMessageHandler(nil) + withUserChannel.setMessageHandler(nil) + } + } + + ///Creates a Dart instance of URLCredential and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: URLCredential, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLCredential.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } + } } } +} + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `URLCredential`. +/// +/// 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 CredentialProxyAPIDelegate : PigeonApiDelegateURLCredential { + func withUser(pigeonApi: PigeonApiURLCredential, user: String, password: String, persistence: UrlCredentialPersistence) throws -> URLCredential { + return URLCredential(,user: user, password: password, persistence: persistence) + } + +} +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class CredentialProxyAPITests: XCTestCase { + func testWithUser() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLCredential(registrar) + + let instance = try? api.pigeonDelegate.withUser(pigeonApi: api, user: "myString", password: "myString", persistence: .none) + XCTAssertNotNil(instance) + } + +} +*/ + +protocol PigeonApiDelegateURLProtectionSpace { + /// The receiver’s host. + func host(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String + /// The receiver’s port. + func port(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> Int64 + /// The receiver’s authentication realm. + func realm(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String? + /// The authentication method used by the receiver. + func authenticationMethod(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String? + /// A representation of the server’s SSL transaction state. + func getServerTrust(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> SecTrustWrapper? +} + +protocol PigeonApiProtocolURLProtectionSpace { +} + +final class PigeonApiURLProtectionSpace: PigeonApiProtocolURLProtectionSpace { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateURLProtectionSpace + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) + } - ///Creates a Dart instance of WKHTTPCookieStore and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: WKHTTPCookieStore, completion: @escaping (Result) -> Void - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLProtectionSpace) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate + } + ///Creates a Dart instance of URLProtectionSpace and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: URLProtectionSpace, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let hostArg = try! pigeonDelegate.host(pigeonApi: self, pigeonInstance: pigeonInstance) + let portArg = try! pigeonDelegate.port(pigeonApi: self, pigeonInstance: pigeonInstance) + let realmArg = try! pigeonDelegate.realm(pigeonApi: self, pigeonInstance: pigeonInstance) + let authenticationMethodArg = try! pigeonDelegate.authenticationMethod(pigeonApi: self, pigeonInstance: pigeonInstance) + let getServerTrustArg = try! pigeonDelegate.getServerTrust(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKHTTPCookieStore.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLProtectionSpace.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, hostArg, portArg, realmArg, authenticationMethodArg, getServerTrustArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -6316,142 +9075,169 @@ final class PigeonApiWKHTTPCookieStore: PigeonApiProtocolWKHTTPCookieStore { } } } -protocol PigeonApiDelegateUIScrollViewDelegate { - #if !os(macOS) - func pigeonDefaultConstructor(pigeonApi: PigeonApiUIScrollViewDelegate) throws - -> UIScrollViewDelegate - #endif + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `URLProtectionSpace`. +/// +/// 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 ProtectionSpaceProxyAPIDelegate : PigeonApiDelegateURLProtectionSpace { + func host(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String { + return pigeonInstance.host + } + + func port(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> Int64 { + return pigeonInstance.port + } + + func realm(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String? { + return pigeonInstance.realm + } + + func authenticationMethod(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String? { + return pigeonInstance.authenticationMethod + } + + func getServerTrust(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> SecTrustWrapper? { + return pigeonInstance.getServerTrust + } + } +*/ -protocol PigeonApiProtocolUIScrollViewDelegate { - #if !os(macOS) - /// Tells the delegate when the user scrolls the content view within the - /// scroll view. - /// - /// Note that this is a convenient method that includes the `contentOffset` of - /// the `scrollView`. - func scrollViewDidScroll( - pigeonInstance pigeonInstanceArg: UIScrollViewDelegate, - scrollView scrollViewArg: UIScrollView, x xArg: Double, y yArg: Double, - completion: @escaping (Result) -> Void) - #endif +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class ProtectionSpaceProxyAPITests: XCTestCase { + func testHost() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) + + let instance = TestProtectionSpace() + let value = try? api.pigeonDelegate.host(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.host) + } + + func testPort() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) + + let instance = TestProtectionSpace() + let value = try? api.pigeonDelegate.port(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.port) + } + + func testRealm() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) + + let instance = TestProtectionSpace() + let value = try? api.pigeonDelegate.realm(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.realm) + } + + func testAuthenticationMethod() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) + + let instance = TestProtectionSpace() + let value = try? api.pigeonDelegate.authenticationMethod(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.authenticationMethod) + } + + func testGetServerTrust() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) + + let instance = TestProtectionSpace() + let value = try? api.pigeonDelegate.getServerTrust(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.getServerTrust) + } + +} +*/ + +protocol PigeonApiDelegateURLAuthenticationChallenge { + /// The receiver’s protection space. + func getProtectionSpace(pigeonApi: PigeonApiURLAuthenticationChallenge, pigeonInstance: URLAuthenticationChallenge) throws -> URLProtectionSpace +} +protocol PigeonApiProtocolURLAuthenticationChallenge { } -final class PigeonApiUIScrollViewDelegate: PigeonApiProtocolUIScrollViewDelegate { +final class PigeonApiURLAuthenticationChallenge: PigeonApiProtocolURLAuthenticationChallenge { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateUIScrollViewDelegate + let pigeonDelegate: PigeonApiDelegateURLAuthenticationChallenge ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateUIScrollViewDelegate - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLAuthenticationChallenge) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIScrollViewDelegate? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLAuthenticationChallenge?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - #if !os(macOS) - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.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)) - } + let getProtectionSpaceChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLAuthenticationChallenge.getProtectionSpace", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getProtectionSpaceChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! URLAuthenticationChallenge + do { + let result = try api.pigeonDelegate.getProtectionSpace(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - pigeonDefaultConstructorChannel.setMessageHandler(nil) } - #endif + } else { + getProtectionSpaceChannel.setMessageHandler(nil) + } } - #if !os(macOS) - ///Creates a Dart instance of UIScrollViewDelegate and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: UIScrollViewDelegate, - completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } - } - } - } - #endif - #if !os(macOS) - /// Tells the delegate when the user scrolls the content view within the - /// scroll view. - /// - /// Note that this is a convenient method that includes the `contentOffset` of - /// the `scrollView`. - func scrollViewDidScroll( - pigeonInstance pigeonInstanceArg: UIScrollViewDelegate, - scrollView scrollViewArg: UIScrollView, x xArg: Double, y yArg: Double, - completion: @escaping (Result) -> Void - ) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - return - } + ///Creates a Dart instance of URLAuthenticationChallenge and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: URLAuthenticationChallenge, completion: @escaping (Result) -> Void) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.scrollViewDidScroll" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, scrollViewArg, xArg, yArg] as [Any?]) { response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLAuthenticationChallenge.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -6466,90 +9252,123 @@ final class PigeonApiUIScrollViewDelegate: PigeonApiProtocolUIScrollViewDelegate } } } - #endif + } +} + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `URLAuthenticationChallenge`. +/// +/// 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 AuthenticationChallengeProxyAPIDelegate : PigeonApiDelegateURLAuthenticationChallenge { + func getProtectionSpace(pigeonApi: PigeonApiURLAuthenticationChallenge, pigeonInstance: URLAuthenticationChallenge) throws -> URLProtectionSpace { + return pigeonInstance.protectionSpace + } } -protocol PigeonApiDelegateURLCredential { - /// Creates a URL credential instance for internet password authentication - /// with a given user name and password, using a given persistence setting. - func withUser( - pigeonApi: PigeonApiURLCredential, user: String, password: String, - persistence: UrlCredentialPersistence - ) throws -> URLCredential +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class AuthenticationChallengeProxyAPITests: XCTestCase { + func testGetProtectionSpace() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLAuthenticationChallenge(registrar) + + let instance = TestAuthenticationChallenge() + let value = api.pigeonDelegate.getProtectionSpace(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getProtectionSpaceCalled) + XCTAssertEqual(value, instance.getProtectionSpace()) + } + } +class TestAuthenticationChallenge: URLAuthenticationChallenge { + var getProtectionSpaceCalled = false -protocol PigeonApiProtocolURLCredential { + + override func getProtectionSpace() { + getProtectionSpaceCalled = true + } +} +*/ + +protocol PigeonApiDelegateURL { + /// The absolute string for the URL. + func getAbsoluteString(pigeonApi: PigeonApiURL, pigeonInstance: URL) throws -> String +} + +protocol PigeonApiProtocolURL { } -final class PigeonApiURLCredential: PigeonApiProtocolURLCredential { +final class PigeonApiURL: PigeonApiProtocolURL { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateURLCredential + let pigeonDelegate: PigeonApiDelegateURL ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLCredential - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURL) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLCredential? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURL?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let withUserChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLCredential.withUser", - binaryMessenger: binaryMessenger, codec: codec) + let getAbsoluteStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URL.getAbsoluteString", binaryMessenger: binaryMessenger, codec: codec) if let api = api { - withUserChannel.setMessageHandler { message, reply in + getAbsoluteStringChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonIdentifierArg = args[0] as! Int64 - let userArg = args[1] as! String - let passwordArg = args[2] as! String - let persistenceArg = args[3] as! UrlCredentialPersistence + let pigeonInstanceArg = args[0] as! URL do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - try api.pigeonDelegate.withUser( - pigeonApi: api, user: userArg, password: passwordArg, persistence: persistenceArg), - withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) + let result = try api.pigeonDelegate.getAbsoluteString(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) } catch { reply(wrapError(error)) } } } else { - withUserChannel.setMessageHandler(nil) + getAbsoluteStringChannel.setMessageHandler(nil) } } - ///Creates a Dart instance of URLCredential and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: URLCredential, completion: @escaping (Result) -> Void - ) { + ///Creates a Dart instance of URL and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: URL, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.URLCredential.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URL.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -6567,69 +9386,142 @@ final class PigeonApiURLCredential: PigeonApiProtocolURLCredential { } } } -protocol PigeonApiDelegateURLProtectionSpace { - /// The receiver’s host. - func host(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws - -> String - /// The receiver’s port. - func port(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws - -> Int64 - /// The receiver’s authentication realm. - func realm(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws - -> String? - /// The authentication method used by the receiver. - func authenticationMethod( - pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace - ) throws -> String? + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `URL`. +/// +/// 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 LProxyAPIDelegate : PigeonApiDelegateURL { + func getAbsoluteString(pigeonApi: PigeonApiURL, pigeonInstance: URL) throws -> String { + return pigeonInstance.absoluteString + } + } +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class LProxyAPITests: XCTestCase { + func testGetAbsoluteString() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURL(registrar) + + let instance = TestL() + let value = api.pigeonDelegate.getAbsoluteString(pigeonApi: api, pigeonInstance: instance ) + + XCTAssertTrue(instance.getAbsoluteStringCalled) + XCTAssertEqual(value, instance.getAbsoluteString()) + } -protocol PigeonApiProtocolURLProtectionSpace { } +class TestL: URL { + var getAbsoluteStringCalled = false -final class PigeonApiURLProtectionSpace: PigeonApiProtocolURLProtectionSpace { + + override func getAbsoluteString() { + getAbsoluteStringCalled = true + } +} +*/ + +protocol PigeonApiDelegateWKWebpagePreferences { + /// A Boolean value that indicates whether JavaScript from web content is + /// allowed to run. + @available(iOS 13.0.0, macOS 10.15.0, *) + func setAllowsContentJavaScript(pigeonApi: PigeonApiWKWebpagePreferences, pigeonInstance: WKWebpagePreferences, allow: Bool) throws +} + +protocol PigeonApiProtocolWKWebpagePreferences { +} + +final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateURLProtectionSpace + let pigeonDelegate: PigeonApiDelegateWKWebpagePreferences ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateURLProtectionSpace - ) { - self.pigeonRegistrar = pigeonRegistrar - self.pigeonDelegate = delegate - } - ///Creates a Dart instance of URLProtectionSpace and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: URLProtectionSpace, completion: @escaping (Result) -> Void - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebpagePreferences) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate + } + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebpagePreferences?) { + let codec: FlutterStandardMessageCodec = + api != nil + ? FlutterStandardMessageCodec( + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + : FlutterStandardMessageCodec.sharedInstance() + if #available(iOS 13.0.0, macOS 10.15.0, *) { + let setAllowsContentJavaScriptChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.setAllowsContentJavaScript", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAllowsContentJavaScriptChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebpagePreferences + let allowArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAllowsContentJavaScript(pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setAllowsContentJavaScriptChannel.setMessageHandler(nil) + } + } else { + let setAllowsContentJavaScriptChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.setAllowsContentJavaScript", + binaryMessenger: binaryMessenger, codec: codec) + if api != nil { + setAllowsContentJavaScriptChannel.setMessageHandler { message, reply in + reply(wrapError(FlutterError(code: "PigeonUnsupportedOperationError", + message: "Call to setAllowsContentJavaScript requires @available(iOS 13.0.0, macOS 10.15.0, *).", + details: nil + ))) + } + } else { + setAllowsContentJavaScriptChannel.setMessageHandler(nil) + } + } + } + + ///Creates a Dart instance of WKWebpagePreferences and attaches it to [pigeonInstance]. + @available(iOS 13.0.0, macOS 10.15.0, *) + func pigeonNewInstance(pigeonInstance: WKWebpagePreferences, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) - let hostArg = try! pigeonDelegate.host(pigeonApi: self, pigeonInstance: pigeonInstance) - let portArg = try! pigeonDelegate.port(pigeonApi: self, pigeonInstance: pigeonInstance) - let realmArg = try! pigeonDelegate.realm(pigeonApi: self, pigeonInstance: pigeonInstance) - let authenticationMethodArg = try! pigeonDelegate.authenticationMethod( - pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.URLProtectionSpace.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage( - [pigeonIdentifierArg, hostArg, portArg, realmArg, authenticationMethodArg] as [Any?] - ) { response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -6646,84 +9538,105 @@ final class PigeonApiURLProtectionSpace: PigeonApiProtocolURLProtectionSpace { } } } -protocol PigeonApiDelegateURLAuthenticationChallenge { - /// The receiver’s protection space. - func getProtectionSpace( - pigeonApi: PigeonApiURLAuthenticationChallenge, pigeonInstance: URLAuthenticationChallenge - ) throws -> URLProtectionSpace + +/* +// 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. + +import Foundation +import WebKit + + +/// ProxyApi implementation for `WKWebpagePreferences`. +/// +/// 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 { + func setAllowsContentJavaScript(pigeonApi: PigeonApiWKWebpagePreferences, pigeonInstance: WKWebpagePreferences, allow: Bool) throws { + pigeonInstance.allowsContentJavaScript = allow: allow + } + } +*/ -protocol PigeonApiProtocolURLAuthenticationChallenge { +/* +// 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. + +import WebKit +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class WebpagePreferencesProxyAPITests: XCTestCase { + func testSetAllowsContentJavaScript() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiWKWebpagePreferences(registrar) + + let instance = TestWebpagePreferences() + let allow = true + api.pigeonDelegate.setAllowsContentJavaScript(pigeonApi: api, pigeonInstance: instance, allow: allow) + + XCTAssertEqual(instance.setAllowsContentJavaScriptArgs, [allow]) + } + +} +class TestWebpagePreferences: WKWebpagePreferences { + var setAllowsContentJavaScriptArgs: [AnyHashable?]? = nil + + + override func setAllowsContentJavaScript() { + setAllowsContentJavaScriptArgs = [allow] + } +} +*/ + +protocol PigeonApiDelegateGetTrustResultResponse { + /// The result code from the most recent trust evaluation. + func result(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> DartSecTrustResultType + /// A result code. + /// + /// See https://developer.apple.com/documentation/security/security-framework-result-codes?language=objc. + func resultCode(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> Int64 +} + +protocol PigeonApiProtocolGetTrustResultResponse { } -final class PigeonApiURLAuthenticationChallenge: PigeonApiProtocolURLAuthenticationChallenge { +final class PigeonApiGetTrustResultResponse: PigeonApiProtocolGetTrustResultResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateURLAuthenticationChallenge + let pigeonDelegate: PigeonApiDelegateGetTrustResultResponse ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateURLAuthenticationChallenge - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateGetTrustResultResponse) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLAuthenticationChallenge? - ) { - let codec: FlutterStandardMessageCodec = - api != nil - ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) - : FlutterStandardMessageCodec.sharedInstance() - let getProtectionSpaceChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.URLAuthenticationChallenge.getProtectionSpace", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getProtectionSpaceChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! URLAuthenticationChallenge - do { - let result = try api.pigeonDelegate.getProtectionSpace( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } - } - } else { - getProtectionSpaceChannel.setMessageHandler(nil) - } - } - - ///Creates a Dart instance of URLAuthenticationChallenge and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: URLAuthenticationChallenge, - completion: @escaping (Result) -> Void - ) { + ///Creates a Dart instance of GetTrustResultResponse and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: GetTrustResultResponse, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + let resultArg = try! pigeonDelegate.result(pigeonApi: self, pigeonInstance: pigeonInstance) + let resultCodeArg = try! pigeonDelegate.resultCode(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.URLAuthenticationChallenge.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.GetTrustResultResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, resultArg, resultCodeArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -6740,74 +9653,216 @@ final class PigeonApiURLAuthenticationChallenge: PigeonApiProtocolURLAuthenticat } } } -protocol PigeonApiDelegateURL { - /// The absolute string for the URL. - func getAbsoluteString(pigeonApi: PigeonApiURL, pigeonInstance: URL) throws -> String + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `GetTrustResultResponse`. +/// +/// 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 GetTrustResultResponseProxyAPIDelegate : PigeonApiDelegateGetTrustResultResponse { + func result(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> DartSecTrustResultType { + switch pigeonInstance.result { + case .unspecified: + return .unspecified + case .proceed: + return .proceed + case .deny: + return .deny + case .recoverableTrustFailure: + return .recoverableTrustFailure + case .fatalTrustFailure: + return .fatalTrustFailure + case .otherError: + return .otherError + case .invalid: + return .invalid + case .confirm: + return .confirm + @unknown default: + return .unknown + } + } + + func resultCode(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> Int64 { + return pigeonInstance.resultCode + } + } +*/ -protocol PigeonApiProtocolURL { +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class GetTrustResultResponseProxyAPITests: XCTestCase { + func testResult() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiGetTrustResultResponse(registrar) + + let instance = TestGetTrustResultResponse() + let value = try? api.pigeonDelegate.result(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.result) + } + + func testResultCode() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiGetTrustResultResponse(registrar) + + let instance = TestGetTrustResultResponse() + let value = try? api.pigeonDelegate.resultCode(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, instance.resultCode) + } + +} +*/ + +protocol PigeonApiDelegateSecTrust { + /// Evaluates trust for the specified certificate and policies. + func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> Bool + /// Returns an opaque cookie containing exceptions to trust policies that will + /// allow future evaluations of the current certificate to succeed. + func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData + /// Sets a list of exceptions that should be ignored when the certificate is + /// evaluated. + func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData) throws -> Bool + /// Returns the result code from the most recent trust evaluation. + func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse + /// Certificates used to evaluate trust. + func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [String] +} + +protocol PigeonApiProtocolSecTrust { } -final class PigeonApiURL: PigeonApiProtocolURL { +final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateURL + let pigeonDelegate: PigeonApiDelegateSecTrust ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURL) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateSecTrust) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURL?) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiSecTrust?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let getAbsoluteStringChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.URL.getAbsoluteString", - binaryMessenger: binaryMessenger, codec: codec) + let evaluateWithErrorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.evaluateWithError", binaryMessenger: binaryMessenger, codec: codec) if let api = api { - getAbsoluteStringChannel.setMessageHandler { message, reply in + evaluateWithErrorChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! URL + let trustArg = args[0] as! SecTrustWrapper do { - let result = try api.pigeonDelegate.getAbsoluteString( - pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.evaluateWithError(pigeonApi: api, trust: trustArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) } } } else { - getAbsoluteStringChannel.setMessageHandler(nil) + evaluateWithErrorChannel.setMessageHandler(nil) + } + let copyExceptionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.copyExceptions", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + copyExceptionsChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let trustArg = args[0] as! SecTrustWrapper + do { + let result = try api.pigeonDelegate.copyExceptions(pigeonApi: api, trust: trustArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + copyExceptionsChannel.setMessageHandler(nil) + } + let setExceptionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.setExceptions", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setExceptionsChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let trustArg = args[0] as! SecTrustWrapper + let exceptionsArg = args[1] as! FlutterStandardTypedData + do { + let result = try api.pigeonDelegate.setExceptions(pigeonApi: api, trust: trustArg, exceptions: exceptionsArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + setExceptionsChannel.setMessageHandler(nil) + } + let getTrustResultChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.getTrustResult", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getTrustResultChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let trustArg = args[0] as! SecTrustWrapper + do { + let result = try api.pigeonDelegate.getTrustResult(pigeonApi: api, trust: trustArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getTrustResultChannel.setMessageHandler(nil) + } + let copyCertificateChainChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.copyCertificateChain", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + copyCertificateChainChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let trustArg = args[0] as! SecTrustWrapper + do { + let result = try api.pigeonDelegate.copyCertificateChain(pigeonApi: api, trust: trustArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + copyCertificateChainChannel.setMessageHandler(nil) } } - ///Creates a Dart instance of URL and attaches it to [pigeonInstance]. - func pigeonNewInstance( - pigeonInstance: URL, completion: @escaping (Result) -> Void - ) { + ///Creates a Dart instance of SecTrust and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: SecTrustWrapper, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.URL.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -6825,107 +9880,117 @@ final class PigeonApiURL: PigeonApiProtocolURL { } } } -protocol PigeonApiDelegateWKWebpagePreferences { - /// A Boolean value that indicates whether JavaScript from web content is - /// allowed to run. - @available(iOS 13.0.0, macOS 10.15.0, *) - func setAllowsContentJavaScript( - pigeonApi: PigeonApiWKWebpagePreferences, pigeonInstance: WKWebpagePreferences, allow: Bool) - throws + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `SecTrust`. +/// +/// 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 SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { + func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> Bool { + return SecTrust.evaluateWithError(trust: trust) + } + + func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData { + return SecTrust.copyExceptions(trust: trust) + } + + func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData) throws -> Bool { + return SecTrust.setExceptions(trust: trust, exceptions: exceptions) + } + + func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse { + return SecTrust.getTrustResult(trust: trust) + } + + func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [String] { + return SecTrust.copyCertificateChain(trust: trust) + } + } +*/ -protocol PigeonApiProtocolWKWebpagePreferences { +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class SecTrustProxyAPITests: XCTestCase { +} +*/ + +protocol PigeonApiDelegateSecCertificate { + func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws -> FlutterStandardTypedData +} + +protocol PigeonApiProtocolSecCertificate { } -final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences { +final class PigeonApiSecCertificate: PigeonApiProtocolSecCertificate { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKWebpagePreferences + let pigeonDelegate: PigeonApiDelegateSecCertificate ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init( - pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, - delegate: PigeonApiDelegateWKWebpagePreferences - ) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateSecCertificate) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers( - binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebpagePreferences? - ) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiSecCertificate?) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( - pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - if #available(iOS 13.0.0, macOS 10.15.0, *) { - let setAllowsContentJavaScriptChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.setAllowsContentJavaScript", - binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setAllowsContentJavaScriptChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebpagePreferences - let allowArg = args[1] as! Bool - do { - try api.pigeonDelegate.setAllowsContentJavaScript( - pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let copyDataChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.copyData", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + copyDataChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let certificateArg = args[0] as! SecCertificateWrapper + do { + let result = try api.pigeonDelegate.copyData(pigeonApi: api, certificate: certificateArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) } - } else { - setAllowsContentJavaScriptChannel.setMessageHandler(nil) } } else { - let setAllowsContentJavaScriptChannel = FlutterBasicMessageChannel( - name: - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.setAllowsContentJavaScript", - binaryMessenger: binaryMessenger, codec: codec) - if api != nil { - setAllowsContentJavaScriptChannel.setMessageHandler { message, reply in - reply( - wrapError( - FlutterError( - code: "PigeonUnsupportedOperationError", - message: - "Call to setAllowsContentJavaScript requires @available(iOS 13.0.0, macOS 10.15.0, *).", - details: nil - ))) - } - } else { - setAllowsContentJavaScriptChannel.setMessageHandler(nil) - } + copyDataChannel.setMessageHandler(nil) } } - ///Creates a Dart instance of WKWebpagePreferences and attaches it to [pigeonInstance]. - @available(iOS 13.0.0, macOS 10.15.0, *) - func pigeonNewInstance( - pigeonInstance: WKWebpagePreferences, completion: @escaping (Result) -> Void - ) { + ///Creates a Dart instance of SecCertificate and attaches it to [pigeonInstance]. + func pigeonNewInstance(pigeonInstance: SecCertificateWrapper, completion: @escaping (Result) -> Void) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( - pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = - "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.pigeon_newInstance" - let channel = FlutterBasicMessageChannel( - name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.pigeon_newInstance" + let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -6943,3 +10008,40 @@ final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences } } } + +/* +// 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. + +import Foundation + + + +/// ProxyApi implementation for `SecCertificate`. +/// +/// 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 SecCertificateProxyAPIDelegate : PigeonApiDelegateSecCertificate { + func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws -> FlutterStandardTypedData { + return SecCertificate.copyData(certificate: certificate) + } + +} +*/ + +/* +// 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. + + +import Flutter +import XCTest + +@testable import webview_flutter_wkwebview + +class SecCertificateProxyAPITests: XCTestCase { +} +*/ + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj index 8d55bed2605..22def7bcd07 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 60; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 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 ee91ba63f41..a05830e7e12 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 @@ -1,15 +1,14 @@ // 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. -// Autogenerated from Pigeon (v24.2.1), do not edit directly. +// Autogenerated from Pigeon (v25.2.0), 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, unnecessary_import, no_leading_underscores_for_local_identifiers import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' - show ReadBuffer, WriteBuffer, immutable, protected; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer, immutable, protected; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; @@ -20,8 +19,7 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse( - {Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -30,7 +28,6 @@ List wrapResponse( } return [error.code, error.message, error.details]; } - /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -113,10 +110,9 @@ class PigeonInstanceManager { // by calling instanceManager.getIdentifier() inside of `==` while this was a // HashMap). final Expando _identifiers = Expando(); - final Map> - _weakInstances = >{}; - final Map _strongInstances = - {}; + final Map> _weakInstances = + >{}; + final Map _strongInstances = {}; late final Finalizer _finalizer; int _nextIdentifier = 0; @@ -126,8 +122,7 @@ class PigeonInstanceManager { static PigeonInstanceManager _initInstance() { WidgetsFlutterBinding.ensureInitialized(); - final _PigeonInternalInstanceManagerApi api = - _PigeonInternalInstanceManagerApi(); + final _PigeonInternalInstanceManagerApi api = _PigeonInternalInstanceManagerApi(); // Clears the native `PigeonInstanceManager` on the initial use of the Dart one. api.clear(); final PigeonInstanceManager instanceManager = PigeonInstanceManager( @@ -135,70 +130,42 @@ class PigeonInstanceManager { api.removeStrongReference(identifier); }, ); - _PigeonInternalInstanceManagerApi.setUpMessageHandlers( - instanceManager: instanceManager); - URLRequest.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - HTTPURLResponse.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - URLResponse.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKUserScript.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKNavigationAction.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKNavigationResponse.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKFrameInfo.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - NSError.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKScriptMessage.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKSecurityOrigin.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - HTTPCookie.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AuthenticationChallengeResponse.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKWebsiteDataStore.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); + _PigeonInternalInstanceManagerApi.setUpMessageHandlers(instanceManager: instanceManager); + URLRequest.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + HTTPURLResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + URLResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKUserScript.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKNavigationAction.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKNavigationResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKFrameInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + NSError.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKScriptMessage.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKSecurityOrigin.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + HTTPCookie.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AuthenticationChallengeResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKWebsiteDataStore.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); UIView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - UIScrollView.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKWebViewConfiguration.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKUserContentController.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKPreferences.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKScriptMessageHandler.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKNavigationDelegate.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - NSObject.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - UIViewWKWebView.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - NSViewWKWebView.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKWebView.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKUIDelegate.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - WKHTTPCookieStore.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - UIScrollViewDelegate.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - URLCredential.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - URLProtectionSpace.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - URLAuthenticationChallenge.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); + UIScrollView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKWebViewConfiguration.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKUserContentController.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKPreferences.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKScriptMessageHandler.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKNavigationDelegate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + NSObject.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + UIViewWKWebView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + NSViewWKWebView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKWebView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKUIDelegate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKHTTPCookieStore.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + UIScrollViewDelegate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + URLCredential.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + URLProtectionSpace.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + URLAuthenticationChallenge.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); URL.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKWebpagePreferences.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); + WKWebpagePreferences.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + GetTrustResultResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + SecTrust.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + SecCertificate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); return instanceManager; } @@ -262,20 +229,15 @@ class PigeonInstanceManager { /// /// This method also expects the host `InstanceManager` to have a strong /// reference to the instance the identifier is associated with. - T? getInstanceWithWeakReference( - int identifier) { - final PigeonInternalProxyApiBaseClass? weakInstance = - _weakInstances[identifier]?.target; + T? getInstanceWithWeakReference(int identifier) { + final PigeonInternalProxyApiBaseClass? weakInstance = _weakInstances[identifier]?.target; if (weakInstance == null) { - final PigeonInternalProxyApiBaseClass? strongInstance = - _strongInstances[identifier]; + final PigeonInternalProxyApiBaseClass? strongInstance = _strongInstances[identifier]; if (strongInstance != null) { - final PigeonInternalProxyApiBaseClass copy = - strongInstance.pigeon_copy(); + final PigeonInternalProxyApiBaseClass copy = strongInstance.pigeon_copy(); _identifiers[copy] = identifier; - _weakInstances[identifier] = - WeakReference(copy); + _weakInstances[identifier] = WeakReference(copy); _finalizer.attach(copy, identifier, detach: copy); return copy as T; } @@ -299,20 +261,17 @@ class PigeonInstanceManager { /// added. /// /// Returns unique identifier of the [instance] added. - void addHostCreatedInstance( - PigeonInternalProxyApiBaseClass instance, int identifier) { + void addHostCreatedInstance(PigeonInternalProxyApiBaseClass instance, int identifier) { _addInstanceWithIdentifier(instance, identifier); } - void _addInstanceWithIdentifier( - PigeonInternalProxyApiBaseClass instance, int identifier) { + void _addInstanceWithIdentifier(PigeonInternalProxyApiBaseClass instance, int identifier) { assert(!containsIdentifier(identifier)); assert(getIdentifier(instance) == null); assert(identifier >= 0); _identifiers[instance] = identifier; - _weakInstances[identifier] = - WeakReference(instance); + _weakInstances[identifier] = WeakReference(instance); _finalizer.attach(instance, identifier, detach: instance); final PigeonInternalProxyApiBaseClass copy = instance.pigeon_copy(); @@ -439,30 +398,294 @@ class _PigeonInternalInstanceManagerApi { } class _PigeonInternalProxyApiBaseCodec extends _PigeonCodec { - const _PigeonInternalProxyApiBaseCodec(this.instanceManager); - final PigeonInstanceManager instanceManager; - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is PigeonInternalProxyApiBaseClass) { - buffer.putUint8(128); - writeValue(buffer, instanceManager.getIdentifier(value)); - } else { - super.writeValue(buffer, value); - } - } + const _PigeonInternalProxyApiBaseCodec(this.instanceManager); + final PigeonInstanceManager instanceManager; + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is PigeonInternalProxyApiBaseClass) { + buffer.putUint8(128); + writeValue(buffer, instanceManager.getIdentifier(value)); + } else { + super.writeValue(buffer, value); + } + } + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return instanceManager + .getInstanceWithWeakReference(readValue(buffer)! as int); + default: + return super.readValueOfType(type, buffer); + } + } +} - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return instanceManager - .getInstanceWithWeakReference(readValue(buffer)! as int); - default: - return super.readValueOfType(type, buffer); - } - } +/// Handles constructing objects and calling static methods for the Android +/// Interactive Media Ads native library. +/// +/// This class provides dependency injection for the implementations of the +/// platform interface classes. Improving the ease of unit testing and/or +/// overriding the underlying Android classes. +/// +/// By default each function calls the default constructor of the class it +/// intends to return. +class WebKitGProxy { + /// Constructs an [WebKitGProxy]. + const WebKitGProxy({ + this.newURLRequest = URLRequest.new, + this.newWKUserScript = WKUserScript.new, + this.newHTTPCookie = HTTPCookie.new, + this.newAuthenticationChallengeResponse = + AuthenticationChallengeResponse.new, + this.newWKWebViewConfiguration = WKWebViewConfiguration.new, + this.newWKScriptMessageHandler = WKScriptMessageHandler.new, + this.newWKNavigationDelegate = WKNavigationDelegate.new, + this.newNSObject = NSObject.new, + this.newUIViewWKWebView = UIViewWKWebView.new, + this.newNSViewWKWebView = NSViewWKWebView.new, + this.newWKUIDelegate = WKUIDelegate.new, + this.newUIScrollViewDelegate = UIScrollViewDelegate.new, + this.withUserURLCredential = URLCredential.withUser, + this.evaluateWithErrorSecTrust = SecTrust.evaluateWithError, + this.copyExceptionsSecTrust = SecTrust.copyExceptions, + this.setExceptionsSecTrust = SecTrust.setExceptions, + this.getTrustResultSecTrust = SecTrust.getTrustResult, + this.copyCertificateChainSecTrust = SecTrust.copyCertificateChain, + this.copyDataSecCertificate = SecCertificate.copyData, + this.defaultDataStoreWKWebsiteDataStore = + _defaultDataStoreWKWebsiteDataStore, + }); + + /// Constructs [URLRequest]. + final URLRequest Function({ + required String url, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newURLRequest; + + /// Constructs [WKUserScript]. + final WKUserScript Function({ + required String source, + required UserScriptInjectionTime injectionTime, + required bool isForMainFrameOnly, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newWKUserScript; + + /// Constructs [HTTPCookie]. + final HTTPCookie Function({ + required Map properties, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newHTTPCookie; + + /// Constructs [AuthenticationChallengeResponse]. + final AuthenticationChallengeResponse Function({ + required UrlSessionAuthChallengeDisposition disposition, + URLCredential? credential, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newAuthenticationChallengeResponse; + + /// Constructs [WKWebViewConfiguration]. + final WKWebViewConfiguration Function({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newWKWebViewConfiguration; + + /// Constructs [WKScriptMessageHandler]. + final WKScriptMessageHandler Function({ + required void Function( + WKScriptMessageHandler, + WKUserContentController, + WKScriptMessage, + ) didReceiveScriptMessage, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newWKScriptMessageHandler; + + /// Constructs [WKNavigationDelegate]. + final WKNavigationDelegate Function({ + required Future Function( + WKNavigationDelegate, + WKWebView, + WKNavigationAction, + ) decidePolicyForNavigationAction, + required Future Function( + WKNavigationDelegate, + WKWebView, + WKNavigationResponse, + ) decidePolicyForNavigationResponse, + required Future> Function( + WKNavigationDelegate, + WKWebView, + URLAuthenticationChallenge, + ) didReceiveAuthenticationChallenge, + void Function( + WKNavigationDelegate, + WKWebView, + String?, + )? didFinishNavigation, + void Function( + WKNavigationDelegate, + WKWebView, + String?, + )? didStartProvisionalNavigation, + void Function( + WKNavigationDelegate, + WKWebView, + NSError, + )? didFailNavigation, + void Function( + WKNavigationDelegate, + WKWebView, + NSError, + )? didFailProvisionalNavigation, + void Function( + WKNavigationDelegate, + WKWebView, + )? webViewWebContentProcessDidTerminate, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newWKNavigationDelegate; + + /// Constructs [NSObject]. + final NSObject Function({ + void Function( + NSObject, + String?, + NSObject?, + Map?, + )? observeValue, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newNSObject; + + /// Constructs [UIViewWKWebView]. + final UIViewWKWebView Function({ + required WKWebViewConfiguration initialConfiguration, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newUIViewWKWebView; + + /// Constructs [NSViewWKWebView]. + final NSViewWKWebView Function({ + required WKWebViewConfiguration initialConfiguration, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newNSViewWKWebView; + + /// Constructs [WKUIDelegate]. + final WKUIDelegate Function({ + required Future Function( + WKUIDelegate, + WKWebView, + WKSecurityOrigin, + WKFrameInfo, + MediaCaptureType, + ) requestMediaCapturePermission, + required Future Function( + WKUIDelegate, + WKWebView, + String, + WKFrameInfo, + ) runJavaScriptConfirmPanel, + void Function( + WKUIDelegate, + WKWebView, + WKWebViewConfiguration, + WKNavigationAction, + )? onCreateWebView, + Future Function( + WKUIDelegate, + WKWebView, + String, + WKFrameInfo, + )? runJavaScriptAlertPanel, + Future Function( + WKUIDelegate, + WKWebView, + String, + String?, + WKFrameInfo, + )? runJavaScriptTextInputPanel, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newWKUIDelegate; + + /// Constructs [UIScrollViewDelegate]. + final UIScrollViewDelegate Function({ + void Function( + UIScrollViewDelegate, + UIScrollView, + double, + double, + )? scrollViewDidScroll, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) newUIScrollViewDelegate; + + /// Constructs [URLCredential]. + final URLCredential Function({ + required String user, + required String password, + required UrlCredentialPersistence persistence, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) withUserURLCredential; + + /// Calls to [SecTrust.evaluateWithError]. + final Future Function( + SecTrust, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) evaluateWithErrorSecTrust; + + /// Calls to [SecTrust.copyExceptions]. + final Future Function( + SecTrust, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) copyExceptionsSecTrust; + + /// Calls to [SecTrust.setExceptions]. + final Future Function( + SecTrust, + Uint8List, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) setExceptionsSecTrust; + + /// Calls to [SecTrust.getTrustResult]. + final Future Function( + SecTrust, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) getTrustResultSecTrust; + + /// Calls to [SecTrust.copyCertificateChain]. + final Future> Function( + SecTrust, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) copyCertificateChainSecTrust; + + /// Calls to [SecCertificate.copyData]. + final Future Function( + SecCertificate, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) copyDataSecCertificate; + + /// Calls to [WKWebsiteDataStore.defaultDataStore]. + final WKWebsiteDataStore Function() defaultDataStoreWKWebsiteDataStore; + + static WKWebsiteDataStore _defaultDataStoreWKWebsiteDataStore() => + WKWebsiteDataStore.defaultDataStore; } + /// The values that can be returned in a change dictionary. /// /// See https://developer.apple.com/documentation/foundation/nskeyvalueobservingoptions. @@ -470,15 +693,12 @@ enum KeyValueObservingOptions { /// Indicates that the change dictionary should provide the new attribute /// value, if applicable. newValue, - /// Indicates that the change dictionary should contain the old attribute /// value, if applicable. oldValue, - /// If specified, a notification should be sent to the observer immediately, /// before the observer registration method even returns. initialValue, - /// Whether separate notifications should be sent to the observer before and /// after each change, instead of a single notification after the change. priorNotification, @@ -490,19 +710,15 @@ enum KeyValueObservingOptions { enum KeyValueChange { /// Indicates that the value of the observed key path was set to a new value. setting, - /// Indicates that an object has been inserted into the to-many relationship /// that is being observed. insertion, - /// Indicates that an object has been removed from the to-many relationship /// that is being observed. removal, - /// Indicates that an object has been replaced in the to-many relationship /// that is being observed. replacement, - /// The value is not recognized by the wrapper. unknown, } @@ -516,28 +732,23 @@ enum KeyValueChangeKey { /// `KeyValueChange.replacement`, the value of this key is a Set object that /// contains the indexes of the inserted, removed, or replaced objects. indexes, - /// An object that contains a value corresponding to one of the /// `KeyValueChange` enum, indicating what sort of change has occurred. kind, - /// If the value of the `KeyValueChange.kind` entry is /// `KeyValueChange.setting, and `KeyValueObservingOptions.newValue` was /// specified when the observer was registered, the value of this key is the /// new value for the attribute. newValue, - /// If the `KeyValueObservingOptions.priorNotification` option was specified /// when the observer was registered this notification is sent prior to a /// change. notificationIsPrior, - /// If the value of the `KeyValueChange.kind` entry is /// `KeyValueChange.setting`, and `KeyValueObservingOptions.old` was specified /// when the observer was registered, the value of this key is the value /// before the attribute was changed. oldValue, - /// The value is not recognized by the wrapper. unknown, } @@ -549,11 +760,9 @@ enum UserScriptInjectionTime { /// A constant to inject the script after the creation of the webpage’s /// document element, but before loading any other content. atDocumentStart, - /// A constant to inject the script after the document finishes loading, but /// before loading any other subresources. atDocumentEnd, - /// The value is not recognized by the wrapper. unknown, } @@ -564,13 +773,10 @@ enum UserScriptInjectionTime { enum AudiovisualMediaType { /// No media types require a user gesture to begin playing. none, - /// Media types that contain audio require a user gesture to begin playing. audio, - /// Media types that contain video require a user gesture to begin playing. video, - /// All media types require a user gesture to begin playing. all, } @@ -582,25 +788,18 @@ enum AudiovisualMediaType { enum WebsiteDataType { /// Cookies. cookies, - /// In-memory caches. memoryCache, - /// On-disk caches. diskCache, - /// HTML offline web app caches. offlineWebApplicationCache, - /// HTML local storage. localStorage, - /// HTML session storage. sessionStorage, - /// WebSQL databases. webSQLDatabases, - /// IndexedDB databases. indexedDBDatabases, } @@ -612,10 +811,8 @@ enum WebsiteDataType { enum NavigationActionPolicy { /// Allow the navigation to continue. allow, - /// Cancel the navigation. cancel, - /// Allow the download to proceed. download, } @@ -627,10 +824,8 @@ enum NavigationActionPolicy { enum NavigationResponsePolicy { /// Allow the navigation to continue. allow, - /// Cancel the navigation. cancel, - /// Allow the download to proceed. download, } @@ -641,51 +836,37 @@ enum NavigationResponsePolicy { enum HttpCookiePropertyKey { /// A String object containing the comment for the cookie. comment, - /// An Uri object or String object containing the comment URL for the cookie. commentUrl, - /// Aa String object stating whether the cookie should be discarded at the end /// of the session. discard, - /// An String object containing the domain for the cookie. domain, - /// An Date object or String object specifying the expiration date for the /// cookie. expires, - /// An String object containing an integer value stating how long in seconds /// the cookie should be kept, at most. maximumAge, - /// An String object containing the name of the cookie (required). name, - /// A URL or String object containing the URL that set this cookie. originUrl, - /// A String object containing the path for the cookie. path, - /// An String object containing comma-separated integer values specifying the /// ports for the cookie. port, - /// A string indicating the same-site policy for the cookie. sameSitePolicy, - /// A String object indicating that the cookie should be transmitted only over /// secure channels. secure, - /// A String object containing the value of the cookie. value, - /// A String object that specifies the version of the cookie. version, - /// The value is not recognized by the wrapper. unknown, } @@ -696,22 +877,16 @@ enum HttpCookiePropertyKey { enum NavigationType { /// A link activation. linkActivated, - /// A request to submit a form. formSubmitted, - /// A request for the frame’s next or previous item. backForward, - /// A request to reload the webpage. reload, - /// A request to resubmit a form. formResubmitted, - /// A navigation request that originates for some other reason. other, - /// The value is not recognized by the wrapper. unknown, } @@ -722,10 +897,8 @@ enum NavigationType { enum PermissionDecision { /// Deny permission for the requested resource. deny, - /// Deny permission for the requested resource. grant, - /// Prompt the user for permission for the requested resource. prompt, } @@ -736,13 +909,10 @@ enum PermissionDecision { enum MediaCaptureType { /// A media device that can capture video. camera, - /// A media device or devices that can capture audio and video. cameraAndMicrophone, - /// A media device that can capture audio. microphone, - /// The value is not recognized by the wrapper. unknown, } @@ -753,18 +923,14 @@ enum MediaCaptureType { enum UrlSessionAuthChallengeDisposition { /// Use the specified credential, which may be nil. useCredential, - /// Use the default handling for the challenge as though this delegate method /// were not implemented. performDefaultHandling, - /// Cancel the entire request. cancelAuthenticationChallenge, - /// Reject this challenge, and call the authentication delegate method again /// with the next authentication protection space. rejectProtectionSpace, - /// The value is not recognized by the wrapper. unknown, } @@ -775,19 +941,42 @@ enum UrlSessionAuthChallengeDisposition { enum UrlCredentialPersistence { /// The credential should not be stored. none, - /// The credential should be stored only for this session. forSession, - /// The credential should be stored in the keychain. permanent, - /// The credential should be stored permanently in the keychain, and in /// addition should be distributed to other devices based on the owning Apple /// ID. synchronizable, } +/// Trust evaluation result codes. +/// +/// See https://developer.apple.com/documentation/security/sectrustresulttype?language=objc. +enum DartSecTrustResultType { + /// The user did not specify a trust setting. + unspecified, + /// The user granted permission to trust the certificate for the purposes + /// designated in the specified policies. + proceed, + /// The user specified that the certificate should not be trusted. + deny, + /// Trust is denied, but recovery may be possible. + recoverableTrustFailure, + /// Trust is denied and no simple fix is available. + fatalTrustFailure, + /// A value that indicates a failure other than trust evaluation. + otherError, + /// An indication of an invalid setting or result. + invalid, + /// User confirmation is required before proceeding. + confirm, + /// The type is not recognized by this wrapper. + unknown, +} + + class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -795,48 +984,51 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is KeyValueObservingOptions) { + } else if (value is KeyValueObservingOptions) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is KeyValueChange) { + } else if (value is KeyValueChange) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is KeyValueChangeKey) { + } else if (value is KeyValueChangeKey) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is UserScriptInjectionTime) { + } else if (value is UserScriptInjectionTime) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is AudiovisualMediaType) { + } else if (value is AudiovisualMediaType) { buffer.putUint8(133); writeValue(buffer, value.index); - } else if (value is WebsiteDataType) { + } else if (value is WebsiteDataType) { buffer.putUint8(134); writeValue(buffer, value.index); - } else if (value is NavigationActionPolicy) { + } else if (value is NavigationActionPolicy) { buffer.putUint8(135); writeValue(buffer, value.index); - } else if (value is NavigationResponsePolicy) { + } else if (value is NavigationResponsePolicy) { buffer.putUint8(136); writeValue(buffer, value.index); - } else if (value is HttpCookiePropertyKey) { + } else if (value is HttpCookiePropertyKey) { buffer.putUint8(137); writeValue(buffer, value.index); - } else if (value is NavigationType) { + } else if (value is NavigationType) { buffer.putUint8(138); writeValue(buffer, value.index); - } else if (value is PermissionDecision) { + } else if (value is PermissionDecision) { buffer.putUint8(139); writeValue(buffer, value.index); - } else if (value is MediaCaptureType) { + } else if (value is MediaCaptureType) { buffer.putUint8(140); writeValue(buffer, value.index); - } else if (value is UrlSessionAuthChallengeDisposition) { + } else if (value is UrlSessionAuthChallengeDisposition) { buffer.putUint8(141); writeValue(buffer, value.index); - } else if (value is UrlCredentialPersistence) { + } else if (value is UrlCredentialPersistence) { buffer.putUint8(142); writeValue(buffer, value.index); + } else if (value is DartSecTrustResultType) { + buffer.putUint8(143); + writeValue(buffer, value.index); } else { super.writeValue(buffer, value); } @@ -845,56 +1037,56 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : KeyValueObservingOptions.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; return value == null ? null : KeyValueChange.values[value]; - case 131: + case 131: final int? value = readValue(buffer) as int?; return value == null ? null : KeyValueChangeKey.values[value]; - case 132: + case 132: final int? value = readValue(buffer) as int?; return value == null ? null : UserScriptInjectionTime.values[value]; - case 133: + case 133: final int? value = readValue(buffer) as int?; return value == null ? null : AudiovisualMediaType.values[value]; - case 134: + case 134: final int? value = readValue(buffer) as int?; return value == null ? null : WebsiteDataType.values[value]; - case 135: + case 135: final int? value = readValue(buffer) as int?; return value == null ? null : NavigationActionPolicy.values[value]; - case 136: + case 136: final int? value = readValue(buffer) as int?; return value == null ? null : NavigationResponsePolicy.values[value]; - case 137: + case 137: final int? value = readValue(buffer) as int?; return value == null ? null : HttpCookiePropertyKey.values[value]; - case 138: + case 138: final int? value = readValue(buffer) as int?; return value == null ? null : NavigationType.values[value]; - case 139: + case 139: final int? value = readValue(buffer) as int?; return value == null ? null : PermissionDecision.values[value]; - case 140: + case 140: final int? value = readValue(buffer) as int?; return value == null ? null : MediaCaptureType.values[value]; - case 141: + case 141: final int? value = readValue(buffer) as int?; - return value == null - ? null - : UrlSessionAuthChallengeDisposition.values[value]; - case 142: + return value == null ? null : UrlSessionAuthChallengeDisposition.values[value]; + case 142: final int? value = readValue(buffer) as int?; return value == null ? null : UrlCredentialPersistence.values[value]; + case 143: + final int? value = readValue(buffer) as int?; + return value == null ? null : DartSecTrustResultType.values[value]; default: return super.readValueOfType(type, buffer); } } } - /// A URL load request that is independent of protocol or URL scheme. /// /// See https://developer.apple.com/documentation/foundation/urlrequest. @@ -7533,6 +7725,7 @@ class URLProtectionSpace extends NSObject { required this.port, this.realm, this.authenticationMethod, + this.getServerTrust, super.observeValue, }) : super.pigeon_detached(); @@ -7548,6 +7741,9 @@ class URLProtectionSpace extends NSObject { /// The authentication method used by the receiver. final String? authenticationMethod; + /// A representation of the server’s SSL transaction state. + final SecTrust? getServerTrust; + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, @@ -7557,6 +7753,7 @@ class URLProtectionSpace extends NSObject { int port, String? realm, String? authenticationMethod, + SecTrust? getServerTrust, )? pigeon_newInstance, }) { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = @@ -7588,11 +7785,12 @@ class URLProtectionSpace extends NSObject { 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.URLProtectionSpace.pigeon_newInstance was null, expected non-null int.'); final String? arg_realm = (args[3] as String?); final String? arg_authenticationMethod = (args[4] as String?); + final SecTrust? arg_getServerTrust = (args[5] as SecTrust?); try { (pigeon_instanceManager ?? PigeonInstanceManager.instance) .addHostCreatedInstance( pigeon_newInstance?.call(arg_host!, arg_port!, arg_realm, - arg_authenticationMethod) ?? + arg_authenticationMethod, arg_getServerTrust) ?? URLProtectionSpace.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, @@ -7600,6 +7798,7 @@ class URLProtectionSpace extends NSObject { port: arg_port!, realm: arg_realm, authenticationMethod: arg_authenticationMethod, + getServerTrust: arg_getServerTrust, ), arg_pigeon_instanceIdentifier!, ); @@ -7624,6 +7823,7 @@ class URLProtectionSpace extends NSObject { port: port, realm: realm, authenticationMethod: authenticationMethod, + getServerTrust: getServerTrust, observeValue: observeValue, ); } @@ -7964,3 +8164,499 @@ class WKWebpagePreferences extends NSObject { ); } } + +/// Data class used to respond to `SecTrust.getTrustResult`. +/// +/// The native method needs to return two values, so this custom class is +/// created to support this. +class GetTrustResultResponse extends NSObject { + /// Constructs [GetTrustResultResponse] without creating the associated native object. + /// + /// This should only be used by subclasses created by this library or to + /// create copies for an [PigeonInstanceManager]. + @protected + GetTrustResultResponse.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.result, + required this.resultCode, + super.observeValue, + }) : super.pigeon_detached(); + + /// The result code from the most recent trust evaluation. + final DartSecTrustResultType result; + + /// A result code. + /// + /// See https://developer.apple.com/documentation/security/security-framework-result-codes?language=objc. + final int resultCode; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + GetTrustResultResponse Function( + DartSecTrustResultType result, + int resultCode, + )? pigeon_newInstance, + }) { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.GetTrustResultResponse.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + pigeonVar_channel.setMessageHandler(null); + } else { + pigeonVar_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.GetTrustResultResponse.pigeon_newInstance was null.'); + final List args = (message as List?)!; + final int? arg_pigeon_instanceIdentifier = (args[0] as int?); + assert(arg_pigeon_instanceIdentifier != null, + 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.GetTrustResultResponse.pigeon_newInstance was null, expected non-null int.'); + final DartSecTrustResultType? arg_result = + (args[1] as DartSecTrustResultType?); + assert(arg_result != null, + 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.GetTrustResultResponse.pigeon_newInstance was null, expected non-null DartSecTrustResultType.'); + final int? arg_resultCode = (args[2] as int?); + assert(arg_resultCode != null, + 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.GetTrustResultResponse.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call(arg_result!, arg_resultCode!) ?? + GetTrustResultResponse.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + result: arg_result!, + resultCode: arg_resultCode!, + ), + arg_pigeon_instanceIdentifier!, + ); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } + + @override + GetTrustResultResponse pigeon_copy() { + return GetTrustResultResponse.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + result: result, + resultCode: resultCode, + observeValue: observeValue, + ); + } +} + +/// An object used to evaluate trust. +/// +/// See https://developer.apple.com/documentation/security/sectrust. +class SecTrust extends NSObject { + /// Constructs [SecTrust] without creating the associated native object. + /// + /// This should only be used by subclasses created by this library or to + /// create copies for an [PigeonInstanceManager]. + @protected + SecTrust.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + super.observeValue, + }) : super.pigeon_detached(); + + late final _PigeonInternalProxyApiBaseCodec _pigeonVar_codecSecTrust = + _PigeonInternalProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + SecTrust Function()? pigeon_newInstance, + }) { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + pigeonVar_channel.setMessageHandler(null); + } else { + pigeonVar_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.pigeon_newInstance was null.'); + final List args = (message as List?)!; + final int? arg_pigeon_instanceIdentifier = (args[0] as int?); + assert(arg_pigeon_instanceIdentifier != null, + 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + SecTrust.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + arg_pigeon_instanceIdentifier!, + ); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } + + /// Evaluates trust for the specified certificate and policies. + static Future evaluateWithError( + SecTrust trust, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.evaluateWithError'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([trust]); + 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 if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as bool?)!; + } + } + + /// Returns an opaque cookie containing exceptions to trust policies that will + /// allow future evaluations of the current certificate to succeed. + static Future copyExceptions( + SecTrust trust, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.copyExceptions'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([trust]); + 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 if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as Uint8List?)!; + } + } + + /// Sets a list of exceptions that should be ignored when the certificate is + /// evaluated. + static Future setExceptions( + SecTrust trust, + Uint8List exceptions, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.setExceptions'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([trust, exceptions]); + 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 if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as bool?)!; + } + } + + /// Returns the result code from the most recent trust evaluation. + static Future getTrustResult( + SecTrust trust, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.getTrustResult'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([trust]); + 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 if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as GetTrustResultResponse?)!; + } + } + + /// Certificates used to evaluate trust. + static Future> copyCertificateChain( + SecTrust trust, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.copyCertificateChain'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([trust]); + 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 if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as List?)!.cast(); + } + } + + @override + SecTrust pigeon_copy() { + return SecTrust.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + observeValue: observeValue, + ); + } +} + +/// An abstract Core Foundation-type object representing an X.509 certificate. +/// +/// See https://developer.apple.com/documentation/security/seccertificate. +class SecCertificate extends NSObject { + /// Constructs [SecCertificate] without creating the associated native object. + /// + /// This should only be used by subclasses created by this library or to + /// create copies for an [PigeonInstanceManager]. + @protected + SecCertificate.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + super.observeValue, + }) : super.pigeon_detached(); + + late final _PigeonInternalProxyApiBaseCodec _pigeonVar_codecSecCertificate = + _PigeonInternalProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + SecCertificate Function()? pigeon_newInstance, + }) { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + pigeonVar_channel.setMessageHandler(null); + } else { + pigeonVar_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.pigeon_newInstance was null.'); + final List args = (message as List?)!; + final int? arg_pigeon_instanceIdentifier = (args[0] as int?); + assert(arg_pigeon_instanceIdentifier != null, + 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + SecCertificate.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + arg_pigeon_instanceIdentifier!, + ); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } + + static Future copyData( + SecCertificate certificate, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.copyData'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([certificate]); + 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 if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as Uint8List?)!; + } + } + + @override + SecCertificate pigeon_copy() { + return SecCertificate.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + observeValue: observeValue, + ); + } +} + 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 20b74cc72ad..1e2cd50a799 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart @@ -340,6 +340,39 @@ enum UrlCredentialPersistence { synchronizable, } +/// Trust evaluation result codes. +/// +/// See https://developer.apple.com/documentation/security/sectrustresulttype?language=objc. +enum DartSecTrustResultType { + /// The user did not specify a trust setting. + unspecified, + + /// The user granted permission to trust the certificate for the purposes + /// designated in the specified policies. + proceed, + + /// The user specified that the certificate should not be trusted. + deny, + + /// Trust is denied, but recovery may be possible. + recoverableTrustFailure, + + /// Trust is denied and no simple fix is available. + fatalTrustFailure, + + /// A value that indicates a failure other than trust evaluation. + otherError, + + /// An indication of an invalid setting or result. + invalid, + + /// User confirmation is required before proceeding. + confirm, + + /// The type is not recognized by this wrapper. + unknown, +} + /// A URL load request that is independent of protocol or URL scheme. /// /// See https://developer.apple.com/documentation/foundation/urlrequest. @@ -1095,6 +1128,9 @@ abstract class URLProtectionSpace extends NSObject { /// The authentication method used by the receiver. late String? authenticationMethod; + + /// A representation of the server’s SSL transaction state. + late SecTrust? getServerTrust; } /// A challenge from a server requiring authentication from the client. @@ -1132,3 +1168,55 @@ abstract class WKWebpagePreferences extends NSObject { /// allowed to run. void setAllowsContentJavaScript(bool allow); } + +/// Data class used to respond to `SecTrust.getTrustResult`. +/// +/// The native method needs to return two values, so this custom class is +/// created to support this. +@ProxyApi() +abstract class GetTrustResultResponse extends NSObject { + /// The result code from the most recent trust evaluation. + late DartSecTrustResultType result; + + /// A result code. + /// + /// See https://developer.apple.com/documentation/security/security-framework-result-codes?language=objc. + late int resultCode; +} + +/// An object used to evaluate trust. +/// +/// See https://developer.apple.com/documentation/security/sectrust. +@ProxyApi(swiftOptions: SwiftProxyApiOptions(name: 'SecTrustWrapper')) +abstract class SecTrust extends NSObject { + /// Evaluates trust for the specified certificate and policies. + @static + bool evaluateWithError(SecTrust trust); + + /// Returns an opaque cookie containing exceptions to trust policies that will + /// allow future evaluations of the current certificate to succeed. + @static + Uint8List copyExceptions(SecTrust trust); + + /// Sets a list of exceptions that should be ignored when the certificate is + /// evaluated. + @static + bool setExceptions(SecTrust trust, Uint8List exceptions); + + /// Returns the result code from the most recent trust evaluation. + @static + GetTrustResultResponse getTrustResult(SecTrust trust); + + /// Certificates used to evaluate trust. + @static + List copyCertificateChain(SecTrust trust); +} + +/// An abstract Core Foundation-type object representing an X.509 certificate. +/// +/// See https://developer.apple.com/documentation/security/seccertificate. +@ProxyApi(swiftOptions: SwiftProxyApiOptions(name: 'SecCertificateWrapper')) +abstract class SecCertificate extends NSObject { + @static + Uint8List copyData(SecCertificate certificate); +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 67f2f644cd6..91319e4ba0e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -32,7 +32,11 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.4.4 - pigeon: ^24.2.1 + pigeon: + git: + url: git@github.com:bparrishMines/packages.git + ref: pigeon_helper + path: packages/pigeon topics: - html From c724beb6905184b57b2bb1ef5ef30e402f7031ed Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sat, 5 Apr 2025 12:50:20 -0400 Subject: [PATCH 02/19] finish implementations --- .../SecTrustProxyAPIDelegate.swift | 48 +++++++++++++++---- .../WebKitLibrary.g.swift | 14 +++--- .../lib/src/common/web_kit.g.dart | 26 ++++------ .../pigeons/web_kit.dart | 6 +-- 4 files changed, 58 insertions(+), 36 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift index 94d8e7f805c..204d67aea0e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift @@ -19,24 +19,56 @@ import Foundation /// or handle method calls on the associated native class or an instance of that class. class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> Bool { - var error: Unmanaged? + var error: CFError? let result = SecTrustEvaluateWithError(trust.value, &error) + if let error = error { + throw PigeonError(code: CFErrorGetDomain(error) as String, message: CFErrorCopyDescription(error) as String, details: nil) + } return result } - func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData { - return SecTrust.copyExceptions(trust: trust) + func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? { + let data = SecTrustCopyExceptions(trust.value) + if let data = data { + return FlutterStandardTypedData(bytes: data as Data) + } + + return nil } - func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData) throws -> Bool { - return SecTrust.setExceptions(trust: trust, exceptions: exceptions) + func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData?) throws -> Bool { + let data: CFData? = exceptions != nil ? exceptions!.data as CFData : nil + return SecTrustSetExceptions(trust.value, data) } func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse { - return SecTrust.getTrustResult(trust: trust) + var result = SecTrustResultType.invalid + let status = SecTrustGetTrustResult(trust.value, &result) + return GetTrustResultResponse(result: result, resultCode: status) } - func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [String] { - return SecTrust.copyCertificateChain(trust: trust) + func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [SecCertificateWrapper]? { + if #available(iOS 15.0, *) { + let array = SecTrustCopyCertificateChain(trust.value) as Array? + if let array = array { + var certificateList: [SecCertificateWrapper] = [] + for certificate in array { + certificateList.append(SecCertificateWrapper(value: certificate as! SecCertificate)) + } + return certificateList + } + } else { + let count = SecTrustGetCertificateCount(trust.value) + if count > 0 { + var certificateList: [SecCertificateWrapper] = [] + for index in 0.. Bool /// Returns an opaque cookie containing exceptions to trust policies that will /// allow future evaluations of the current certificate to succeed. - func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData + func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? /// Sets a list of exceptions that should be ignored when the certificate is /// evaluated. - func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData) throws -> Bool + func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData?) throws -> Bool /// Returns the result code from the most recent trust evaluation. func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse /// Certificates used to evaluate trust. - func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [String] + func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [SecCertificateWrapper]? } protocol PigeonApiProtocolSecTrust { @@ -9804,7 +9804,7 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { setExceptionsChannel.setMessageHandler { message, reply in let args = message as! [Any?] let trustArg = args[0] as! SecTrustWrapper - let exceptionsArg = args[1] as! FlutterStandardTypedData + let exceptionsArg: FlutterStandardTypedData? = nilOrValue(args[1]) do { let result = try api.pigeonDelegate.setExceptions(pigeonApi: api, trust: trustArg, exceptions: exceptionsArg) reply(wrapResult(result)) @@ -9899,11 +9899,11 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { return SecTrust.evaluateWithError(trust: trust) } - func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData { + func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? { return SecTrust.copyExceptions(trust: trust) } - func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData) throws -> Bool { + func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData?) throws -> Bool { return SecTrust.setExceptions(trust: trust, exceptions: exceptions) } @@ -9911,7 +9911,7 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { return SecTrust.getTrustResult(trust: trust) } - func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [String] { + func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [SecCertificateWrapper]? { return SecTrust.copyCertificateChain(trust: trust) } 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 a05830e7e12..48b3950d63d 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 @@ -643,7 +643,7 @@ class WebKitGProxy { }) evaluateWithErrorSecTrust; /// Calls to [SecTrust.copyExceptions]. - final Future Function( + final Future Function( SecTrust, { BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, @@ -652,7 +652,7 @@ class WebKitGProxy { /// Calls to [SecTrust.setExceptions]. final Future Function( SecTrust, - Uint8List, { + Uint8List?, { BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, }) setExceptionsSecTrust; @@ -665,7 +665,7 @@ class WebKitGProxy { }) getTrustResultSecTrust; /// Calls to [SecTrust.copyCertificateChain]. - final Future> Function( + final Future?> Function( SecTrust, { BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, @@ -8373,7 +8373,7 @@ class SecTrust extends NSObject { /// Returns an opaque cookie containing exceptions to trust policies that will /// allow future evaluations of the current certificate to succeed. - static Future copyExceptions( + static Future copyExceptions( SecTrust trust, { BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, @@ -8402,13 +8402,8 @@ class SecTrust extends NSObject { message: pigeonVar_replyList[1] as String?, details: pigeonVar_replyList[2], ); - } else if (pigeonVar_replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); } else { - return (pigeonVar_replyList[0] as Uint8List?)!; + return (pigeonVar_replyList[0] as Uint8List?); } } @@ -8416,7 +8411,7 @@ class SecTrust extends NSObject { /// evaluated. static Future setExceptions( SecTrust trust, - Uint8List exceptions, { + Uint8List? exceptions, { BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, }) async { @@ -8495,7 +8490,7 @@ class SecTrust extends NSObject { } /// Certificates used to evaluate trust. - static Future> copyCertificateChain( + static Future?> copyCertificateChain( SecTrust trust, { BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, @@ -8524,13 +8519,8 @@ class SecTrust extends NSObject { message: pigeonVar_replyList[1] as String?, details: pigeonVar_replyList[2], ); - } else if (pigeonVar_replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); } else { - return (pigeonVar_replyList[0] as List?)!.cast(); + return (pigeonVar_replyList[0] as List?)?.cast(); } } 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 1e2cd50a799..3dd2b06a6aa 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart @@ -1196,12 +1196,12 @@ abstract class SecTrust extends NSObject { /// Returns an opaque cookie containing exceptions to trust policies that will /// allow future evaluations of the current certificate to succeed. @static - Uint8List copyExceptions(SecTrust trust); + Uint8List? copyExceptions(SecTrust trust); /// Sets a list of exceptions that should be ignored when the certificate is /// evaluated. @static - bool setExceptions(SecTrust trust, Uint8List exceptions); + bool setExceptions(SecTrust trust, Uint8List? exceptions); /// Returns the result code from the most recent trust evaluation. @static @@ -1209,7 +1209,7 @@ abstract class SecTrust extends NSObject { /// Certificates used to evaluate trust. @static - List copyCertificateChain(SecTrust trust); + List? copyCertificateChain(SecTrust trust); } /// An abstract Core Foundation-type object representing an X.509 certificate. From 86d6f62929e55e3fe19a8a5103c37526b153d048 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sat, 5 Apr 2025 14:12:55 -0400 Subject: [PATCH 03/19] update protectionspace tests --- .../URLProtectionSpaceProxyAPITests.swift | 29 ++++++++++++++++++ .../example/assets/test_cert.der | Bin 0 -> 829 bytes .../example/pubspec.yaml | 2 ++ 3 files changed, 31 insertions(+) create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/assets/test_cert.der diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift index fcb9e9e4fb9..b37a83ec0f7 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift @@ -56,4 +56,33 @@ class ProtectionSpaceProxyAPITests: XCTestCase { XCTAssertEqual(value, instance.authenticationMethod) } + func testGetServerTrust() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) + + let instance = TestProtectionSpace( + host: "host", port: 23, protocol: "protocol", realm: "realm", authenticationMethod: "myMethod" + ) + let value = try? api.pigeonDelegate.getServerTrust(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value!.value, instance.serverTrust) + } +} + +class TestProtectionSpace: URLProtectionSpace, @unchecked Sendable { + var serverTrustVal: SecTrust? + + override var serverTrust: SecTrust? { + if (serverTrustVal == nil) { + let key = FlutterAssetManager().lookupKeyForAsset("assets/test_cert.der") + let url = Bundle.main.path(forResource: key, ofType: nil) + let certificateData = NSData(contentsOfFile: url!) + let dummyCertificate: SecCertificate! = SecCertificateCreateWithData(nil, certificateData!) + + var trust: SecTrust? + SecTrustCreateWithCertificates([dummyCertificate] as AnyObject, SecPolicyCreateBasicX509(), &trust) + serverTrustVal = trust! + } + return serverTrustVal + } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/assets/test_cert.der b/packages/webview_flutter/webview_flutter_wkwebview/example/assets/test_cert.der new file mode 100644 index 0000000000000000000000000000000000000000..87401bc4ad343f5b076cb9dbb9e8bc85f8cdd32f GIT binary patch literal 829 zcmXqLVzxABVp3ed%*4pVBvSO?;8q^(PSrEr&thl2yxo{1^O3=TmyJ`a&70H%Q^B!(JS28X1;DWWPyB1&kQD*coa6;In z^?W)x4=rxJU63f^w^RS~#lM|F44?mre$T6Tw%k4V+}3@^jaP~-ewV{^=!8butAz=S!^0P+R-SycTQA#EWJ}S4wF31iT6Q1%H|c9Kas4=|5jZ{fZR_$| z3ugYD@XqID0b`1q;)L?Y2P=9Cr8uW7Z`$p0%Fui%_qO%_<3BysC>8n^&uq3&IeSmv zU(euGfA{;IF?@P0!h^la?u_Qq*7&t-3o@CQ85tNCD;mff$O7X>mXAe@MMNrLsu$lD zjyoIJ=Pk(IGHHgcQ3@Y&AOceXFc29TW=o~#@96q4r6@)|UuK0;W1}38YwLpdcW0T* zE|ZmMIlf4uaOUaf!h0JY2H3b-?&0zBZ1FGAsG4M;@nFr`PL>`!}W^v$^&l5jX-jo33e`>ZcB(%qe+l6RJ|uapuIR~9|q*Szm#vfk8M zjrw Date: Sat, 5 Apr 2025 20:49:39 -0400 Subject: [PATCH 04/19] all swift tests --- .../SecCertificateProxyAPIDelegate.swift | 8 +- .../SecTrustProxyAPIDelegate.swift | 53 +++++++- .../ios/Runner.xcodeproj/project.pbxproj | 14 +- .../GetTrustResultResponseProxyAPITests.swift | 37 ++++++ .../SecCertificateProxyAPITests.swift | 43 +++++++ .../RunnerTests/SecTrustProxyAPITests.swift | 121 ++++++++++++++++++ 6 files changed, 267 insertions(+), 9 deletions(-) create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/GetTrustResultResponseProxyAPITests.swift create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecCertificateProxyAPITests.swift create mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift index 424765d9cb7..5148a916e14 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift @@ -11,6 +11,7 @@ #else #error("Unsupported platform.") #endif + import Foundation /// ProxyApi implementation for `SecCertificate`. @@ -19,7 +20,12 @@ import Foundation /// or handle method calls on the associated native class or an instance of that class. class SecCertificateProxyAPIDelegate : PigeonApiDelegateSecCertificate { func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws -> FlutterStandardTypedData { - let data = SecCertificateCopyData(certificate.value) + let data = secCertificateCopyData(certificate.value) return FlutterStandardTypedData(bytes: data as Data) } + + // Overridable for testing. + internal func secCertificateCopyData(_ certificate: SecCertificate) -> CFData { + return SecCertificateCopyData(certificate) + } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift index 204d67aea0e..25b7cc5a22f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift @@ -20,7 +20,7 @@ import Foundation class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> Bool { var error: CFError? - let result = SecTrustEvaluateWithError(trust.value, &error) + let result = secTrustEvaluateWithError(trust.value, &error) if let error = error { throw PigeonError(code: CFErrorGetDomain(error) as String, message: CFErrorCopyDescription(error) as String, details: nil) } @@ -28,7 +28,7 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { } func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? { - let data = SecTrustCopyExceptions(trust.value) + let data = secTrustCopyExceptions(trust.value) if let data = data { return FlutterStandardTypedData(bytes: data as Data) } @@ -38,18 +38,18 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData?) throws -> Bool { let data: CFData? = exceptions != nil ? exceptions!.data as CFData : nil - return SecTrustSetExceptions(trust.value, data) + return secTrustSetExceptions(trust.value, data) } func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse { var result = SecTrustResultType.invalid - let status = SecTrustGetTrustResult(trust.value, &result) + let status = secTrustGetTrustResult(trust.value, &result) return GetTrustResultResponse(result: result, resultCode: status) } func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [SecCertificateWrapper]? { if #available(iOS 15.0, *) { - let array = SecTrustCopyCertificateChain(trust.value) as Array? + let array = secTrustCopyCertificateChain(trust.value) as Array? if let array = array { var certificateList: [SecCertificateWrapper] = [] for certificate in array { @@ -58,11 +58,11 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { return certificateList } } else { - let count = SecTrustGetCertificateCount(trust.value) + let count = secTrustGetCertificateCount(trust.value) if count > 0 { var certificateList: [SecCertificateWrapper] = [] for index in 0..?) -> Bool { + return SecTrustEvaluateWithError(trust, error) + } + + // Overridable for testing. + internal func secTrustCopyExceptions(_ trust: SecTrust) -> CFData? { + return SecTrustCopyExceptions(trust) + } + + // Overridable for testing. + internal func secTrustSetExceptions(_ trust: SecTrust, _ exceptions: CFData?) -> Bool { + return SecTrustSetExceptions(trust, exceptions) + } + + // Overridable for testing. + internal func secTrustGetTrustResult(_ trust: SecTrust, _ result: UnsafeMutablePointer) -> OSStatus { + return SecTrustGetTrustResult(trust, result) + } + + // Overridable for testing. + internal func secTrustCopyCertificateChain(_ trust: SecTrust) -> CFArray? { + if #available(iOS 15.0, *) { + return SecTrustCopyCertificateChain(trust) + } + + return nil + } + + // Overridable for testing. + internal func secTrustGetCertificateCount(_ trust: SecTrust) -> CFIndex { + return SecTrustGetCertificateCount(trust) + } + + // Overridable for testing. + internal func secTrustGetCertificateAtIndex(_ trust: SecTrust, _ ix: CFIndex) -> SecCertificate? { + return SecTrustGetCertificateAtIndex(trust, ix) + } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj index 22def7bcd07..8baa858a6c5 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -41,6 +41,9 @@ 8F1488FF2D2DE27000191744 /* NavigationActionProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1488CB2D2DE27000191744 /* NavigationActionProxyAPITests.swift */; }; 8F1489012D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1489002D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift */; }; 8FC45F712D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FC45F702D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift */; }; + 8FEC647C2DA1EC6B00C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC647B2DA1EC6800C48569 /* GetTrustResultResponseProxyAPITests.swift */; }; + 8FEC647E2DA1EE9700C48569 /* SecCertificateProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC647D2DA1EE9300C48569 /* SecCertificateProxyAPITests.swift */; }; + 8FEC64802DA1F24800C48569 /* SecTrustProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC647F2DA1F24500C48569 /* SecTrustProxyAPITests.swift */; }; 904EA421B6925EC8D52ABE1B /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 573E8F1472CA1578A7CBDB63 /* libPods-RunnerTests.a */; }; 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; @@ -127,6 +130,9 @@ 8F1489002D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponseProxyAPITests.swift; path = ../../darwin/Tests/AuthenticationChallengeResponseProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8F66D9D72D1362BE000835F9 /* RunnerTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RunnerTests-Bridging-Header.h"; sourceTree = ""; }; 8FC45F702D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebpagePreferencesProxyAPITests.swift; sourceTree = ""; }; + 8FEC647B2DA1EC6800C48569 /* GetTrustResultResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetTrustResultResponseProxyAPITests.swift; sourceTree = ""; }; + 8FEC647D2DA1EE9300C48569 /* SecCertificateProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecCertificateProxyAPITests.swift; sourceTree = ""; }; + 8FEC647F2DA1F24500C48569 /* SecTrustProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecTrustProxyAPITests.swift; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -172,6 +178,9 @@ 68BDCAEA23C3F7CB00D9C032 /* RunnerTests */ = { isa = PBXGroup; children = ( + 8FEC647F2DA1F24500C48569 /* SecTrustProxyAPITests.swift */, + 8FEC647D2DA1EE9300C48569 /* SecCertificateProxyAPITests.swift */, + 8FEC647B2DA1EC6800C48569 /* GetTrustResultResponseProxyAPITests.swift */, 8FC45F702D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift */, 8F1489002D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift */, 8F1488C52D2DE27000191744 /* ErrorProxyAPITests.swift */, @@ -542,9 +551,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8FEC64802DA1F24800C48569 /* SecTrustProxyAPITests.swift in Sources */, 8FC45F712D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift in Sources */, 8F1488E22D2DE27000191744 /* ScriptMessageHandlerProxyAPITests.swift in Sources */, 8F1488E32D2DE27000191744 /* TestProxyApiRegistrar.swift in Sources */, + 8FEC647C2DA1EC6B00C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */, 8F1488E42D2DE27000191744 /* URLRequestProxyAPITests.swift in Sources */, 8F1488E52D2DE27000191744 /* TestBinaryMessenger.swift in Sources */, 8F1488E62D2DE27000191744 /* WebViewProxyAPITests.swift in Sources */, @@ -569,6 +580,7 @@ 8F1488F82D2DE27000191744 /* ScrollViewDelegateProxyAPITests.swift in Sources */, 8F1488FA2D2DE27000191744 /* FWFWebViewFlutterWKWebViewExternalAPITests.swift in Sources */, 8F1488FB2D2DE27000191744 /* UserContentControllerProxyAPITests.swift in Sources */, + 8FEC647E2DA1EE9700C48569 /* SecCertificateProxyAPITests.swift in Sources */, 8F1488FC2D2DE27000191744 /* HTTPURLResponseProxyAPITests.swift in Sources */, 8F1488FD2D2DE27000191744 /* ScrollViewProxyAPITests.swift in Sources */, 8F1488FE2D2DE27000191744 /* HTTPCookieProxyAPITests.swift in Sources */, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/GetTrustResultResponseProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/GetTrustResultResponseProxyAPITests.swift new file mode 100644 index 00000000000..b221a6b70b8 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/GetTrustResultResponseProxyAPITests.swift @@ -0,0 +1,37 @@ +// 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. + +import XCTest + +#if os(iOS) + import Flutter +#elseif os(macOS) + import FlutterMacOS +#else + #error("Unsupported platform.") +#endif + +@testable import webview_flutter_wkwebview + +class GetTrustResultResponseProxyAPITests: XCTestCase { + func testResult() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiGetTrustResultResponse(registrar) + + let instance = GetTrustResultResponse(result: SecTrustResultType.invalid, resultCode: -1) + let value = try? api.pigeonDelegate.result(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, DartSecTrustResultType.invalid) + } + + func testResultCode() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiGetTrustResultResponse(registrar) + + let instance = GetTrustResultResponse(result: SecTrustResultType.invalid, resultCode: -1) + let value = try? api.pigeonDelegate.resultCode(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, -1) + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecCertificateProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecCertificateProxyAPITests.swift new file mode 100644 index 00000000000..6c27efb6268 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecCertificateProxyAPITests.swift @@ -0,0 +1,43 @@ +// 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. + +import XCTest + +#if os(iOS) + import Flutter +#elseif os(macOS) + import FlutterMacOS +#else + #error("Unsupported platform.") +#endif + +@testable import webview_flutter_wkwebview + +class SecCertificateProxyAPITests: XCTestCase { + func createDummyCertificate() -> SecCertificate { + let key = FlutterAssetManager().lookupKeyForAsset("assets/test_cert.der") + let url = Bundle.main.path(forResource: key, ofType: nil) + let certificateData = NSData(contentsOfFile: url!) + + return SecCertificateCreateWithData(nil, certificateData!)! + } + + func testCopyData() { + let registrar = TestProxyApiRegistrar() + let delegate = TestSecCertificateProxyAPIDelegate() + let api = PigeonApiSecCertificate(pigeonRegistrar: registrar, delegate: delegate) + + let value = try? api.pigeonDelegate.copyData(pigeonApi: api, certificate: SecCertificateWrapper(value: createDummyCertificate())) + + XCTAssertEqual(value?.data, delegate.data) + } +} + +class TestSecCertificateProxyAPIDelegate : SecCertificateProxyAPIDelegate { + let data = Data() + + override func secCertificateCopyData(_ certificate: SecCertificate) -> CFData { + return data as CFData + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift new file mode 100644 index 00000000000..29ac86e13f8 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift @@ -0,0 +1,121 @@ +// 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. + +import XCTest + +#if os(iOS) + import Flutter +#elseif os(macOS) + import FlutterMacOS +#else + #error("Unsupported platform.") +#endif + +@testable import webview_flutter_wkwebview + +class SecTrustProxyAPITests: XCTestCase { + func createTrust(delegate: TestSecTrustProxyAPIDelegate) -> SecTrustWrapper { + var trust: SecTrust? + SecTrustCreateWithCertificates([delegate.createDummyCertificate()] as AnyObject, SecPolicyCreateBasicX509(), &trust) + + return SecTrustWrapper(value: trust!) + } + + func testEvaluateWithError() { + let registrar = TestProxyApiRegistrar() + let delegate = TestSecTrustProxyAPIDelegate() + let api = PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: delegate) + + let trust = createTrust(delegate: delegate) + let value = try? api.pigeonDelegate.evaluateWithError(pigeonApi: api, trust: trust) + + XCTAssertEqual(value, true) + } + + func testCopyExceptions() { + let registrar = TestProxyApiRegistrar() + let delegate = TestSecTrustProxyAPIDelegate() + let api = PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: delegate) + + let trust = createTrust(delegate: delegate) + let value = try? api.pigeonDelegate.copyExceptions(pigeonApi: api, trust: trust) + + XCTAssertEqual(value?.data, Data()) + } + + func testSetExceptions() { + let registrar = TestProxyApiRegistrar() + let delegate = TestSecTrustProxyAPIDelegate() + let api = PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: delegate) + + let trust = createTrust(delegate: delegate) + let value = try? api.pigeonDelegate.setExceptions(pigeonApi: api, trust: trust, exceptions: FlutterStandardTypedData(bytes: Data())) + + XCTAssertEqual(value, false) + } + + func testGetTrustResult() { + let registrar = TestProxyApiRegistrar() + let delegate = TestSecTrustProxyAPIDelegate() + let api = PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: delegate) + + let trust = createTrust(delegate: delegate) + let value = try? api.pigeonDelegate.getTrustResult(pigeonApi: api, trust: trust) + + XCTAssertEqual(value?.result, SecTrustResultType.invalid) + XCTAssertEqual(value?.resultCode, -1) + } + + func testCopyCertificateChain() { + let registrar = TestProxyApiRegistrar() + let delegate = TestSecTrustProxyAPIDelegate() + let api = PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: delegate) + + let trust = createTrust(delegate: delegate) + let value = try? api.pigeonDelegate.copyCertificateChain(pigeonApi: api, trust: trust) + + XCTAssertEqual(value?.count, 1) + XCTAssertNotNil(value?.first?.value) + } +} + +class TestSecTrustProxyAPIDelegate : SecTrustProxyAPIDelegate { + func createDummyCertificate() -> SecCertificate { + let key = FlutterAssetManager().lookupKeyForAsset("assets/test_cert.der") + let url = Bundle.main.path(forResource: key, ofType: nil) + let certificateData = NSData(contentsOfFile: url!) + + return SecCertificateCreateWithData(nil, certificateData!)! + } + + // Overridable for testing. + override func secTrustEvaluateWithError(_ trust: SecTrust, _ error: UnsafeMutablePointer?) -> Bool { + return true + } + + // Overridable for testing. + override func secTrustCopyExceptions(_ trust: SecTrust) -> CFData? { + return Data() as CFData + } + + // Overridable for testing. + override func secTrustSetExceptions(_ trust: SecTrust, _ exceptions: CFData?) -> Bool { + return false + } + + // Overridable for testing. + override func secTrustGetTrustResult(_ trust: SecTrust, _ result: UnsafeMutablePointer) -> OSStatus { + result.pointee = SecTrustResultType.invalid + return -1 + } + + // Overridable for testing. + override func secTrustCopyCertificateChain(_ trust: SecTrust) -> CFArray? { + if #available(iOS 15.0, *) { + return [createDummyCertificate()] as CFArray + } + + return nil + } +} From 364dbcfa82bad6a47629dc101eca2fbe3519d22c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 10:24:19 -0400 Subject: [PATCH 05/19] move call to background thread --- .../SecTrustProxyAPIDelegate.swift | 19 +++++++++++++------ .../WebKitLibrary.g.swift | 16 +++++++++------- .../RunnerTests/SecTrustProxyAPITests.swift | 16 ++++++++++++++-- .../pigeons/web_kit.dart | 1 + 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift index 25b7cc5a22f..fbedd6853d4 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift @@ -18,13 +18,20 @@ import Foundation /// 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 SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { - func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> Bool { - var error: CFError? - let result = secTrustEvaluateWithError(trust.value, &error) - if let error = error { - throw PigeonError(code: CFErrorGetDomain(error) as String, message: CFErrorCopyDescription(error) as String, details: nil) + func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, completion: @escaping (Result) -> Void) { + /// `SecTrustEvaluateWithError` should not be called on main thread, so this calls the method on a background thread. + DispatchQueue.global().async { + var error: CFError? + let result = self.secTrustEvaluateWithError(trust.value, &error) + + DispatchQueue.main.async { + if let error = error { + completion(Result.failure(PigeonError(code: CFErrorGetDomain(error) as String, message: CFErrorCopyDescription(error) as String, details: nil))) + } else { + completion(Result.success(result)) + } + } } - return result } func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? { 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 cb084612eb7..9e838592c69 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 @@ -9735,7 +9735,7 @@ class GetTrustResultResponseProxyAPITests: XCTestCase { protocol PigeonApiDelegateSecTrust { /// Evaluates trust for the specified certificate and policies. - func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> Bool + func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, completion: @escaping (Result) -> Void) /// Returns an opaque cookie containing exceptions to trust policies that will /// allow future evaluations of the current certificate to succeed. func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? @@ -9774,11 +9774,13 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { evaluateWithErrorChannel.setMessageHandler { message, reply in let args = message as! [Any?] let trustArg = args[0] as! SecTrustWrapper - do { - let result = try api.pigeonDelegate.evaluateWithError(pigeonApi: api, trust: trustArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + api.pigeonDelegate.evaluateWithError(pigeonApi: api, trust: trustArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } } } } else { @@ -9895,7 +9897,7 @@ import Foundation /// 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 SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { - func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> Bool { + func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, completion: @escaping (Result) -> Void) { return SecTrust.evaluateWithError(trust: trust) } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift index 29ac86e13f8..a69711ce75b 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift @@ -27,10 +27,22 @@ class SecTrustProxyAPITests: XCTestCase { let delegate = TestSecTrustProxyAPIDelegate() let api = PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: delegate) + let expect = expectation(description: "Wait for setCookie.") let trust = createTrust(delegate: delegate) - let value = try? api.pigeonDelegate.evaluateWithError(pigeonApi: api, trust: trust) + var resultValue: Bool? + + api.pigeonDelegate.evaluateWithError(pigeonApi: api, trust: trust) { result in + switch result { + case .success(let value): + resultValue = value + case .failure(_): + break + } + expect.fulfill() + } - XCTAssertEqual(value, true) + wait(for: [expect], timeout: 5.0) + XCTAssertEqual(resultValue, true) } func testCopyExceptions() { 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 3dd2b06a6aa..e97f1fe7528 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart @@ -1191,6 +1191,7 @@ abstract class GetTrustResultResponse extends NSObject { abstract class SecTrust extends NSObject { /// Evaluates trust for the specified certificate and policies. @static + @async bool evaluateWithError(SecTrust trust); /// Returns an opaque cookie containing exceptions to trust policies that will From 2cc5c3d692eadcc0568fe682b8bfcafb7f32847b Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 10:38:26 -0400 Subject: [PATCH 06/19] move tests for ios to darwin --- .../GetTrustResultResponseProxyAPITests.swift | 0 .../Tests}/SecCertificateProxyAPITests.swift | 0 .../Tests}/SecTrustProxyAPITests.swift | 0 .../ios/Runner.xcodeproj/project.pbxproj | 32 +++++++++---------- .../WebpagePreferencesProxyAPITests.swift | 23 ------------- 5 files changed, 16 insertions(+), 39 deletions(-) rename packages/webview_flutter/webview_flutter_wkwebview/{example/ios/RunnerTests => darwin/Tests}/GetTrustResultResponseProxyAPITests.swift (100%) rename packages/webview_flutter/webview_flutter_wkwebview/{example/ios/RunnerTests => darwin/Tests}/SecCertificateProxyAPITests.swift (100%) rename packages/webview_flutter/webview_flutter_wkwebview/{example/ios/RunnerTests => darwin/Tests}/SecTrustProxyAPITests.swift (100%) delete mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/WebpagePreferencesProxyAPITests.swift diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/GetTrustResultResponseProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/GetTrustResultResponseProxyAPITests.swift rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecCertificateProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecCertificateProxyAPITests.swift rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/SecTrustProxyAPITests.swift rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj index 8baa858a6c5..7b9f2bef87e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj @@ -40,10 +40,10 @@ 8F1488FE2D2DE27000191744 /* HTTPCookieProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1488C82D2DE27000191744 /* HTTPCookieProxyAPITests.swift */; }; 8F1488FF2D2DE27000191744 /* NavigationActionProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1488CB2D2DE27000191744 /* NavigationActionProxyAPITests.swift */; }; 8F1489012D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1489002D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift */; }; - 8FC45F712D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FC45F702D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift */; }; - 8FEC647C2DA1EC6B00C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC647B2DA1EC6800C48569 /* GetTrustResultResponseProxyAPITests.swift */; }; - 8FEC647E2DA1EE9700C48569 /* SecCertificateProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC647D2DA1EE9300C48569 /* SecCertificateProxyAPITests.swift */; }; - 8FEC64802DA1F24800C48569 /* SecTrustProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC647F2DA1F24500C48569 /* SecTrustProxyAPITests.swift */; }; + 8FEC64852DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64812DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift */; }; + 8FEC64862DA2C6DC00C48569 /* WebpagePreferencesProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64842DA2C6DC00C48569 /* WebpagePreferencesProxyAPITests.swift */; }; + 8FEC64872DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64822DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift */; }; + 8FEC64882DA2C6DC00C48569 /* SecTrustProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64832DA2C6DC00C48569 /* SecTrustProxyAPITests.swift */; }; 904EA421B6925EC8D52ABE1B /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 573E8F1472CA1578A7CBDB63 /* libPods-RunnerTests.a */; }; 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; @@ -129,10 +129,10 @@ 8F1488E12D2DE27000191744 /* WebViewProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = WebViewProxyAPITests.swift; path = ../../darwin/Tests/WebViewProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8F1489002D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponseProxyAPITests.swift; path = ../../darwin/Tests/AuthenticationChallengeResponseProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8F66D9D72D1362BE000835F9 /* RunnerTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RunnerTests-Bridging-Header.h"; sourceTree = ""; }; - 8FC45F702D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebpagePreferencesProxyAPITests.swift; sourceTree = ""; }; - 8FEC647B2DA1EC6800C48569 /* GetTrustResultResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetTrustResultResponseProxyAPITests.swift; sourceTree = ""; }; - 8FEC647D2DA1EE9300C48569 /* SecCertificateProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecCertificateProxyAPITests.swift; sourceTree = ""; }; - 8FEC647F2DA1F24500C48569 /* SecTrustProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecTrustProxyAPITests.swift; sourceTree = ""; }; + 8FEC64812DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GetTrustResultResponseProxyAPITests.swift; path = ../../darwin/Tests/GetTrustResultResponseProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; + 8FEC64822DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SecCertificateProxyAPITests.swift; path = ../../darwin/Tests/SecCertificateProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; + 8FEC64832DA2C6DC00C48569 /* SecTrustProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SecTrustProxyAPITests.swift; path = ../../darwin/Tests/SecTrustProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; + 8FEC64842DA2C6DC00C48569 /* WebpagePreferencesProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = WebpagePreferencesProxyAPITests.swift; path = ../../darwin/Tests/WebpagePreferencesProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -178,10 +178,10 @@ 68BDCAEA23C3F7CB00D9C032 /* RunnerTests */ = { isa = PBXGroup; children = ( - 8FEC647F2DA1F24500C48569 /* SecTrustProxyAPITests.swift */, - 8FEC647D2DA1EE9300C48569 /* SecCertificateProxyAPITests.swift */, - 8FEC647B2DA1EC6800C48569 /* GetTrustResultResponseProxyAPITests.swift */, - 8FC45F702D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift */, + 8FEC64812DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift */, + 8FEC64822DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift */, + 8FEC64832DA2C6DC00C48569 /* SecTrustProxyAPITests.swift */, + 8FEC64842DA2C6DC00C48569 /* WebpagePreferencesProxyAPITests.swift */, 8F1489002D2DE91C00191744 /* AuthenticationChallengeResponseProxyAPITests.swift */, 8F1488C52D2DE27000191744 /* ErrorProxyAPITests.swift */, 8F1488C62D2DE27000191744 /* FrameInfoProxyAPITests.swift */, @@ -551,11 +551,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8FEC64802DA1F24800C48569 /* SecTrustProxyAPITests.swift in Sources */, - 8FC45F712D5C0C1E004E03E8 /* WebpagePreferencesProxyAPITests.swift in Sources */, 8F1488E22D2DE27000191744 /* ScriptMessageHandlerProxyAPITests.swift in Sources */, 8F1488E32D2DE27000191744 /* TestProxyApiRegistrar.swift in Sources */, - 8FEC647C2DA1EC6B00C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */, 8F1488E42D2DE27000191744 /* URLRequestProxyAPITests.swift in Sources */, 8F1488E52D2DE27000191744 /* TestBinaryMessenger.swift in Sources */, 8F1488E62D2DE27000191744 /* WebViewProxyAPITests.swift in Sources */, @@ -569,6 +566,10 @@ 8F1488ED2D2DE27000191744 /* ErrorProxyAPITests.swift in Sources */, 8F1488EE2D2DE27000191744 /* NSObjectProxyAPITests.swift in Sources */, 8F1488EF2D2DE27000191744 /* NavigationResponseProxyAPITests.swift in Sources */, + 8FEC64852DA2C6DC00C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */, + 8FEC64862DA2C6DC00C48569 /* WebpagePreferencesProxyAPITests.swift in Sources */, + 8FEC64872DA2C6DC00C48569 /* SecCertificateProxyAPITests.swift in Sources */, + 8FEC64882DA2C6DC00C48569 /* SecTrustProxyAPITests.swift in Sources */, 8F1488F02D2DE27000191744 /* UserScriptProxyAPITests.swift in Sources */, 8F1488F12D2DE27000191744 /* URLProtectionSpaceProxyAPITests.swift in Sources */, 8F1488F22D2DE27000191744 /* WebViewConfigurationProxyAPITests.swift in Sources */, @@ -580,7 +581,6 @@ 8F1488F82D2DE27000191744 /* ScrollViewDelegateProxyAPITests.swift in Sources */, 8F1488FA2D2DE27000191744 /* FWFWebViewFlutterWKWebViewExternalAPITests.swift in Sources */, 8F1488FB2D2DE27000191744 /* UserContentControllerProxyAPITests.swift in Sources */, - 8FEC647E2DA1EE9700C48569 /* SecCertificateProxyAPITests.swift in Sources */, 8F1488FC2D2DE27000191744 /* HTTPURLResponseProxyAPITests.swift in Sources */, 8F1488FD2D2DE27000191744 /* ScrollViewProxyAPITests.swift in Sources */, 8F1488FE2D2DE27000191744 /* HTTPCookieProxyAPITests.swift in Sources */, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/WebpagePreferencesProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/WebpagePreferencesProxyAPITests.swift deleted file mode 100644 index aa11b48ad1e..00000000000 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/WebpagePreferencesProxyAPITests.swift +++ /dev/null @@ -1,23 +0,0 @@ -// 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. - -import WebKit -import XCTest - -@testable import webview_flutter_wkwebview - -class WebpagePreferencesProxyAPITests: XCTestCase { - @available(iOS 14.0, macOS 11.0, *) - @MainActor func testSetAllowsContentJavaScript() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebpagePreferences(registrar) - - let instance = WKWebpagePreferences() - let allow = true - try? api.pigeonDelegate.setAllowsContentJavaScript( - pigeonApi: api, pigeonInstance: instance, allow: allow) - - XCTAssertEqual(instance.allowsContentJavaScript, allow) - } -} From 879aecbbb6aec545a43cb005c5eda10ad1a363c5 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 10:45:20 -0400 Subject: [PATCH 07/19] fix macos build --- .../SecTrustProxyAPIDelegate.swift | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift index fbedd6853d4..3ba937f30fc 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift @@ -55,7 +55,7 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { } func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [SecCertificateWrapper]? { - if #available(iOS 15.0, *) { + if #available(iOS 15.0, macOS 12.0, *) { let array = secTrustCopyCertificateChain(trust.value) as Array? if let array = array { var certificateList: [SecCertificateWrapper] = [] @@ -100,12 +100,9 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { } // Overridable for testing. + @available(iOS 15.0, macOS 12.0, *) internal func secTrustCopyCertificateChain(_ trust: SecTrust) -> CFArray? { - if #available(iOS 15.0, *) { - return SecTrustCopyCertificateChain(trust) - } - - return nil + return SecTrustCopyCertificateChain(trust) } // Overridable for testing. From ff51a5c1286e557f42dffcd47c166a1d3f4c5463 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 14:53:17 -0400 Subject: [PATCH 08/19] update project pbxproj --- .../macos/Runner.xcodeproj/project.pbxproj | 20 ++++++++++++---- .../WebpagePreferencesProxyAPITests.swift | 23 ------------------- 2 files changed, 16 insertions(+), 27 deletions(-) delete mode 100644 packages/webview_flutter/webview_flutter_wkwebview/example/macos/RunnerTests/WebpagePreferencesProxyAPITests.swift diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj index 4fb9e94bb55..273cb13c52f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj @@ -28,7 +28,10 @@ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 6FBECA2F94D9B352000B75D7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 418FB4EA49104BADE288A967 /* Pods_RunnerTests.framework */; }; 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; - 8FC45F732D5C0C37004E03E8 /* WebpagePreferencesProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FC45F722D5C0C37004E03E8 /* WebpagePreferencesProxyAPITests.swift */; }; + 8FEC64952DA303E200C48569 /* SecCertificateProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64922DA303E200C48569 /* SecCertificateProxyAPITests.swift */; }; + 8FEC64962DA303E200C48569 /* WebpagePreferencesProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64942DA303E200C48569 /* WebpagePreferencesProxyAPITests.swift */; }; + 8FEC64972DA303E200C48569 /* SecTrustProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64932DA303E200C48569 /* SecTrustProxyAPITests.swift */; }; + 8FEC64982DA303E200C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FEC64912DA303E200C48569 /* GetTrustResultResponseProxyAPITests.swift */; }; 8FF1FEA22D37201300A5E400 /* NSObjectProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF1FE8E2D37201300A5E400 /* NSObjectProxyAPITests.swift */; }; 8FF1FEA32D37201300A5E400 /* ScrollViewProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF1FE932D37201300A5E400 /* ScrollViewProxyAPITests.swift */; }; 8FF1FEA42D37201300A5E400 /* URLAuthenticationChallengeProxyAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF1FE992D37201300A5E400 /* URLAuthenticationChallengeProxyAPITests.swift */; }; @@ -113,7 +116,10 @@ 69E635CFAEEB8242654D4BBC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 7D83F970E1160B09690C7723 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 8FC45F722D5C0C37004E03E8 /* WebpagePreferencesProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebpagePreferencesProxyAPITests.swift; sourceTree = ""; }; + 8FEC64912DA303E200C48569 /* GetTrustResultResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GetTrustResultResponseProxyAPITests.swift; path = ../../darwin/Tests/GetTrustResultResponseProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; + 8FEC64922DA303E200C48569 /* SecCertificateProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SecCertificateProxyAPITests.swift; path = ../../darwin/Tests/SecCertificateProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; + 8FEC64932DA303E200C48569 /* SecTrustProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SecTrustProxyAPITests.swift; path = ../../darwin/Tests/SecTrustProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; + 8FEC64942DA303E200C48569 /* WebpagePreferencesProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = WebpagePreferencesProxyAPITests.swift; path = ../../darwin/Tests/WebpagePreferencesProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8FF1FE842D37201300A5E400 /* AuthenticationChallengeResponseProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponseProxyAPITests.swift; path = ../../darwin/Tests/AuthenticationChallengeResponseProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8FF1FE852D37201300A5E400 /* ErrorProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ErrorProxyAPITests.swift; path = ../../darwin/Tests/ErrorProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; 8FF1FE862D37201300A5E400 /* FrameInfoProxyAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FrameInfoProxyAPITests.swift; path = ../../darwin/Tests/FrameInfoProxyAPITests.swift; sourceTree = SOURCE_ROOT; }; @@ -176,7 +182,10 @@ 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 8FC45F722D5C0C37004E03E8 /* WebpagePreferencesProxyAPITests.swift */, + 8FEC64912DA303E200C48569 /* GetTrustResultResponseProxyAPITests.swift */, + 8FEC64922DA303E200C48569 /* SecCertificateProxyAPITests.swift */, + 8FEC64932DA303E200C48569 /* SecTrustProxyAPITests.swift */, + 8FEC64942DA303E200C48569 /* WebpagePreferencesProxyAPITests.swift */, 8FF1FE842D37201300A5E400 /* AuthenticationChallengeResponseProxyAPITests.swift */, 8FF1FE852D37201300A5E400 /* ErrorProxyAPITests.swift */, 8FF1FE862D37201300A5E400 /* FrameInfoProxyAPITests.swift */, @@ -528,7 +537,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8FC45F732D5C0C37004E03E8 /* WebpagePreferencesProxyAPITests.swift in Sources */, 8FF1FEA22D37201300A5E400 /* NSObjectProxyAPITests.swift in Sources */, 8FF1FEA32D37201300A5E400 /* ScrollViewProxyAPITests.swift in Sources */, 8FF1FEA42D37201300A5E400 /* URLAuthenticationChallengeProxyAPITests.swift in Sources */, @@ -539,6 +547,10 @@ 8FF1FEA92D37201300A5E400 /* TestProxyApiRegistrar.swift in Sources */, 8FF1FEAA2D37201300A5E400 /* HTTPURLResponseProxyAPITests.swift in Sources */, 8FF1FEAB2D37201300A5E400 /* AuthenticationChallengeResponseProxyAPITests.swift in Sources */, + 8FEC64952DA303E200C48569 /* SecCertificateProxyAPITests.swift in Sources */, + 8FEC64962DA303E200C48569 /* WebpagePreferencesProxyAPITests.swift in Sources */, + 8FEC64972DA303E200C48569 /* SecTrustProxyAPITests.swift in Sources */, + 8FEC64982DA303E200C48569 /* GetTrustResultResponseProxyAPITests.swift in Sources */, 8FF1FEAC2D37201300A5E400 /* UIViewProxyAPITests.swift in Sources */, 8FF1FEAD2D37201300A5E400 /* WebViewConfigurationProxyAPITests.swift in Sources */, 8FF1FEAE2D37201300A5E400 /* NavigationActionProxyAPITests.swift in Sources */, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/RunnerTests/WebpagePreferencesProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/RunnerTests/WebpagePreferencesProxyAPITests.swift deleted file mode 100644 index aa11b48ad1e..00000000000 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/RunnerTests/WebpagePreferencesProxyAPITests.swift +++ /dev/null @@ -1,23 +0,0 @@ -// 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. - -import WebKit -import XCTest - -@testable import webview_flutter_wkwebview - -class WebpagePreferencesProxyAPITests: XCTestCase { - @available(iOS 14.0, macOS 11.0, *) - @MainActor func testSetAllowsContentJavaScript() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebpagePreferences(registrar) - - let instance = WKWebpagePreferences() - let allow = true - try? api.pigeonDelegate.setAllowsContentJavaScript( - pigeonApi: api, pigeonInstance: instance, allow: allow) - - XCTAssertEqual(instance.allowsContentJavaScript, allow) - } -} From 637d37660c99f3b36f0e4c99658825cd9da18a8b Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:39:41 -0400 Subject: [PATCH 09/19] fix tests on macos --- .../Tests/SecCertificateProxyAPITests.swift | 5 ++-- .../darwin/Tests/SecTrustProxyAPITests.swift | 5 ++-- .../darwin/Tests/TestProxyApiRegistrar.swift | 2 +- .../URLProtectionSpaceProxyAPITests.swift | 6 ++-- .../FlutterAssetManager.swift | 30 ++++++++++++++++++- .../ProxyAPIRegistrar.swift | 7 ++--- .../WebViewProxyAPIDelegate.swift | 9 ++---- .../macos/Runner.xcodeproj/project.pbxproj | 2 +- 8 files changed, 44 insertions(+), 22 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift index 6c27efb6268..1ea75da262f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift @@ -16,9 +16,8 @@ import XCTest class SecCertificateProxyAPITests: XCTestCase { func createDummyCertificate() -> SecCertificate { - let key = FlutterAssetManager().lookupKeyForAsset("assets/test_cert.der") - let url = Bundle.main.path(forResource: key, ofType: nil) - let certificateData = NSData(contentsOfFile: url!) + let url = FlutterAssetManager().urlForAsset("assets/test_cert.der")! + let certificateData = NSData(contentsOf: url) return SecCertificateCreateWithData(nil, certificateData!)! } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift index a69711ce75b..a9bd233de9e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift @@ -94,9 +94,8 @@ class SecTrustProxyAPITests: XCTestCase { class TestSecTrustProxyAPIDelegate : SecTrustProxyAPIDelegate { func createDummyCertificate() -> SecCertificate { - let key = FlutterAssetManager().lookupKeyForAsset("assets/test_cert.der") - let url = Bundle.main.path(forResource: key, ofType: nil) - let certificateData = NSData(contentsOfFile: url!) + let url = FlutterAssetManager().urlForAsset("assets/test_cert.der")! + let certificateData = NSData(contentsOf: url) return SecCertificateCreateWithData(nil, certificateData!)! } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/TestProxyApiRegistrar.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/TestProxyApiRegistrar.swift index 98142d219fd..cc9098b772a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/TestProxyApiRegistrar.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/TestProxyApiRegistrar.swift @@ -8,7 +8,7 @@ import XCTest class TestProxyApiRegistrar: ProxyAPIRegistrar { init() { - super.init(binaryMessenger: TestBinaryMessenger(), bundle: TestBundle()) + super.init(binaryMessenger: TestBinaryMessenger(), assetManager: FlutterAssetManager(bundle: TestBundle())) } override func dispatchOnMainThread( diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift index b37a83ec0f7..6a96d1c4119 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift @@ -74,9 +74,9 @@ class TestProtectionSpace: URLProtectionSpace, @unchecked Sendable { override var serverTrust: SecTrust? { if (serverTrustVal == nil) { - let key = FlutterAssetManager().lookupKeyForAsset("assets/test_cert.der") - let url = Bundle.main.path(forResource: key, ofType: nil) - let certificateData = NSData(contentsOfFile: url!) + let url = FlutterAssetManager().urlForAsset("assets/test_cert.der")! + + let certificateData = NSData(contentsOf: url) let dummyCertificate: SecCertificate! = SecCertificateCreateWithData(nil, certificateData!) var trust: SecTrust? diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift index 2c66d735a46..c8a625272a1 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift @@ -11,7 +11,35 @@ #endif open class FlutterAssetManager { - func lookupKeyForAsset(_ asset: String) -> String { + let bundle: Bundle + + init(bundle: Bundle = Bundle.main) { + self.bundle = bundle + } + + func lookupKeyForAsset(_ asset: String) -> String? { return FlutterDartProject.lookupKey(forAsset: asset) } + + func urlForAsset(_ asset: String) -> URL? { + let assetFilePath: String? = lookupKeyForAsset(asset) + + if (assetFilePath == nil) { + return nil + } + + var url: URL? = bundle.url( + forResource: (assetFilePath! as NSString).deletingPathExtension, + withExtension: (assetFilePath! as NSString).pathExtension) + +#if os(macOS) + // See https://github.com/flutter/flutter/issues/135302 + // TODO(stuartmorgan): Remove this if the asset APIs are adjusted to work better for macOS. + if (url == nil) { + url = URL(string: assetFilePath!, relativeTo: bundle.bundleURL) + } +#endif + + return url + } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift index 30985ca18c6..d3d15221020 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift @@ -16,11 +16,10 @@ import Foundation /// Implementation of `WebKitLibraryPigeonProxyApiRegistrar` that provides any additional resources needed by API implementations. open class ProxyAPIRegistrar: WebKitLibraryPigeonProxyApiRegistrar { - let assetManager = FlutterAssetManager() - let bundle: Bundle + let assetManager: FlutterAssetManager - init(binaryMessenger: FlutterBinaryMessenger, bundle: Bundle = Bundle.main) { - self.bundle = bundle + init(binaryMessenger: FlutterBinaryMessenger, assetManager: FlutterAssetManager = FlutterAssetManager()) { + self.assetManager = assetManager super.init(binaryMessenger: binaryMessenger, apiDelegate: ProxyAPIDelegate()) } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift index 8159a8a69ab..f2a5072623f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift @@ -207,18 +207,15 @@ class WebViewProxyAPIDelegate: PigeonApiDelegateWKWebView, PigeonApiDelegateUIVi throws { let registrar = pigeonApi.pigeonRegistrar as! ProxyAPIRegistrar - let assetFilePath = registrar.assetManager.lookupKeyForAsset(key) - - let url = registrar.bundle.url( - forResource: (assetFilePath as NSString).deletingPathExtension, - withExtension: (assetFilePath as NSString).pathExtension) + let url = registrar.assetManager.urlForAsset(key) if let url = url { pigeonInstance.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent()) } else { + let assetFilePath = registrar.assetManager.lookupKeyForAsset(key) throw PigeonError( code: "FWFURLParsingError", - message: "Failed to find asset with filepath: `\(assetFilePath)`.", details: nil) + message: "Failed to find asset with filepath: `\(String(describing: assetFilePath))`.", details: nil) } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj index 273cb13c52f..ddb499e5f26 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 60; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ From 5c53007e83d3f01371aa4e1734499ff0dd239a89 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:40:56 -0400 Subject: [PATCH 10/19] formatting and regen --- .../GetTrustResultResponseProxyAPITests.swift | 4 +- .../Tests/SecCertificateProxyAPITests.swift | 15 +- .../darwin/Tests/SecTrustProxyAPITests.swift | 36 +- .../darwin/Tests/TestProxyApiRegistrar.swift | 4 +- .../URLProtectionSpaceProxyAPITests.swift | 11 +- .../FlutterAssetManager.swift | 28 +- .../FrameInfoProxyAPIDelegate.swift | 2 +- ...tTrustResultResponseProxyAPIDelegate.swift | 46 +- .../ProxyAPIRegistrar.swift | 25 +- .../SecCertificateProxyAPIDelegate.swift | 12 +- .../SecTrustProxyAPIDelegate.swift | 60 +- .../SecWrappers.swift | 5 +- .../URLProtectionSpaceProxyAPIDelegate.swift | 8 +- .../WebKitLibrary.g.swift | 9399 ++++++----------- .../WebViewProxyAPIDelegate.swift | 3 +- .../lib/src/common/web_kit.g.dart | 584 +- .../webview_flutter_wkwebview/pubspec.yaml | 6 +- 17 files changed, 3733 insertions(+), 6515 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift index b221a6b70b8..8f267640e31 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift @@ -4,6 +4,8 @@ import XCTest +@testable import webview_flutter_wkwebview + #if os(iOS) import Flutter #elseif os(macOS) @@ -12,8 +14,6 @@ import XCTest #error("Unsupported platform.") #endif -@testable import webview_flutter_wkwebview - class GetTrustResultResponseProxyAPITests: XCTestCase { func testResult() { let registrar = TestProxyApiRegistrar() diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift index 1ea75da262f..7057b53e791 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecCertificateProxyAPITests.swift @@ -4,6 +4,8 @@ import XCTest +@testable import webview_flutter_wkwebview + #if os(iOS) import Flutter #elseif os(macOS) @@ -12,30 +14,29 @@ import XCTest #error("Unsupported platform.") #endif -@testable import webview_flutter_wkwebview - class SecCertificateProxyAPITests: XCTestCase { func createDummyCertificate() -> SecCertificate { let url = FlutterAssetManager().urlForAsset("assets/test_cert.der")! let certificateData = NSData(contentsOf: url) - + return SecCertificateCreateWithData(nil, certificateData!)! } - + func testCopyData() { let registrar = TestProxyApiRegistrar() let delegate = TestSecCertificateProxyAPIDelegate() let api = PigeonApiSecCertificate(pigeonRegistrar: registrar, delegate: delegate) - let value = try? api.pigeonDelegate.copyData(pigeonApi: api, certificate: SecCertificateWrapper(value: createDummyCertificate())) + let value = try? api.pigeonDelegate.copyData( + pigeonApi: api, certificate: SecCertificateWrapper(value: createDummyCertificate())) XCTAssertEqual(value?.data, delegate.data) } } -class TestSecCertificateProxyAPIDelegate : SecCertificateProxyAPIDelegate { +class TestSecCertificateProxyAPIDelegate: SecCertificateProxyAPIDelegate { let data = Data() - + override func secCertificateCopyData(_ certificate: SecCertificate) -> CFData { return data as CFData } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift index a9bd233de9e..cd029238ecf 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift @@ -4,6 +4,8 @@ import XCTest +@testable import webview_flutter_wkwebview + #if os(iOS) import Flutter #elseif os(macOS) @@ -12,16 +14,15 @@ import XCTest #error("Unsupported platform.") #endif -@testable import webview_flutter_wkwebview - class SecTrustProxyAPITests: XCTestCase { func createTrust(delegate: TestSecTrustProxyAPIDelegate) -> SecTrustWrapper { var trust: SecTrust? - SecTrustCreateWithCertificates([delegate.createDummyCertificate()] as AnyObject, SecPolicyCreateBasicX509(), &trust) - + SecTrustCreateWithCertificates( + [delegate.createDummyCertificate()] as AnyObject, SecPolicyCreateBasicX509(), &trust) + return SecTrustWrapper(value: trust!) } - + func testEvaluateWithError() { let registrar = TestProxyApiRegistrar() let delegate = TestSecTrustProxyAPIDelegate() @@ -30,7 +31,7 @@ class SecTrustProxyAPITests: XCTestCase { let expect = expectation(description: "Wait for setCookie.") let trust = createTrust(delegate: delegate) var resultValue: Bool? - + api.pigeonDelegate.evaluateWithError(pigeonApi: api, trust: trust) { result in switch result { case .success(let value): @@ -44,7 +45,7 @@ class SecTrustProxyAPITests: XCTestCase { wait(for: [expect], timeout: 5.0) XCTAssertEqual(resultValue, true) } - + func testCopyExceptions() { let registrar = TestProxyApiRegistrar() let delegate = TestSecTrustProxyAPIDelegate() @@ -55,18 +56,19 @@ class SecTrustProxyAPITests: XCTestCase { XCTAssertEqual(value?.data, Data()) } - + func testSetExceptions() { let registrar = TestProxyApiRegistrar() let delegate = TestSecTrustProxyAPIDelegate() let api = PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: delegate) let trust = createTrust(delegate: delegate) - let value = try? api.pigeonDelegate.setExceptions(pigeonApi: api, trust: trust, exceptions: FlutterStandardTypedData(bytes: Data())) + let value = try? api.pigeonDelegate.setExceptions( + pigeonApi: api, trust: trust, exceptions: FlutterStandardTypedData(bytes: Data())) XCTAssertEqual(value, false) } - + func testGetTrustResult() { let registrar = TestProxyApiRegistrar() let delegate = TestSecTrustProxyAPIDelegate() @@ -78,7 +80,7 @@ class SecTrustProxyAPITests: XCTestCase { XCTAssertEqual(value?.result, SecTrustResultType.invalid) XCTAssertEqual(value?.resultCode, -1) } - + func testCopyCertificateChain() { let registrar = TestProxyApiRegistrar() let delegate = TestSecTrustProxyAPIDelegate() @@ -92,16 +94,18 @@ class SecTrustProxyAPITests: XCTestCase { } } -class TestSecTrustProxyAPIDelegate : SecTrustProxyAPIDelegate { +class TestSecTrustProxyAPIDelegate: SecTrustProxyAPIDelegate { func createDummyCertificate() -> SecCertificate { let url = FlutterAssetManager().urlForAsset("assets/test_cert.der")! let certificateData = NSData(contentsOf: url) - + return SecCertificateCreateWithData(nil, certificateData!)! } // Overridable for testing. - override func secTrustEvaluateWithError(_ trust: SecTrust, _ error: UnsafeMutablePointer?) -> Bool { + override func secTrustEvaluateWithError( + _ trust: SecTrust, _ error: UnsafeMutablePointer? + ) -> Bool { return true } @@ -116,7 +120,9 @@ class TestSecTrustProxyAPIDelegate : SecTrustProxyAPIDelegate { } // Overridable for testing. - override func secTrustGetTrustResult(_ trust: SecTrust, _ result: UnsafeMutablePointer) -> OSStatus { + override func secTrustGetTrustResult( + _ trust: SecTrust, _ result: UnsafeMutablePointer + ) -> OSStatus { result.pointee = SecTrustResultType.invalid return -1 } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/TestProxyApiRegistrar.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/TestProxyApiRegistrar.swift index cc9098b772a..be7c1bde17d 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/TestProxyApiRegistrar.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/TestProxyApiRegistrar.swift @@ -8,7 +8,9 @@ import XCTest class TestProxyApiRegistrar: ProxyAPIRegistrar { init() { - super.init(binaryMessenger: TestBinaryMessenger(), assetManager: FlutterAssetManager(bundle: TestBundle())) + super.init( + binaryMessenger: TestBinaryMessenger(), + assetManager: FlutterAssetManager(bundle: TestBundle())) } override func dispatchOnMainThread( diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift index 6a96d1c4119..0ca297dd2f5 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/URLProtectionSpaceProxyAPITests.swift @@ -71,16 +71,17 @@ class ProtectionSpaceProxyAPITests: XCTestCase { class TestProtectionSpace: URLProtectionSpace, @unchecked Sendable { var serverTrustVal: SecTrust? - + override var serverTrust: SecTrust? { - if (serverTrustVal == nil) { + if serverTrustVal == nil { let url = FlutterAssetManager().urlForAsset("assets/test_cert.der")! - + let certificateData = NSData(contentsOf: url) let dummyCertificate: SecCertificate! = SecCertificateCreateWithData(nil, certificateData!) - + var trust: SecTrust? - SecTrustCreateWithCertificates([dummyCertificate] as AnyObject, SecPolicyCreateBasicX509(), &trust) + SecTrustCreateWithCertificates( + [dummyCertificate] as AnyObject, SecPolicyCreateBasicX509(), &trust) serverTrustVal = trust! } return serverTrustVal diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift index c8a625272a1..fdfce0a34df 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift @@ -12,34 +12,34 @@ open class FlutterAssetManager { let bundle: Bundle - + init(bundle: Bundle = Bundle.main) { self.bundle = bundle } - + func lookupKeyForAsset(_ asset: String) -> String? { return FlutterDartProject.lookupKey(forAsset: asset) } - + func urlForAsset(_ asset: String) -> URL? { let assetFilePath: String? = lookupKeyForAsset(asset) - if (assetFilePath == nil) { + if assetFilePath == nil { return nil } - + var url: URL? = bundle.url( forResource: (assetFilePath! as NSString).deletingPathExtension, withExtension: (assetFilePath! as NSString).pathExtension) - -#if os(macOS) - // See https://github.com/flutter/flutter/issues/135302 - // TODO(stuartmorgan): Remove this if the asset APIs are adjusted to work better for macOS. - if (url == nil) { - url = URL(string: assetFilePath!, relativeTo: bundle.bundleURL) - } -#endif - + + #if os(macOS) + // See https://github.com/flutter/flutter/issues/135302 + // TODO(stuartmorgan): Remove this if the asset APIs are adjusted to work better for macOS. + if url == nil { + url = URL(string: assetFilePath!, relativeTo: bundle.bundleURL) + } + #endif + return url } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift index 5fd11474f80..fe668c2c11b 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift @@ -11,7 +11,7 @@ extension WKFrameInfo { // // See https://github.com/flutter/flutter/issues/163549 and https://developer.apple.com/forums/thread/77888. var maybeRequest: URLRequest? { - return self.perform(#selector(getter:WKFrameInfo.request))?.takeUnretainedValue() + return self.perform(#selector(getter: WKFrameInfo.request))?.takeUnretainedValue() as! URLRequest? } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift index 95b1f76fedb..f6d5bd5807a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift @@ -8,31 +8,35 @@ import Foundation /// /// 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 GetTrustResultResponseProxyAPIDelegate : PigeonApiDelegateGetTrustResultResponse { - func result(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> DartSecTrustResultType { +class GetTrustResultResponseProxyAPIDelegate: PigeonApiDelegateGetTrustResultResponse { + func result(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) + throws -> DartSecTrustResultType + { switch pigeonInstance.result { - case .unspecified: - return .unspecified - case .proceed: - return .proceed - case .deny: - return .deny - case .recoverableTrustFailure: - return .recoverableTrustFailure - case .fatalTrustFailure: - return .fatalTrustFailure - case .otherError: - return .otherError - case .invalid: - return .invalid - case .confirm: - return .confirm - @unknown default: - return .unknown + case .unspecified: + return .unspecified + case .proceed: + return .proceed + case .deny: + return .deny + case .recoverableTrustFailure: + return .recoverableTrustFailure + case .fatalTrustFailure: + return .fatalTrustFailure + case .otherError: + return .otherError + case .invalid: + return .invalid + case .confirm: + return .confirm + @unknown default: + return .unknown } } - func resultCode(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> Int64 { + func resultCode( + pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse + ) throws -> Int64 { return Int64(pigeonInstance.resultCode) } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift index d3d15221020..0c451567b62 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift @@ -18,7 +18,10 @@ import Foundation open class ProxyAPIRegistrar: WebKitLibraryPigeonProxyApiRegistrar { let assetManager: FlutterAssetManager - init(binaryMessenger: FlutterBinaryMessenger, assetManager: FlutterAssetManager = FlutterAssetManager()) { + init( + binaryMessenger: FlutterBinaryMessenger, + assetManager: FlutterAssetManager = FlutterAssetManager() + ) { self.assetManager = assetManager super.init(binaryMessenger: binaryMessenger, apiDelegate: ProxyAPIDelegate()) } @@ -279,16 +282,22 @@ class ProxyAPIDelegate: WebKitLibraryPigeonProxyApiDelegate { return PigeonApiWKWebpagePreferences( pigeonRegistrar: registrar, delegate: WebpagePreferencesProxyAPIDelegate()) } - - func pigeonApiGetTrustResultResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiGetTrustResultResponse { - return PigeonApiGetTrustResultResponse(pigeonRegistrar: registrar, delegate: GetTrustResultResponseProxyAPIDelegate()) + + func pigeonApiGetTrustResultResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiGetTrustResultResponse + { + return PigeonApiGetTrustResultResponse( + pigeonRegistrar: registrar, delegate: GetTrustResultResponseProxyAPIDelegate()) } - + func pigeonApiSecTrust(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiSecTrust { return PigeonApiSecTrust(pigeonRegistrar: registrar, delegate: SecTrustProxyAPIDelegate()) } - - func pigeonApiSecCertificate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiSecCertificate { - return PigeonApiSecCertificate(pigeonRegistrar: registrar, delegate: SecCertificateProxyAPIDelegate()) + + func pigeonApiSecCertificate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiSecCertificate + { + return PigeonApiSecCertificate( + pigeonRegistrar: registrar, delegate: SecCertificateProxyAPIDelegate()) } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift index 5148a916e14..be555c01ed7 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import Foundation + #if os(iOS) import Flutter import UIKit @@ -12,18 +14,18 @@ #error("Unsupported platform.") #endif -import Foundation - /// ProxyApi implementation for `SecCertificate`. /// /// 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 SecCertificateProxyAPIDelegate : PigeonApiDelegateSecCertificate { - func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws -> FlutterStandardTypedData { +class SecCertificateProxyAPIDelegate: PigeonApiDelegateSecCertificate { + func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws + -> FlutterStandardTypedData + { let data = secCertificateCopyData(certificate.value) return FlutterStandardTypedData(bytes: data as Data) } - + // Overridable for testing. internal func secCertificateCopyData(_ certificate: SecCertificate) -> CFData { return SecCertificateCopyData(certificate) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift index 3ba937f30fc..d69be3d965d 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import Foundation + #if os(iOS) import Flutter import UIKit @@ -11,22 +13,28 @@ #else #error("Unsupported platform.") #endif -import Foundation /// ProxyApi implementation for `SecTrust`. /// /// 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 SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { - func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, completion: @escaping (Result) -> Void) { +class SecTrustProxyAPIDelegate: PigeonApiDelegateSecTrust { + func evaluateWithError( + pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, + completion: @escaping (Result) -> Void + ) { /// `SecTrustEvaluateWithError` should not be called on main thread, so this calls the method on a background thread. DispatchQueue.global().async { var error: CFError? let result = self.secTrustEvaluateWithError(trust.value, &error) - + DispatchQueue.main.async { if let error = error { - completion(Result.failure(PigeonError(code: CFErrorGetDomain(error) as String, message: CFErrorCopyDescription(error) as String, details: nil))) + completion( + Result.failure( + PigeonError( + code: CFErrorGetDomain(error) as String, + message: CFErrorCopyDescription(error) as String, details: nil))) } else { completion(Result.success(result)) } @@ -34,27 +42,35 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { } } - func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? { + func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws + -> FlutterStandardTypedData? + { let data = secTrustCopyExceptions(trust.value) if let data = data { return FlutterStandardTypedData(bytes: data as Data) } - + return nil } - func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData?) throws -> Bool { + func setExceptions( + pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData? + ) throws -> Bool { let data: CFData? = exceptions != nil ? exceptions!.data as CFData : nil return secTrustSetExceptions(trust.value, data) } - func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse { + func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws + -> GetTrustResultResponse + { var result = SecTrustResultType.invalid let status = secTrustGetTrustResult(trust.value, &result) return GetTrustResultResponse(result: result, resultCode: status) } - func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [SecCertificateWrapper]? { + func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws + -> [SecCertificateWrapper]? + { if #available(iOS 15.0, macOS 12.0, *) { let array = secTrustCopyCertificateChain(trust.value) as Array? if let array = array { @@ -75,41 +91,45 @@ class SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { return certificateList } } - + return nil } - + // Overridable for testing. - internal func secTrustEvaluateWithError(_ trust: SecTrust, _ error: UnsafeMutablePointer?) -> Bool { + internal func secTrustEvaluateWithError( + _ trust: SecTrust, _ error: UnsafeMutablePointer? + ) -> Bool { return SecTrustEvaluateWithError(trust, error) } - + // Overridable for testing. internal func secTrustCopyExceptions(_ trust: SecTrust) -> CFData? { return SecTrustCopyExceptions(trust) } - + // Overridable for testing. internal func secTrustSetExceptions(_ trust: SecTrust, _ exceptions: CFData?) -> Bool { return SecTrustSetExceptions(trust, exceptions) } - + // Overridable for testing. - internal func secTrustGetTrustResult(_ trust: SecTrust, _ result: UnsafeMutablePointer) -> OSStatus { + internal func secTrustGetTrustResult( + _ trust: SecTrust, _ result: UnsafeMutablePointer + ) -> OSStatus { return SecTrustGetTrustResult(trust, result) } - + // Overridable for testing. @available(iOS 15.0, macOS 12.0, *) internal func secTrustCopyCertificateChain(_ trust: SecTrust) -> CFArray? { return SecTrustCopyCertificateChain(trust) } - + // Overridable for testing. internal func secTrustGetCertificateCount(_ trust: SecTrust) -> CFIndex { return SecTrustGetCertificateCount(trust) } - + // Overridable for testing. internal func secTrustGetCertificateAtIndex(_ trust: SecTrust, _ ix: CFIndex) -> SecCertificate? { return SecTrustGetCertificateAtIndex(trust, ix) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift index 5c4f790d5cc..181f7c0a31a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift @@ -9,7 +9,7 @@ /// code. All instances of `SecTrust`should be replaced with this. class SecTrustWrapper { let value: SecTrust - + init(value: SecTrust) { self.value = value } @@ -22,9 +22,8 @@ class SecTrustWrapper { /// code. All instances of `SecCertificate`should be replaced with this. class SecCertificateWrapper { let value: SecCertificate - + init(value: SecCertificate) { self.value = value } } - diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift index 289065f00ba..03e5dadcced 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift @@ -32,12 +32,14 @@ class URLProtectionSpaceProxyAPIDelegate: PigeonApiDelegateURLProtectionSpace { ) throws -> String? { return pigeonInstance.authenticationMethod } - - func getServerTrust(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> SecTrustWrapper? { + + func getServerTrust(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) + throws -> SecTrustWrapper? + { if let serverTrust = pigeonInstance.serverTrust { return SecTrustWrapper(value: serverTrust) } - + return nil } } 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 9e838592c69..a4615449a35 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 @@ -6,8 +6,9 @@ import Foundation import WebKit + #if !os(macOS) -import UIKit + import UIKit #endif #if os(iOS) @@ -63,7 +64,9 @@ private func wrapError(_ error: Any) -> [Any?] { } private func createConnectionError(withChannelName channelName: String) -> PigeonError { - return PigeonError(code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", details: "") + return PigeonError( + code: "channel-error", message: "Unable to establish connection on channel: '\(channelName)'.", + details: "") } private func isNullish(_ value: Any?) -> Bool { @@ -80,7 +83,6 @@ protocol WebKitLibraryPigeonInternalFinalizerDelegate: AnyObject { func onDeinit(identifier: Int64) } - // Attaches to an object to receive a callback when the object is deallocated. internal final class WebKitLibraryPigeonInternalFinalizer { private static let associatedObjectKey = malloc(1)! @@ -96,7 +98,8 @@ internal final class WebKitLibraryPigeonInternalFinalizer { } internal static func attach( - to instance: AnyObject, identifier: Int64, delegate: WebKitLibraryPigeonInternalFinalizerDelegate + to instance: AnyObject, identifier: Int64, + delegate: WebKitLibraryPigeonInternalFinalizerDelegate ) { let finalizer = WebKitLibraryPigeonInternalFinalizer(identifier: identifier, delegate: delegate) objc_setAssociatedObject(instance, associatedObjectKey, finalizer, .OBJC_ASSOCIATION_RETAIN) @@ -111,7 +114,6 @@ internal final class WebKitLibraryPigeonInternalFinalizer { } } - /// Maintains instances used to communicate with the corresponding objects in Dart. /// /// Objects stored in this container are represented by an object in Dart that is also stored in @@ -215,7 +217,8 @@ final class WebKitLibraryPigeonInstanceManager { identifiers.setObject(NSNumber(value: identifier), forKey: instance) weakInstances.setObject(instance, forKey: NSNumber(value: identifier)) strongInstances.setObject(instance, forKey: NSNumber(value: identifier)) - WebKitLibraryPigeonInternalFinalizer.attach(to: instance, identifier: identifier, delegate: finalizerDelegate) + WebKitLibraryPigeonInternalFinalizer.attach( + to: instance, identifier: identifier, delegate: finalizerDelegate) } /// Retrieves the identifier paired with an instance. @@ -292,7 +295,6 @@ final class WebKitLibraryPigeonInstanceManager { } } - private class WebKitLibraryPigeonInstanceManagerApi { /// The codec used for serializing messages. var codec: FlutterStandardMessageCodec { WebKitLibraryPigeonCodec.shared } @@ -305,9 +307,14 @@ private class WebKitLibraryPigeonInstanceManagerApi { } /// Sets up an instance of `WebKitLibraryPigeonInstanceManagerApi` to handle messages through the `binaryMessenger`. - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, instanceManager: WebKitLibraryPigeonInstanceManager?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, instanceManager: WebKitLibraryPigeonInstanceManager? + ) { let codec = WebKitLibraryPigeonCodec.shared - let removeStrongReferenceChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.removeStrongReference", binaryMessenger: binaryMessenger, codec: codec) + let removeStrongReferenceChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.removeStrongReference", + binaryMessenger: binaryMessenger, codec: codec) if let instanceManager = instanceManager { removeStrongReferenceChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -322,7 +329,9 @@ private class WebKitLibraryPigeonInstanceManagerApi { } else { removeStrongReferenceChannel.setMessageHandler(nil) } - let clearChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.clear", binaryMessenger: binaryMessenger, codec: codec) + let clearChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.clear", + binaryMessenger: binaryMessenger, codec: codec) if let instanceManager = instanceManager { clearChannel.setMessageHandler { _, reply in do { @@ -338,9 +347,13 @@ private class WebKitLibraryPigeonInstanceManagerApi { } /// Sends a message to the Dart `InstanceManager` to remove the strong reference of the instance associated with `identifier`. - func removeStrongReference(identifier identifierArg: Int64, completion: @escaping (Result) -> Void) { - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.removeStrongReference" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + func removeStrongReference( + identifier identifierArg: Int64, completion: @escaping (Result) -> Void + ) { + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.PigeonInternalInstanceManager.removeStrongReference" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([identifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -363,111 +376,141 @@ protocol WebKitLibraryPigeonProxyApiDelegate { func pigeonApiURLRequest(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLRequest /// An implementation of [PigeonApiHTTPURLResponse] used to add a new Dart instance of /// `HTTPURLResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiHTTPURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiHTTPURLResponse + func pigeonApiHTTPURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiHTTPURLResponse /// An implementation of [PigeonApiURLResponse] used to add a new Dart instance of /// `URLResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLResponse + func pigeonApiURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiURLResponse /// An implementation of [PigeonApiWKUserScript] used to add a new Dart instance of /// `WKUserScript` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKUserScript(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKUserScript + func pigeonApiWKUserScript(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKUserScript /// An implementation of [PigeonApiWKNavigationAction] used to add a new Dart instance of /// `WKNavigationAction` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKNavigationAction(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKNavigationAction + func pigeonApiWKNavigationAction(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKNavigationAction /// An implementation of [PigeonApiWKNavigationResponse] used to add a new Dart instance of /// `WKNavigationResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKNavigationResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKNavigationResponse + func pigeonApiWKNavigationResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKNavigationResponse /// An implementation of [PigeonApiWKFrameInfo] used to add a new Dart instance of /// `WKFrameInfo` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKFrameInfo(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKFrameInfo + func pigeonApiWKFrameInfo(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKFrameInfo /// An implementation of [PigeonApiNSError] used to add a new Dart instance of /// `NSError` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiNSError(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiNSError /// An implementation of [PigeonApiWKScriptMessage] used to add a new Dart instance of /// `WKScriptMessage` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKScriptMessage(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKScriptMessage + func pigeonApiWKScriptMessage(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKScriptMessage /// An implementation of [PigeonApiWKSecurityOrigin] used to add a new Dart instance of /// `WKSecurityOrigin` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKSecurityOrigin(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKSecurityOrigin + func pigeonApiWKSecurityOrigin(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKSecurityOrigin /// An implementation of [PigeonApiHTTPCookie] used to add a new Dart instance of /// `HTTPCookie` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiHTTPCookie(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiHTTPCookie /// An implementation of [PigeonApiAuthenticationChallengeResponse] used to add a new Dart instance of /// `AuthenticationChallengeResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiAuthenticationChallengeResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiAuthenticationChallengeResponse + func pigeonApiAuthenticationChallengeResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiAuthenticationChallengeResponse /// An implementation of [PigeonApiWKWebsiteDataStore] used to add a new Dart instance of /// `WKWebsiteDataStore` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKWebsiteDataStore(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebsiteDataStore + func pigeonApiWKWebsiteDataStore(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKWebsiteDataStore /// An implementation of [PigeonApiUIView] used to add a new Dart instance of /// `UIView` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiUIView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiUIView /// An implementation of [PigeonApiUIScrollView] used to add a new Dart instance of /// `UIScrollView` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiUIScrollView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiUIScrollView + func pigeonApiUIScrollView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiUIScrollView /// An implementation of [PigeonApiWKWebViewConfiguration] used to add a new Dart instance of /// `WKWebViewConfiguration` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKWebViewConfiguration(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebViewConfiguration + func pigeonApiWKWebViewConfiguration(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKWebViewConfiguration /// An implementation of [PigeonApiWKUserContentController] used to add a new Dart instance of /// `WKUserContentController` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKUserContentController(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKUserContentController + func pigeonApiWKUserContentController(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKUserContentController /// An implementation of [PigeonApiWKPreferences] used to add a new Dart instance of /// `WKPreferences` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKPreferences(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKPreferences + func pigeonApiWKPreferences(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKPreferences /// An implementation of [PigeonApiWKScriptMessageHandler] used to add a new Dart instance of /// `WKScriptMessageHandler` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKScriptMessageHandler(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKScriptMessageHandler + func pigeonApiWKScriptMessageHandler(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKScriptMessageHandler /// An implementation of [PigeonApiWKNavigationDelegate] used to add a new Dart instance of /// `WKNavigationDelegate` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKNavigationDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKNavigationDelegate + func pigeonApiWKNavigationDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKNavigationDelegate /// An implementation of [PigeonApiNSObject] used to add a new Dart instance of /// `NSObject` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiNSObject(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiNSObject /// An implementation of [PigeonApiUIViewWKWebView] used to add a new Dart instance of /// `UIViewWKWebView` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiUIViewWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiUIViewWKWebView + func pigeonApiUIViewWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiUIViewWKWebView /// An implementation of [PigeonApiNSViewWKWebView] used to add a new Dart instance of /// `NSViewWKWebView` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiNSViewWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiNSViewWKWebView + func pigeonApiNSViewWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiNSViewWKWebView /// An implementation of [PigeonApiWKWebView] used to add a new Dart instance of /// `WKWebView` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebView /// An implementation of [PigeonApiWKUIDelegate] used to add a new Dart instance of /// `WKUIDelegate` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKUIDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKUIDelegate + func pigeonApiWKUIDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKUIDelegate /// An implementation of [PigeonApiWKHTTPCookieStore] used to add a new Dart instance of /// `WKHTTPCookieStore` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKHTTPCookieStore(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKHTTPCookieStore + func pigeonApiWKHTTPCookieStore(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKHTTPCookieStore /// An implementation of [PigeonApiUIScrollViewDelegate] used to add a new Dart instance of /// `UIScrollViewDelegate` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiUIScrollViewDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiUIScrollViewDelegate + func pigeonApiUIScrollViewDelegate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiUIScrollViewDelegate /// An implementation of [PigeonApiURLCredential] used to add a new Dart instance of /// `URLCredential` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiURLCredential(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLCredential + func pigeonApiURLCredential(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiURLCredential /// An implementation of [PigeonApiURLProtectionSpace] used to add a new Dart instance of /// `URLProtectionSpace` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiURLProtectionSpace(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLProtectionSpace + func pigeonApiURLProtectionSpace(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiURLProtectionSpace /// An implementation of [PigeonApiURLAuthenticationChallenge] used to add a new Dart instance of /// `URLAuthenticationChallenge` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiURLAuthenticationChallenge(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLAuthenticationChallenge + func pigeonApiURLAuthenticationChallenge(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiURLAuthenticationChallenge /// An implementation of [PigeonApiURL] used to add a new Dart instance of /// `URL` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiURL(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURL /// An implementation of [PigeonApiWKWebpagePreferences] used to add a new Dart instance of /// `WKWebpagePreferences` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiWKWebpagePreferences(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebpagePreferences + func pigeonApiWKWebpagePreferences(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiWKWebpagePreferences /// An implementation of [PigeonApiGetTrustResultResponse] used to add a new Dart instance of /// `GetTrustResultResponse` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiGetTrustResultResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiGetTrustResultResponse + func pigeonApiGetTrustResultResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiGetTrustResultResponse /// An implementation of [PigeonApiSecTrust] used to add a new Dart instance of /// `SecTrust` to the Dart `InstanceManager` and make calls to Dart. func pigeonApiSecTrust(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiSecTrust /// An implementation of [PigeonApiSecCertificate] used to add a new Dart instance of /// `SecCertificate` to the Dart `InstanceManager` and make calls to Dart. - func pigeonApiSecCertificate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiSecCertificate + func pigeonApiSecCertificate(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiSecCertificate } extension WebKitLibraryPigeonProxyApiDelegate { - func pigeonApiURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiURLResponse { - return PigeonApiURLResponse(pigeonRegistrar: registrar, delegate: PigeonApiDelegateURLResponse()) + func pigeonApiURLResponse(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) + -> PigeonApiURLResponse + { + return PigeonApiURLResponse( + pigeonRegistrar: registrar, delegate: PigeonApiDelegateURLResponse()) } func pigeonApiWKWebView(_ registrar: WebKitLibraryPigeonProxyApiRegistrar) -> PigeonApiWKWebView { return PigeonApiWKWebView(pigeonRegistrar: registrar, delegate: PigeonApiDelegateWKWebView()) @@ -512,43 +555,72 @@ open class WebKitLibraryPigeonProxyApiRegistrar { } func setUp() { - WebKitLibraryPigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger: binaryMessenger, instanceManager: instanceManager) - PigeonApiURLRequest.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLRequest(self)) - PigeonApiWKUserScript.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUserScript(self)) - PigeonApiHTTPCookie.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiHTTPCookie(self)) - PigeonApiAuthenticationChallengeResponse.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiAuthenticationChallengeResponse(self)) - PigeonApiWKWebsiteDataStore.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebsiteDataStore(self)) - PigeonApiUIView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIView(self)) - PigeonApiUIScrollView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIScrollView(self)) - PigeonApiWKWebViewConfiguration.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebViewConfiguration(self)) - PigeonApiWKUserContentController.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUserContentController(self)) - PigeonApiWKPreferences.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKPreferences(self)) - PigeonApiWKScriptMessageHandler.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKScriptMessageHandler(self)) - PigeonApiWKNavigationDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKNavigationDelegate(self)) - PigeonApiNSObject.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiNSObject(self)) - PigeonApiUIViewWKWebView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIViewWKWebView(self)) - PigeonApiNSViewWKWebView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiNSViewWKWebView(self)) - PigeonApiWKUIDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUIDelegate(self)) - PigeonApiWKHTTPCookieStore.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKHTTPCookieStore(self)) - PigeonApiUIScrollViewDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIScrollViewDelegate(self)) - PigeonApiURLCredential.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLCredential(self)) - PigeonApiURLAuthenticationChallenge.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLAuthenticationChallenge(self)) - PigeonApiURL.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURL(self)) - PigeonApiWKWebpagePreferences.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebpagePreferences(self)) - PigeonApiSecTrust.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiSecTrust(self)) - PigeonApiSecCertificate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiSecCertificate(self)) + WebKitLibraryPigeonInstanceManagerApi.setUpMessageHandlers( + binaryMessenger: binaryMessenger, instanceManager: instanceManager) + PigeonApiURLRequest.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLRequest(self)) + PigeonApiWKUserScript.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUserScript(self)) + PigeonApiHTTPCookie.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiHTTPCookie(self)) + PigeonApiAuthenticationChallengeResponse.setUpMessageHandlers( + binaryMessenger: binaryMessenger, + api: apiDelegate.pigeonApiAuthenticationChallengeResponse(self)) + PigeonApiWKWebsiteDataStore.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebsiteDataStore(self)) + PigeonApiUIView.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIView(self)) + PigeonApiUIScrollView.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIScrollView(self)) + PigeonApiWKWebViewConfiguration.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebViewConfiguration(self)) + PigeonApiWKUserContentController.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUserContentController(self)) + PigeonApiWKPreferences.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKPreferences(self)) + PigeonApiWKScriptMessageHandler.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKScriptMessageHandler(self)) + PigeonApiWKNavigationDelegate.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKNavigationDelegate(self)) + PigeonApiNSObject.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiNSObject(self)) + PigeonApiUIViewWKWebView.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIViewWKWebView(self)) + PigeonApiNSViewWKWebView.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiNSViewWKWebView(self)) + PigeonApiWKUIDelegate.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKUIDelegate(self)) + PigeonApiWKHTTPCookieStore.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKHTTPCookieStore(self)) + PigeonApiUIScrollViewDelegate.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiUIScrollViewDelegate(self)) + PigeonApiURLCredential.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLCredential(self)) + PigeonApiURLAuthenticationChallenge.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURLAuthenticationChallenge(self)) + PigeonApiURL.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiURL(self)) + PigeonApiWKWebpagePreferences.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiWKWebpagePreferences(self)) + PigeonApiSecTrust.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiSecTrust(self)) + PigeonApiSecCertificate.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: apiDelegate.pigeonApiSecCertificate(self)) } func tearDown() { - WebKitLibraryPigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger: binaryMessenger, instanceManager: nil) + WebKitLibraryPigeonInstanceManagerApi.setUpMessageHandlers( + binaryMessenger: binaryMessenger, instanceManager: nil) PigeonApiURLRequest.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKUserScript.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiHTTPCookie.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) - PigeonApiAuthenticationChallengeResponse.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) + PigeonApiAuthenticationChallengeResponse.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: nil) PigeonApiWKWebsiteDataStore.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiUIView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiUIScrollView.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKWebViewConfiguration.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) - PigeonApiWKUserContentController.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) + PigeonApiWKUserContentController.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: nil) PigeonApiWKPreferences.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKScriptMessageHandler.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKNavigationDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) @@ -559,7 +631,8 @@ open class WebKitLibraryPigeonProxyApiRegistrar { PigeonApiWKHTTPCookieStore.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiUIScrollViewDelegate.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiURLCredential.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) - PigeonApiURLAuthenticationChallenge.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) + PigeonApiURLAuthenticationChallenge.setUpMessageHandlers( + binaryMessenger: binaryMessenger, api: nil) PigeonApiURL.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiWKWebpagePreferences.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) PigeonApiSecTrust.setUpMessageHandlers(binaryMessenger: binaryMessenger, api: nil) @@ -602,252 +675,272 @@ private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStand } override func writeValue(_ value: Any) { - if value is [Any] || value is Bool || value is Data || value is [AnyHashable: Any] || value is Double || value is FlutterStandardTypedData || value is Int64 || value is String || value is KeyValueObservingOptions || value is KeyValueChange || value is KeyValueChangeKey || value is UserScriptInjectionTime || value is AudiovisualMediaType || value is WebsiteDataType || value is NavigationActionPolicy || value is NavigationResponsePolicy || value is HttpCookiePropertyKey || value is NavigationType || value is PermissionDecision || value is MediaCaptureType || value is UrlSessionAuthChallengeDisposition || value is UrlCredentialPersistence || value is DartSecTrustResultType { + if value is [Any] || value is Bool || value is Data || value is [AnyHashable: Any] + || value is Double || value is FlutterStandardTypedData || value is Int64 || value is String + || value is KeyValueObservingOptions || value is KeyValueChange + || value is KeyValueChangeKey || value is UserScriptInjectionTime + || value is AudiovisualMediaType || value is WebsiteDataType + || value is NavigationActionPolicy || value is NavigationResponsePolicy + || value is HttpCookiePropertyKey || value is NavigationType || value is PermissionDecision + || value is MediaCaptureType || value is UrlSessionAuthChallengeDisposition + || value is UrlCredentialPersistence || value is DartSecTrustResultType + { super.writeValue(value) return } - if let instance = value as? URLRequestWrapper { pigeonRegistrar.apiDelegate.pigeonApiURLRequest(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? HTTPURLResponse { pigeonRegistrar.apiDelegate.pigeonApiHTTPURLResponse(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? URLResponse { pigeonRegistrar.apiDelegate.pigeonApiURLResponse(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKUserScript { pigeonRegistrar.apiDelegate.pigeonApiWKUserScript(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKNavigationAction { pigeonRegistrar.apiDelegate.pigeonApiWKNavigationAction(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKNavigationResponse { - pigeonRegistrar.apiDelegate.pigeonApiWKNavigationResponse(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKNavigationResponse(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKFrameInfo { pigeonRegistrar.apiDelegate.pigeonApiWKFrameInfo(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? NSError { pigeonRegistrar.apiDelegate.pigeonApiNSError(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKScriptMessage { pigeonRegistrar.apiDelegate.pigeonApiWKScriptMessage(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKSecurityOrigin { pigeonRegistrar.apiDelegate.pigeonApiWKSecurityOrigin(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? HTTPCookie { pigeonRegistrar.apiDelegate.pigeonApiHTTPCookie(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? AuthenticationChallengeResponse { - pigeonRegistrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKWebsiteDataStore { pigeonRegistrar.apiDelegate.pigeonApiWKWebsiteDataStore(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } #if !os(macOS) - if let instance = value as? UIScrollView { - pigeonRegistrar.apiDelegate.pigeonApiUIScrollView(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) - return - } + if let instance = value as? UIScrollView { + pigeonRegistrar.apiDelegate.pigeonApiUIScrollView(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) + return + } #endif if let instance = value as? WKWebViewConfiguration { - pigeonRegistrar.apiDelegate.pigeonApiWKWebViewConfiguration(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKWebViewConfiguration(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKUserContentController { - pigeonRegistrar.apiDelegate.pigeonApiWKUserContentController(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKUserContentController(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKPreferences { pigeonRegistrar.apiDelegate.pigeonApiWKPreferences(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKScriptMessageHandler { - pigeonRegistrar.apiDelegate.pigeonApiWKScriptMessageHandler(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKScriptMessageHandler(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKNavigationDelegate { - pigeonRegistrar.apiDelegate.pigeonApiWKNavigationDelegate(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKNavigationDelegate(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } #if !os(macOS) - if let instance = value as? WKWebView { - pigeonRegistrar.apiDelegate.pigeonApiUIViewWKWebView(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) - return - } + if let instance = value as? WKWebView { + pigeonRegistrar.apiDelegate.pigeonApiUIViewWKWebView(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) + return + } #endif #if !os(macOS) - if let instance = value as? UIView { - pigeonRegistrar.apiDelegate.pigeonApiUIView(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) - return - } + if let instance = value as? UIView { + pigeonRegistrar.apiDelegate.pigeonApiUIView(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) + return + } #endif #if !os(iOS) - if let instance = value as? WKWebView { - pigeonRegistrar.apiDelegate.pigeonApiNSViewWKWebView(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) - return - } + if let instance = value as? WKWebView { + pigeonRegistrar.apiDelegate.pigeonApiNSViewWKWebView(pigeonRegistrar).pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) + return + } #endif if let instance = value as? WKWebView { @@ -856,42 +949,45 @@ private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStand ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKUIDelegate { pigeonRegistrar.apiDelegate.pigeonApiWKUIDelegate(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? WKHTTPCookieStore { pigeonRegistrar.apiDelegate.pigeonApiWKHTTPCookieStore(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } #if !os(macOS) - if let instance = value as? UIScrollViewDelegate { - pigeonRegistrar.apiDelegate.pigeonApiUIScrollViewDelegate(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } - super.writeByte(128) - super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) - return - } + if let instance = value as? UIScrollViewDelegate { + pigeonRegistrar.apiDelegate.pigeonApiUIScrollViewDelegate(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } + super.writeByte(128) + super.writeValue( + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) + return + } #endif if let instance = value as? URLCredential { @@ -900,100 +996,104 @@ private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStand ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? URLProtectionSpace { pigeonRegistrar.apiDelegate.pigeonApiURLProtectionSpace(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? URLAuthenticationChallenge { - pigeonRegistrar.apiDelegate.pigeonApiURLAuthenticationChallenge(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiURLAuthenticationChallenge(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? URL { pigeonRegistrar.apiDelegate.pigeonApiURL(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if #available(iOS 13.0.0, macOS 10.15.0, *), let instance = value as? WKWebpagePreferences { - pigeonRegistrar.apiDelegate.pigeonApiWKWebpagePreferences(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiWKWebpagePreferences(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? GetTrustResultResponse { - pigeonRegistrar.apiDelegate.pigeonApiGetTrustResultResponse(pigeonRegistrar).pigeonNewInstance( - pigeonInstance: instance - ) { _ in } + pigeonRegistrar.apiDelegate.pigeonApiGetTrustResultResponse(pigeonRegistrar) + .pigeonNewInstance( + pigeonInstance: instance + ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? SecTrustWrapper { pigeonRegistrar.apiDelegate.pigeonApiSecTrust(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? SecCertificateWrapper { pigeonRegistrar.apiDelegate.pigeonApiSecCertificate(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - if let instance = value as? NSObject { pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar).pigeonNewInstance( pigeonInstance: instance ) { _ in } super.writeByte(128) super.writeValue( - pigeonRegistrar.instanceManager.identifierWithStrongReference(forInstance: instance as AnyObject)!) + pigeonRegistrar.instanceManager.identifierWithStrongReference( + forInstance: instance as AnyObject)!) return } - - if let instance = value as AnyObject?, pigeonRegistrar.instanceManager.containsInstance(instance) + if let instance = value as AnyObject?, + pigeonRegistrar.instanceManager.containsInstance(instance) { super.writeByte(128) super.writeValue( @@ -1011,11 +1111,13 @@ private class WebKitLibraryPigeonInternalProxyApiCodecReaderWriter: FlutterStand } override func reader(with data: Data) -> FlutterStandardReader { - return WebKitLibraryPigeonInternalProxyApiCodecReader(data: data, pigeonRegistrar: pigeonRegistrar) + return WebKitLibraryPigeonInternalProxyApiCodecReader( + data: data, pigeonRegistrar: pigeonRegistrar) } override func writer(with data: NSMutableData) -> FlutterStandardWriter { - return WebKitLibraryPigeonInternalProxyApiCodecWriter(data: data, pigeonRegistrar: pigeonRegistrar) + return WebKitLibraryPigeonInternalProxyApiCodecWriter( + data: data, pigeonRegistrar: pigeonRegistrar) } } @@ -1476,27 +1578,36 @@ class WebKitLibraryPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable } protocol PigeonApiDelegateURLRequest { - func pigeonDefaultConstructor(pigeonApi: PigeonApiURLRequest, url: String) throws -> URLRequestWrapper + func pigeonDefaultConstructor(pigeonApi: PigeonApiURLRequest, url: String) throws + -> URLRequestWrapper /// The URL being requested. func getUrl(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> String? /// The HTTP request method. - func setHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, method: String?) throws + func setHttpMethod( + pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, method: String?) throws /// The HTTP request method. - func getHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> String? + func getHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws + -> String? /// The request body. - func setHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, body: FlutterStandardTypedData?) throws + func setHttpBody( + pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, + body: FlutterStandardTypedData?) throws /// The request body. - func getHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> FlutterStandardTypedData? + func getHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws + -> FlutterStandardTypedData? /// A dictionary containing all of the HTTP header fields for a request. - func setAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, fields: [String: String]?) throws + func setAllHttpHeaderFields( + pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, fields: [String: String]?) + throws /// A dictionary containing all of the HTTP header fields for a request. - func getAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> [String: String]? + func getAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) + throws -> [String: String]? } protocol PigeonApiProtocolURLRequest { } -final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { +final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateURLRequest ///An implementation of [NSObject] used to access callback methods @@ -1504,17 +1615,23 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLRequest) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLRequest) + { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLRequest?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLRequest? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -1522,8 +1639,8 @@ final class PigeonApiURLRequest: PigeonApiProtocolURLRequest { let urlArg = args[1] as! String do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( -try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, url: urlArg), -withIdentifier: pigeonIdentifierArg) + try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, url: urlArg), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1532,13 +1649,16 @@ withIdentifier: pigeonIdentifierArg) } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } - let getUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getUrl", binaryMessenger: binaryMessenger, codec: codec) + let getUrlChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getUrl", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getUrlChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper do { - let result = try api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getUrl( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -1547,14 +1667,17 @@ withIdentifier: pigeonIdentifierArg) } else { getUrlChannel.setMessageHandler(nil) } - let setHttpMethodChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setHttpMethod", binaryMessenger: binaryMessenger, codec: codec) + let setHttpMethodChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setHttpMethod", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { setHttpMethodChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper let methodArg: String? = nilOrValue(args[1]) do { - try api.pigeonDelegate.setHttpMethod(pigeonApi: api, pigeonInstance: pigeonInstanceArg, method: methodArg) + try api.pigeonDelegate.setHttpMethod( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, method: methodArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1563,13 +1686,16 @@ withIdentifier: pigeonIdentifierArg) } else { setHttpMethodChannel.setMessageHandler(nil) } - let getHttpMethodChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getHttpMethod", binaryMessenger: binaryMessenger, codec: codec) + let getHttpMethodChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getHttpMethod", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getHttpMethodChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper do { - let result = try api.pigeonDelegate.getHttpMethod(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getHttpMethod( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -1578,14 +1704,17 @@ withIdentifier: pigeonIdentifierArg) } else { getHttpMethodChannel.setMessageHandler(nil) } - let setHttpBodyChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setHttpBody", binaryMessenger: binaryMessenger, codec: codec) + let setHttpBodyChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setHttpBody", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { setHttpBodyChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper let bodyArg: FlutterStandardTypedData? = nilOrValue(args[1]) do { - try api.pigeonDelegate.setHttpBody(pigeonApi: api, pigeonInstance: pigeonInstanceArg, body: bodyArg) + try api.pigeonDelegate.setHttpBody( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, body: bodyArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1594,13 +1723,16 @@ withIdentifier: pigeonIdentifierArg) } else { setHttpBodyChannel.setMessageHandler(nil) } - let getHttpBodyChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getHttpBody", binaryMessenger: binaryMessenger, codec: codec) + let getHttpBodyChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getHttpBody", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getHttpBodyChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper do { - let result = try api.pigeonDelegate.getHttpBody(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getHttpBody( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -1609,14 +1741,17 @@ withIdentifier: pigeonIdentifierArg) } else { getHttpBodyChannel.setMessageHandler(nil) } - let setAllHttpHeaderFieldsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setAllHttpHeaderFields", binaryMessenger: binaryMessenger, codec: codec) + let setAllHttpHeaderFieldsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.setAllHttpHeaderFields", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { setAllHttpHeaderFieldsChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper let fieldsArg: [String: String]? = nilOrValue(args[1]) do { - try api.pigeonDelegate.setAllHttpHeaderFields(pigeonApi: api, pigeonInstance: pigeonInstanceArg, fields: fieldsArg) + try api.pigeonDelegate.setAllHttpHeaderFields( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, fields: fieldsArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -1625,13 +1760,16 @@ withIdentifier: pigeonIdentifierArg) } else { setAllHttpHeaderFieldsChannel.setMessageHandler(nil) } - let getAllHttpHeaderFieldsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getAllHttpHeaderFields", binaryMessenger: binaryMessenger, codec: codec) + let getAllHttpHeaderFieldsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.getAllHttpHeaderFields", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getAllHttpHeaderFieldsChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLRequestWrapper do { - let result = try api.pigeonDelegate.getAllHttpHeaderFields(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getAllHttpHeaderFields( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -1643,21 +1781,26 @@ withIdentifier: pigeonIdentifierArg) } ///Creates a Dart instance of URLRequest and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: URLRequestWrapper, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: URLRequestWrapper, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.URLRequest.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -1675,197 +1818,16 @@ withIdentifier: pigeonIdentifierArg) } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `URLRequest`. -/// -/// 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 RequestProxyAPIDelegate : PigeonApiDelegateURLRequest { - func pigeonDefaultConstructor(pigeonApi: PigeonApiURLRequest, url: String) throws -> URLRequestWrapper { - return URLRequest(,url: url) - } - - func getUrl(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> String? { - return pigeonInstance.url - } - - func setHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, method: String?) throws { - pigeonInstance.httpMethod = method: method - } - - func getHttpMethod(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> String? { - return pigeonInstance.httpMethod - } - - func setHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, body: FlutterStandardTypedData?) throws { - pigeonInstance.httpBody = body: body - } - - func getHttpBody(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> FlutterStandardTypedData? { - return pigeonInstance.httpBody - } - - func setAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper, fields: [String: String]?) throws { - pigeonInstance.allHttpHeaderFields = fields: fields - } - - func getAllHttpHeaderFields(pigeonApi: PigeonApiURLRequest, pigeonInstance: URLRequestWrapper) throws -> [String: String]? { - return pigeonInstance.allHttpHeaderFields - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class RequestProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, url: "myString") - XCTAssertNotNil(instance) - } - - func testGetUrl() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) - - let instance = TestRequest() - let value = api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getUrlCalled) - XCTAssertEqual(value, instance.getUrl()) - } - - func testSetHttpMethod() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) - - let instance = TestRequest() - let method = "myString" - api.pigeonDelegate.setHttpMethod(pigeonApi: api, pigeonInstance: instance, method: method) - - XCTAssertEqual(instance.setHttpMethodArgs, [method]) - } - - func testGetHttpMethod() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) - - let instance = TestRequest() - let value = api.pigeonDelegate.getHttpMethod(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getHttpMethodCalled) - XCTAssertEqual(value, instance.getHttpMethod()) - } - - func testSetHttpBody() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) - - let instance = TestRequest() - let body = byteArrayOf(0xA1.toByte()) - api.pigeonDelegate.setHttpBody(pigeonApi: api, pigeonInstance: instance, body: body) - - XCTAssertEqual(instance.setHttpBodyArgs, [body]) - } - - func testGetHttpBody() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) - - let instance = TestRequest() - let value = api.pigeonDelegate.getHttpBody(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getHttpBodyCalled) - XCTAssertEqual(value, instance.getHttpBody()) - } - - func testSetAllHttpHeaderFields() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) - - let instance = TestRequest() - let fields = ["myString": "myString"] - api.pigeonDelegate.setAllHttpHeaderFields(pigeonApi: api, pigeonInstance: instance, fields: fields) - - XCTAssertEqual(instance.setAllHttpHeaderFieldsArgs, [fields]) - } - - func testGetAllHttpHeaderFields() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLRequest(registrar) - - let instance = TestRequest() - let value = api.pigeonDelegate.getAllHttpHeaderFields(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getAllHttpHeaderFieldsCalled) - XCTAssertEqual(value, instance.getAllHttpHeaderFields()) - } - -} -class TestRequest: URLRequest { - var getUrlCalled = false - var setHttpMethodArgs: [AnyHashable?]? = nil - var getHttpMethodCalled = false - var setHttpBodyArgs: [AnyHashable?]? = nil - var getHttpBodyCalled = false - var setAllHttpHeaderFieldsArgs: [AnyHashable?]? = nil - var getAllHttpHeaderFieldsCalled = false - - - override func getUrl() { - getUrlCalled = true - } - override func setHttpMethod() { - setHttpMethodArgs = [method] - } - override func getHttpMethod() { - getHttpMethodCalled = true - } - override func setHttpBody() { - setHttpBodyArgs = [body] - } - override func getHttpBody() { - getHttpBodyCalled = true - } - override func setAllHttpHeaderFields() { - setAllHttpHeaderFieldsArgs = [fields] - } - override func getAllHttpHeaderFields() { - getAllHttpHeaderFieldsCalled = true - } -} -*/ - protocol PigeonApiDelegateHTTPURLResponse { /// The response’s HTTP status code. - func statusCode(pigeonApi: PigeonApiHTTPURLResponse, pigeonInstance: HTTPURLResponse) throws -> Int64 + func statusCode(pigeonApi: PigeonApiHTTPURLResponse, pigeonInstance: HTTPURLResponse) throws + -> Int64 } protocol PigeonApiProtocolHTTPURLResponse { } -final class PigeonApiHTTPURLResponse: PigeonApiProtocolHTTPURLResponse { +final class PigeonApiHTTPURLResponse: PigeonApiProtocolHTTPURLResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateHTTPURLResponse ///An implementation of [URLResponse] used to access callback methods @@ -1873,27 +1835,36 @@ final class PigeonApiHTTPURLResponse: PigeonApiProtocolHTTPURLResponse { return pigeonRegistrar.apiDelegate.pigeonApiURLResponse(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateHTTPURLResponse) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateHTTPURLResponse + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of HTTPURLResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: HTTPURLResponse, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: HTTPURLResponse, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let statusCodeArg = try! pigeonDelegate.statusCode(pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let statusCodeArg = try! pigeonDelegate.statusCode( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPURLResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPURLResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg, statusCodeArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -1911,60 +1882,13 @@ final class PigeonApiHTTPURLResponse: PigeonApiProtocolHTTPURLResponse { } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `HTTPURLResponse`. -/// -/// 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 ResponseProxyAPIDelegate : PigeonApiDelegateHTTPURLResponse { - func statusCode(pigeonApi: PigeonApiHTTPURLResponse, pigeonInstance: HTTPURLResponse) throws -> Int64 { - return pigeonInstance.statusCode - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ResponseProxyAPITests: XCTestCase { - func testStatusCode() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiHTTPURLResponse(registrar) - - let instance = TestResponse() - let value = try? api.pigeonDelegate.statusCode(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.statusCode) - } - -} -*/ - open class PigeonApiDelegateURLResponse { } protocol PigeonApiProtocolURLResponse { } -final class PigeonApiURLResponse: PigeonApiProtocolURLResponse { +final class PigeonApiURLResponse: PigeonApiProtocolURLResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateURLResponse ///An implementation of [NSObject] used to access callback methods @@ -1972,26 +1896,33 @@ final class PigeonApiURLResponse: PigeonApiProtocolURLResponse { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLResponse) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLResponse + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of URLResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: URLResponse, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: URLResponse, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.URLResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -2009,56 +1940,28 @@ final class PigeonApiURLResponse: PigeonApiProtocolURLResponse { } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `URLResponse`. -/// -/// 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 ResponseProxyAPIDelegate : PigeonApiDelegateURLResponse { -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ResponseProxyAPITests: XCTestCase { -} -*/ - protocol PigeonApiDelegateWKUserScript { /// Creates a user script object that contains the specified source code and /// attributes. - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUserScript, source: String, injectionTime: UserScriptInjectionTime, isForMainFrameOnly: Bool) throws -> WKUserScript + func pigeonDefaultConstructor( + pigeonApi: PigeonApiWKUserScript, source: String, injectionTime: UserScriptInjectionTime, + isForMainFrameOnly: Bool + ) throws -> WKUserScript /// The script’s source code. func source(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> String /// The time at which to inject the script into the webpage. - func injectionTime(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> UserScriptInjectionTime + func injectionTime(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws + -> UserScriptInjectionTime /// A Boolean value that indicates whether to inject the script into the main /// frame or all frames. - func isForMainFrameOnly(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> Bool + func isForMainFrameOnly(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws + -> Bool } protocol PigeonApiProtocolWKUserScript { } -final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { +final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKUserScript ///An implementation of [NSObject] used to access callback methods @@ -2066,17 +1969,24 @@ final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUserScript) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUserScript + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUserScript?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUserScript? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserScript.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserScript.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -2086,8 +1996,10 @@ final class PigeonApiWKUserScript: PigeonApiProtocolWKUserScript { let isForMainFrameOnlyArg = args[3] as! Bool do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( -try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, source: sourceArg, injectionTime: injectionTimeArg, isForMainFrameOnly: isForMainFrameOnlyArg), -withIdentifier: pigeonIdentifierArg) + try api.pigeonDelegate.pigeonDefaultConstructor( + pigeonApi: api, source: sourceArg, injectionTime: injectionTimeArg, + isForMainFrameOnly: isForMainFrameOnlyArg), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -2099,25 +2011,34 @@ withIdentifier: pigeonIdentifierArg) } ///Creates a Dart instance of WKUserScript and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKUserScript, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKUserScript, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let sourceArg = try! pigeonDelegate.source(pigeonApi: self, pigeonInstance: pigeonInstance) - let injectionTimeArg = try! pigeonDelegate.injectionTime(pigeonApi: self, pigeonInstance: pigeonInstance) - let isForMainFrameOnlyArg = try! pigeonDelegate.isForMainFrameOnly(pigeonApi: self, pigeonInstance: pigeonInstance) + let injectionTimeArg = try! pigeonDelegate.injectionTime( + pigeonApi: self, pigeonInstance: pigeonInstance) + let isForMainFrameOnlyArg = try! pigeonDelegate.isForMainFrameOnly( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserScript.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, sourceArg, injectionTimeArg, isForMainFrameOnlyArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserScript.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage( + [pigeonIdentifierArg, sourceArg, injectionTimeArg, isForMainFrameOnlyArg] as [Any?] + ) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2134,146 +2055,67 @@ withIdentifier: pigeonIdentifierArg) } } } +protocol PigeonApiDelegateWKNavigationAction { + /// The URL request object associated with the navigation action. + func request(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws + -> URLRequestWrapper + /// The frame in which to display the new content. + /// + /// If the target of the navigation is a new window, this property is nil. + func targetFrame(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) + throws -> WKFrameInfo? + /// The type of action that triggered the navigation. + func navigationType(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) + throws -> NavigationType +} -/* -// 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. - -import Foundation -import WebKit - +protocol PigeonApiProtocolWKNavigationAction { +} -/// ProxyApi implementation for `WKUserScript`. -/// -/// 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 UserScriptProxyAPIDelegate : PigeonApiDelegateWKUserScript { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUserScript, source: String, injectionTime: UserScriptInjectionTime, isForMainFrameOnly: Bool) throws -> WKUserScript { - return WKUserScript() +final class PigeonApiWKNavigationAction: PigeonApiProtocolWKNavigationAction { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateWKNavigationAction + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - func source(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> String { - return pigeonInstance.source - } - - func injectionTime(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> UserScriptInjectionTime { - switch pigeonInstance.injectionTime { - case .atDocumentStart: - return .atDocumentStart - case .atDocumentEnd: - return .atDocumentEnd - @unknown default: - return .unknown - } - } - - func isForMainFrameOnly(pigeonApi: PigeonApiWKUserScript, pigeonInstance: WKUserScript) throws -> Bool { - return pigeonInstance.isForMainFrameOnly - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class UserScriptProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserScript(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api source: "myString", injectionTime: .atDocumentStart, isForMainFrameOnly: true) - XCTAssertNotNil(instance) - } - - func testSource() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserScript(registrar) - - let instance = TestUserScript() - let value = try? api.pigeonDelegate.source(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.source) - } - - func testInjectionTime() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserScript(registrar) - - let instance = TestUserScript() - let value = try? api.pigeonDelegate.injectionTime(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.injectionTime) - } - - func testIsForMainFrameOnly() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserScript(registrar) - - let instance = TestUserScript() - let value = try? api.pigeonDelegate.isForMainFrameOnly(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.isForMainFrameOnly) - } - -} -*/ - -protocol PigeonApiDelegateWKNavigationAction { - /// The URL request object associated with the navigation action. - func request(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> URLRequestWrapper - /// The frame in which to display the new content. - /// - /// If the target of the navigation is a new window, this property is nil. - func targetFrame(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> WKFrameInfo? - /// The type of action that triggered the navigation. - func navigationType(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> NavigationType -} - -protocol PigeonApiProtocolWKNavigationAction { -} - -final class PigeonApiWKNavigationAction: PigeonApiProtocolWKNavigationAction { - unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKNavigationAction - ///An implementation of [NSObject] used to access callback methods - var pigeonApiNSObject: PigeonApiNSObject { - return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) - } - - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKNavigationAction) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKNavigationAction + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKNavigationAction and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKNavigationAction, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKNavigationAction, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let requestArg = try! pigeonDelegate.request(pigeonApi: self, pigeonInstance: pigeonInstance) - let targetFrameArg = try! pigeonDelegate.targetFrame(pigeonApi: self, pigeonInstance: pigeonInstance) - let navigationTypeArg = try! pigeonDelegate.navigationType(pigeonApi: self, pigeonInstance: pigeonInstance) + let targetFrameArg = try! pigeonDelegate.targetFrame( + pigeonApi: self, pigeonInstance: pigeonInstance) + let navigationTypeArg = try! pigeonDelegate.navigationType( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationAction.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, requestArg, targetFrameArg, navigationTypeArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationAction.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage( + [pigeonIdentifierArg, requestArg, targetFrameArg, navigationTypeArg] as [Any?] + ) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2290,108 +2132,21 @@ final class PigeonApiWKNavigationAction: PigeonApiProtocolWKNavigationAction { } } } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKNavigationAction`. -/// -/// 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 NavigationActionProxyAPIDelegate : PigeonApiDelegateWKNavigationAction { - func request(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> URLRequestWrapper { - return pigeonInstance.request - } - - func targetFrame(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> WKFrameInfo? { - return pigeonInstance.targetFrame - } - - func navigationType(pigeonApi: PigeonApiWKNavigationAction, pigeonInstance: WKNavigationAction) throws -> NavigationType { - switch pigeonInstance.navigationType { - case .linkActivated: - return .linkActivated - case .formSubmitted: - return .formSubmitted - case .backForward: - return .backForward - case .reload: - return .reload - case .formResubmitted: - return .formResubmitted - case .other: - return .other - @unknown default: - return .unknown - } - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class NavigationActionProxyAPITests: XCTestCase { - func testRequest() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKNavigationAction(registrar) - - let instance = TestNavigationAction() - let value = try? api.pigeonDelegate.request(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.request) - } - - func testTargetFrame() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKNavigationAction(registrar) - - let instance = TestNavigationAction() - let value = try? api.pigeonDelegate.targetFrame(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.targetFrame) - } - - func testNavigationType() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKNavigationAction(registrar) - - let instance = TestNavigationAction() - let value = try? api.pigeonDelegate.navigationType(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.navigationType) - } - -} -*/ - protocol PigeonApiDelegateWKNavigationResponse { /// The frame’s response. - func response(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) throws -> URLResponse + func response(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) + throws -> URLResponse /// A Boolean value that indicates whether the response targets the web view’s /// main frame. - func isForMainFrame(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) throws -> Bool + func isForMainFrame( + pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse + ) throws -> Bool } protocol PigeonApiProtocolWKNavigationResponse { } -final class PigeonApiWKNavigationResponse: PigeonApiProtocolWKNavigationResponse { +final class PigeonApiWKNavigationResponse: PigeonApiProtocolWKNavigationResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKNavigationResponse ///An implementation of [NSObject] used to access callback methods @@ -2399,29 +2154,40 @@ final class PigeonApiWKNavigationResponse: PigeonApiProtocolWKNavigationResponse return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKNavigationResponse) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKNavigationResponse + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKNavigationResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKNavigationResponse, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKNavigationResponse, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let responseArg = try! pigeonDelegate.response(pigeonApi: self, pigeonInstance: pigeonInstance) - let isForMainFrameArg = try! pigeonDelegate.isForMainFrame(pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let responseArg = try! pigeonDelegate.response( + pigeonApi: self, pigeonInstance: pigeonInstance) + let isForMainFrameArg = try! pigeonDelegate.isForMainFrame( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, responseArg, isForMainFrameArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, responseArg, isForMainFrameArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2438,79 +2204,19 @@ final class PigeonApiWKNavigationResponse: PigeonApiProtocolWKNavigationResponse } } } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKNavigationResponse`. -/// -/// 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 NavigationResponseProxyAPIDelegate : PigeonApiDelegateWKNavigationResponse { - func response(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) throws -> URLResponse { - return pigeonInstance.response - } - - func isForMainFrame(pigeonApi: PigeonApiWKNavigationResponse, pigeonInstance: WKNavigationResponse) throws -> Bool { - return pigeonInstance.isForMainFrame - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class NavigationResponseProxyAPITests: XCTestCase { - func testResponse() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKNavigationResponse(registrar) - - let instance = TestNavigationResponse() - let value = try? api.pigeonDelegate.response(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.response) - } - - func testIsForMainFrame() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKNavigationResponse(registrar) - - let instance = TestNavigationResponse() - let value = try? api.pigeonDelegate.isForMainFrame(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.isForMainFrame) - } - -} -*/ - protocol PigeonApiDelegateWKFrameInfo { /// A Boolean value indicating whether the frame is the web site's main frame /// or a subframe. func isMainFrame(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws -> Bool /// The frame’s current request. - func request(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws -> URLRequestWrapper? + func request(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws + -> URLRequestWrapper? } protocol PigeonApiProtocolWKFrameInfo { } -final class PigeonApiWKFrameInfo: PigeonApiProtocolWKFrameInfo { +final class PigeonApiWKFrameInfo: PigeonApiProtocolWKFrameInfo { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKFrameInfo ///An implementation of [NSObject] used to access callback methods @@ -2518,28 +2224,36 @@ final class PigeonApiWKFrameInfo: PigeonApiProtocolWKFrameInfo { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKFrameInfo) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKFrameInfo + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKFrameInfo and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKFrameInfo, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKFrameInfo, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let isMainFrameArg = try! pigeonDelegate.isMainFrame(pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let isMainFrameArg = try! pigeonDelegate.isMainFrame( + pigeonApi: self, pigeonInstance: pigeonInstance) let requestArg = try! pigeonDelegate.request(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKFrameInfo.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKFrameInfo.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg, isMainFrameArg, requestArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -2557,67 +2271,6 @@ final class PigeonApiWKFrameInfo: PigeonApiProtocolWKFrameInfo { } } } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKFrameInfo`. -/// -/// 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 FrameInfoProxyAPIDelegate : PigeonApiDelegateWKFrameInfo { - func isMainFrame(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws -> Bool { - return pigeonInstance.isMainFrame - } - - func request(pigeonApi: PigeonApiWKFrameInfo, pigeonInstance: WKFrameInfo) throws -> URLRequestWrapper? { - return pigeonInstance.request - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class FrameInfoProxyAPITests: XCTestCase { - func testIsMainFrame() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKFrameInfo(registrar) - - let instance = TestFrameInfo() - let value = try? api.pigeonDelegate.isMainFrame(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.isMainFrame) - } - - func testRequest() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKFrameInfo(registrar) - - let instance = TestFrameInfo() - let value = try? api.pigeonDelegate.request(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.request) - } - -} -*/ - protocol PigeonApiDelegateNSError { /// The error code. func code(pigeonApi: PigeonApiNSError, pigeonInstance: NSError) throws -> Int64 @@ -2630,7 +2283,7 @@ protocol PigeonApiDelegateNSError { protocol PigeonApiProtocolNSError { } -final class PigeonApiNSError: PigeonApiProtocolNSError { +final class PigeonApiNSError: PigeonApiProtocolNSError { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateNSError ///An implementation of [NSObject] used to access callback methods @@ -2643,25 +2296,32 @@ final class PigeonApiNSError: PigeonApiProtocolNSError { self.pigeonDelegate = delegate } ///Creates a Dart instance of NSError and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: NSError, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: NSError, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let codeArg = try! pigeonDelegate.code(pigeonApi: self, pigeonInstance: pigeonInstance) let domainArg = try! pigeonDelegate.domain(pigeonApi: self, pigeonInstance: pigeonInstance) - let userInfoArg = try! pigeonDelegate.userInfo(pigeonApi: self, pigeonInstance: pigeonInstance) + let userInfoArg = try! pigeonDelegate.userInfo( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.NSError.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, codeArg, domainArg, userInfoArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.NSError.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, codeArg, domainArg, userInfoArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2678,81 +2338,6 @@ final class PigeonApiNSError: PigeonApiProtocolNSError { } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `NSError`. -/// -/// 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 ErrorProxyAPIDelegate : PigeonApiDelegateNSError { - func code(pigeonApi: PigeonApiNSError, pigeonInstance: NSError) throws -> Int64 { - return pigeonInstance.code - } - - func domain(pigeonApi: PigeonApiNSError, pigeonInstance: NSError) throws -> String { - return pigeonInstance.domain - } - - func userInfo(pigeonApi: PigeonApiNSError, pigeonInstance: NSError) throws -> [String: Any?] { - return pigeonInstance.userInfo - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ErrorProxyAPITests: XCTestCase { - func testCode() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSError(registrar) - - let instance = TestError() - let value = try? api.pigeonDelegate.code(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.code) - } - - func testDomain() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSError(registrar) - - let instance = TestError() - let value = try? api.pigeonDelegate.domain(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.domain) - } - - func testUserInfo() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSError(registrar) - - let instance = TestError() - let value = try? api.pigeonDelegate.userInfo(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.userInfo) - } - -} -*/ - protocol PigeonApiDelegateWKScriptMessage { /// The name of the message handler to which the message is sent. func name(pigeonApi: PigeonApiWKScriptMessage, pigeonInstance: WKScriptMessage) throws -> String @@ -2763,7 +2348,7 @@ protocol PigeonApiDelegateWKScriptMessage { protocol PigeonApiProtocolWKScriptMessage { } -final class PigeonApiWKScriptMessage: PigeonApiProtocolWKScriptMessage { +final class PigeonApiWKScriptMessage: PigeonApiProtocolWKScriptMessage { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKScriptMessage ///An implementation of [NSObject] used to access callback methods @@ -2771,28 +2356,36 @@ final class PigeonApiWKScriptMessage: PigeonApiProtocolWKScriptMessage { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKScriptMessage) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKScriptMessage + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKScriptMessage and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKScriptMessage, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKScriptMessage, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let nameArg = try! pigeonDelegate.name(pigeonApi: self, pigeonInstance: pigeonInstance) let bodyArg = try! pigeonDelegate.body(pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessage.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessage.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg, nameArg, bodyArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -2810,80 +2403,20 @@ final class PigeonApiWKScriptMessage: PigeonApiProtocolWKScriptMessage { } } } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKScriptMessage`. -/// -/// 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 ScriptMessageProxyAPIDelegate : PigeonApiDelegateWKScriptMessage { - func name(pigeonApi: PigeonApiWKScriptMessage, pigeonInstance: WKScriptMessage) throws -> String { - return pigeonInstance.name - } - - func body(pigeonApi: PigeonApiWKScriptMessage, pigeonInstance: WKScriptMessage) throws -> Any? { - return pigeonInstance.body - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ScriptMessageProxyAPITests: XCTestCase { - func testName() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKScriptMessage(registrar) - - let instance = TestScriptMessage() - let value = try? api.pigeonDelegate.name(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.name) - } - - func testBody() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKScriptMessage(registrar) - - let instance = TestScriptMessage() - let value = try? api.pigeonDelegate.body(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.body) - } - -} -*/ - protocol PigeonApiDelegateWKSecurityOrigin { /// The security origin’s host. func host(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String /// The security origin's port. func port(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> Int64 /// The security origin's protocol. - func securityProtocol(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String + func securityProtocol(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) + throws -> String } protocol PigeonApiProtocolWKSecurityOrigin { } -final class PigeonApiWKSecurityOrigin: PigeonApiProtocolWKSecurityOrigin { +final class PigeonApiWKSecurityOrigin: PigeonApiProtocolWKSecurityOrigin { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKSecurityOrigin ///An implementation of [NSObject] used to access callback methods @@ -2891,30 +2424,40 @@ final class PigeonApiWKSecurityOrigin: PigeonApiProtocolWKSecurityOrigin { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKSecurityOrigin) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKSecurityOrigin + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKSecurityOrigin and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKSecurityOrigin, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKSecurityOrigin, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let hostArg = try! pigeonDelegate.host(pigeonApi: self, pigeonInstance: pigeonInstance) let portArg = try! pigeonDelegate.port(pigeonApi: self, pigeonInstance: pigeonInstance) - let securityProtocolArg = try! pigeonDelegate.securityProtocol(pigeonApi: self, pigeonInstance: pigeonInstance) + let securityProtocolArg = try! pigeonDelegate.securityProtocol( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKSecurityOrigin.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, hostArg, portArg, securityProtocolArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKSecurityOrigin.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, hostArg, portArg, securityProtocolArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -2931,91 +2474,19 @@ final class PigeonApiWKSecurityOrigin: PigeonApiProtocolWKSecurityOrigin { } } } +protocol PigeonApiDelegateHTTPCookie { + func pigeonDefaultConstructor( + pigeonApi: PigeonApiHTTPCookie, properties: [HttpCookiePropertyKey: Any] + ) throws -> HTTPCookie + /// The cookie’s properties. + func getProperties(pigeonApi: PigeonApiHTTPCookie, pigeonInstance: HTTPCookie) throws + -> [HttpCookiePropertyKey: Any]? +} -/* -// 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. +protocol PigeonApiProtocolHTTPCookie { +} -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKSecurityOrigin`. -/// -/// 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 SecurityOriginProxyAPIDelegate : PigeonApiDelegateWKSecurityOrigin { - func host(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String { - return pigeonInstance.host - } - - func port(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> Int64 { - return pigeonInstance.port - } - - func securityProtocol(pigeonApi: PigeonApiWKSecurityOrigin, pigeonInstance: WKSecurityOrigin) throws -> String { - return pigeonInstance.securityProtocol - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class SecurityOriginProxyAPITests: XCTestCase { - func testHost() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKSecurityOrigin(registrar) - - let instance = TestSecurityOrigin() - let value = try? api.pigeonDelegate.host(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.host) - } - - func testPort() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKSecurityOrigin(registrar) - - let instance = TestSecurityOrigin() - let value = try? api.pigeonDelegate.port(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.port) - } - - func testSecurityProtocol() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKSecurityOrigin(registrar) - - let instance = TestSecurityOrigin() - let value = try? api.pigeonDelegate.securityProtocol(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.securityProtocol) - } - -} -*/ - -protocol PigeonApiDelegateHTTPCookie { - func pigeonDefaultConstructor(pigeonApi: PigeonApiHTTPCookie, properties: [HttpCookiePropertyKey: Any]) throws -> HTTPCookie - /// The cookie’s properties. - func getProperties(pigeonApi: PigeonApiHTTPCookie, pigeonInstance: HTTPCookie) throws -> [HttpCookiePropertyKey: Any]? -} - -protocol PigeonApiProtocolHTTPCookie { -} - -final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { +final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateHTTPCookie ///An implementation of [NSObject] used to access callback methods @@ -3023,17 +2494,23 @@ final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateHTTPCookie) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateHTTPCookie) + { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiHTTPCookie?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiHTTPCookie? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -3041,8 +2518,9 @@ final class PigeonApiHTTPCookie: PigeonApiProtocolHTTPCookie { let propertiesArg = args[1] as? [HttpCookiePropertyKey: Any] do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( -try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, properties: propertiesArg!), -withIdentifier: pigeonIdentifierArg) + try api.pigeonDelegate.pigeonDefaultConstructor( + pigeonApi: api, properties: propertiesArg!), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3051,13 +2529,16 @@ withIdentifier: pigeonIdentifierArg) } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } - let getPropertiesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.getProperties", binaryMessenger: binaryMessenger, codec: codec) + let getPropertiesChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.getProperties", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getPropertiesChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! HTTPCookie do { - let result = try api.pigeonDelegate.getProperties(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getProperties( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -3069,21 +2550,26 @@ withIdentifier: pigeonIdentifierArg) } ///Creates a Dart instance of HTTPCookie and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: HTTPCookie, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: HTTPCookie, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.HTTPCookie.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -3101,100 +2587,52 @@ withIdentifier: pigeonIdentifierArg) } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `HTTPCookie`. -/// -/// 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 CookieProxyAPIDelegate : PigeonApiDelegateHTTPCookie { - func pigeonDefaultConstructor(pigeonApi: PigeonApiHTTPCookie, properties: [HttpCookiePropertyKey: Any]) throws -> HTTPCookie { - return HTTPCookie(,properties: properties) - } - - func getProperties(pigeonApi: PigeonApiHTTPCookie, pigeonInstance: HTTPCookie) throws -> [HttpCookiePropertyKey: Any]? { - return pigeonInstance.properties - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class CookieProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiHTTPCookie(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, properties: [.comment: -1]) - XCTAssertNotNil(instance) - } - - func testGetProperties() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiHTTPCookie(registrar) - - let instance = TestCookie() - let value = api.pigeonDelegate.getProperties(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getPropertiesCalled) - XCTAssertEqual(value, instance.getProperties()) - } - -} -class TestCookie: HTTPCookie { - var getPropertiesCalled = false - - - override func getProperties() { - getPropertiesCalled = true - } -} -*/ - protocol PigeonApiDelegateAuthenticationChallengeResponse { - func pigeonDefaultConstructor(pigeonApi: PigeonApiAuthenticationChallengeResponse, disposition: UrlSessionAuthChallengeDisposition, credential: URLCredential?) throws -> AuthenticationChallengeResponse + func pigeonDefaultConstructor( + pigeonApi: PigeonApiAuthenticationChallengeResponse, + disposition: UrlSessionAuthChallengeDisposition, credential: URLCredential? + ) throws -> AuthenticationChallengeResponse /// The option to use to handle the challenge. - func disposition(pigeonApi: PigeonApiAuthenticationChallengeResponse, pigeonInstance: AuthenticationChallengeResponse) throws -> UrlSessionAuthChallengeDisposition + func disposition( + pigeonApi: PigeonApiAuthenticationChallengeResponse, + pigeonInstance: AuthenticationChallengeResponse + ) throws -> UrlSessionAuthChallengeDisposition /// The credential to use for authentication when the disposition parameter /// contains the value URLSession.AuthChallengeDisposition.useCredential. - func credential(pigeonApi: PigeonApiAuthenticationChallengeResponse, pigeonInstance: AuthenticationChallengeResponse) throws -> URLCredential? + func credential( + pigeonApi: PigeonApiAuthenticationChallengeResponse, + pigeonInstance: AuthenticationChallengeResponse + ) throws -> URLCredential? } protocol PigeonApiProtocolAuthenticationChallengeResponse { } -final class PigeonApiAuthenticationChallengeResponse: PigeonApiProtocolAuthenticationChallengeResponse { +final class PigeonApiAuthenticationChallengeResponse: + PigeonApiProtocolAuthenticationChallengeResponse +{ unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateAuthenticationChallengeResponse - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateAuthenticationChallengeResponse) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateAuthenticationChallengeResponse + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiAuthenticationChallengeResponse?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiAuthenticationChallengeResponse? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.AuthenticationChallengeResponse.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.AuthenticationChallengeResponse.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -3203,8 +2641,9 @@ final class PigeonApiAuthenticationChallengeResponse: PigeonApiProtocolAuthentic let credentialArg: URLCredential? = nilOrValue(args[2]) do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( -try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, disposition: dispositionArg, credential: credentialArg), -withIdentifier: pigeonIdentifierArg) + try api.pigeonDelegate.pigeonDefaultConstructor( + pigeonApi: api, disposition: dispositionArg, credential: credentialArg), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3216,24 +2655,33 @@ withIdentifier: pigeonIdentifierArg) } ///Creates a Dart instance of AuthenticationChallengeResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: AuthenticationChallengeResponse, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: AuthenticationChallengeResponse, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let dispositionArg = try! pigeonDelegate.disposition(pigeonApi: self, pigeonInstance: pigeonInstance) - let credentialArg = try! pigeonDelegate.credential(pigeonApi: self, pigeonInstance: pigeonInstance) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let dispositionArg = try! pigeonDelegate.disposition( + pigeonApi: self, pigeonInstance: pigeonInstance) + let credentialArg = try! pigeonDelegate.credential( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.AuthenticationChallengeResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, dispositionArg, credentialArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.AuthenticationChallengeResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg, dispositionArg, credentialArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -3250,103 +2698,23 @@ withIdentifier: pigeonIdentifierArg) } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `AuthenticationChallengeResponse`. -/// -/// 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 AuthenticationChallengeResponseProxyAPIDelegate : PigeonApiDelegateAuthenticationChallengeResponse { - func pigeonDefaultConstructor(pigeonApi: PigeonApiAuthenticationChallengeResponse, disposition: UrlSessionAuthChallengeDisposition, credential: URLCredential?) throws -> AuthenticationChallengeResponse { - return AuthenticationChallengeResponse() - } - - func disposition(pigeonApi: PigeonApiAuthenticationChallengeResponse, pigeonInstance: AuthenticationChallengeResponse) throws -> UrlSessionAuthChallengeDisposition { - switch pigeonInstance.disposition { - case .useCredential: - return .useCredential - case .performDefaultHandling: - return .performDefaultHandling - case .cancelAuthenticationChallenge: - return .cancelAuthenticationChallenge - case .rejectProtectionSpace: - return .rejectProtectionSpace - @unknown default: - return .unknown - } - } - - func credential(pigeonApi: PigeonApiAuthenticationChallengeResponse, pigeonInstance: AuthenticationChallengeResponse) throws -> URLCredential? { - return pigeonInstance.credential - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class AuthenticationChallengeResponseProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api disposition: .useCredential, credential: TestCredential) - XCTAssertNotNil(instance) - } - - func testDisposition() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(registrar) - - let instance = TestAuthenticationChallengeResponse() - let value = try? api.pigeonDelegate.disposition(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.disposition) - } - - func testCredential() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiAuthenticationChallengeResponse(registrar) - - let instance = TestAuthenticationChallengeResponse() - let value = try? api.pigeonDelegate.credential(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.credential) - } - -} -*/ - protocol PigeonApiDelegateWKWebsiteDataStore { /// The default data store, which stores data persistently to disk. func defaultDataStore(pigeonApi: PigeonApiWKWebsiteDataStore) throws -> WKWebsiteDataStore /// The object that manages the HTTP cookies for your website. - func httpCookieStore(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore) throws -> WKHTTPCookieStore + func httpCookieStore(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore) + throws -> WKHTTPCookieStore /// Removes the specified types of website data from one or more data records. - func removeDataOfTypes(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore, dataTypes: [WebsiteDataType], modificationTimeInSecondsSinceEpoch: Double, completion: @escaping (Result) -> Void) + func removeDataOfTypes( + pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore, + dataTypes: [WebsiteDataType], modificationTimeInSecondsSinceEpoch: Double, + completion: @escaping (Result) -> Void) } protocol PigeonApiProtocolWKWebsiteDataStore { } -final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { +final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKWebsiteDataStore ///An implementation of [NSObject] used to access callback methods @@ -3354,23 +2722,33 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebsiteDataStore) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKWebsiteDataStore + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebsiteDataStore?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebsiteDataStore? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let defaultDataStoreChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.defaultDataStore", binaryMessenger: binaryMessenger, codec: codec) + let defaultDataStoreChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.defaultDataStore", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { defaultDataStoreChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonIdentifierArg = args[0] as! Int64 do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.defaultDataStore(pigeonApi: api), withIdentifier: pigeonIdentifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.defaultDataStore(pigeonApi: api), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3379,14 +2757,19 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { } else { defaultDataStoreChannel.setMessageHandler(nil) } - let httpCookieStoreChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.httpCookieStore", binaryMessenger: binaryMessenger, codec: codec) + let httpCookieStoreChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.httpCookieStore", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { httpCookieStoreChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebsiteDataStore let pigeonIdentifierArg = args[1] as! Int64 do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.httpCookieStore(pigeonApi: api, pigeonInstance: pigeonInstanceArg), withIdentifier: pigeonIdentifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.httpCookieStore( + pigeonApi: api, pigeonInstance: pigeonInstanceArg), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -3395,14 +2778,19 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { } else { httpCookieStoreChannel.setMessageHandler(nil) } - let removeDataOfTypesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.removeDataOfTypes", binaryMessenger: binaryMessenger, codec: codec) + let removeDataOfTypesChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.removeDataOfTypes", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { removeDataOfTypesChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebsiteDataStore let dataTypesArg = args[1] as! [WebsiteDataType] let modificationTimeInSecondsSinceEpochArg = args[2] as! Double - api.pigeonDelegate.removeDataOfTypes(pigeonApi: api, pigeonInstance: pigeonInstanceArg, dataTypes: dataTypesArg, modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpochArg) { result in + api.pigeonDelegate.removeDataOfTypes( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, dataTypes: dataTypesArg, + modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpochArg + ) { result in switch result { case .success(let res): reply(wrapResult(res)) @@ -3417,21 +2805,26 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { } ///Creates a Dart instance of WKWebsiteDataStore and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKWebsiteDataStore, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKWebsiteDataStore, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStore.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -3449,102 +2842,22 @@ final class PigeonApiWKWebsiteDataStore: PigeonApiProtocolWKWebsiteDataStore { } } } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKWebsiteDataStore`. -/// -/// 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 WebsiteDataStoreProxyAPIDelegate : PigeonApiDelegateWKWebsiteDataStore { - func defaultDataStore(pigeonApi: PigeonApiWKWebsiteDataStore): WKWebsiteDataStore { - return WKWebsiteDataStore.defaultDataStore - } - - func httpCookieStore(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore): WKHTTPCookieStore { - return pigeonInstance.httpCookieStore - } - - func removeDataOfTypes(pigeonApi: PigeonApiWKWebsiteDataStore, pigeonInstance: WKWebsiteDataStore, dataTypes: [WebsiteDataType], modificationTimeInSecondsSinceEpoch: Double, completion: @escaping (Result) -> Void) { - return pigeonInstance.removeDataOfTypes(dataTypes: dataTypes, modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpoch) - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class WebsiteDataStoreProxyAPITests: XCTestCase { - func testHttpCookieStore() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebsiteDataStore(registrar) - - let instance = TestWebsiteDataStore() - let value = try? api.pigeonDelegate.httpCookieStore(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.httpCookieStore) - } - - func testRemoveDataOfTypes() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebsiteDataStore(registrar) - - let instance = TestWebsiteDataStore() - let dataTypes = [.cookies] - let modificationTimeInSecondsSinceEpoch = 1.0 - let value = api.pigeonDelegate.removeDataOfTypes(pigeonApi: api, pigeonInstance: instance, dataTypes: dataTypes, modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpoch) - - XCTAssertEqual(instance.removeDataOfTypesArgs, [dataTypes, modificationTimeInSecondsSinceEpoch]) - XCTAssertEqual(value, instance.removeDataOfTypes(dataTypes: dataTypes, modificationTimeInSecondsSinceEpoch: modificationTimeInSecondsSinceEpoch)) - } - -} -class TestWebsiteDataStore: WKWebsiteDataStore { - private var httpCookieStoreTestValue = TestCookieStore - var removeDataOfTypesArgs: [AnyHashable?]? = nil - - override var httpCookieStore: WKHTTPCookieStore { - return httpCookieStoreTestValue - } - - override func removeDataOfTypes() { - removeDataOfTypesArgs = [dataTypes, modificationTimeInSecondsSinceEpoch] - return true - } -} -*/ - protocol PigeonApiDelegateUIView { #if !os(macOS) - /// The view’s background color. - func setBackgroundColor(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, value: Int64?) throws + /// The view’s background color. + func setBackgroundColor(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, value: Int64?) + throws #endif #if !os(macOS) - /// A Boolean value that determines whether the view is opaque. - func setOpaque(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, opaque: Bool) throws + /// A Boolean value that determines whether the view is opaque. + func setOpaque(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, opaque: Bool) throws #endif } protocol PigeonApiProtocolUIView { } -final class PigeonApiUIView: PigeonApiProtocolUIView { +final class PigeonApiUIView: PigeonApiProtocolUIView { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateUIView ///An implementation of [NSObject] used to access callback methods @@ -3560,414 +2873,754 @@ final class PigeonApiUIView: PigeonApiProtocolUIView { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() #if !os(macOS) - let setBackgroundColorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.setBackgroundColor", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setBackgroundColorChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIView - let valueArg: Int64? = nilOrValue(args[1]) - do { - try api.pigeonDelegate.setBackgroundColor(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setBackgroundColorChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.setBackgroundColor", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBackgroundColorChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIView + let valueArg: Int64? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setBackgroundColor( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setBackgroundColorChannel.setMessageHandler(nil) } - } else { - setBackgroundColorChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let setOpaqueChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.setOpaque", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setOpaqueChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIView - let opaqueArg = args[1] as! Bool - do { - try api.pigeonDelegate.setOpaque(pigeonApi: api, pigeonInstance: pigeonInstanceArg, opaque: opaqueArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setOpaqueChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.setOpaque", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setOpaqueChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIView + let opaqueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setOpaque( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, opaque: opaqueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setOpaqueChannel.setMessageHandler(nil) } - } else { - setOpaqueChannel.setMessageHandler(nil) - } #endif } #if !os(macOS) - ///Creates a Dart instance of UIView and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: UIView, completion: @escaping (Result) -> Void) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) + ///Creates a Dart instance of UIView and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: UIView, completion: @escaping (Result) -> Void + ) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.UIView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } - } + #endif +} +protocol PigeonApiDelegateUIScrollView { + #if !os(macOS) + /// The point at which the origin of the content view is offset from the + /// origin of the scroll view. + func getContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView) throws + -> [Double] + #endif + #if !os(macOS) + /// Move the scrolled position of your view. + /// + /// Convenience method to synchronize change to the x and y scroll position. + func scrollBy( + pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws + #endif + #if !os(macOS) + /// The point at which the origin of the content view is offset from the + /// origin of the scroll view. + func setContentOffset( + pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws + #endif + #if !os(macOS) + /// The delegate of the scroll view. + func setDelegate( + pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, + delegate: UIScrollViewDelegate?) throws + #endif + #if !os(macOS) + /// Whether the scroll view bounces past the edge of content and back again. + func setBounces(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) + throws + #endif + #if !os(macOS) + /// Whether the scroll view bounces when it reaches the ends of its horizontal + /// axis. + func setBouncesHorizontally( + pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws + #endif + #if !os(macOS) + /// Whether the scroll view bounces when it reaches the ends of its vertical + /// axis. + func setBouncesVertically( + pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws + #endif + #if !os(macOS) + /// Whether bouncing always occurs when vertical scrolling reaches the end of + /// the content. + /// + /// If the value of this property is true and `bouncesVertically` is true, the + /// scroll view allows vertical dragging even if the content is smaller than + /// the bounds of the scroll view. + func setAlwaysBounceVertical( + pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws + #endif + #if !os(macOS) + /// Whether bouncing always occurs when horizontal scrolling reaches the end + /// of the content view. + /// + /// If the value of this property is true and `bouncesHorizontally` is true, + /// the scroll view allows horizontal dragging even if the content is smaller + /// than the bounds of the scroll view. + func setAlwaysBounceHorizontal( + pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws #endif } -/* -// 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. - -import Foundation -import UIKit - +protocol PigeonApiProtocolUIScrollView { +} -/// ProxyApi implementation for `UIView`. -/// -/// 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 ViewProxyAPIDelegate : PigeonApiDelegateUIView { - func setBackgroundColor(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, value: Int64?) throws { - pigeonInstance.backgroundColor = value: value - } - - func setOpaque(pigeonApi: PigeonApiUIView, pigeonInstance: UIView, opaque: Bool) throws { - pigeonInstance.opaque = opaque: opaque - } - -} -*/ - -/* -// 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. - -import UIKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ViewProxyAPITests: XCTestCase { - func testSetBackgroundColor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIView(registrar) - - let instance = TestView() - let value = 0 - api.pigeonDelegate.setBackgroundColor(pigeonApi: api, pigeonInstance: instance, value: value) - - XCTAssertEqual(instance.setBackgroundColorArgs, [value]) - } - - func testSetOpaque() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIView(registrar) - - let instance = TestView() - let opaque = true - api.pigeonDelegate.setOpaque(pigeonApi: api, pigeonInstance: instance, opaque: opaque) - - XCTAssertEqual(instance.setOpaqueArgs, [opaque]) +final class PigeonApiUIScrollView: PigeonApiProtocolUIScrollView { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateUIScrollView + ///An implementation of [UIView] used to access callback methods + var pigeonApiUIView: PigeonApiUIView { + return pigeonRegistrar.apiDelegate.pigeonApiUIView(pigeonRegistrar) } -} -class TestView: UIView { - var setBackgroundColorArgs: [AnyHashable?]? = nil - var setOpaqueArgs: [AnyHashable?]? = nil - - - override func setBackgroundColor() { - setBackgroundColorArgs = [value] + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateUIScrollView + ) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate } - override func setOpaque() { - setOpaqueArgs = [opaque] + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIScrollView? + ) { + let codec: FlutterStandardMessageCodec = + api != nil + ? FlutterStandardMessageCodec( + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) + : FlutterStandardMessageCodec.sharedInstance() + #if !os(macOS) + let getContentOffsetChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.getContentOffset", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getContentOffsetChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + do { + let result = try api.pigeonDelegate.getContentOffset( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getContentOffsetChannel.setMessageHandler(nil) + } + #endif + #if !os(macOS) + let scrollByChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.scrollBy", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + scrollByChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let xArg = args[1] as! Double + let yArg = args[2] as! Double + do { + try api.pigeonDelegate.scrollBy( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, x: xArg, y: yArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + scrollByChannel.setMessageHandler(nil) + } + #endif + #if !os(macOS) + let setContentOffsetChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setContentOffset", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setContentOffsetChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let xArg = args[1] as! Double + let yArg = args[2] as! Double + do { + try api.pigeonDelegate.setContentOffset( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, x: xArg, y: yArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setContentOffsetChannel.setMessageHandler(nil) + } + #endif + #if !os(macOS) + let setDelegateChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setDelegate", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let delegateArg: UIScrollViewDelegate? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setDelegate( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setDelegateChannel.setMessageHandler(nil) + } + #endif + #if !os(macOS) + let setBouncesChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBounces", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBouncesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setBounces( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setBouncesChannel.setMessageHandler(nil) + } + #endif + #if !os(macOS) + let setBouncesHorizontallyChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBouncesHorizontally", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBouncesHorizontallyChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setBouncesHorizontally( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setBouncesHorizontallyChannel.setMessageHandler(nil) + } + #endif + #if !os(macOS) + let setBouncesVerticallyChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBouncesVertically", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setBouncesVerticallyChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setBouncesVertically( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setBouncesVerticallyChannel.setMessageHandler(nil) + } + #endif + #if !os(macOS) + let setAlwaysBounceVerticalChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setAlwaysBounceVertical", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAlwaysBounceVerticalChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAlwaysBounceVertical( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setAlwaysBounceVerticalChannel.setMessageHandler(nil) + } + #endif + #if !os(macOS) + let setAlwaysBounceHorizontalChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setAlwaysBounceHorizontal", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAlwaysBounceHorizontalChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! UIScrollView + let valueArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAlwaysBounceHorizontal( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setAlwaysBounceHorizontalChannel.setMessageHandler(nil) + } + #endif } -} -*/ -protocol PigeonApiDelegateUIScrollView { - #if !os(macOS) - /// The point at which the origin of the content view is offset from the - /// origin of the scroll view. - func getContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView) throws -> [Double] - #endif - #if !os(macOS) - /// Move the scrolled position of your view. - /// - /// Convenience method to synchronize change to the x and y scroll position. - func scrollBy(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws - #endif - #if !os(macOS) - /// The point at which the origin of the content view is offset from the - /// origin of the scroll view. - func setContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws - #endif #if !os(macOS) - /// The delegate of the scroll view. - func setDelegate(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, delegate: UIScrollViewDelegate?) throws - #endif - #if !os(macOS) - /// Whether the scroll view bounces past the edge of content and back again. - func setBounces(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws - #endif - #if !os(macOS) - /// Whether the scroll view bounces when it reaches the ends of its horizontal - /// axis. - func setBouncesHorizontally(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws - #endif - #if !os(macOS) - /// Whether the scroll view bounces when it reaches the ends of its vertical - /// axis. - func setBouncesVertically(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws - #endif - #if !os(macOS) - /// Whether bouncing always occurs when vertical scrolling reaches the end of - /// the content. - /// - /// If the value of this property is true and `bouncesVertically` is true, the - /// scroll view allows vertical dragging even if the content is smaller than - /// the bounds of the scroll view. - func setAlwaysBounceVertical(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws - #endif - #if !os(macOS) - /// Whether bouncing always occurs when horizontal scrolling reaches the end - /// of the content view. - /// - /// If the value of this property is true and `bouncesHorizontally` is true, - /// the scroll view allows horizontal dragging even if the content is smaller - /// than the bounds of the scroll view. - func setAlwaysBounceHorizontal(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws + ///Creates a Dart instance of UIScrollView and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: UIScrollView, completion: @escaping (Result) -> Void + ) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } + } + } + } #endif } +protocol PigeonApiDelegateWKWebViewConfiguration { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKWebViewConfiguration) throws + -> WKWebViewConfiguration + /// The object that coordinates interactions between your app’s native code + /// and the webpage’s scripts and other content. + func setUserContentController( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, + controller: WKUserContentController) throws + /// The object that coordinates interactions between your app’s native code + /// and the webpage’s scripts and other content. + func getUserContentController( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration + ) throws -> WKUserContentController + /// The object you use to get and set the site’s cookies and to track the + /// cached data objects. + func setWebsiteDataStore( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, + dataStore: WKWebsiteDataStore) throws + /// The object you use to get and set the site’s cookies and to track the + /// cached data objects. + func getWebsiteDataStore( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration + ) throws -> WKWebsiteDataStore + /// The object that manages the preference-related settings for the web view. + func setPreferences( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, + preferences: WKPreferences) throws + /// The object that manages the preference-related settings for the web view. + func getPreferences( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration + ) throws -> WKPreferences + /// A Boolean value that indicates whether HTML5 videos play inline or use the + /// native full-screen controller. + func setAllowsInlineMediaPlayback( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, allow: Bool) + throws + /// A Boolean value that indicates whether the web view limits navigation to + /// pages within the app’s domain. + func setLimitsNavigationsToAppBoundDomains( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, limit: Bool) + throws + /// The media types that require a user gesture to begin playing. + func setMediaTypesRequiringUserActionForPlayback( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, + type: AudiovisualMediaType) throws + /// The default preferences to use when loading and rendering content. + @available(iOS 13.0.0, macOS 10.15.0, *) + func getDefaultWebpagePreferences( + pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration + ) throws -> WKWebpagePreferences +} -protocol PigeonApiProtocolUIScrollView { +protocol PigeonApiProtocolWKWebViewConfiguration { } -final class PigeonApiUIScrollView: PigeonApiProtocolUIScrollView { +final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfiguration { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateUIScrollView - ///An implementation of [UIView] used to access callback methods - var pigeonApiUIView: PigeonApiUIView { - return pigeonRegistrar.apiDelegate.pigeonApiUIView(pigeonRegistrar) + let pigeonDelegate: PigeonApiDelegateWKWebViewConfiguration + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateUIScrollView) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKWebViewConfiguration + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIScrollView?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebViewConfiguration? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - #if !os(macOS) - let getContentOffsetChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.getContentOffset", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - getContentOffsetChannel.setMessageHandler { message, reply in + pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView + let pigeonIdentifierArg = args[0] as! Int64 do { - let result = try api.pigeonDelegate.getContentOffset(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - getContentOffsetChannel.setMessageHandler(nil) + pigeonDefaultConstructorChannel.setMessageHandler(nil) } - #endif - #if !os(macOS) - let scrollByChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.scrollBy", binaryMessenger: binaryMessenger, codec: codec) + let setUserContentControllerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setUserContentController", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - scrollByChannel.setMessageHandler { message, reply in + setUserContentControllerChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let xArg = args[1] as! Double - let yArg = args[2] as! Double + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let controllerArg = args[1] as! WKUserContentController do { - try api.pigeonDelegate.scrollBy(pigeonApi: api, pigeonInstance: pigeonInstanceArg, x: xArg, y: yArg) + try api.pigeonDelegate.setUserContentController( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, controller: controllerArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - scrollByChannel.setMessageHandler(nil) + setUserContentControllerChannel.setMessageHandler(nil) } - #endif - #if !os(macOS) - let setContentOffsetChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setContentOffset", binaryMessenger: binaryMessenger, codec: codec) + let getUserContentControllerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getUserContentController", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setContentOffsetChannel.setMessageHandler { message, reply in + getUserContentControllerChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let xArg = args[1] as! Double - let yArg = args[2] as! Double + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration do { - try api.pigeonDelegate.setContentOffset(pigeonApi: api, pigeonInstance: pigeonInstanceArg, x: xArg, y: yArg) - reply(wrapResult(nil)) + let result = try api.pigeonDelegate.getUserContentController( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) } catch { reply(wrapError(error)) } } } else { - setContentOffsetChannel.setMessageHandler(nil) + getUserContentControllerChannel.setMessageHandler(nil) } - #endif - #if !os(macOS) - let setDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setDelegate", binaryMessenger: binaryMessenger, codec: codec) + let setWebsiteDataStoreChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setWebsiteDataStore", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setDelegateChannel.setMessageHandler { message, reply in + setWebsiteDataStoreChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let delegateArg: UIScrollViewDelegate? = nilOrValue(args[1]) + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let dataStoreArg = args[1] as! WKWebsiteDataStore do { - try api.pigeonDelegate.setDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + try api.pigeonDelegate.setWebsiteDataStore( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, dataStore: dataStoreArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - setDelegateChannel.setMessageHandler(nil) + setWebsiteDataStoreChannel.setMessageHandler(nil) } - #endif - #if !os(macOS) - let setBouncesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBounces", binaryMessenger: binaryMessenger, codec: codec) + let getWebsiteDataStoreChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getWebsiteDataStore", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setBouncesChannel.setMessageHandler { message, reply in + getWebsiteDataStoreChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration do { - try api.pigeonDelegate.setBounces(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) + let result = try api.pigeonDelegate.getWebsiteDataStore( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) } catch { reply(wrapError(error)) } } } else { - setBouncesChannel.setMessageHandler(nil) + getWebsiteDataStoreChannel.setMessageHandler(nil) } - #endif - #if !os(macOS) - let setBouncesHorizontallyChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBouncesHorizontally", binaryMessenger: binaryMessenger, codec: codec) + let setPreferencesChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setPreferences", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setBouncesHorizontallyChannel.setMessageHandler { message, reply in + setPreferencesChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let preferencesArg = args[1] as! WKPreferences do { - try api.pigeonDelegate.setBouncesHorizontally(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + try api.pigeonDelegate.setPreferences( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, preferences: preferencesArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - setBouncesHorizontallyChannel.setMessageHandler(nil) + setPreferencesChannel.setMessageHandler(nil) } - #endif - #if !os(macOS) - let setBouncesVerticallyChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setBouncesVertically", binaryMessenger: binaryMessenger, codec: codec) + let getPreferencesChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getPreferences", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setBouncesVerticallyChannel.setMessageHandler { message, reply in + getPreferencesChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration do { - try api.pigeonDelegate.setBouncesVertically(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) - reply(wrapResult(nil)) + let result = try api.pigeonDelegate.getPreferences( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) } catch { reply(wrapError(error)) } } } else { - setBouncesVerticallyChannel.setMessageHandler(nil) + getPreferencesChannel.setMessageHandler(nil) } - #endif - #if !os(macOS) - let setAlwaysBounceVerticalChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setAlwaysBounceVertical", binaryMessenger: binaryMessenger, codec: codec) + let setAllowsInlineMediaPlaybackChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setAllowsInlineMediaPlayback", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setAlwaysBounceVerticalChannel.setMessageHandler { message, reply in + setAllowsInlineMediaPlaybackChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let allowArg = args[1] as! Bool do { - try api.pigeonDelegate.setAlwaysBounceVertical(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + try api.pigeonDelegate.setAllowsInlineMediaPlayback( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - setAlwaysBounceVerticalChannel.setMessageHandler(nil) + setAllowsInlineMediaPlaybackChannel.setMessageHandler(nil) } - #endif - #if !os(macOS) - let setAlwaysBounceHorizontalChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.setAlwaysBounceHorizontal", binaryMessenger: binaryMessenger, codec: codec) + let setLimitsNavigationsToAppBoundDomainsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setLimitsNavigationsToAppBoundDomains", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setAlwaysBounceHorizontalChannel.setMessageHandler { message, reply in + setLimitsNavigationsToAppBoundDomainsChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! UIScrollView - let valueArg = args[1] as! Bool + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let limitArg = args[1] as! Bool do { - try api.pigeonDelegate.setAlwaysBounceHorizontal(pigeonApi: api, pigeonInstance: pigeonInstanceArg, value: valueArg) + try api.pigeonDelegate.setLimitsNavigationsToAppBoundDomains( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, limit: limitArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - setAlwaysBounceHorizontalChannel.setMessageHandler(nil) + setLimitsNavigationsToAppBoundDomainsChannel.setMessageHandler(nil) + } + let setMediaTypesRequiringUserActionForPlaybackChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setMediaTypesRequiringUserActionForPlayback", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setMediaTypesRequiringUserActionForPlaybackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let typeArg = args[1] as! AudiovisualMediaType + do { + try api.pigeonDelegate.setMediaTypesRequiringUserActionForPlayback( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, type: typeArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setMediaTypesRequiringUserActionForPlaybackChannel.setMessageHandler(nil) + } + if #available(iOS 13.0.0, macOS 10.15.0, *) { + let getDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getDefaultWebpagePreferences", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getDefaultWebpagePreferencesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + do { + let result = try api.pigeonDelegate.getDefaultWebpagePreferences( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getDefaultWebpagePreferencesChannel.setMessageHandler(nil) + } + } else { + let getDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getDefaultWebpagePreferences", + binaryMessenger: binaryMessenger, codec: codec) + if api != nil { + getDefaultWebpagePreferencesChannel.setMessageHandler { message, reply in + reply( + wrapError( + FlutterError( + code: "PigeonUnsupportedOperationError", + message: + "Call to getDefaultWebpagePreferences requires @available(iOS 13.0.0, macOS 10.15.0, *).", + details: nil + ))) + } + } else { + getDefaultWebpagePreferencesChannel.setMessageHandler(nil) + } } - #endif } - #if !os(macOS) - ///Creates a Dart instance of UIScrollView and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: UIScrollView, completion: @escaping (Result) -> Void) { + ///Creates a Dart instance of WKWebViewConfiguration and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: WKWebViewConfiguration, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -3984,477 +3637,270 @@ final class PigeonApiUIScrollView: PigeonApiProtocolUIScrollView { } } } - #endif -} - -/* -// 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. - -import Foundation -import UIKit - - -/// ProxyApi implementation for `UIScrollView`. -/// -/// 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 ScrollViewProxyAPIDelegate : PigeonApiDelegateUIScrollView { - func getContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView) throws -> [Double] { - return pigeonInstance.contentOffset - } - - func scrollBy(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws { - pigeonInstance.scrollBy(x: x, y: y) - } - - func setContentOffset(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, x: Double, y: Double) throws { - pigeonInstance.setContentOffset(x: x, y: y) - } - - func setDelegate(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, delegate: UIScrollViewDelegate?) throws { - pigeonInstance.delegate = delegate: delegate - } - - func setBounces(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { - pigeonInstance.bounces = value: value - } - - func setBouncesHorizontally(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { - pigeonInstance.bouncesHorizontally = value: value - } - - func setBouncesVertically(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { - pigeonInstance.bouncesVertically = value: value - } - - func setAlwaysBounceVertical(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { - pigeonInstance.alwaysBounceVertical = value: value - } - - func setAlwaysBounceHorizontal(pigeonApi: PigeonApiUIScrollView, pigeonInstance: UIScrollView, value: Bool) throws { - pigeonInstance.alwaysBounceHorizontal = value: value - } - -} -*/ - -/* -// 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. - -import UIKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ScrollViewProxyAPITests: XCTestCase { - func testGetContentOffset() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let value = api.pigeonDelegate.getContentOffset(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getContentOffsetCalled) - XCTAssertEqual(value, instance.getContentOffset()) - } - - func testScrollBy() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let x = 1.0 - let y = 1.0 - api.pigeonDelegate.scrollBy(pigeonApi: api, pigeonInstance: instance, x: x, y: y) - - XCTAssertEqual(instance.scrollByArgs, [x, y]) - } - - func testSetContentOffset() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let x = 1.0 - let y = 1.0 - api.pigeonDelegate.setContentOffset(pigeonApi: api, pigeonInstance: instance, x: x, y: y) - - XCTAssertEqual(instance.setContentOffsetArgs, [x, y]) - } - - func testSetDelegate() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let delegate = TestScrollViewDelegate - api.pigeonDelegate.setDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) - - XCTAssertEqual(instance.setDelegateArgs, [delegate]) - } - - func testSetBounces() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let value = true - api.pigeonDelegate.setBounces(pigeonApi: api, pigeonInstance: instance, value: value) - - XCTAssertEqual(instance.setBouncesArgs, [value]) - } - - func testSetBouncesHorizontally() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let value = true - api.pigeonDelegate.setBouncesHorizontally(pigeonApi: api, pigeonInstance: instance, value: value) - - XCTAssertEqual(instance.setBouncesHorizontallyArgs, [value]) - } - - func testSetBouncesVertically() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let value = true - api.pigeonDelegate.setBouncesVertically(pigeonApi: api, pigeonInstance: instance, value: value) - - XCTAssertEqual(instance.setBouncesVerticallyArgs, [value]) - } - - func testSetAlwaysBounceVertical() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let value = true - api.pigeonDelegate.setAlwaysBounceVertical(pigeonApi: api, pigeonInstance: instance, value: value) - - XCTAssertEqual(instance.setAlwaysBounceVerticalArgs, [value]) - } - - func testSetAlwaysBounceHorizontal() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollView(registrar) - - let instance = TestScrollView() - let value = true - api.pigeonDelegate.setAlwaysBounceHorizontal(pigeonApi: api, pigeonInstance: instance, value: value) - - XCTAssertEqual(instance.setAlwaysBounceHorizontalArgs, [value]) - } - -} -class TestScrollView: UIScrollView { - var getContentOffsetCalled = false - var scrollByArgs: [AnyHashable?]? = nil - var setContentOffsetArgs: [AnyHashable?]? = nil - var setDelegateArgs: [AnyHashable?]? = nil - var setBouncesArgs: [AnyHashable?]? = nil - var setBouncesHorizontallyArgs: [AnyHashable?]? = nil - var setBouncesVerticallyArgs: [AnyHashable?]? = nil - var setAlwaysBounceVerticalArgs: [AnyHashable?]? = nil - var setAlwaysBounceHorizontalArgs: [AnyHashable?]? = nil - - - override func getContentOffset() { - getContentOffsetCalled = true - } - override func scrollBy() { - scrollByArgs = [x, y] - } - override func setContentOffset() { - setContentOffsetArgs = [x, y] - } - override func setDelegate() { - setDelegateArgs = [delegate] - } - override func setBounces() { - setBouncesArgs = [value] - } - override func setBouncesHorizontally() { - setBouncesHorizontallyArgs = [value] - } - override func setBouncesVertically() { - setBouncesVerticallyArgs = [value] - } - override func setAlwaysBounceVertical() { - setAlwaysBounceVerticalArgs = [value] - } - override func setAlwaysBounceHorizontal() { - setAlwaysBounceHorizontalArgs = [value] - } } -*/ - -protocol PigeonApiDelegateWKWebViewConfiguration { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKWebViewConfiguration) throws -> WKWebViewConfiguration - /// The object that coordinates interactions between your app’s native code - /// and the webpage’s scripts and other content. - func setUserContentController(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, controller: WKUserContentController) throws - /// The object that coordinates interactions between your app’s native code - /// and the webpage’s scripts and other content. - func getUserContentController(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKUserContentController - /// The object you use to get and set the site’s cookies and to track the - /// cached data objects. - func setWebsiteDataStore(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, dataStore: WKWebsiteDataStore) throws - /// The object you use to get and set the site’s cookies and to track the - /// cached data objects. - func getWebsiteDataStore(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKWebsiteDataStore - /// The object that manages the preference-related settings for the web view. - func setPreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, preferences: WKPreferences) throws - /// The object that manages the preference-related settings for the web view. - func getPreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKPreferences - /// A Boolean value that indicates whether HTML5 videos play inline or use the - /// native full-screen controller. - func setAllowsInlineMediaPlayback(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, allow: Bool) throws - /// A Boolean value that indicates whether the web view limits navigation to - /// pages within the app’s domain. - func setLimitsNavigationsToAppBoundDomains(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, limit: Bool) throws - /// The media types that require a user gesture to begin playing. - func setMediaTypesRequiringUserActionForPlayback(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, type: AudiovisualMediaType) throws - /// The default preferences to use when loading and rendering content. - @available(iOS 13.0.0, macOS 10.15.0, *) - func getDefaultWebpagePreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKWebpagePreferences +protocol PigeonApiDelegateWKUserContentController { + /// Installs a message handler that you can call from your JavaScript code. + func addScriptMessageHandler( + pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, + handler: WKScriptMessageHandler, name: String) throws + /// Uninstalls the custom message handler with the specified name from your + /// JavaScript code. + func removeScriptMessageHandler( + pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, + name: String) throws + /// Uninstalls all custom message handlers associated with the user content + /// controller. + func removeAllScriptMessageHandlers( + pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws + /// Injects the specified script into the webpage’s content. + func addUserScript( + pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, + userScript: WKUserScript) throws + /// Removes all user scripts from the web view. + func removeAllUserScripts( + pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws } -protocol PigeonApiProtocolWKWebViewConfiguration { +protocol PigeonApiProtocolWKUserContentController { } -final class PigeonApiWKWebViewConfiguration: PigeonApiProtocolWKWebViewConfiguration { +final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentController { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKWebViewConfiguration + let pigeonDelegate: PigeonApiDelegateWKUserContentController ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebViewConfiguration) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKUserContentController + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebViewConfiguration?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUserContentController? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) + let addScriptMessageHandlerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.addScriptMessageHandler", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - pigeonDefaultConstructorChannel.setMessageHandler { message, reply in + addScriptMessageHandlerChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonIdentifierArg = args[0] as! Int64 + let pigeonInstanceArg = args[0] as! WKUserContentController + let handlerArg = args[1] as! WKScriptMessageHandler + let nameArg = args[2] as! String do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( -try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), -withIdentifier: pigeonIdentifierArg) + try api.pigeonDelegate.addScriptMessageHandler( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, handler: handlerArg, name: nameArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - pigeonDefaultConstructorChannel.setMessageHandler(nil) + addScriptMessageHandlerChannel.setMessageHandler(nil) } - let setUserContentControllerChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setUserContentController", binaryMessenger: binaryMessenger, codec: codec) + let removeScriptMessageHandlerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeScriptMessageHandler", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setUserContentControllerChannel.setMessageHandler { message, reply in + removeScriptMessageHandlerChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration - let controllerArg = args[1] as! WKUserContentController + let pigeonInstanceArg = args[0] as! WKUserContentController + let nameArg = args[1] as! String do { - try api.pigeonDelegate.setUserContentController(pigeonApi: api, pigeonInstance: pigeonInstanceArg, controller: controllerArg) + try api.pigeonDelegate.removeScriptMessageHandler( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, name: nameArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - setUserContentControllerChannel.setMessageHandler(nil) + removeScriptMessageHandlerChannel.setMessageHandler(nil) } - let getUserContentControllerChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getUserContentController", binaryMessenger: binaryMessenger, codec: codec) + let removeAllScriptMessageHandlersChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeAllScriptMessageHandlers", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - getUserContentControllerChannel.setMessageHandler { message, reply in + removeAllScriptMessageHandlersChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let pigeonInstanceArg = args[0] as! WKUserContentController do { - let result = try api.pigeonDelegate.getUserContentController(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) + try api.pigeonDelegate.removeAllScriptMessageHandlers( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - getUserContentControllerChannel.setMessageHandler(nil) + removeAllScriptMessageHandlersChannel.setMessageHandler(nil) } - let setWebsiteDataStoreChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setWebsiteDataStore", binaryMessenger: binaryMessenger, codec: codec) + let addUserScriptChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.addUserScript", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setWebsiteDataStoreChannel.setMessageHandler { message, reply in + addUserScriptChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration - let dataStoreArg = args[1] as! WKWebsiteDataStore + let pigeonInstanceArg = args[0] as! WKUserContentController + let userScriptArg = args[1] as! WKUserScript do { - try api.pigeonDelegate.setWebsiteDataStore(pigeonApi: api, pigeonInstance: pigeonInstanceArg, dataStore: dataStoreArg) + try api.pigeonDelegate.addUserScript( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, userScript: userScriptArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - setWebsiteDataStoreChannel.setMessageHandler(nil) + addUserScriptChannel.setMessageHandler(nil) } - let getWebsiteDataStoreChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getWebsiteDataStore", binaryMessenger: binaryMessenger, codec: codec) + let removeAllUserScriptsChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeAllUserScripts", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - getWebsiteDataStoreChannel.setMessageHandler { message, reply in + removeAllUserScriptsChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration + let pigeonInstanceArg = args[0] as! WKUserContentController do { - let result = try api.pigeonDelegate.getWebsiteDataStore(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) + try api.pigeonDelegate.removeAllUserScripts( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - getWebsiteDataStoreChannel.setMessageHandler(nil) + removeAllUserScriptsChannel.setMessageHandler(nil) } - let setPreferencesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setPreferences", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setPreferencesChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration - let preferencesArg = args[1] as! WKPreferences - do { - try api.pigeonDelegate.setPreferences(pigeonApi: api, pigeonInstance: pigeonInstanceArg, preferences: preferencesArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + } + + ///Creates a Dart instance of WKUserContentController and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: WKUserContentController, + completion: @escaping (Result) -> Void + ) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) } } - } else { - setPreferencesChannel.setMessageHandler(nil) } - let getPreferencesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getPreferences", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getPreferencesChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration - do { - let result = try api.pigeonDelegate.getPreferences(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } - } - } else { - getPreferencesChannel.setMessageHandler(nil) - } - let setAllowsInlineMediaPlaybackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setAllowsInlineMediaPlayback", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setAllowsInlineMediaPlaybackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration - let allowArg = args[1] as! Bool - do { - try api.pigeonDelegate.setAllowsInlineMediaPlayback(pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } - } else { - setAllowsInlineMediaPlaybackChannel.setMessageHandler(nil) - } - let setLimitsNavigationsToAppBoundDomainsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setLimitsNavigationsToAppBoundDomains", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setLimitsNavigationsToAppBoundDomainsChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration - let limitArg = args[1] as! Bool - do { - try api.pigeonDelegate.setLimitsNavigationsToAppBoundDomains(pigeonApi: api, pigeonInstance: pigeonInstanceArg, limit: limitArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } - } else { - setLimitsNavigationsToAppBoundDomainsChannel.setMessageHandler(nil) - } - let setMediaTypesRequiringUserActionForPlaybackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.setMediaTypesRequiringUserActionForPlayback", binaryMessenger: binaryMessenger, codec: codec) + } +} +protocol PigeonApiDelegateWKPreferences { + /// A Boolean value that indicates whether JavaScript is enabled. + func setJavaScriptEnabled( + pigeonApi: PigeonApiWKPreferences, pigeonInstance: WKPreferences, enabled: Bool) throws +} + +protocol PigeonApiProtocolWKPreferences { +} + +final class PigeonApiWKPreferences: PigeonApiProtocolWKPreferences { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateWKPreferences + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) + } + + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKPreferences + ) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate + } + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKPreferences? + ) { + let codec: FlutterStandardMessageCodec = + api != nil + ? FlutterStandardMessageCodec( + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) + : FlutterStandardMessageCodec.sharedInstance() + let setJavaScriptEnabledChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferences.setJavaScriptEnabled", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - setMediaTypesRequiringUserActionForPlaybackChannel.setMessageHandler { message, reply in + setJavaScriptEnabledChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration - let typeArg = args[1] as! AudiovisualMediaType + let pigeonInstanceArg = args[0] as! WKPreferences + let enabledArg = args[1] as! Bool do { - try api.pigeonDelegate.setMediaTypesRequiringUserActionForPlayback(pigeonApi: api, pigeonInstance: pigeonInstanceArg, type: typeArg) + try api.pigeonDelegate.setJavaScriptEnabled( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, enabled: enabledArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - setMediaTypesRequiringUserActionForPlaybackChannel.setMessageHandler(nil) - } - if #available(iOS 13.0.0, macOS 10.15.0, *) { - let getDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getDefaultWebpagePreferences", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getDefaultWebpagePreferencesChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebViewConfiguration - do { - let result = try api.pigeonDelegate.getDefaultWebpagePreferences(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) - } - } - } else { - getDefaultWebpagePreferencesChannel.setMessageHandler(nil) - } - } else { - let getDefaultWebpagePreferencesChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.getDefaultWebpagePreferences", - binaryMessenger: binaryMessenger, codec: codec) - if api != nil { - getDefaultWebpagePreferencesChannel.setMessageHandler { message, reply in - reply(wrapError(FlutterError(code: "PigeonUnsupportedOperationError", - message: "Call to getDefaultWebpagePreferences requires @available(iOS 13.0.0, macOS 10.15.0, *).", - details: nil - ))) - } - } else { - getDefaultWebpagePreferencesChannel.setMessageHandler(nil) - } + setJavaScriptEnabledChannel.setMessageHandler(nil) } } - ///Creates a Dart instance of WKWebViewConfiguration and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKWebViewConfiguration, completion: @escaping (Result) -> Void) { + ///Creates a Dart instance of WKPreferences and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: WKPreferences, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfiguration.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferences.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -4472,695 +3918,217 @@ withIdentifier: pigeonIdentifierArg) } } } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKWebViewConfiguration`. -/// -/// 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 WebViewConfigurationProxyAPIDelegate : PigeonApiDelegateWKWebViewConfiguration { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKWebViewConfiguration) throws -> WKWebViewConfiguration { - return WKWebViewConfiguration() - } - - func setUserContentController(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, controller: WKUserContentController) throws { - pigeonInstance.userContentController = controller: controller - } - - func getUserContentController(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKUserContentController { - return pigeonInstance.userContentController - } - - func setWebsiteDataStore(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, dataStore: WKWebsiteDataStore) throws { - pigeonInstance.websiteDataStore = dataStore: dataStore - } - - func getWebsiteDataStore(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKWebsiteDataStore { - return pigeonInstance.websiteDataStore - } - - func setPreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, preferences: WKPreferences) throws { - pigeonInstance.preferences = preferences: preferences - } - - func getPreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKPreferences { - return pigeonInstance.preferences - } - - func setAllowsInlineMediaPlayback(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, allow: Bool) throws { - pigeonInstance.allowsInlineMediaPlayback = allow: allow - } - - func setLimitsNavigationsToAppBoundDomains(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, limit: Bool) throws { - pigeonInstance.limitsNavigationsToAppBoundDomains = limit: limit - } - - func setMediaTypesRequiringUserActionForPlayback(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration, type: AudiovisualMediaType) throws { - pigeonInstance.mediaTypesRequiringUserActionForPlayback = type: type - } - - func getDefaultWebpagePreferences(pigeonApi: PigeonApiWKWebViewConfiguration, pigeonInstance: WKWebViewConfiguration) throws -> WKWebpagePreferences { - return pigeonInstance.defaultWebpagePreferences - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class WebViewConfigurationProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) - XCTAssertNotNil(instance) - } - - func testSetUserContentController() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let controller = TestUserContentController - api.pigeonDelegate.setUserContentController(pigeonApi: api, pigeonInstance: instance, controller: controller) - - XCTAssertEqual(instance.setUserContentControllerArgs, [controller]) - } - - func testGetUserContentController() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let value = api.pigeonDelegate.getUserContentController(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getUserContentControllerCalled) - XCTAssertEqual(value, instance.getUserContentController()) - } - - func testSetWebsiteDataStore() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let dataStore = TestWebsiteDataStore - api.pigeonDelegate.setWebsiteDataStore(pigeonApi: api, pigeonInstance: instance, dataStore: dataStore) - - XCTAssertEqual(instance.setWebsiteDataStoreArgs, [dataStore]) - } - - func testGetWebsiteDataStore() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let value = api.pigeonDelegate.getWebsiteDataStore(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getWebsiteDataStoreCalled) - XCTAssertEqual(value, instance.getWebsiteDataStore()) - } - - func testSetPreferences() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let preferences = TestPreferences - api.pigeonDelegate.setPreferences(pigeonApi: api, pigeonInstance: instance, preferences: preferences) - - XCTAssertEqual(instance.setPreferencesArgs, [preferences]) - } - - func testGetPreferences() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let value = api.pigeonDelegate.getPreferences(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getPreferencesCalled) - XCTAssertEqual(value, instance.getPreferences()) - } - - func testSetAllowsInlineMediaPlayback() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let allow = true - api.pigeonDelegate.setAllowsInlineMediaPlayback(pigeonApi: api, pigeonInstance: instance, allow: allow) - - XCTAssertEqual(instance.setAllowsInlineMediaPlaybackArgs, [allow]) - } - - func testSetLimitsNavigationsToAppBoundDomains() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let limit = true - api.pigeonDelegate.setLimitsNavigationsToAppBoundDomains(pigeonApi: api, pigeonInstance: instance, limit: limit) - - XCTAssertEqual(instance.setLimitsNavigationsToAppBoundDomainsArgs, [limit]) - } - - func testSetMediaTypesRequiringUserActionForPlayback() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let type = .none - api.pigeonDelegate.setMediaTypesRequiringUserActionForPlayback(pigeonApi: api, pigeonInstance: instance, type: type) - - XCTAssertEqual(instance.setMediaTypesRequiringUserActionForPlaybackArgs, [type]) - } - - func testGetDefaultWebpagePreferences() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebViewConfiguration(registrar) - - let instance = TestWebViewConfiguration() - let value = api.pigeonDelegate.getDefaultWebpagePreferences(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getDefaultWebpagePreferencesCalled) - XCTAssertEqual(value, instance.getDefaultWebpagePreferences()) - } - -} -class TestWebViewConfiguration: WKWebViewConfiguration { - var setUserContentControllerArgs: [AnyHashable?]? = nil - var getUserContentControllerCalled = false - var setWebsiteDataStoreArgs: [AnyHashable?]? = nil - var getWebsiteDataStoreCalled = false - var setPreferencesArgs: [AnyHashable?]? = nil - var getPreferencesCalled = false - var setAllowsInlineMediaPlaybackArgs: [AnyHashable?]? = nil - var setLimitsNavigationsToAppBoundDomainsArgs: [AnyHashable?]? = nil - var setMediaTypesRequiringUserActionForPlaybackArgs: [AnyHashable?]? = nil - var getDefaultWebpagePreferencesCalled = false - - - override func setUserContentController() { - setUserContentControllerArgs = [controller] - } - override func getUserContentController() { - getUserContentControllerCalled = true - } - override func setWebsiteDataStore() { - setWebsiteDataStoreArgs = [dataStore] - } - override func getWebsiteDataStore() { - getWebsiteDataStoreCalled = true - } - override func setPreferences() { - setPreferencesArgs = [preferences] - } - override func getPreferences() { - getPreferencesCalled = true - } - override func setAllowsInlineMediaPlayback() { - setAllowsInlineMediaPlaybackArgs = [allow] - } - override func setLimitsNavigationsToAppBoundDomains() { - setLimitsNavigationsToAppBoundDomainsArgs = [limit] - } - override func setMediaTypesRequiringUserActionForPlayback() { - setMediaTypesRequiringUserActionForPlaybackArgs = [type] - } - override func getDefaultWebpagePreferences() { - getDefaultWebpagePreferencesCalled = true - } -} -*/ - -protocol PigeonApiDelegateWKUserContentController { - /// Installs a message handler that you can call from your JavaScript code. - func addScriptMessageHandler(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, handler: WKScriptMessageHandler, name: String) throws - /// Uninstalls the custom message handler with the specified name from your - /// JavaScript code. - func removeScriptMessageHandler(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, name: String) throws - /// Uninstalls all custom message handlers associated with the user content - /// controller. - func removeAllScriptMessageHandlers(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws - /// Injects the specified script into the webpage’s content. - func addUserScript(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, userScript: WKUserScript) throws - /// Removes all user scripts from the web view. - func removeAllUserScripts(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws +protocol PigeonApiDelegateWKScriptMessageHandler { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKScriptMessageHandler) throws + -> WKScriptMessageHandler } -protocol PigeonApiProtocolWKUserContentController { +protocol PigeonApiProtocolWKScriptMessageHandler { + /// Tells the handler that a webpage sent a script message. + func didReceiveScriptMessage( + pigeonInstance pigeonInstanceArg: WKScriptMessageHandler, + controller controllerArg: WKUserContentController, message messageArg: WKScriptMessage, + completion: @escaping (Result) -> Void) } -final class PigeonApiWKUserContentController: PigeonApiProtocolWKUserContentController { +final class PigeonApiWKScriptMessageHandler: PigeonApiProtocolWKScriptMessageHandler { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKUserContentController + let pigeonDelegate: PigeonApiDelegateWKScriptMessageHandler ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUserContentController) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKScriptMessageHandler + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUserContentController?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKScriptMessageHandler? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let addScriptMessageHandlerChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.addScriptMessageHandler", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandler.pigeon_defaultConstructor", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { - addScriptMessageHandlerChannel.setMessageHandler { message, reply in + pigeonDefaultConstructorChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKUserContentController - let handlerArg = args[1] as! WKScriptMessageHandler - let nameArg = args[2] as! String + let pigeonIdentifierArg = args[0] as! Int64 do { - try api.pigeonDelegate.addScriptMessageHandler(pigeonApi: api, pigeonInstance: pigeonInstanceArg, handler: handlerArg, name: nameArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) } } } else { - addScriptMessageHandlerChannel.setMessageHandler(nil) + pigeonDefaultConstructorChannel.setMessageHandler(nil) } - let removeScriptMessageHandlerChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeScriptMessageHandler", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - removeScriptMessageHandlerChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKUserContentController - let nameArg = args[1] as! String - do { - try api.pigeonDelegate.removeScriptMessageHandler(pigeonApi: api, pigeonInstance: pigeonInstanceArg, name: nameArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } + } + + ///Creates a Dart instance of WKScriptMessageHandler and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: WKScriptMessageHandler, + completion: @escaping (Result) -> Void + ) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) } else { - removeScriptMessageHandlerChannel.setMessageHandler(nil) - } - let removeAllScriptMessageHandlersChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeAllScriptMessageHandlers", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - removeAllScriptMessageHandlersChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKUserContentController - do { - try api.pigeonDelegate.removeAllScriptMessageHandlers(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } - } else { - removeAllScriptMessageHandlersChannel.setMessageHandler(nil) - } - let addUserScriptChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.addUserScript", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - addUserScriptChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKUserContentController - let userScriptArg = args[1] as! WKUserScript - do { - try api.pigeonDelegate.addUserScript(pigeonApi: api, pigeonInstance: pigeonInstanceArg, userScript: userScriptArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } - } else { - addUserScriptChannel.setMessageHandler(nil) - } - let removeAllUserScriptsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.removeAllUserScripts", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - removeAllUserScriptsChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKUserContentController - do { - try api.pigeonDelegate.removeAllUserScripts(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } - } else { - removeAllUserScriptsChannel.setMessageHandler(nil) + completion( + .failure( + PigeonError( + code: "new-instance-error", + message: + "Error: Attempting to create a new Dart instance of WKScriptMessageHandler, but the class has a nonnull callback method.", + details: ""))) } } - - ///Creates a Dart instance of WKUserContentController and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKUserContentController, completion: @escaping (Result) -> Void) { + /// Tells the handler that a webpage sent a script message. + func didReceiveScriptMessage( + pigeonInstance pigeonInstanceArg: WKScriptMessageHandler, + controller controllerArg: WKUserContentController, message messageArg: WKScriptMessage, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentController.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } - } + return } - } -} - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKUserContentController`. -/// -/// 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 UserContentControllerProxyAPIDelegate : PigeonApiDelegateWKUserContentController { - func addScriptMessageHandler(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, handler: WKScriptMessageHandler, name: String) throws { - pigeonInstance.addScriptMessageHandler(handler: handler, name: name) - } - - func removeScriptMessageHandler(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, name: String) throws { - pigeonInstance.removeScriptMessageHandler(name: name) - } - - func removeAllScriptMessageHandlers(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws { - pigeonInstance.removeAllScriptMessageHandlers() - } - - func addUserScript(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController, userScript: WKUserScript) throws { - pigeonInstance.addUserScript(userScript: userScript) - } - - func removeAllUserScripts(pigeonApi: PigeonApiWKUserContentController, pigeonInstance: WKUserContentController) throws { - pigeonInstance.removeAllUserScripts() - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class UserContentControllerProxyAPITests: XCTestCase { - func testAddScriptMessageHandler() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) - - let instance = TestUserContentController() - let handler = TestScriptMessageHandler - let name = "myString" - api.pigeonDelegate.addScriptMessageHandler(pigeonApi: api, pigeonInstance: instance, handler: handler, name: name) - - XCTAssertEqual(instance.addScriptMessageHandlerArgs, [handler, name]) - } - - func testRemoveScriptMessageHandler() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) - - let instance = TestUserContentController() - let name = "myString" - api.pigeonDelegate.removeScriptMessageHandler(pigeonApi: api, pigeonInstance: instance, name: name) - - XCTAssertEqual(instance.removeScriptMessageHandlerArgs, [name]) - } - - func testRemoveAllScriptMessageHandlers() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) - - let instance = TestUserContentController() - api.pigeonDelegate.removeAllScriptMessageHandlers(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.removeAllScriptMessageHandlersCalled) - } - - func testAddUserScript() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) - - let instance = TestUserContentController() - let userScript = TestUserScript - api.pigeonDelegate.addUserScript(pigeonApi: api, pigeonInstance: instance, userScript: userScript) - - XCTAssertEqual(instance.addUserScriptArgs, [userScript]) - } - - func testRemoveAllUserScripts() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUserContentController(registrar) - - let instance = TestUserContentController() - api.pigeonDelegate.removeAllUserScripts(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.removeAllUserScriptsCalled) - } - -} -class TestUserContentController: WKUserContentController { - var addScriptMessageHandlerArgs: [AnyHashable?]? = nil - var removeScriptMessageHandlerArgs: [AnyHashable?]? = nil - var removeAllScriptMessageHandlersCalled = false - var addUserScriptArgs: [AnyHashable?]? = nil - var removeAllUserScriptsCalled = false - - - override func addScriptMessageHandler() { - addScriptMessageHandlerArgs = [handler, name] - } - override func removeScriptMessageHandler() { - removeScriptMessageHandlerArgs = [name] - } - override func removeAllScriptMessageHandlers() { - removeAllScriptMessageHandlersCalled = true - } - override func addUserScript() { - addUserScriptArgs = [userScript] - } - override func removeAllUserScripts() { - removeAllUserScriptsCalled = true - } -} -*/ - -protocol PigeonApiDelegateWKPreferences { - /// A Boolean value that indicates whether JavaScript is enabled. - func setJavaScriptEnabled(pigeonApi: PigeonApiWKPreferences, pigeonInstance: WKPreferences, enabled: Bool) throws -} - -protocol PigeonApiProtocolWKPreferences { -} - -final class PigeonApiWKPreferences: PigeonApiProtocolWKPreferences { - unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKPreferences - ///An implementation of [NSObject] used to access callback methods - var pigeonApiNSObject: PigeonApiNSObject { - return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) - } - - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKPreferences) { - self.pigeonRegistrar = pigeonRegistrar - self.pigeonDelegate = delegate - } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKPreferences?) { - let codec: FlutterStandardMessageCodec = - api != nil - ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) - : FlutterStandardMessageCodec.sharedInstance() - let setJavaScriptEnabledChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferences.setJavaScriptEnabled", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setJavaScriptEnabledChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKPreferences - let enabledArg = args[1] as! Bool - do { - try api.pigeonDelegate.setJavaScriptEnabled(pigeonApi: api, pigeonInstance: pigeonInstanceArg, enabled: enabledArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandler.didReceiveScriptMessage" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, controllerArg, messageArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return } - } else { - setJavaScriptEnabledChannel.setMessageHandler(nil) - } - } - - ///Creates a Dart instance of WKPreferences and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKPreferences, completion: @escaping (Result) -> Void) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferences.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) } } } -} - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKPreferences`. -/// -/// 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 PreferencesProxyAPIDelegate : PigeonApiDelegateWKPreferences { - func setJavaScriptEnabled(pigeonApi: PigeonApiWKPreferences, pigeonInstance: WKPreferences, enabled: Bool) throws { - pigeonInstance.javaScriptEnabled = enabled: enabled - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class PreferencesProxyAPITests: XCTestCase { - func testSetJavaScriptEnabled() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKPreferences(registrar) - - let instance = TestPreferences() - let enabled = true - api.pigeonDelegate.setJavaScriptEnabled(pigeonApi: api, pigeonInstance: instance, enabled: enabled) - - XCTAssertEqual(instance.setJavaScriptEnabledArgs, [enabled]) - } - -} -class TestPreferences: WKPreferences { - var setJavaScriptEnabledArgs: [AnyHashable?]? = nil - - override func setJavaScriptEnabled() { - setJavaScriptEnabledArgs = [enabled] - } } -*/ - -protocol PigeonApiDelegateWKScriptMessageHandler { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKScriptMessageHandler) throws -> WKScriptMessageHandler +protocol PigeonApiDelegateWKNavigationDelegate { + func pigeonDefaultConstructor(pigeonApi: PigeonApiWKNavigationDelegate) throws + -> WKNavigationDelegate } -protocol PigeonApiProtocolWKScriptMessageHandler { - /// Tells the handler that a webpage sent a script message. - func didReceiveScriptMessage(pigeonInstance pigeonInstanceArg: WKScriptMessageHandler, controller controllerArg: WKUserContentController, message messageArg: WKScriptMessage, completion: @escaping (Result) -> Void) +protocol PigeonApiProtocolWKNavigationDelegate { + /// Tells the delegate that navigation is complete. + func didFinishNavigation( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + url urlArg: String?, completion: @escaping (Result) -> Void) + /// Tells the delegate that navigation from the main frame has started. + func didStartProvisionalNavigation( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + url urlArg: String?, completion: @escaping (Result) -> Void) + /// Asks the delegate for permission to navigate to new content based on the + /// specified action information. + func decidePolicyForNavigationAction( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + navigationAction navigationActionArg: WKNavigationAction, + completion: @escaping (Result) -> Void) + /// Asks the delegate for permission to navigate to new content after the + /// response to the navigation request is known. + func decidePolicyForNavigationResponse( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + navigationResponse navigationResponseArg: WKNavigationResponse, + completion: @escaping (Result) -> Void) + /// Tells the delegate that an error occurred during navigation. + func didFailNavigation( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + error errorArg: NSError, completion: @escaping (Result) -> Void) + /// Tells the delegate that an error occurred during the early navigation + /// process. + func didFailProvisionalNavigation( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + error errorArg: NSError, completion: @escaping (Result) -> Void) + /// Tells the delegate that the web view’s content process was terminated. + func webViewWebContentProcessDidTerminate( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + completion: @escaping (Result) -> Void) + /// Asks the delegate to respond to an authentication challenge. + /// + /// This return value expects a List with: + /// + /// 1. `UrlSessionAuthChallengeDisposition` + /// 2. A nullable map to instantiate a `URLCredential`. The map structure is + /// [ + /// "user": "", + /// "password": "", + /// "persistence": , + /// ] + func didReceiveAuthenticationChallenge( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + challenge challengeArg: URLAuthenticationChallenge, + completion: @escaping (Result<[Any?], PigeonError>) -> Void) } -final class PigeonApiWKScriptMessageHandler: PigeonApiProtocolWKScriptMessageHandler { +final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKScriptMessageHandler + let pigeonDelegate: PigeonApiDelegateWKNavigationDelegate ///An implementation of [NSObject] used to access callback methods var pigeonApiNSObject: PigeonApiNSObject { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKScriptMessageHandler) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKNavigationDelegate + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKScriptMessageHandler?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKNavigationDelegate? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandler.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.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) + try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -5171,26 +4139,33 @@ withIdentifier: pigeonIdentifierArg) } } - ///Creates a Dart instance of WKScriptMessageHandler and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKScriptMessageHandler, completion: @escaping (Result) -> Void) { + ///Creates a Dart instance of WKNavigationDelegate and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: WKNavigationDelegate, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { + } else { completion( .failure( PigeonError( code: "new-instance-error", - message: "Error: Attempting to create a new Dart instance of WKScriptMessageHandler, but the class has a nonnull callback method.", details: ""))) + message: + "Error: Attempting to create a new Dart instance of WKNavigationDelegate, but the class has a nonnull callback method.", + details: ""))) } } - /// Tells the handler that a webpage sent a script message. - func didReceiveScriptMessage(pigeonInstance pigeonInstanceArg: WKScriptMessageHandler, controller controllerArg: WKUserContentController, message messageArg: WKScriptMessage, completion: @escaping (Result) -> Void) { + /// Tells the delegate that navigation is complete. + func didFinishNavigation( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + url urlArg: String?, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5201,204 +4176,10 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandler.didReceiveScriptMessage" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, controllerArg, messageArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } - } - } - -} - -/* -// 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. - -import Foundation -import WebKit - -/// Implementation of `WKScriptMessageHandler` that calls to Dart in callback methods. -class ScriptMessageHandlerImpl: WKScriptMessageHandler { - let api: PigeonApiProtocolWKScriptMessageHandler - - init(api: PigeonApiProtocolWKScriptMessageHandler) { - self.api = api - } - - func fixMe() { - api.didReceiveScriptMessage(pigeonInstance: self, controller: controller, message: message) { _ in } - } -} - -/// ProxyApi implementation for `WKScriptMessageHandler`. -/// -/// 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 ScriptMessageHandlerProxyAPIDelegate : PigeonApiDelegateWKScriptMessageHandler { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKScriptMessageHandler) throws -> WKScriptMessageHandler { - return WKScriptMessageHandlerImpl(api: pigeonApi) - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ScriptMessageHandlerProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKScriptMessageHandler(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) - XCTAssertNotNil(instance) - } - - func testDidReceiveScriptMessage() { - let api = TestScriptMessageHandlerApi() - let instance = ScriptMessageHandlerImpl(api: api) - let controller = TestUserContentController - let message = TestScriptMessage - instance.didReceiveScriptMessage(controller: controller, message: message) - - XCTAssertEqual(api.didReceiveScriptMessageArgs, [controller, message]) - } - -} -class TestScriptMessageHandlerApi: PigeonApiProtocolWKScriptMessageHandler { - var didReceiveScriptMessageArgs: [AnyHashable?]? = nil - - func didReceiveScriptMessage(controller: WKUserContentController, message: WKScriptMessage) throws { - didReceiveScriptMessageArgs = [controllerArg, messageArg] - } -} -*/ - -protocol PigeonApiDelegateWKNavigationDelegate { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKNavigationDelegate) throws -> WKNavigationDelegate -} - -protocol PigeonApiProtocolWKNavigationDelegate { - /// Tells the delegate that navigation is complete. - func didFinishNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, url urlArg: String?, completion: @escaping (Result) -> Void) - /// Tells the delegate that navigation from the main frame has started. - func didStartProvisionalNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, url urlArg: String?, completion: @escaping (Result) -> Void) - /// Asks the delegate for permission to navigate to new content based on the - /// specified action information. - func decidePolicyForNavigationAction(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, navigationAction navigationActionArg: WKNavigationAction, completion: @escaping (Result) -> Void) - /// Asks the delegate for permission to navigate to new content after the - /// response to the navigation request is known. - func decidePolicyForNavigationResponse(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, navigationResponse navigationResponseArg: WKNavigationResponse, completion: @escaping (Result) -> Void) - /// Tells the delegate that an error occurred during navigation. - func didFailNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, error errorArg: NSError, completion: @escaping (Result) -> Void) - /// Tells the delegate that an error occurred during the early navigation - /// process. - func didFailProvisionalNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, error errorArg: NSError, completion: @escaping (Result) -> Void) - /// Tells the delegate that the web view’s content process was terminated. - func webViewWebContentProcessDidTerminate(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, completion: @escaping (Result) -> Void) - /// Asks the delegate to respond to an authentication challenge. - /// - /// This return value expects a List with: - /// - /// 1. `UrlSessionAuthChallengeDisposition` - /// 2. A nullable map to instantiate a `URLCredential`. The map structure is - /// [ - /// "user": "", - /// "password": "", - /// "persistence": , - /// ] - func didReceiveAuthenticationChallenge(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, challenge challengeArg: URLAuthenticationChallenge, completion: @escaping (Result<[Any?], PigeonError>) -> Void) -} - -final class PigeonApiWKNavigationDelegate: PigeonApiProtocolWKNavigationDelegate { - unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateWKNavigationDelegate - ///An implementation of [NSObject] used to access callback methods - var pigeonApiNSObject: PigeonApiNSObject { - return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) - } - - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKNavigationDelegate) { - self.pigeonRegistrar = pigeonRegistrar - self.pigeonDelegate = delegate - } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKNavigationDelegate?) { - let codec: FlutterStandardMessageCodec = - api != nil - ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) - : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.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) - } - } - - ///Creates a Dart instance of WKNavigationDelegate and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKNavigationDelegate, completion: @escaping (Result) -> Void) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - completion( - .failure( - PigeonError( - code: "new-instance-error", - message: "Error: Attempting to create a new Dart instance of WKNavigationDelegate, but the class has a nonnull callback method.", details: ""))) - } - } - /// Tells the delegate that navigation is complete. - func didFinishNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, url urlArg: String?, completion: @escaping (Result) -> Void) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - return - } - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFinishNavigation" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFinishNavigation" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, urlArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -5416,7 +4197,10 @@ withIdentifier: pigeonIdentifierArg) } /// Tells the delegate that navigation from the main frame has started. - func didStartProvisionalNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, url urlArg: String?, completion: @escaping (Result) -> Void) { + func didStartProvisionalNavigation( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + url urlArg: String?, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5427,8 +4211,10 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didStartProvisionalNavigation" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didStartProvisionalNavigation" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, urlArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -5447,7 +4233,11 @@ withIdentifier: pigeonIdentifierArg) /// Asks the delegate for permission to navigate to new content based on the /// specified action information. - func decidePolicyForNavigationAction(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, navigationAction navigationActionArg: WKNavigationAction, completion: @escaping (Result) -> Void) { + func decidePolicyForNavigationAction( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + navigationAction navigationActionArg: WKNavigationAction, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5458,9 +4248,12 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.decidePolicyForNavigationAction" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, navigationActionArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.decidePolicyForNavigationAction" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, navigationActionArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -5471,7 +4264,11 @@ withIdentifier: pigeonIdentifierArg) let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { - completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) + completion( + .failure( + PigeonError( + code: "null-error", + message: "Flutter api returned null value for non-null return value.", details: ""))) } else { let result = listResponse[0] as! NavigationActionPolicy completion(.success(result)) @@ -5481,7 +4278,11 @@ withIdentifier: pigeonIdentifierArg) /// Asks the delegate for permission to navigate to new content after the /// response to the navigation request is known. - func decidePolicyForNavigationResponse(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, navigationResponse navigationResponseArg: WKNavigationResponse, completion: @escaping (Result) -> Void) { + func decidePolicyForNavigationResponse( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + navigationResponse navigationResponseArg: WKNavigationResponse, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5492,9 +4293,12 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.decidePolicyForNavigationResponse" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, navigationResponseArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.decidePolicyForNavigationResponse" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, navigationResponseArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -5505,7 +4309,11 @@ withIdentifier: pigeonIdentifierArg) let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { - completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) + completion( + .failure( + PigeonError( + code: "null-error", + message: "Flutter api returned null value for non-null return value.", details: ""))) } else { let result = listResponse[0] as! NavigationResponsePolicy completion(.success(result)) @@ -5514,7 +4322,10 @@ withIdentifier: pigeonIdentifierArg) } /// Tells the delegate that an error occurred during navigation. - func didFailNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, error errorArg: NSError, completion: @escaping (Result) -> Void) { + func didFailNavigation( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + error errorArg: NSError, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5525,8 +4336,10 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFailNavigation" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFailNavigation" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, errorArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -5545,7 +4358,10 @@ withIdentifier: pigeonIdentifierArg) /// Tells the delegate that an error occurred during the early navigation /// process. - func didFailProvisionalNavigation(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, error errorArg: NSError, completion: @escaping (Result) -> Void) { + func didFailProvisionalNavigation( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + error errorArg: NSError, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5556,8 +4372,10 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFailProvisionalNavigation" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didFailProvisionalNavigation" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, errorArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -5575,7 +4393,10 @@ withIdentifier: pigeonIdentifierArg) } /// Tells the delegate that the web view’s content process was terminated. - func webViewWebContentProcessDidTerminate(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, completion: @escaping (Result) -> Void) { + func webViewWebContentProcessDidTerminate( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5586,8 +4407,10 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.webViewWebContentProcessDidTerminate" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.webViewWebContentProcessDidTerminate" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -5615,7 +4438,11 @@ withIdentifier: pigeonIdentifierArg) /// "password": "", /// "persistence": , /// ] - func didReceiveAuthenticationChallenge(pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, challenge challengeArg: URLAuthenticationChallenge, completion: @escaping (Result<[Any?], PigeonError>) -> Void) { + func didReceiveAuthenticationChallenge( + pigeonInstance pigeonInstanceArg: WKNavigationDelegate, webView webViewArg: WKWebView, + challenge challengeArg: URLAuthenticationChallenge, + completion: @escaping (Result<[Any?], PigeonError>) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5626,8 +4453,10 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didReceiveAuthenticationChallenge" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegate.didReceiveAuthenticationChallenge" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonInstanceArg, webViewArg, challengeArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -5639,7 +4468,11 @@ withIdentifier: pigeonIdentifierArg) let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { - completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) + completion( + .failure( + PigeonError( + code: "null-error", + message: "Flutter api returned null value for non-null return value.", details: ""))) } else { let result = listResponse[0] as! [Any?] completion(.success(result)) @@ -5648,244 +4481,56 @@ withIdentifier: pigeonIdentifierArg) } } - -/* -// 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. - -import Foundation -import WebKit - -/// Implementation of `WKNavigationDelegate` that calls to Dart in callback methods. -class NavigationDelegateImpl: WKNavigationDelegate { - let api: PigeonApiProtocolWKNavigationDelegate - - init(api: PigeonApiProtocolWKNavigationDelegate) { - self.api = api - } - - func fixMe() { - api.didFinishNavigation(pigeonInstance: self, webView: webView, url: url) { _ in } - } - - func fixMe() { - api.didStartProvisionalNavigation(pigeonInstance: self, webView: webView, url: url) { _ in } - } - - func fixMe() { - api.decidePolicyForNavigationAction(pigeonInstance: self, webView: webView, navigationAction: navigationAction) { _ in } - } - - func fixMe() { - api.decidePolicyForNavigationResponse(pigeonInstance: self, webView: webView, navigationResponse: navigationResponse) { _ in } - } - - func fixMe() { - api.didFailNavigation(pigeonInstance: self, webView: webView, error: error) { _ in } - } - - func fixMe() { - api.didFailProvisionalNavigation(pigeonInstance: self, webView: webView, error: error) { _ in } - } - - func fixMe() { - api.webViewWebContentProcessDidTerminate(pigeonInstance: self, webView: webView) { _ in } - } - - func fixMe() { - api.didReceiveAuthenticationChallenge(pigeonInstance: self, webView: webView, challenge: challenge) { _ in } - } -} - -/// ProxyApi implementation for `WKNavigationDelegate`. -/// -/// 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 NavigationDelegateProxyAPIDelegate : PigeonApiDelegateWKNavigationDelegate { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKNavigationDelegate) throws -> WKNavigationDelegate { - return WKNavigationDelegateImpl(api: pigeonApi) - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class NavigationDelegateProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKNavigationDelegate(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) - XCTAssertNotNil(instance) - } - - func testDidFinishNavigation() { - let api = TestNavigationDelegateApi() - let instance = NavigationDelegateImpl(api: api) - let webView = TestWebView - let url = "myString" - instance.didFinishNavigation(webView: webView, url: url) - - XCTAssertEqual(api.didFinishNavigationArgs, [webView, url]) - } - - func testDidStartProvisionalNavigation() { - let api = TestNavigationDelegateApi() - let instance = NavigationDelegateImpl(api: api) - let webView = TestWebView - let url = "myString" - instance.didStartProvisionalNavigation(webView: webView, url: url) - - XCTAssertEqual(api.didStartProvisionalNavigationArgs, [webView, url]) - } - - func testDecidePolicyForNavigationAction() { - let api = TestNavigationDelegateApi() - let instance = NavigationDelegateImpl(api: api) - let webView = TestWebView - let navigationAction = TestNavigationAction - instance.decidePolicyForNavigationAction(webView: webView, navigationAction: navigationAction) - - XCTAssertEqual(api.decidePolicyForNavigationActionArgs, [webView, navigationAction]) - } - - func testDecidePolicyForNavigationResponse() { - let api = TestNavigationDelegateApi() - let instance = NavigationDelegateImpl(api: api) - let webView = TestWebView - let navigationResponse = TestNavigationResponse - instance.decidePolicyForNavigationResponse(webView: webView, navigationResponse: navigationResponse) - - XCTAssertEqual(api.decidePolicyForNavigationResponseArgs, [webView, navigationResponse]) - } - - func testDidFailNavigation() { - let api = TestNavigationDelegateApi() - let instance = NavigationDelegateImpl(api: api) - let webView = TestWebView - let error = TestError - instance.didFailNavigation(webView: webView, error: error) - - XCTAssertEqual(api.didFailNavigationArgs, [webView, error]) - } - - func testDidFailProvisionalNavigation() { - let api = TestNavigationDelegateApi() - let instance = NavigationDelegateImpl(api: api) - let webView = TestWebView - let error = TestError - instance.didFailProvisionalNavigation(webView: webView, error: error) - - XCTAssertEqual(api.didFailProvisionalNavigationArgs, [webView, error]) - } - - func testWebViewWebContentProcessDidTerminate() { - let api = TestNavigationDelegateApi() - let instance = NavigationDelegateImpl(api: api) - let webView = TestWebView - instance.webViewWebContentProcessDidTerminate(webView: webView) - - XCTAssertEqual(api.webViewWebContentProcessDidTerminateArgs, [webView]) - } - - func testDidReceiveAuthenticationChallenge() { - let api = TestNavigationDelegateApi() - let instance = NavigationDelegateImpl(api: api) - let webView = TestWebView - let challenge = TestAuthenticationChallenge - instance.didReceiveAuthenticationChallenge(webView: webView, challenge: challenge) - - XCTAssertEqual(api.didReceiveAuthenticationChallengeArgs, [webView, challenge]) - } - -} -class TestNavigationDelegateApi: PigeonApiProtocolWKNavigationDelegate { - var didFinishNavigationArgs: [AnyHashable?]? = nil - var didStartProvisionalNavigationArgs: [AnyHashable?]? = nil - var decidePolicyForNavigationActionArgs: [AnyHashable?]? = nil - var decidePolicyForNavigationResponseArgs: [AnyHashable?]? = nil - var didFailNavigationArgs: [AnyHashable?]? = nil - var didFailProvisionalNavigationArgs: [AnyHashable?]? = nil - var webViewWebContentProcessDidTerminateArgs: [AnyHashable?]? = nil - var didReceiveAuthenticationChallengeArgs: [AnyHashable?]? = nil - - func didFinishNavigation(webView: WKWebView, url: String?) throws { - didFinishNavigationArgs = [webViewArg, urlArg] - } - func didStartProvisionalNavigation(webView: WKWebView, url: String?) throws { - didStartProvisionalNavigationArgs = [webViewArg, urlArg] - } - func decidePolicyForNavigationAction(webView: WKWebView, navigationAction: WKNavigationAction) throws -> NavigationActionPolicy { - decidePolicyForNavigationActionArgs = [webViewArg, navigationActionArg] - } - func decidePolicyForNavigationResponse(webView: WKWebView, navigationResponse: WKNavigationResponse) throws -> NavigationResponsePolicy { - decidePolicyForNavigationResponseArgs = [webViewArg, navigationResponseArg] - } - func didFailNavigation(webView: WKWebView, error: NSError) throws { - didFailNavigationArgs = [webViewArg, errorArg] - } - func didFailProvisionalNavigation(webView: WKWebView, error: NSError) throws { - didFailProvisionalNavigationArgs = [webViewArg, errorArg] - } - func webViewWebContentProcessDidTerminate(webView: WKWebView) throws { - webViewWebContentProcessDidTerminateArgs = [webViewArg] - } - func didReceiveAuthenticationChallenge(webView: WKWebView, challenge: URLAuthenticationChallenge) throws -> [Any?] { - didReceiveAuthenticationChallengeArgs = [webViewArg, challengeArg] - } -} -*/ - protocol PigeonApiDelegateNSObject { func pigeonDefaultConstructor(pigeonApi: PigeonApiNSObject) throws -> NSObject /// Registers the observer object to receive KVO notifications for the key /// path relative to the object receiving this message. - func addObserver(pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String, options: [KeyValueObservingOptions]) throws + func addObserver( + pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String, + options: [KeyValueObservingOptions]) throws /// Stops the observer object from receiving change notifications for the /// property specified by the key path relative to the object receiving this /// message. - func removeObserver(pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String) throws + func removeObserver( + pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String) + throws } protocol PigeonApiProtocolNSObject { /// Informs the observing object when the value at the specified key path /// relative to the observed object has changed. - func observeValue(pigeonInstance pigeonInstanceArg: NSObject, keyPath keyPathArg: String?, object objectArg: NSObject?, change changeArg: [KeyValueChangeKey: Any?]?, completion: @escaping (Result) -> Void) + func observeValue( + pigeonInstance pigeonInstanceArg: NSObject, keyPath keyPathArg: String?, + object objectArg: NSObject?, change changeArg: [KeyValueChangeKey: Any?]?, + completion: @escaping (Result) -> Void) } -final class PigeonApiNSObject: PigeonApiProtocolNSObject { +final class PigeonApiNSObject: PigeonApiProtocolNSObject { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateNSObject init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateNSObject) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiNSObject?) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiNSObject?) + { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.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) + try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -5894,7 +4539,9 @@ withIdentifier: pigeonIdentifierArg) } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } - let addObserverChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.addObserver", binaryMessenger: binaryMessenger, codec: codec) + let addObserverChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.addObserver", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { addObserverChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -5903,7 +4550,9 @@ withIdentifier: pigeonIdentifierArg) let keyPathArg = args[2] as! String let optionsArg = args[3] as! [KeyValueObservingOptions] do { - try api.pigeonDelegate.addObserver(pigeonApi: api, pigeonInstance: pigeonInstanceArg, observer: observerArg, keyPath: keyPathArg, options: optionsArg) + try api.pigeonDelegate.addObserver( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, observer: observerArg, + keyPath: keyPathArg, options: optionsArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -5912,7 +4561,9 @@ withIdentifier: pigeonIdentifierArg) } else { addObserverChannel.setMessageHandler(nil) } - let removeObserverChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.removeObserver", binaryMessenger: binaryMessenger, codec: codec) + let removeObserverChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.removeObserver", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { removeObserverChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -5920,7 +4571,9 @@ withIdentifier: pigeonIdentifierArg) let observerArg = args[1] as! NSObject let keyPathArg = args[2] as! String do { - try api.pigeonDelegate.removeObserver(pigeonApi: api, pigeonInstance: pigeonInstanceArg, observer: observerArg, keyPath: keyPathArg) + try api.pigeonDelegate.removeObserver( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, observer: observerArg, + keyPath: keyPathArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -5932,21 +4585,26 @@ withIdentifier: pigeonIdentifierArg) } ///Creates a Dart instance of NSObject and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: NSObject, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: NSObject, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -5965,7 +4623,11 @@ withIdentifier: pigeonIdentifierArg) } /// Informs the observing object when the value at the specified key path /// relative to the observed object has changed. - func observeValue(pigeonInstance pigeonInstanceArg: NSObject, keyPath keyPathArg: String?, object objectArg: NSObject?, change changeArg: [KeyValueChangeKey: Any?]?, completion: @escaping (Result) -> Void) { + func observeValue( + pigeonInstance pigeonInstanceArg: NSObject, keyPath keyPathArg: String?, + object objectArg: NSObject?, change changeArg: [KeyValueChangeKey: Any?]?, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -5977,8 +4639,10 @@ withIdentifier: pigeonIdentifierArg) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.NSObject.observeValue" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, keyPathArg, objectArg, changeArg] as [Any?]) { response in + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, keyPathArg, objectArg, changeArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -5995,226 +4659,127 @@ withIdentifier: pigeonIdentifierArg) } } - -/* -// 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. - -import Foundation - - -/// Implementation of `NSObject` that calls to Dart in callback methods. -class ObjectImpl: NSObject { - let api: PigeonApiProtocolNSObject - - init(api: PigeonApiProtocolNSObject) { - self.api = api - } - - func fixMe() { - api.observeValue(pigeonInstance: self, keyPath: keyPath, object: object, change: change) { _ in } - } -} - -/// ProxyApi implementation for `NSObject`. -/// -/// 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 ObjectProxyAPIDelegate : PigeonApiDelegateNSObject { - func pigeonDefaultConstructor(pigeonApi: PigeonApiNSObject) throws -> NSObject { - return NSObjectImpl(api: pigeonApi) - } - - func addObserver(pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String, options: [KeyValueObservingOptions]) throws { - pigeonInstance.addObserver(observer: observer, keyPath: keyPath, options: options) - } - - func removeObserver(pigeonApi: PigeonApiNSObject, pigeonInstance: NSObject, observer: NSObject, keyPath: String) throws { - pigeonInstance.removeObserver(observer: observer, keyPath: keyPath) - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ObjectProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSObject(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) - XCTAssertNotNil(instance) - } - - func testAddObserver() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSObject(registrar) - - let instance = TestObject() - let observer = TestObject - let keyPath = "myString" - let options = [.newValue] - api.pigeonDelegate.addObserver(pigeonApi: api, pigeonInstance: instance, observer: observer, keyPath: keyPath, options: options) - - XCTAssertEqual(instance.addObserverArgs, [observer, keyPath, options]) - } - - func testRemoveObserver() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSObject(registrar) - - let instance = TestObject() - let observer = TestObject - let keyPath = "myString" - api.pigeonDelegate.removeObserver(pigeonApi: api, pigeonInstance: instance, observer: observer, keyPath: keyPath) - - XCTAssertEqual(instance.removeObserverArgs, [observer, keyPath]) - } - - func testObserveValue() { - let api = TestObjectApi() - let instance = ObjectImpl(api: api) - let keyPath = "myString" - let object = TestObject - let change = [.indexes: -1] - instance.observeValue(keyPath: keyPath, object: object, change: change) - - XCTAssertEqual(api.observeValueArgs, [keyPath, object, change]) - } - -} -class TestObject: NSObject { - var addObserverArgs: [AnyHashable?]? = nil - var removeObserverArgs: [AnyHashable?]? = nil - - - override func addObserver() { - addObserverArgs = [observer, keyPath, options] - } - override func removeObserver() { - removeObserverArgs = [observer, keyPath] - } -} -class TestObjectApi: PigeonApiProtocolNSObject { - var observeValueArgs: [AnyHashable?]? = nil - - func observeValue(keyPath: String?, object: NSObject?, change: [KeyValueChangeKey: Any?]?) throws { - observeValueArgs = [keyPathArg, objectArg, changeArg] - } -} -*/ - protocol PigeonApiDelegateUIViewWKWebView { #if !os(macOS) - func pigeonDefaultConstructor(pigeonApi: PigeonApiUIViewWKWebView, initialConfiguration: WKWebViewConfiguration) throws -> WKWebView + func pigeonDefaultConstructor( + pigeonApi: PigeonApiUIViewWKWebView, initialConfiguration: WKWebViewConfiguration + ) throws -> WKWebView #endif #if !os(macOS) - /// The object that contains the configuration details for the web view. - func configuration(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> WKWebViewConfiguration + /// The object that contains the configuration details for the web view. + func configuration(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + -> WKWebViewConfiguration #endif #if !os(macOS) - /// The scroll view associated with the web view. - func scrollView(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> UIScrollView + /// The scroll view associated with the web view. + func scrollView(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + -> UIScrollView #endif #if !os(macOS) - /// The object you use to integrate custom user interface elements, such as - /// contextual menus or panels, into web view interactions. - func setUIDelegate(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws + /// The object you use to integrate custom user interface elements, such as + /// contextual menus or panels, into web view interactions. + func setUIDelegate( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws #endif #if !os(macOS) - /// The object you use to manage navigation behavior for the web view. - func setNavigationDelegate(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate) throws + /// The object you use to manage navigation behavior for the web view. + func setNavigationDelegate( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate + ) throws #endif #if !os(macOS) - /// The URL for the current webpage. - func getUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? + /// The URL for the current webpage. + func getUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? #endif #if !os(macOS) - /// An estimate of what fraction of the current navigation has been loaded. - func getEstimatedProgress(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Double + /// An estimate of what fraction of the current navigation has been loaded. + func getEstimatedProgress(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + -> Double #endif #if !os(macOS) - /// Loads the web content that the specified URL request object references and - /// navigates to that content. - func load(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) throws + /// Loads the web content that the specified URL request object references and + /// navigates to that content. + func load( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) + throws #endif #if !os(macOS) - /// Loads the contents of the specified HTML string and navigates to it. - func loadHtmlString(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, string: String, baseUrl: String?) throws + /// Loads the contents of the specified HTML string and navigates to it. + func loadHtmlString( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, string: String, + baseUrl: String?) throws #endif #if !os(macOS) - /// Loads the web content from the specified file and navigates to it. - func loadFileUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, url: String, readAccessUrl: String) throws + /// Loads the web content from the specified file and navigates to it. + func loadFileUrl( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, url: String, + readAccessUrl: String) throws #endif #if !os(macOS) - /// Convenience method to load a Flutter asset. - func loadFlutterAsset(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, key: String) throws + /// Convenience method to load a Flutter asset. + func loadFlutterAsset( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, key: String) throws #endif #if !os(macOS) - /// A Boolean value that indicates whether there is a valid back item in the - /// back-forward list. - func canGoBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool + /// A Boolean value that indicates whether there is a valid back item in the + /// back-forward list. + func canGoBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool #endif #if !os(macOS) - /// A Boolean value that indicates whether there is a valid forward item in - /// the back-forward list. - func canGoForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool + /// A Boolean value that indicates whether there is a valid forward item in + /// the back-forward list. + func canGoForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool #endif #if !os(macOS) - /// Navigates to the back item in the back-forward list. - func goBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + /// Navigates to the back item in the back-forward list. + func goBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws #endif #if !os(macOS) - /// Navigates to the forward item in the back-forward list. - func goForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + /// Navigates to the forward item in the back-forward list. + func goForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws #endif #if !os(macOS) - /// Reloads the current webpage. - func reload(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + /// Reloads the current webpage. + func reload(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws #endif #if !os(macOS) - /// The page title. - func getTitle(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? + /// The page title. + func getTitle(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? #endif #if !os(macOS) - /// A Boolean value that indicates whether horizontal swipe gestures trigger - /// backward and forward page navigation. - func setAllowsBackForwardNavigationGestures(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws + /// A Boolean value that indicates whether horizontal swipe gestures trigger + /// backward and forward page navigation. + func setAllowsBackForwardNavigationGestures( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws #endif #if !os(macOS) - /// The custom user agent string. - func setCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws + /// The custom user agent string. + func setCustomUserAgent( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws #endif #if !os(macOS) - /// Evaluates the specified JavaScript string. - func evaluateJavaScript(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, completion: @escaping (Result) -> Void) + /// Evaluates the specified JavaScript string. + func evaluateJavaScript( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, + completion: @escaping (Result) -> Void) #endif #if !os(macOS) - /// A Boolean value that indicates whether you can inspect the view with - /// Safari Web Inspector. - func setInspectable(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws + /// A Boolean value that indicates whether you can inspect the view with + /// Safari Web Inspector. + func setInspectable( + pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws #endif #if !os(macOS) - /// The custom user agent string. - func getCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? + /// The custom user agent string. + func getCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws + -> String? #endif } protocol PigeonApiProtocolUIViewWKWebView { } -final class PigeonApiUIViewWKWebView: PigeonApiProtocolUIViewWKWebView { +final class PigeonApiUIViewWKWebView: PigeonApiProtocolUIViewWKWebView { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateUIViewWKWebView ///An implementation of [UIView] used to access callback methods @@ -6227,1861 +4792,1163 @@ final class PigeonApiUIViewWKWebView: PigeonApiProtocolUIViewWKWebView { return pigeonRegistrar.apiDelegate.pigeonApiWKWebView(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateUIViewWKWebView) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateUIViewWKWebView + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIViewWKWebView?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIViewWKWebView? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() #if !os(macOS) - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.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 - let initialConfigurationArg = args[1] as! WKWebViewConfiguration - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( -try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, initialConfiguration: initialConfigurationArg), -withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.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 + let initialConfigurationArg = args[1] as! WKWebViewConfiguration + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.pigeonDefaultConstructor( + pigeonApi: api, initialConfiguration: initialConfigurationArg), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + pigeonDefaultConstructorChannel.setMessageHandler(nil) } - } else { - pigeonDefaultConstructorChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let configurationChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.configuration", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - configurationChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let pigeonIdentifierArg = args[1] as! Int64 - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.configuration(pigeonApi: api, pigeonInstance: pigeonInstanceArg), withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let configurationChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.configuration", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + configurationChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let pigeonIdentifierArg = args[1] as! Int64 + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.configuration( + pigeonApi: api, pigeonInstance: pigeonInstanceArg), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + configurationChannel.setMessageHandler(nil) } - } else { - configurationChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let scrollViewChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.scrollView", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - scrollViewChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let pigeonIdentifierArg = args[1] as! Int64 - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.scrollView(pigeonApi: api, pigeonInstance: pigeonInstanceArg), withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let scrollViewChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.scrollView", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + scrollViewChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let pigeonIdentifierArg = args[1] as! Int64 + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.scrollView(pigeonApi: api, pigeonInstance: pigeonInstanceArg), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + scrollViewChannel.setMessageHandler(nil) } - } else { - scrollViewChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let setUIDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setUIDelegate", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setUIDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let delegateArg = args[1] as! WKUIDelegate - do { - try api.pigeonDelegate.setUIDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setUIDelegateChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setUIDelegate", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setUIDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let delegateArg = args[1] as! WKUIDelegate + do { + try api.pigeonDelegate.setUIDelegate( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setUIDelegateChannel.setMessageHandler(nil) } - } else { - setUIDelegateChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let setNavigationDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setNavigationDelegate", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setNavigationDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let delegateArg = args[1] as! WKNavigationDelegate - do { - try api.pigeonDelegate.setNavigationDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setNavigationDelegateChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setNavigationDelegate", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setNavigationDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let delegateArg = args[1] as! WKNavigationDelegate + do { + try api.pigeonDelegate.setNavigationDelegate( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setNavigationDelegateChannel.setMessageHandler(nil) } - } else { - setNavigationDelegateChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let getUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getUrl", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getUrlChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let getUrlChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getUrl", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getUrl( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + getUrlChannel.setMessageHandler(nil) } - } else { - getUrlChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let getEstimatedProgressChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getEstimatedProgress", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getEstimatedProgressChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getEstimatedProgress(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let getEstimatedProgressChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getEstimatedProgress", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getEstimatedProgressChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getEstimatedProgress( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + getEstimatedProgressChannel.setMessageHandler(nil) } - } else { - getEstimatedProgressChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let loadChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.load", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let requestArg = args[1] as! URLRequestWrapper - do { - try api.pigeonDelegate.load(pigeonApi: api, pigeonInstance: pigeonInstanceArg, request: requestArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let loadChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.load", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let requestArg = args[1] as! URLRequestWrapper + do { + try api.pigeonDelegate.load( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, request: requestArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + loadChannel.setMessageHandler(nil) } - } else { - loadChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let loadHtmlStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadHtmlString", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadHtmlStringChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let stringArg = args[1] as! String - let baseUrlArg: String? = nilOrValue(args[2]) - do { - try api.pigeonDelegate.loadHtmlString(pigeonApi: api, pigeonInstance: pigeonInstanceArg, string: stringArg, baseUrl: baseUrlArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let loadHtmlStringChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadHtmlString", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadHtmlStringChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let stringArg = args[1] as! String + let baseUrlArg: String? = nilOrValue(args[2]) + do { + try api.pigeonDelegate.loadHtmlString( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, string: stringArg, + baseUrl: baseUrlArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + loadHtmlStringChannel.setMessageHandler(nil) } - } else { - loadHtmlStringChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let loadFileUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadFileUrl", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadFileUrlChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let urlArg = args[1] as! String - let readAccessUrlArg = args[2] as! String - do { - try api.pigeonDelegate.loadFileUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg, url: urlArg, readAccessUrl: readAccessUrlArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let loadFileUrlChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadFileUrl", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadFileUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let urlArg = args[1] as! String + let readAccessUrlArg = args[2] as! String + do { + try api.pigeonDelegate.loadFileUrl( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, url: urlArg, + readAccessUrl: readAccessUrlArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + loadFileUrlChannel.setMessageHandler(nil) } - } else { - loadFileUrlChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let loadFlutterAssetChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadFlutterAsset", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadFlutterAssetChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let keyArg = args[1] as! String - do { - try api.pigeonDelegate.loadFlutterAsset(pigeonApi: api, pigeonInstance: pigeonInstanceArg, key: keyArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let loadFlutterAssetChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.loadFlutterAsset", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadFlutterAssetChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let keyArg = args[1] as! String + do { + try api.pigeonDelegate.loadFlutterAsset( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, key: keyArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + loadFlutterAssetChannel.setMessageHandler(nil) } - } else { - loadFlutterAssetChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let canGoBackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.canGoBack", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - canGoBackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.canGoBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let canGoBackChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.canGoBack", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + canGoBackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.canGoBack( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + canGoBackChannel.setMessageHandler(nil) } - } else { - canGoBackChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let canGoForwardChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.canGoForward", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - canGoForwardChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.canGoForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let canGoForwardChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.canGoForward", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + canGoForwardChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.canGoForward( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + canGoForwardChannel.setMessageHandler(nil) } - } else { - canGoForwardChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let goBackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.goBack", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - goBackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let goBackChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.goBack", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + goBackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + goBackChannel.setMessageHandler(nil) } - } else { - goBackChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let goForwardChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.goForward", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - goForwardChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let goForwardChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.goForward", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + goForwardChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + goForwardChannel.setMessageHandler(nil) } - } else { - goForwardChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let reloadChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.reload", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - reloadChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let reloadChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.reload", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + reloadChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + reloadChannel.setMessageHandler(nil) } - } else { - reloadChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let getTitleChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getTitle", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getTitleChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getTitle(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let getTitleChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getTitle", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getTitleChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getTitle( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + getTitleChannel.setMessageHandler(nil) } - } else { - getTitleChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let setAllowsBackForwardNavigationGesturesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setAllowsBackForwardNavigationGestures", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setAllowsBackForwardNavigationGesturesChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let allowArg = args[1] as! Bool - do { - try api.pigeonDelegate.setAllowsBackForwardNavigationGestures(pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setAllowsBackForwardNavigationGesturesChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setAllowsBackForwardNavigationGestures", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAllowsBackForwardNavigationGesturesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let allowArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAllowsBackForwardNavigationGestures( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setAllowsBackForwardNavigationGesturesChannel.setMessageHandler(nil) } - } else { - setAllowsBackForwardNavigationGesturesChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let setCustomUserAgentChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setCustomUserAgent", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setCustomUserAgentChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let userAgentArg: String? = nilOrValue(args[1]) - do { - try api.pigeonDelegate.setCustomUserAgent(pigeonApi: api, pigeonInstance: pigeonInstanceArg, userAgent: userAgentArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setCustomUserAgentChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setCustomUserAgent", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setCustomUserAgentChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let userAgentArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setCustomUserAgent( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, userAgent: userAgentArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setCustomUserAgentChannel.setMessageHandler(nil) } - } else { - setCustomUserAgentChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let evaluateJavaScriptChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.evaluateJavaScript", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - evaluateJavaScriptChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let javaScriptStringArg = args[1] as! String - api.pigeonDelegate.evaluateJavaScript(pigeonApi: api, pigeonInstance: pigeonInstanceArg, javaScriptString: javaScriptStringArg) { result in - switch result { - case .success(let res): - reply(wrapResult(res)) - case .failure(let error): - reply(wrapError(error)) + let evaluateJavaScriptChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.evaluateJavaScript", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + evaluateJavaScriptChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let javaScriptStringArg = args[1] as! String + api.pigeonDelegate.evaluateJavaScript( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, javaScriptString: javaScriptStringArg + ) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } } } + } else { + evaluateJavaScriptChannel.setMessageHandler(nil) } - } else { - evaluateJavaScriptChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let setInspectableChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setInspectable", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setInspectableChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let inspectableArg = args[1] as! Bool - do { - try api.pigeonDelegate.setInspectable(pigeonApi: api, pigeonInstance: pigeonInstanceArg, inspectable: inspectableArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setInspectableChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.setInspectable", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setInspectableChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let inspectableArg = args[1] as! Bool + do { + try api.pigeonDelegate.setInspectable( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, inspectable: inspectableArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setInspectableChannel.setMessageHandler(nil) } - } else { - setInspectableChannel.setMessageHandler(nil) - } #endif #if !os(macOS) - let getCustomUserAgentChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getCustomUserAgent", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getCustomUserAgentChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getCustomUserAgent(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let getCustomUserAgentChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.getCustomUserAgent", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getCustomUserAgentChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getCustomUserAgent( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + getCustomUserAgentChannel.setMessageHandler(nil) } - } else { - getCustomUserAgentChannel.setMessageHandler(nil) - } #endif } #if !os(macOS) - ///Creates a Dart instance of UIViewWKWebView and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKWebView, completion: @escaping (Result) -> Void) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) + ///Creates a Dart instance of UIViewWKWebView and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: WKWebView, completion: @escaping (Result) -> Void + ) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.UIViewWKWebView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } - } + #endif +} +protocol PigeonApiDelegateNSViewWKWebView { + #if !os(iOS) + func pigeonDefaultConstructor( + pigeonApi: PigeonApiNSViewWKWebView, initialConfiguration: WKWebViewConfiguration + ) throws -> WKWebView + #endif + #if !os(iOS) + /// The object that contains the configuration details for the web view. + func configuration(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + -> WKWebViewConfiguration + #endif + #if !os(iOS) + /// The object you use to integrate custom user interface elements, such as + /// contextual menus or panels, into web view interactions. + func setUIDelegate( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws + #endif + #if !os(iOS) + /// The object you use to manage navigation behavior for the web view. + func setNavigationDelegate( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate + ) throws + #endif + #if !os(iOS) + /// The URL for the current webpage. + func getUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? + #endif + #if !os(iOS) + /// An estimate of what fraction of the current navigation has been loaded. + func getEstimatedProgress(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + -> Double + #endif + #if !os(iOS) + /// Loads the web content that the specified URL request object references and + /// navigates to that content. + func load( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) + throws + #endif + #if !os(iOS) + /// Loads the contents of the specified HTML string and navigates to it. + func loadHtmlString( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, string: String, + baseUrl: String?) throws + #endif + #if !os(iOS) + /// Loads the web content from the specified file and navigates to it. + func loadFileUrl( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, url: String, + readAccessUrl: String) throws + #endif + #if !os(iOS) + /// Convenience method to load a Flutter asset. + func loadFlutterAsset( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, key: String) throws + #endif + #if !os(iOS) + /// A Boolean value that indicates whether there is a valid back item in the + /// back-forward list. + func canGoBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool + #endif + #if !os(iOS) + /// A Boolean value that indicates whether there is a valid forward item in + /// the back-forward list. + func canGoForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool + #endif + #if !os(iOS) + /// Navigates to the back item in the back-forward list. + func goBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + #endif + #if !os(iOS) + /// Navigates to the forward item in the back-forward list. + func goForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + #endif + #if !os(iOS) + /// Reloads the current webpage. + func reload(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + #endif + #if !os(iOS) + /// The page title. + func getTitle(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? + #endif + #if !os(iOS) + /// A Boolean value that indicates whether horizontal swipe gestures trigger + /// backward and forward page navigation. + func setAllowsBackForwardNavigationGestures( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws + #endif + #if !os(iOS) + /// The custom user agent string. + func setCustomUserAgent( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws + #endif + #if !os(iOS) + /// Evaluates the specified JavaScript string. + func evaluateJavaScript( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, + completion: @escaping (Result) -> Void) + #endif + #if !os(iOS) + /// A Boolean value that indicates whether you can inspect the view with + /// Safari Web Inspector. + func setInspectable( + pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws + #endif + #if !os(iOS) + /// The custom user agent string. + func getCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws + -> String? #endif } -/* -// 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. - -import Foundation -import UIKit -import WebKit - - -/// ProxyApi implementation for `UIViewWKWebView`. -/// -/// 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 ViewWKWebViewProxyAPIDelegate : PigeonApiDelegateUIViewWKWebView { - func pigeonDefaultConstructor(pigeonApi: PigeonApiUIViewWKWebView, initialConfiguration: WKWebViewConfiguration) throws -> WKWebView { - return UIViewWKWebView(,initialConfiguration: initialConfiguration) - } - - func configuration(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: UIViewWKWebView): WKWebViewConfiguration { - return pigeonInstance.configuration - } - - func scrollView(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: UIViewWKWebView): UIScrollView { - return pigeonInstance.scrollView - } - - func setUIDelegate(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws { - pigeonInstance.uIDelegate = delegate: delegate - } - - func setNavigationDelegate(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate) throws { - pigeonInstance.navigationDelegate = delegate: delegate - } - - func getUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? { - return pigeonInstance.url - } - - func getEstimatedProgress(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Double { - return pigeonInstance.estimatedProgress - } - - func load(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) throws { - pigeonInstance.load(request: request) - } +protocol PigeonApiProtocolNSViewWKWebView { +} - func loadHtmlString(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, string: String, baseUrl: String?) throws { - pigeonInstance.loadHtmlString(string: string, baseUrl: baseUrl) +final class PigeonApiNSViewWKWebView: PigeonApiProtocolNSViewWKWebView { + unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar + let pigeonDelegate: PigeonApiDelegateNSViewWKWebView + ///An implementation of [NSObject] used to access callback methods + var pigeonApiNSObject: PigeonApiNSObject { + return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - func loadFileUrl(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, url: String, readAccessUrl: String) throws { - pigeonInstance.loadFileUrl(url: url, readAccessUrl: readAccessUrl) + ///An implementation of [WKWebView] used to access callback methods + var pigeonApiWKWebView: PigeonApiWKWebView { + return pigeonRegistrar.apiDelegate.pigeonApiWKWebView(pigeonRegistrar) } - func loadFlutterAsset(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, key: String) throws { - pigeonInstance.loadFlutterAsset(key: key) + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateNSViewWKWebView + ) { + self.pigeonRegistrar = pigeonRegistrar + self.pigeonDelegate = delegate } - - func canGoBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool { - return pigeonInstance.canGoBack() - } - - func canGoForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> Bool { - return pigeonInstance.canGoForward() - } - - func goBack(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws { - pigeonInstance.goBack() - } - - func goForward(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws { - pigeonInstance.goForward() - } - - func reload(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws { - pigeonInstance.reload() - } - - func getTitle(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? { - return pigeonInstance.title - } - - func setAllowsBackForwardNavigationGestures(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws { - pigeonInstance.allowsBackForwardNavigationGestures = allow: allow - } - - func setCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws { - pigeonInstance.customUserAgent = userAgent: userAgent - } - - func evaluateJavaScript(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, completion: @escaping (Result) -> Void) { - return pigeonInstance.evaluateJavaScript(javaScriptString: javaScriptString) - } - - func setInspectable(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws { - pigeonInstance.inspectable = inspectable: inspectable - } - - func getCustomUserAgent(pigeonApi: PigeonApiUIViewWKWebView, pigeonInstance: WKWebView) throws -> String? { - return pigeonInstance.customUserAgent - } - -} -*/ - -/* -// 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. - -import UIKit -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ViewWKWebViewProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, initialConfiguration: TestWebViewConfiguration) - XCTAssertNotNil(instance) - } - - func testConfiguration() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = try? api.pigeonDelegate.configuration(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.configuration) - } - - func testScrollView() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = try? api.pigeonDelegate.scrollView(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.scrollView) - } - - func testSetUIDelegate() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let delegate = TestDelegate - api.pigeonDelegate.setUIDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) - - XCTAssertEqual(instance.setUIDelegateArgs, [delegate]) - } - - func testSetNavigationDelegate() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let delegate = TestNavigationDelegate - api.pigeonDelegate.setNavigationDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) - - XCTAssertEqual(instance.setNavigationDelegateArgs, [delegate]) - } - - func testGetUrl() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getUrlCalled) - XCTAssertEqual(value, instance.getUrl()) - } - - func testGetEstimatedProgress() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.getEstimatedProgress(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getEstimatedProgressCalled) - XCTAssertEqual(value, instance.getEstimatedProgress()) - } - - func testLoad() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let request = TestRequest - api.pigeonDelegate.load(pigeonApi: api, pigeonInstance: instance, request: request) - - XCTAssertEqual(instance.loadArgs, [request]) - } - - func testLoadHtmlString() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let string = "myString" - let baseUrl = "myString" - api.pigeonDelegate.loadHtmlString(pigeonApi: api, pigeonInstance: instance, string: string, baseUrl: baseUrl) - - XCTAssertEqual(instance.loadHtmlStringArgs, [string, baseUrl]) - } - - func testLoadFileUrl() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let url = "myString" - let readAccessUrl = "myString" - api.pigeonDelegate.loadFileUrl(pigeonApi: api, pigeonInstance: instance, url: url, readAccessUrl: readAccessUrl) - - XCTAssertEqual(instance.loadFileUrlArgs, [url, readAccessUrl]) - } - - func testLoadFlutterAsset() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let key = "myString" - api.pigeonDelegate.loadFlutterAsset(pigeonApi: api, pigeonInstance: instance, key: key) - - XCTAssertEqual(instance.loadFlutterAssetArgs, [key]) - } - - func testCanGoBack() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.canGoBack(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.canGoBackCalled) - XCTAssertEqual(value, instance.canGoBack()) - } - - func testCanGoForward() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.canGoForward(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.canGoForwardCalled) - XCTAssertEqual(value, instance.canGoForward()) - } - - func testGoBack() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.goBackCalled) - } - - func testGoForward() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.goForwardCalled) - } - - func testReload() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.reloadCalled) - } - - func testGetTitle() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.getTitle(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getTitleCalled) - XCTAssertEqual(value, instance.getTitle()) - } - - func testSetAllowsBackForwardNavigationGestures() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let allow = true - api.pigeonDelegate.setAllowsBackForwardNavigationGestures(pigeonApi: api, pigeonInstance: instance, allow: allow) - - XCTAssertEqual(instance.setAllowsBackForwardNavigationGesturesArgs, [allow]) - } - - func testSetCustomUserAgent() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let userAgent = "myString" - api.pigeonDelegate.setCustomUserAgent(pigeonApi: api, pigeonInstance: instance, userAgent: userAgent) - - XCTAssertEqual(instance.setCustomUserAgentArgs, [userAgent]) - } - - func testEvaluateJavaScript() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let javaScriptString = "myString" - let value = api.pigeonDelegate.evaluateJavaScript(pigeonApi: api, pigeonInstance: instance, javaScriptString: javaScriptString) - - XCTAssertEqual(instance.evaluateJavaScriptArgs, [javaScriptString]) - XCTAssertEqual(value, instance.evaluateJavaScript(javaScriptString: javaScriptString)) - } - - func testSetInspectable() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let inspectable = true - api.pigeonDelegate.setInspectable(pigeonApi: api, pigeonInstance: instance, inspectable: inspectable) - - XCTAssertEqual(instance.setInspectableArgs, [inspectable]) - } - - func testGetCustomUserAgent() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.getCustomUserAgent(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getCustomUserAgentCalled) - XCTAssertEqual(value, instance.getCustomUserAgent()) - } - -} -class TestViewWKWebView: UIViewWKWebView { - private var configurationTestValue = TestWebViewConfiguration - private var scrollViewTestValue = TestScrollView - var setUIDelegateArgs: [AnyHashable?]? = nil - var setNavigationDelegateArgs: [AnyHashable?]? = nil - var getUrlCalled = false - var getEstimatedProgressCalled = false - var loadArgs: [AnyHashable?]? = nil - var loadHtmlStringArgs: [AnyHashable?]? = nil - var loadFileUrlArgs: [AnyHashable?]? = nil - var loadFlutterAssetArgs: [AnyHashable?]? = nil - var canGoBackCalled = false - var canGoForwardCalled = false - var goBackCalled = false - var goForwardCalled = false - var reloadCalled = false - var getTitleCalled = false - var setAllowsBackForwardNavigationGesturesArgs: [AnyHashable?]? = nil - var setCustomUserAgentArgs: [AnyHashable?]? = nil - var evaluateJavaScriptArgs: [AnyHashable?]? = nil - var setInspectableArgs: [AnyHashable?]? = nil - var getCustomUserAgentCalled = false - - override var configuration: WKWebViewConfiguration { - return configurationTestValue - } - override var scrollView: UIScrollView { - return scrollViewTestValue - } - - override func setUIDelegate() { - setUIDelegateArgs = [delegate] - } - override func setNavigationDelegate() { - setNavigationDelegateArgs = [delegate] - } - override func getUrl() { - getUrlCalled = true - } - override func getEstimatedProgress() { - getEstimatedProgressCalled = true - } - override func load() { - loadArgs = [request] - } - override func loadHtmlString() { - loadHtmlStringArgs = [string, baseUrl] - } - override func loadFileUrl() { - loadFileUrlArgs = [url, readAccessUrl] - } - override func loadFlutterAsset() { - loadFlutterAssetArgs = [key] - } - override func canGoBack() { - canGoBackCalled = true - } - override func canGoForward() { - canGoForwardCalled = true - } - override func goBack() { - goBackCalled = true - } - override func goForward() { - goForwardCalled = true - } - override func reload() { - reloadCalled = true - } - override func getTitle() { - getTitleCalled = true - } - override func setAllowsBackForwardNavigationGestures() { - setAllowsBackForwardNavigationGesturesArgs = [allow] - } - override func setCustomUserAgent() { - setCustomUserAgentArgs = [userAgent] - } - override func evaluateJavaScript() { - evaluateJavaScriptArgs = [javaScriptString] - return -1 - } - override func setInspectable() { - setInspectableArgs = [inspectable] - } - override func getCustomUserAgent() { - getCustomUserAgentCalled = true - } -} -*/ - -protocol PigeonApiDelegateNSViewWKWebView { - #if !os(iOS) - func pigeonDefaultConstructor(pigeonApi: PigeonApiNSViewWKWebView, initialConfiguration: WKWebViewConfiguration) throws -> WKWebView - #endif - #if !os(iOS) - /// The object that contains the configuration details for the web view. - func configuration(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> WKWebViewConfiguration - #endif - #if !os(iOS) - /// The object you use to integrate custom user interface elements, such as - /// contextual menus or panels, into web view interactions. - func setUIDelegate(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws - #endif - #if !os(iOS) - /// The object you use to manage navigation behavior for the web view. - func setNavigationDelegate(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate) throws - #endif - #if !os(iOS) - /// The URL for the current webpage. - func getUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? - #endif - #if !os(iOS) - /// An estimate of what fraction of the current navigation has been loaded. - func getEstimatedProgress(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Double - #endif - #if !os(iOS) - /// Loads the web content that the specified URL request object references and - /// navigates to that content. - func load(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) throws - #endif - #if !os(iOS) - /// Loads the contents of the specified HTML string and navigates to it. - func loadHtmlString(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, string: String, baseUrl: String?) throws - #endif - #if !os(iOS) - /// Loads the web content from the specified file and navigates to it. - func loadFileUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, url: String, readAccessUrl: String) throws - #endif - #if !os(iOS) - /// Convenience method to load a Flutter asset. - func loadFlutterAsset(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, key: String) throws - #endif - #if !os(iOS) - /// A Boolean value that indicates whether there is a valid back item in the - /// back-forward list. - func canGoBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool - #endif - #if !os(iOS) - /// A Boolean value that indicates whether there is a valid forward item in - /// the back-forward list. - func canGoForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool - #endif - #if !os(iOS) - /// Navigates to the back item in the back-forward list. - func goBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - #endif - #if !os(iOS) - /// Navigates to the forward item in the back-forward list. - func goForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - #endif - #if !os(iOS) - /// Reloads the current webpage. - func reload(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws - #endif - #if !os(iOS) - /// The page title. - func getTitle(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? - #endif - #if !os(iOS) - /// A Boolean value that indicates whether horizontal swipe gestures trigger - /// backward and forward page navigation. - func setAllowsBackForwardNavigationGestures(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws - #endif - #if !os(iOS) - /// The custom user agent string. - func setCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws - #endif - #if !os(iOS) - /// Evaluates the specified JavaScript string. - func evaluateJavaScript(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, completion: @escaping (Result) -> Void) - #endif - #if !os(iOS) - /// A Boolean value that indicates whether you can inspect the view with - /// Safari Web Inspector. - func setInspectable(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws - #endif - #if !os(iOS) - /// The custom user agent string. - func getCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? - #endif -} - -protocol PigeonApiProtocolNSViewWKWebView { -} - -final class PigeonApiNSViewWKWebView: PigeonApiProtocolNSViewWKWebView { - unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar - let pigeonDelegate: PigeonApiDelegateNSViewWKWebView - ///An implementation of [NSObject] used to access callback methods - var pigeonApiNSObject: PigeonApiNSObject { - return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) - } - - ///An implementation of [WKWebView] used to access callback methods - var pigeonApiWKWebView: PigeonApiWKWebView { - return pigeonRegistrar.apiDelegate.pigeonApiWKWebView(pigeonRegistrar) - } - - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateNSViewWKWebView) { - self.pigeonRegistrar = pigeonRegistrar - self.pigeonDelegate = delegate - } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiNSViewWKWebView?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiNSViewWKWebView? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() #if !os(iOS) - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.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 - let initialConfigurationArg = args[1] as! WKWebViewConfiguration - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( -try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, initialConfiguration: initialConfigurationArg), -withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.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 + let initialConfigurationArg = args[1] as! WKWebViewConfiguration + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.pigeonDefaultConstructor( + pigeonApi: api, initialConfiguration: initialConfigurationArg), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + pigeonDefaultConstructorChannel.setMessageHandler(nil) } - } else { - pigeonDefaultConstructorChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let configurationChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.configuration", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - configurationChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let pigeonIdentifierArg = args[1] as! Int64 - do { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(try api.pigeonDelegate.configuration(pigeonApi: api, pigeonInstance: pigeonInstanceArg), withIdentifier: pigeonIdentifierArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let configurationChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.configuration", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + configurationChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let pigeonIdentifierArg = args[1] as! Int64 + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.configuration( + pigeonApi: api, pigeonInstance: pigeonInstanceArg), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + configurationChannel.setMessageHandler(nil) } - } else { - configurationChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let setUIDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setUIDelegate", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setUIDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let delegateArg = args[1] as! WKUIDelegate - do { - try api.pigeonDelegate.setUIDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setUIDelegateChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setUIDelegate", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setUIDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let delegateArg = args[1] as! WKUIDelegate + do { + try api.pigeonDelegate.setUIDelegate( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setUIDelegateChannel.setMessageHandler(nil) } - } else { - setUIDelegateChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let setNavigationDelegateChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setNavigationDelegate", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setNavigationDelegateChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let delegateArg = args[1] as! WKNavigationDelegate - do { - try api.pigeonDelegate.setNavigationDelegate(pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setNavigationDelegateChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setNavigationDelegate", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setNavigationDelegateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let delegateArg = args[1] as! WKNavigationDelegate + do { + try api.pigeonDelegate.setNavigationDelegate( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, delegate: delegateArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setNavigationDelegateChannel.setMessageHandler(nil) } - } else { - setNavigationDelegateChannel.setMessageHandler(nil) - } #endif - #if !os(iOS) - let getUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getUrl", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getUrlChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + #if !os(iOS) + let getUrlChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getUrl", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getUrl( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + getUrlChannel.setMessageHandler(nil) } - } else { - getUrlChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let getEstimatedProgressChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getEstimatedProgress", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getEstimatedProgressChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getEstimatedProgress(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let getEstimatedProgressChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getEstimatedProgress", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getEstimatedProgressChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getEstimatedProgress( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + getEstimatedProgressChannel.setMessageHandler(nil) } - } else { - getEstimatedProgressChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let loadChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.load", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let requestArg = args[1] as! URLRequestWrapper - do { - try api.pigeonDelegate.load(pigeonApi: api, pigeonInstance: pigeonInstanceArg, request: requestArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let loadChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.load", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let requestArg = args[1] as! URLRequestWrapper + do { + try api.pigeonDelegate.load( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, request: requestArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + loadChannel.setMessageHandler(nil) } - } else { - loadChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let loadHtmlStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadHtmlString", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadHtmlStringChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let stringArg = args[1] as! String - let baseUrlArg: String? = nilOrValue(args[2]) - do { - try api.pigeonDelegate.loadHtmlString(pigeonApi: api, pigeonInstance: pigeonInstanceArg, string: stringArg, baseUrl: baseUrlArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let loadHtmlStringChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadHtmlString", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadHtmlStringChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let stringArg = args[1] as! String + let baseUrlArg: String? = nilOrValue(args[2]) + do { + try api.pigeonDelegate.loadHtmlString( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, string: stringArg, + baseUrl: baseUrlArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + loadHtmlStringChannel.setMessageHandler(nil) } - } else { - loadHtmlStringChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let loadFileUrlChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadFileUrl", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadFileUrlChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let urlArg = args[1] as! String - let readAccessUrlArg = args[2] as! String - do { - try api.pigeonDelegate.loadFileUrl(pigeonApi: api, pigeonInstance: pigeonInstanceArg, url: urlArg, readAccessUrl: readAccessUrlArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let loadFileUrlChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadFileUrl", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadFileUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let urlArg = args[1] as! String + let readAccessUrlArg = args[2] as! String + do { + try api.pigeonDelegate.loadFileUrl( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, url: urlArg, + readAccessUrl: readAccessUrlArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + loadFileUrlChannel.setMessageHandler(nil) } - } else { - loadFileUrlChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let loadFlutterAssetChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadFlutterAsset", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - loadFlutterAssetChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let keyArg = args[1] as! String - do { - try api.pigeonDelegate.loadFlutterAsset(pigeonApi: api, pigeonInstance: pigeonInstanceArg, key: keyArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let loadFlutterAssetChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.loadFlutterAsset", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + loadFlutterAssetChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let keyArg = args[1] as! String + do { + try api.pigeonDelegate.loadFlutterAsset( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, key: keyArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + loadFlutterAssetChannel.setMessageHandler(nil) } - } else { - loadFlutterAssetChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let canGoBackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.canGoBack", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - canGoBackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.canGoBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let canGoBackChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.canGoBack", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + canGoBackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.canGoBack( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + canGoBackChannel.setMessageHandler(nil) } - } else { - canGoBackChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let canGoForwardChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.canGoForward", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - canGoForwardChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.canGoForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let canGoForwardChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.canGoForward", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + canGoForwardChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.canGoForward( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + canGoForwardChannel.setMessageHandler(nil) } - } else { - canGoForwardChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let goBackChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.goBack", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - goBackChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let goBackChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.goBack", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + goBackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + goBackChannel.setMessageHandler(nil) } - } else { - goBackChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let goForwardChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.goForward", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - goForwardChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let goForwardChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.goForward", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + goForwardChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + goForwardChannel.setMessageHandler(nil) } - } else { - goForwardChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let reloadChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.reload", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - reloadChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - try api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let reloadChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.reload", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + reloadChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + try api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + reloadChannel.setMessageHandler(nil) } - } else { - reloadChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let getTitleChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getTitle", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getTitleChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getTitle(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let getTitleChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getTitle", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getTitleChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getTitle( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + getTitleChannel.setMessageHandler(nil) } - } else { - getTitleChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let setAllowsBackForwardNavigationGesturesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setAllowsBackForwardNavigationGestures", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setAllowsBackForwardNavigationGesturesChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let allowArg = args[1] as! Bool - do { - try api.pigeonDelegate.setAllowsBackForwardNavigationGestures(pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setAllowsBackForwardNavigationGesturesChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setAllowsBackForwardNavigationGestures", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAllowsBackForwardNavigationGesturesChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let allowArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAllowsBackForwardNavigationGestures( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setAllowsBackForwardNavigationGesturesChannel.setMessageHandler(nil) } - } else { - setAllowsBackForwardNavigationGesturesChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let setCustomUserAgentChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setCustomUserAgent", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setCustomUserAgentChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let userAgentArg: String? = nilOrValue(args[1]) - do { - try api.pigeonDelegate.setCustomUserAgent(pigeonApi: api, pigeonInstance: pigeonInstanceArg, userAgent: userAgentArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setCustomUserAgentChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setCustomUserAgent", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setCustomUserAgentChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let userAgentArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setCustomUserAgent( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, userAgent: userAgentArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setCustomUserAgentChannel.setMessageHandler(nil) } - } else { - setCustomUserAgentChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let evaluateJavaScriptChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.evaluateJavaScript", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - evaluateJavaScriptChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let javaScriptStringArg = args[1] as! String - api.pigeonDelegate.evaluateJavaScript(pigeonApi: api, pigeonInstance: pigeonInstanceArg, javaScriptString: javaScriptStringArg) { result in - switch result { - case .success(let res): - reply(wrapResult(res)) - case .failure(let error): - reply(wrapError(error)) + let evaluateJavaScriptChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.evaluateJavaScript", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + evaluateJavaScriptChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let javaScriptStringArg = args[1] as! String + api.pigeonDelegate.evaluateJavaScript( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, javaScriptString: javaScriptStringArg + ) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } } } + } else { + evaluateJavaScriptChannel.setMessageHandler(nil) } - } else { - evaluateJavaScriptChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let setInspectableChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setInspectable", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - setInspectableChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - let inspectableArg = args[1] as! Bool - do { - try api.pigeonDelegate.setInspectable(pigeonApi: api, pigeonInstance: pigeonInstanceArg, inspectable: inspectableArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) + let setInspectableChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.setInspectable", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setInspectableChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + let inspectableArg = args[1] as! Bool + do { + try api.pigeonDelegate.setInspectable( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, inspectable: inspectableArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } } + } else { + setInspectableChannel.setMessageHandler(nil) } - } else { - setInspectableChannel.setMessageHandler(nil) - } #endif #if !os(iOS) - let getCustomUserAgentChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getCustomUserAgent", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - getCustomUserAgentChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let pigeonInstanceArg = args[0] as! WKWebView - do { - let result = try api.pigeonDelegate.getCustomUserAgent(pigeonApi: api, pigeonInstance: pigeonInstanceArg) - reply(wrapResult(result)) - } catch { - reply(wrapError(error)) + let getCustomUserAgentChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.getCustomUserAgent", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getCustomUserAgentChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! WKWebView + do { + let result = try api.pigeonDelegate.getCustomUserAgent( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } } + } else { + getCustomUserAgentChannel.setMessageHandler(nil) } - } else { - getCustomUserAgentChannel.setMessageHandler(nil) - } #endif } #if !os(iOS) - ///Creates a Dart instance of NSViewWKWebView and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKWebView, completion: @escaping (Result) -> Void) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) + ///Creates a Dart instance of NSViewWKWebView and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: WKWebView, completion: @escaping (Result) -> Void + ) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.NSViewWKWebView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } } } } - } #endif } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `NSViewWKWebView`. -/// -/// 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 ViewWKWebViewProxyAPIDelegate : PigeonApiDelegateNSViewWKWebView { - func pigeonDefaultConstructor(pigeonApi: PigeonApiNSViewWKWebView, initialConfiguration: WKWebViewConfiguration) throws -> WKWebView { - return NSViewWKWebView(,initialConfiguration: initialConfiguration) - } - - func configuration(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: NSViewWKWebView): WKWebViewConfiguration { - return pigeonInstance.configuration - } - - func setUIDelegate(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKUIDelegate) throws { - pigeonInstance.uIDelegate = delegate: delegate - } - - func setNavigationDelegate(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, delegate: WKNavigationDelegate) throws { - pigeonInstance.navigationDelegate = delegate: delegate - } - - func getUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? { - return pigeonInstance.url - } - - func getEstimatedProgress(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Double { - return pigeonInstance.estimatedProgress - } - - func load(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, request: URLRequestWrapper) throws { - pigeonInstance.load(request: request) - } - - func loadHtmlString(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, string: String, baseUrl: String?) throws { - pigeonInstance.loadHtmlString(string: string, baseUrl: baseUrl) - } - - func loadFileUrl(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, url: String, readAccessUrl: String) throws { - pigeonInstance.loadFileUrl(url: url, readAccessUrl: readAccessUrl) - } - - func loadFlutterAsset(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, key: String) throws { - pigeonInstance.loadFlutterAsset(key: key) - } - - func canGoBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool { - return pigeonInstance.canGoBack() - } - - func canGoForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> Bool { - return pigeonInstance.canGoForward() - } - - func goBack(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws { - pigeonInstance.goBack() - } - - func goForward(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws { - pigeonInstance.goForward() - } - - func reload(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws { - pigeonInstance.reload() - } - - func getTitle(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? { - return pigeonInstance.title - } - - func setAllowsBackForwardNavigationGestures(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, allow: Bool) throws { - pigeonInstance.allowsBackForwardNavigationGestures = allow: allow - } - - func setCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, userAgent: String?) throws { - pigeonInstance.customUserAgent = userAgent: userAgent - } - - func evaluateJavaScript(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, javaScriptString: String, completion: @escaping (Result) -> Void) { - return pigeonInstance.evaluateJavaScript(javaScriptString: javaScriptString) - } - - func setInspectable(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView, inspectable: Bool) throws { - pigeonInstance.inspectable = inspectable: inspectable - } - - func getCustomUserAgent(pigeonApi: PigeonApiNSViewWKWebView, pigeonInstance: WKWebView) throws -> String? { - return pigeonInstance.customUserAgent - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ViewWKWebViewProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api, initialConfiguration: TestWebViewConfiguration) - XCTAssertNotNil(instance) - } - - func testConfiguration() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = try? api.pigeonDelegate.configuration(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.configuration) - } - - func testSetUIDelegate() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let delegate = TestDelegate - api.pigeonDelegate.setUIDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) - - XCTAssertEqual(instance.setUIDelegateArgs, [delegate]) - } - - func testSetNavigationDelegate() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let delegate = TestNavigationDelegate - api.pigeonDelegate.setNavigationDelegate(pigeonApi: api, pigeonInstance: instance, delegate: delegate) - - XCTAssertEqual(instance.setNavigationDelegateArgs, [delegate]) - } - - func testGetUrl() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.getUrl(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getUrlCalled) - XCTAssertEqual(value, instance.getUrl()) - } - - func testGetEstimatedProgress() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.getEstimatedProgress(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getEstimatedProgressCalled) - XCTAssertEqual(value, instance.getEstimatedProgress()) - } - - func testLoad() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let request = TestRequest - api.pigeonDelegate.load(pigeonApi: api, pigeonInstance: instance, request: request) - - XCTAssertEqual(instance.loadArgs, [request]) - } - - func testLoadHtmlString() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let string = "myString" - let baseUrl = "myString" - api.pigeonDelegate.loadHtmlString(pigeonApi: api, pigeonInstance: instance, string: string, baseUrl: baseUrl) - - XCTAssertEqual(instance.loadHtmlStringArgs, [string, baseUrl]) - } - - func testLoadFileUrl() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let url = "myString" - let readAccessUrl = "myString" - api.pigeonDelegate.loadFileUrl(pigeonApi: api, pigeonInstance: instance, url: url, readAccessUrl: readAccessUrl) - - XCTAssertEqual(instance.loadFileUrlArgs, [url, readAccessUrl]) - } - - func testLoadFlutterAsset() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let key = "myString" - api.pigeonDelegate.loadFlutterAsset(pigeonApi: api, pigeonInstance: instance, key: key) - - XCTAssertEqual(instance.loadFlutterAssetArgs, [key]) - } - - func testCanGoBack() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.canGoBack(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.canGoBackCalled) - XCTAssertEqual(value, instance.canGoBack()) - } - - func testCanGoForward() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.canGoForward(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.canGoForwardCalled) - XCTAssertEqual(value, instance.canGoForward()) - } - - func testGoBack() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - api.pigeonDelegate.goBack(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.goBackCalled) - } - - func testGoForward() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - api.pigeonDelegate.goForward(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.goForwardCalled) - } - - func testReload() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - api.pigeonDelegate.reload(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.reloadCalled) - } - - func testGetTitle() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.getTitle(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getTitleCalled) - XCTAssertEqual(value, instance.getTitle()) - } - - func testSetAllowsBackForwardNavigationGestures() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let allow = true - api.pigeonDelegate.setAllowsBackForwardNavigationGestures(pigeonApi: api, pigeonInstance: instance, allow: allow) - - XCTAssertEqual(instance.setAllowsBackForwardNavigationGesturesArgs, [allow]) - } - - func testSetCustomUserAgent() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let userAgent = "myString" - api.pigeonDelegate.setCustomUserAgent(pigeonApi: api, pigeonInstance: instance, userAgent: userAgent) - - XCTAssertEqual(instance.setCustomUserAgentArgs, [userAgent]) - } - - func testEvaluateJavaScript() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let javaScriptString = "myString" - let value = api.pigeonDelegate.evaluateJavaScript(pigeonApi: api, pigeonInstance: instance, javaScriptString: javaScriptString) - - XCTAssertEqual(instance.evaluateJavaScriptArgs, [javaScriptString]) - XCTAssertEqual(value, instance.evaluateJavaScript(javaScriptString: javaScriptString)) - } - - func testSetInspectable() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let inspectable = true - api.pigeonDelegate.setInspectable(pigeonApi: api, pigeonInstance: instance, inspectable: inspectable) - - XCTAssertEqual(instance.setInspectableArgs, [inspectable]) - } - - func testGetCustomUserAgent() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiNSViewWKWebView(registrar) - - let instance = TestViewWKWebView() - let value = api.pigeonDelegate.getCustomUserAgent(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getCustomUserAgentCalled) - XCTAssertEqual(value, instance.getCustomUserAgent()) - } - -} -class TestViewWKWebView: NSViewWKWebView { - private var configurationTestValue = TestWebViewConfiguration - var setUIDelegateArgs: [AnyHashable?]? = nil - var setNavigationDelegateArgs: [AnyHashable?]? = nil - var getUrlCalled = false - var getEstimatedProgressCalled = false - var loadArgs: [AnyHashable?]? = nil - var loadHtmlStringArgs: [AnyHashable?]? = nil - var loadFileUrlArgs: [AnyHashable?]? = nil - var loadFlutterAssetArgs: [AnyHashable?]? = nil - var canGoBackCalled = false - var canGoForwardCalled = false - var goBackCalled = false - var goForwardCalled = false - var reloadCalled = false - var getTitleCalled = false - var setAllowsBackForwardNavigationGesturesArgs: [AnyHashable?]? = nil - var setCustomUserAgentArgs: [AnyHashable?]? = nil - var evaluateJavaScriptArgs: [AnyHashable?]? = nil - var setInspectableArgs: [AnyHashable?]? = nil - var getCustomUserAgentCalled = false - - override var configuration: WKWebViewConfiguration { - return configurationTestValue - } - - override func setUIDelegate() { - setUIDelegateArgs = [delegate] - } - override func setNavigationDelegate() { - setNavigationDelegateArgs = [delegate] - } - override func getUrl() { - getUrlCalled = true - } - override func getEstimatedProgress() { - getEstimatedProgressCalled = true - } - override func load() { - loadArgs = [request] - } - override func loadHtmlString() { - loadHtmlStringArgs = [string, baseUrl] - } - override func loadFileUrl() { - loadFileUrlArgs = [url, readAccessUrl] - } - override func loadFlutterAsset() { - loadFlutterAssetArgs = [key] - } - override func canGoBack() { - canGoBackCalled = true - } - override func canGoForward() { - canGoForwardCalled = true - } - override func goBack() { - goBackCalled = true - } - override func goForward() { - goForwardCalled = true - } - override func reload() { - reloadCalled = true - } - override func getTitle() { - getTitleCalled = true - } - override func setAllowsBackForwardNavigationGestures() { - setAllowsBackForwardNavigationGesturesArgs = [allow] - } - override func setCustomUserAgent() { - setCustomUserAgentArgs = [userAgent] - } - override func evaluateJavaScript() { - evaluateJavaScriptArgs = [javaScriptString] - return -1 - } - override func setInspectable() { - setInspectableArgs = [inspectable] - } - override func getCustomUserAgent() { - getCustomUserAgentCalled = true - } -} -*/ - open class PigeonApiDelegateWKWebView { } protocol PigeonApiProtocolWKWebView { } -final class PigeonApiWKWebView: PigeonApiProtocolWKWebView { +final class PigeonApiWKWebView: PigeonApiProtocolWKWebView { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKWebView ///An implementation of [NSObject] used to access callback methods @@ -8089,95 +5956,84 @@ final class PigeonApiWKWebView: PigeonApiProtocolWKWebView { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebView) { + init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebView) + { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of WKWebView and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKWebView, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKWebView, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebView.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebView.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } - } - } - } -} - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKWebView`. -/// -/// 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 WebViewProxyAPIDelegate : PigeonApiDelegateWKWebView { -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class WebViewProxyAPITests: XCTestCase { + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } + } + } + } } -*/ - protocol PigeonApiDelegateWKUIDelegate { func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUIDelegate) throws -> WKUIDelegate } protocol PigeonApiProtocolWKUIDelegate { /// Creates a new web view. - func onCreateWebView(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, configuration configurationArg: WKWebViewConfiguration, navigationAction navigationActionArg: WKNavigationAction, completion: @escaping (Result) -> Void) + func onCreateWebView( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + configuration configurationArg: WKWebViewConfiguration, + navigationAction navigationActionArg: WKNavigationAction, + completion: @escaping (Result) -> Void) /// Determines whether a web resource, which the security origin object /// describes, can access to the device’s microphone audio and camera video. - func requestMediaCapturePermission(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, origin originArg: WKSecurityOrigin, frame frameArg: WKFrameInfo, type typeArg: MediaCaptureType, completion: @escaping (Result) -> Void) + func requestMediaCapturePermission( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + origin originArg: WKSecurityOrigin, frame frameArg: WKFrameInfo, type typeArg: MediaCaptureType, + completion: @escaping (Result) -> Void) /// Displays a JavaScript alert panel. - func runJavaScriptAlertPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, message messageArg: String, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) + func runJavaScriptAlertPanel( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + message messageArg: String, frame frameArg: WKFrameInfo, + completion: @escaping (Result) -> Void) /// Displays a JavaScript confirm panel. - func runJavaScriptConfirmPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, message messageArg: String, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) + func runJavaScriptConfirmPanel( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + message messageArg: String, frame frameArg: WKFrameInfo, + completion: @escaping (Result) -> Void) /// Displays a JavaScript text input panel. - func runJavaScriptTextInputPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, prompt promptArg: String, defaultText defaultTextArg: String?, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) + func runJavaScriptTextInputPanel( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + prompt promptArg: String, defaultText defaultTextArg: String?, frame frameArg: WKFrameInfo, + completion: @escaping (Result) -> Void) } -final class PigeonApiWKUIDelegate: PigeonApiProtocolWKUIDelegate { +final class PigeonApiWKUIDelegate: PigeonApiProtocolWKUIDelegate { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKUIDelegate ///An implementation of [NSObject] used to access callback methods @@ -8185,25 +6041,32 @@ final class PigeonApiWKUIDelegate: PigeonApiProtocolWKUIDelegate { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUIDelegate) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKUIDelegate + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUIDelegate?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKUIDelegate? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.pigeon_defaultConstructor", binaryMessenger: binaryMessenger, codec: codec) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.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) + try api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -8215,25 +6078,34 @@ withIdentifier: pigeonIdentifierArg) } ///Creates a Dart instance of WKUIDelegate and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKUIDelegate, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKUIDelegate, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { + } else { completion( .failure( PigeonError( code: "new-instance-error", - message: "Error: Attempting to create a new Dart instance of WKUIDelegate, but the class has a nonnull callback method.", details: ""))) + message: + "Error: Attempting to create a new Dart instance of WKUIDelegate, but the class has a nonnull callback method.", + details: ""))) } } /// Creates a new web view. - func onCreateWebView(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, configuration configurationArg: WKWebViewConfiguration, navigationAction navigationActionArg: WKNavigationAction, completion: @escaping (Result) -> Void) { + func onCreateWebView( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + configuration configurationArg: WKWebViewConfiguration, + navigationAction navigationActionArg: WKNavigationAction, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -8244,9 +6116,13 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.onCreateWebView" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, configurationArg, navigationActionArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.onCreateWebView" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage( + [pigeonInstanceArg, webViewArg, configurationArg, navigationActionArg] as [Any?] + ) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -8264,7 +6140,11 @@ withIdentifier: pigeonIdentifierArg) /// Determines whether a web resource, which the security origin object /// describes, can access to the device’s microphone audio and camera video. - func requestMediaCapturePermission(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, origin originArg: WKSecurityOrigin, frame frameArg: WKFrameInfo, type typeArg: MediaCaptureType, completion: @escaping (Result) -> Void) { + func requestMediaCapturePermission( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + origin originArg: WKSecurityOrigin, frame frameArg: WKFrameInfo, type typeArg: MediaCaptureType, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -8275,9 +6155,12 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.requestMediaCapturePermission" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, originArg, frameArg, typeArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.requestMediaCapturePermission" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, originArg, frameArg, typeArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -8288,7 +6171,11 @@ withIdentifier: pigeonIdentifierArg) let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { - completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) + completion( + .failure( + PigeonError( + code: "null-error", + message: "Flutter api returned null value for non-null return value.", details: ""))) } else { let result = listResponse[0] as! PermissionDecision completion(.success(result)) @@ -8297,7 +6184,11 @@ withIdentifier: pigeonIdentifierArg) } /// Displays a JavaScript alert panel. - func runJavaScriptAlertPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, message messageArg: String, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) { + func runJavaScriptAlertPanel( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + message messageArg: String, frame frameArg: WKFrameInfo, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -8308,9 +6199,12 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptAlertPanel" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, messageArg, frameArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptAlertPanel" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, messageArg, frameArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -8327,7 +6221,11 @@ withIdentifier: pigeonIdentifierArg) } /// Displays a JavaScript confirm panel. - func runJavaScriptConfirmPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, message messageArg: String, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) { + func runJavaScriptConfirmPanel( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + message messageArg: String, frame frameArg: WKFrameInfo, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -8338,9 +6236,12 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptConfirmPanel" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, messageArg, frameArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptConfirmPanel" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, webViewArg, messageArg, frameArg] as [Any?]) { + response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -8351,7 +6252,11 @@ withIdentifier: pigeonIdentifierArg) let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else if listResponse[0] == nil { - completion(.failure(PigeonError(code: "null-error", message: "Flutter api returned null value for non-null return value.", details: ""))) + completion( + .failure( + PigeonError( + code: "null-error", + message: "Flutter api returned null value for non-null return value.", details: ""))) } else { let result = listResponse[0] as! Bool completion(.success(result)) @@ -8360,7 +6265,11 @@ withIdentifier: pigeonIdentifierArg) } /// Displays a JavaScript text input panel. - func runJavaScriptTextInputPanel(pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, prompt promptArg: String, defaultText defaultTextArg: String?, frame frameArg: WKFrameInfo, completion: @escaping (Result) -> Void) { + func runJavaScriptTextInputPanel( + pigeonInstance pigeonInstanceArg: WKUIDelegate, webView webViewArg: WKWebView, + prompt promptArg: String, defaultText defaultTextArg: String?, frame frameArg: WKFrameInfo, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( @@ -8371,9 +6280,13 @@ withIdentifier: pigeonIdentifierArg) } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptTextInputPanel" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, webViewArg, promptArg, defaultTextArg, frameArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegate.runJavaScriptTextInputPanel" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage( + [pigeonInstanceArg, webViewArg, promptArg, defaultTextArg, frameArg] as [Any?] + ) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -8391,169 +6304,18 @@ withIdentifier: pigeonIdentifierArg) } } - -/* -// 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. - -import Foundation -import WebKit - -/// Implementation of `WKUIDelegate` that calls to Dart in callback methods. -class DelegateImpl: WKUIDelegate { - let api: PigeonApiProtocolWKUIDelegate - - init(api: PigeonApiProtocolWKUIDelegate) { - self.api = api - } - - func fixMe() { - api.onCreateWebView(pigeonInstance: self, webView: webView, configuration: configuration, navigationAction: navigationAction) { _ in } - } - - func fixMe() { - api.requestMediaCapturePermission(pigeonInstance: self, webView: webView, origin: origin, frame: frame, type: type) { _ in } - } - - func fixMe() { - api.runJavaScriptAlertPanel(pigeonInstance: self, webView: webView, message: message, frame: frame) { _ in } - } - - func fixMe() { - api.runJavaScriptConfirmPanel(pigeonInstance: self, webView: webView, message: message, frame: frame) { _ in } - } - - func fixMe() { - api.runJavaScriptTextInputPanel(pigeonInstance: self, webView: webView, prompt: prompt, defaultText: defaultText, frame: frame) { _ in } - } -} - -/// ProxyApi implementation for `WKUIDelegate`. -/// -/// 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 DelegateProxyAPIDelegate : PigeonApiDelegateWKUIDelegate { - func pigeonDefaultConstructor(pigeonApi: PigeonApiWKUIDelegate) throws -> WKUIDelegate { - return WKUIDelegateImpl(api: pigeonApi) - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class DelegateProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKUIDelegate(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) - XCTAssertNotNil(instance) - } - - func testOnCreateWebView() { - let api = TestDelegateApi() - let instance = DelegateImpl(api: api) - let webView = TestWebView - let configuration = TestWebViewConfiguration - let navigationAction = TestNavigationAction - instance.onCreateWebView(webView: webView, configuration: configuration, navigationAction: navigationAction) - - XCTAssertEqual(api.onCreateWebViewArgs, [webView, configuration, navigationAction]) - } - - func testRequestMediaCapturePermission() { - let api = TestDelegateApi() - let instance = DelegateImpl(api: api) - let webView = TestWebView - let origin = TestSecurityOrigin - let frame = TestFrameInfo - let type = .camera - instance.requestMediaCapturePermission(webView: webView, origin: origin, frame: frame, type: type) - - XCTAssertEqual(api.requestMediaCapturePermissionArgs, [webView, origin, frame, type]) - } - - func testRunJavaScriptAlertPanel() { - let api = TestDelegateApi() - let instance = DelegateImpl(api: api) - let webView = TestWebView - let message = "myString" - let frame = TestFrameInfo - instance.runJavaScriptAlertPanel(webView: webView, message: message, frame: frame) - - XCTAssertEqual(api.runJavaScriptAlertPanelArgs, [webView, message, frame]) - } - - func testRunJavaScriptConfirmPanel() { - let api = TestDelegateApi() - let instance = DelegateImpl(api: api) - let webView = TestWebView - let message = "myString" - let frame = TestFrameInfo - instance.runJavaScriptConfirmPanel(webView: webView, message: message, frame: frame) - - XCTAssertEqual(api.runJavaScriptConfirmPanelArgs, [webView, message, frame]) - } - - func testRunJavaScriptTextInputPanel() { - let api = TestDelegateApi() - let instance = DelegateImpl(api: api) - let webView = TestWebView - let prompt = "myString" - let defaultText = "myString" - let frame = TestFrameInfo - instance.runJavaScriptTextInputPanel(webView: webView, prompt: prompt, defaultText: defaultText, frame: frame) - - XCTAssertEqual(api.runJavaScriptTextInputPanelArgs, [webView, prompt, defaultText, frame]) - } - -} -class TestDelegateApi: PigeonApiProtocolWKUIDelegate { - var onCreateWebViewArgs: [AnyHashable?]? = nil - var requestMediaCapturePermissionArgs: [AnyHashable?]? = nil - var runJavaScriptAlertPanelArgs: [AnyHashable?]? = nil - var runJavaScriptConfirmPanelArgs: [AnyHashable?]? = nil - var runJavaScriptTextInputPanelArgs: [AnyHashable?]? = nil - - func onCreateWebView(webView: WKWebView, configuration: WKWebViewConfiguration, navigationAction: WKNavigationAction) throws { - onCreateWebViewArgs = [webViewArg, configurationArg, navigationActionArg] - } - func requestMediaCapturePermission(webView: WKWebView, origin: WKSecurityOrigin, frame: WKFrameInfo, type: MediaCaptureType) throws -> PermissionDecision { - requestMediaCapturePermissionArgs = [webViewArg, originArg, frameArg, typeArg] - } - func runJavaScriptAlertPanel(webView: WKWebView, message: String, frame: WKFrameInfo) throws { - runJavaScriptAlertPanelArgs = [webViewArg, messageArg, frameArg] - } - func runJavaScriptConfirmPanel(webView: WKWebView, message: String, frame: WKFrameInfo) throws -> Bool { - runJavaScriptConfirmPanelArgs = [webViewArg, messageArg, frameArg] - } - func runJavaScriptTextInputPanel(webView: WKWebView, prompt: String, defaultText: String?, frame: WKFrameInfo) throws -> String? { - runJavaScriptTextInputPanelArgs = [webViewArg, promptArg, defaultTextArg, frameArg] - } -} -*/ - protocol PigeonApiDelegateWKHTTPCookieStore { /// Sets a cookie policy that indicates whether the cookie store allows cookie /// storage. - func setCookie(pigeonApi: PigeonApiWKHTTPCookieStore, pigeonInstance: WKHTTPCookieStore, cookie: HTTPCookie, completion: @escaping (Result) -> Void) + func setCookie( + pigeonApi: PigeonApiWKHTTPCookieStore, pigeonInstance: WKHTTPCookieStore, cookie: HTTPCookie, + completion: @escaping (Result) -> Void) } protocol PigeonApiProtocolWKHTTPCookieStore { } -final class PigeonApiWKHTTPCookieStore: PigeonApiProtocolWKHTTPCookieStore { +final class PigeonApiWKHTTPCookieStore: PigeonApiProtocolWKHTTPCookieStore { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKHTTPCookieStore ///An implementation of [NSObject] used to access callback methods @@ -8561,23 +6323,33 @@ final class PigeonApiWKHTTPCookieStore: PigeonApiProtocolWKHTTPCookieStore { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKHTTPCookieStore) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKHTTPCookieStore + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKHTTPCookieStore?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKHTTPCookieStore? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let setCookieChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKHTTPCookieStore.setCookie", binaryMessenger: binaryMessenger, codec: codec) + let setCookieChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKHTTPCookieStore.setCookie", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { setCookieChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKHTTPCookieStore let cookieArg = args[1] as! HTTPCookie - api.pigeonDelegate.setCookie(pigeonApi: api, pigeonInstance: pigeonInstanceArg, cookie: cookieArg) { result in + api.pigeonDelegate.setCookie( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, cookie: cookieArg + ) { result in switch result { case .success: reply(wrapResult(nil)) @@ -8592,21 +6364,26 @@ final class PigeonApiWKHTTPCookieStore: PigeonApiProtocolWKHTTPCookieStore { } ///Creates a Dart instance of WKHTTPCookieStore and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: WKHTTPCookieStore, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKHTTPCookieStore, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKHTTPCookieStore.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKHTTPCookieStore.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -8624,80 +6401,29 @@ final class PigeonApiWKHTTPCookieStore: PigeonApiProtocolWKHTTPCookieStore { } } } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKHTTPCookieStore`. -/// -/// 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 CookieStoreProxyAPIDelegate : PigeonApiDelegateWKHTTPCookieStore { - func setCookie(pigeonApi: PigeonApiWKHTTPCookieStore, pigeonInstance: WKHTTPCookieStore, cookie: HTTPCookie, completion: @escaping (Result) -> Void) { - pigeonInstance.cookie = cookie: cookie - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class CookieStoreProxyAPITests: XCTestCase { - func testSetCookie() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKHTTPCookieStore(registrar) - - let instance = TestCookieStore() - let cookie = TestCookie - api.pigeonDelegate.setCookie(pigeonApi: api, pigeonInstance: instance, cookie: cookie) - - XCTAssertEqual(instance.setCookieArgs, [cookie]) - } - -} -class TestCookieStore: WKHTTPCookieStore { - var setCookieArgs: [AnyHashable?]? = nil - - - override func setCookie() { - setCookieArgs = [cookie] - } -} -*/ - protocol PigeonApiDelegateUIScrollViewDelegate { #if !os(macOS) - func pigeonDefaultConstructor(pigeonApi: PigeonApiUIScrollViewDelegate) throws -> UIScrollViewDelegate + func pigeonDefaultConstructor(pigeonApi: PigeonApiUIScrollViewDelegate) throws + -> UIScrollViewDelegate #endif } protocol PigeonApiProtocolUIScrollViewDelegate { #if !os(macOS) - /// Tells the delegate when the user scrolls the content view within the - /// scroll view. - /// - /// Note that this is a convenient method that includes the `contentOffset` of - /// the `scrollView`. - func scrollViewDidScroll(pigeonInstance pigeonInstanceArg: UIScrollViewDelegate, scrollView scrollViewArg: UIScrollView, x xArg: Double, y yArg: Double, completion: @escaping (Result) -> Void) #endif + /// Tells the delegate when the user scrolls the content view within the + /// scroll view. + /// + /// Note that this is a convenient method that includes the `contentOffset` of + /// the `scrollView`. + func scrollViewDidScroll( + pigeonInstance pigeonInstanceArg: UIScrollViewDelegate, + scrollView scrollViewArg: UIScrollView, x xArg: Double, y yArg: Double, + completion: @escaping (Result) -> Void) + #endif } -final class PigeonApiUIScrollViewDelegate: PigeonApiProtocolUIScrollViewDelegate { +final class PigeonApiUIScrollViewDelegate: PigeonApiProtocolUIScrollViewDelegate { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateUIScrollViewDelegate ///An implementation of [NSObject] used to access callback methods @@ -8705,55 +6431,112 @@ final class PigeonApiUIScrollViewDelegate: PigeonApiProtocolUIScrollViewDelegate return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateUIScrollViewDelegate) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateUIScrollViewDelegate + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIScrollViewDelegate?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiUIScrollViewDelegate? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() #if !os(macOS) - let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.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)) + let pigeonDefaultConstructorChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.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 { - pigeonDefaultConstructorChannel.setMessageHandler(nil) - } #endif } #if !os(macOS) - ///Creates a Dart instance of UIScrollViewDelegate and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: UIScrollViewDelegate, completion: @escaping (Result) -> Void) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { - completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + ///Creates a Dart instance of UIScrollViewDelegate and attaches it to [pigeonInstance]. + func pigeonNewInstance( + pigeonInstance: UIScrollViewDelegate, + completion: @escaping (Result) -> Void + ) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + completion(.success(())) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) + let binaryMessenger = pigeonRegistrar.binaryMessenger + let codec = pigeonRegistrar.codec + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + guard let listResponse = response as? [Any?] else { + completion(.failure(createConnectionError(withChannelName: channelName))) + return + } + if listResponse.count > 1 { + let code: String = listResponse[0] as! String + let message: String? = nilOrValue(listResponse[1]) + let details: String? = nilOrValue(listResponse[2]) + completion(.failure(PigeonError(code: code, message: message, details: details))) + } else { + completion(.success(())) + } + } + } + } + #endif + #if !os(macOS) + /// Tells the delegate when the user scrolls the content view within the + /// scroll view. + /// + /// Note that this is a convenient method that includes the `contentOffset` of + /// the `scrollView`. + func scrollViewDidScroll( + pigeonInstance pigeonInstanceArg: UIScrollViewDelegate, + scrollView scrollViewArg: UIScrollView, x xArg: Double, y yArg: Double, + completion: @escaping (Result) -> Void + ) { + if pigeonRegistrar.ignoreCallsToDart { + completion( + .failure( + PigeonError( + code: "ignore-calls-error", + message: "Calls to Dart are being ignored.", details: ""))) + return + } let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.scrollViewDidScroll" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([pigeonInstanceArg, scrollViewArg, xArg, yArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -8768,130 +6551,22 @@ withIdentifier: pigeonIdentifierArg) } } } - } - #endif - #if !os(macOS) - /// Tells the delegate when the user scrolls the content view within the - /// scroll view. - /// - /// Note that this is a convenient method that includes the `contentOffset` of - /// the `scrollView`. - func scrollViewDidScroll(pigeonInstance pigeonInstanceArg: UIScrollViewDelegate, scrollView scrollViewArg: UIScrollView, x xArg: Double, y yArg: Double, completion: @escaping (Result) -> Void) { - if pigeonRegistrar.ignoreCallsToDart { - completion( - .failure( - PigeonError( - code: "ignore-calls-error", - message: "Calls to Dart are being ignored.", details: ""))) - return - } - let binaryMessenger = pigeonRegistrar.binaryMessenger - let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegate.scrollViewDidScroll" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonInstanceArg, scrollViewArg, xArg, yArg] as [Any?]) { response in - guard let listResponse = response as? [Any?] else { - completion(.failure(createConnectionError(withChannelName: channelName))) - return - } - if listResponse.count > 1 { - let code: String = listResponse[0] as! String - let message: String? = nilOrValue(listResponse[1]) - let details: String? = nilOrValue(listResponse[2]) - completion(.failure(PigeonError(code: code, message: message, details: details))) - } else { - completion(.success(())) - } - } - } #endif } - -/* -// 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. - -import Foundation -import UIKit - -/// Implementation of `UIScrollViewDelegate` that calls to Dart in callback methods. -class ScrollViewDelegateImpl: UIScrollViewDelegate { - let api: PigeonApiProtocolUIScrollViewDelegate - - init(api: PigeonApiProtocolUIScrollViewDelegate) { - self.api = api - } - - func fixMe() { - api.scrollViewDidScroll(pigeonInstance: self, scrollView: scrollView, x: x, y: y) { _ in } - } -} - -/// ProxyApi implementation for `UIScrollViewDelegate`. -/// -/// 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 ScrollViewDelegateProxyAPIDelegate : PigeonApiDelegateUIScrollViewDelegate { - func pigeonDefaultConstructor(pigeonApi: PigeonApiUIScrollViewDelegate) throws -> UIScrollViewDelegate { - return UIScrollViewDelegateImpl(api: pigeonApi) - } - -} -*/ - -/* -// 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. - -import UIKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ScrollViewDelegateProxyAPITests: XCTestCase { - func testPigeonDefaultConstructor() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiUIScrollViewDelegate(registrar) - - let instance = try? api.pigeonDelegate.pigeonDefaultConstructor(pigeonApi: api ) - XCTAssertNotNil(instance) - } - - func testScrollViewDidScroll() { - let api = TestScrollViewDelegateApi() - let instance = ScrollViewDelegateImpl(api: api) - let scrollView = TestScrollView - let x = 1.0 - let y = 1.0 - instance.scrollViewDidScroll(scrollView: scrollView, x: x, y: y) - - XCTAssertEqual(api.scrollViewDidScrollArgs, [scrollView, x, y]) - } - -} -class TestScrollViewDelegateApi: PigeonApiProtocolUIScrollViewDelegate { - var scrollViewDidScrollArgs: [AnyHashable?]? = nil - - func scrollViewDidScroll(scrollView: UIScrollView, x: Double, y: Double) throws { - scrollViewDidScrollArgs = [scrollViewArg, xArg, yArg] - } -} -*/ - protocol PigeonApiDelegateURLCredential { /// Creates a URL credential instance for internet password authentication /// with a given user name and password, using a given persistence setting. - func withUser(pigeonApi: PigeonApiURLCredential, user: String, password: String, persistence: UrlCredentialPersistence) throws -> URLCredential + func withUser( + pigeonApi: PigeonApiURLCredential, user: String, password: String, + persistence: UrlCredentialPersistence + ) throws -> URLCredential } protocol PigeonApiProtocolURLCredential { } -final class PigeonApiURLCredential: PigeonApiProtocolURLCredential { +final class PigeonApiURLCredential: PigeonApiProtocolURLCredential { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateURLCredential ///An implementation of [NSObject] used to access callback methods @@ -8899,17 +6574,24 @@ final class PigeonApiURLCredential: PigeonApiProtocolURLCredential { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLCredential) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLCredential + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLCredential?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLCredential? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let withUserChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLCredential.withUser", binaryMessenger: binaryMessenger, codec: codec) + let withUserChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLCredential.withUser", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { withUserChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -8919,8 +6601,9 @@ final class PigeonApiURLCredential: PigeonApiProtocolURLCredential { let persistenceArg = args[3] as! UrlCredentialPersistence do { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( -try api.pigeonDelegate.withUser(pigeonApi: api, user: userArg, password: passwordArg, persistence: persistenceArg), -withIdentifier: pigeonIdentifierArg) + try api.pigeonDelegate.withUser( + pigeonApi: api, user: userArg, password: passwordArg, persistence: persistenceArg), + withIdentifier: pigeonIdentifierArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -8932,21 +6615,26 @@ withIdentifier: pigeonIdentifierArg) } ///Creates a Dart instance of URLCredential and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: URLCredential, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: URLCredential, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLCredential.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.URLCredential.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -8958,74 +6646,35 @@ withIdentifier: pigeonIdentifierArg) let details: String? = nilOrValue(listResponse[2]) completion(.failure(PigeonError(code: code, message: message, details: details))) } else { - completion(.success(())) - } - } - } - } -} - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `URLCredential`. -/// -/// 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 CredentialProxyAPIDelegate : PigeonApiDelegateURLCredential { - func withUser(pigeonApi: PigeonApiURLCredential, user: String, password: String, persistence: UrlCredentialPersistence) throws -> URLCredential { - return URLCredential(,user: user, password: password, persistence: persistence) - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class CredentialProxyAPITests: XCTestCase { - func testWithUser() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLCredential(registrar) - - let instance = try? api.pigeonDelegate.withUser(pigeonApi: api, user: "myString", password: "myString", persistence: .none) - XCTAssertNotNil(instance) + completion(.success(())) + } + } + } } - } -*/ - protocol PigeonApiDelegateURLProtectionSpace { /// The receiver’s host. - func host(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String + func host(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws + -> String /// The receiver’s port. - func port(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> Int64 + func port(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws + -> Int64 /// The receiver’s authentication realm. - func realm(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String? + func realm(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws + -> String? /// The authentication method used by the receiver. - func authenticationMethod(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String? + func authenticationMethod( + pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace + ) throws -> String? /// A representation of the server’s SSL transaction state. - func getServerTrust(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> SecTrustWrapper? + func getServerTrust(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) + throws -> SecTrustWrapper? } protocol PigeonApiProtocolURLProtectionSpace { } -final class PigeonApiURLProtectionSpace: PigeonApiProtocolURLProtectionSpace { +final class PigeonApiURLProtectionSpace: PigeonApiProtocolURLProtectionSpace { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateURLProtectionSpace ///An implementation of [NSObject] used to access callback methods @@ -9033,32 +6682,47 @@ final class PigeonApiURLProtectionSpace: PigeonApiProtocolURLProtectionSpace { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLProtectionSpace) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateURLProtectionSpace + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of URLProtectionSpace and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: URLProtectionSpace, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: URLProtectionSpace, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let hostArg = try! pigeonDelegate.host(pigeonApi: self, pigeonInstance: pigeonInstance) let portArg = try! pigeonDelegate.port(pigeonApi: self, pigeonInstance: pigeonInstance) let realmArg = try! pigeonDelegate.realm(pigeonApi: self, pigeonInstance: pigeonInstance) - let authenticationMethodArg = try! pigeonDelegate.authenticationMethod(pigeonApi: self, pigeonInstance: pigeonInstance) - let getServerTrustArg = try! pigeonDelegate.getServerTrust(pigeonApi: self, pigeonInstance: pigeonInstance) + let authenticationMethodArg = try! pigeonDelegate.authenticationMethod( + pigeonApi: self, pigeonInstance: pigeonInstance) + let getServerTrustArg = try! pigeonDelegate.getServerTrust( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLProtectionSpace.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([pigeonIdentifierArg, hostArg, portArg, realmArg, authenticationMethodArg, getServerTrustArg] as [Any?]) { response in + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.URLProtectionSpace.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage( + [ + pigeonIdentifierArg, hostArg, portArg, realmArg, authenticationMethodArg, + getServerTrustArg, + ] as [Any?] + ) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) return @@ -9075,118 +6739,17 @@ final class PigeonApiURLProtectionSpace: PigeonApiProtocolURLProtectionSpace { } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `URLProtectionSpace`. -/// -/// 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 ProtectionSpaceProxyAPIDelegate : PigeonApiDelegateURLProtectionSpace { - func host(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String { - return pigeonInstance.host - } - - func port(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> Int64 { - return pigeonInstance.port - } - - func realm(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String? { - return pigeonInstance.realm - } - - func authenticationMethod(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> String? { - return pigeonInstance.authenticationMethod - } - - func getServerTrust(pigeonApi: PigeonApiURLProtectionSpace, pigeonInstance: URLProtectionSpace) throws -> SecTrustWrapper? { - return pigeonInstance.getServerTrust - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class ProtectionSpaceProxyAPITests: XCTestCase { - func testHost() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) - - let instance = TestProtectionSpace() - let value = try? api.pigeonDelegate.host(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.host) - } - - func testPort() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) - - let instance = TestProtectionSpace() - let value = try? api.pigeonDelegate.port(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.port) - } - - func testRealm() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) - - let instance = TestProtectionSpace() - let value = try? api.pigeonDelegate.realm(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.realm) - } - - func testAuthenticationMethod() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) - - let instance = TestProtectionSpace() - let value = try? api.pigeonDelegate.authenticationMethod(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.authenticationMethod) - } - - func testGetServerTrust() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLProtectionSpace(registrar) - - let instance = TestProtectionSpace() - let value = try? api.pigeonDelegate.getServerTrust(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.getServerTrust) - } - -} -*/ - protocol PigeonApiDelegateURLAuthenticationChallenge { /// The receiver’s protection space. - func getProtectionSpace(pigeonApi: PigeonApiURLAuthenticationChallenge, pigeonInstance: URLAuthenticationChallenge) throws -> URLProtectionSpace + func getProtectionSpace( + pigeonApi: PigeonApiURLAuthenticationChallenge, pigeonInstance: URLAuthenticationChallenge + ) throws -> URLProtectionSpace } protocol PigeonApiProtocolURLAuthenticationChallenge { } -final class PigeonApiURLAuthenticationChallenge: PigeonApiProtocolURLAuthenticationChallenge { +final class PigeonApiURLAuthenticationChallenge: PigeonApiProtocolURLAuthenticationChallenge { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateURLAuthenticationChallenge ///An implementation of [NSObject] used to access callback methods @@ -9194,23 +6757,33 @@ final class PigeonApiURLAuthenticationChallenge: PigeonApiProtocolURLAuthenticat return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateURLAuthenticationChallenge) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateURLAuthenticationChallenge + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLAuthenticationChallenge?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiURLAuthenticationChallenge? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let getProtectionSpaceChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URLAuthenticationChallenge.getProtectionSpace", binaryMessenger: binaryMessenger, codec: codec) + let getProtectionSpaceChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.URLAuthenticationChallenge.getProtectionSpace", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getProtectionSpaceChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URLAuthenticationChallenge do { - let result = try api.pigeonDelegate.getProtectionSpace(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getProtectionSpace( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -9222,21 +6795,27 @@ final class PigeonApiURLAuthenticationChallenge: PigeonApiProtocolURLAuthenticat } ///Creates a Dart instance of URLAuthenticationChallenge and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: URLAuthenticationChallenge, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: URLAuthenticationChallenge, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URLAuthenticationChallenge.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.URLAuthenticationChallenge.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -9254,62 +6833,6 @@ final class PigeonApiURLAuthenticationChallenge: PigeonApiProtocolURLAuthenticat } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `URLAuthenticationChallenge`. -/// -/// 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 AuthenticationChallengeProxyAPIDelegate : PigeonApiDelegateURLAuthenticationChallenge { - func getProtectionSpace(pigeonApi: PigeonApiURLAuthenticationChallenge, pigeonInstance: URLAuthenticationChallenge) throws -> URLProtectionSpace { - return pigeonInstance.protectionSpace - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class AuthenticationChallengeProxyAPITests: XCTestCase { - func testGetProtectionSpace() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURLAuthenticationChallenge(registrar) - - let instance = TestAuthenticationChallenge() - let value = api.pigeonDelegate.getProtectionSpace(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getProtectionSpaceCalled) - XCTAssertEqual(value, instance.getProtectionSpace()) - } - -} -class TestAuthenticationChallenge: URLAuthenticationChallenge { - var getProtectionSpaceCalled = false - - - override func getProtectionSpace() { - getProtectionSpaceCalled = true - } -} -*/ - protocol PigeonApiDelegateURL { /// The absolute string for the URL. func getAbsoluteString(pigeonApi: PigeonApiURL, pigeonInstance: URL) throws -> String @@ -9318,7 +6841,7 @@ protocol PigeonApiDelegateURL { protocol PigeonApiProtocolURL { } -final class PigeonApiURL: PigeonApiProtocolURL { +final class PigeonApiURL: PigeonApiProtocolURL { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateURL ///An implementation of [NSObject] used to access callback methods @@ -9334,15 +6857,19 @@ final class PigeonApiURL: PigeonApiProtocolURL { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let getAbsoluteStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.URL.getAbsoluteString", binaryMessenger: binaryMessenger, codec: codec) + let getAbsoluteStringChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.URL.getAbsoluteString", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getAbsoluteStringChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! URL do { - let result = try api.pigeonDelegate.getAbsoluteString(pigeonApi: api, pigeonInstance: pigeonInstanceArg) + let result = try api.pigeonDelegate.getAbsoluteString( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -9354,21 +6881,26 @@ final class PigeonApiURL: PigeonApiProtocolURL { } ///Creates a Dart instance of URL and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: URL, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: URL, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.URL.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.URL.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -9386,73 +6918,19 @@ final class PigeonApiURL: PigeonApiProtocolURL { } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `URL`. -/// -/// 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 LProxyAPIDelegate : PigeonApiDelegateURL { - func getAbsoluteString(pigeonApi: PigeonApiURL, pigeonInstance: URL) throws -> String { - return pigeonInstance.absoluteString - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class LProxyAPITests: XCTestCase { - func testGetAbsoluteString() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiURL(registrar) - - let instance = TestL() - let value = api.pigeonDelegate.getAbsoluteString(pigeonApi: api, pigeonInstance: instance ) - - XCTAssertTrue(instance.getAbsoluteStringCalled) - XCTAssertEqual(value, instance.getAbsoluteString()) - } - -} -class TestL: URL { - var getAbsoluteStringCalled = false - - - override func getAbsoluteString() { - getAbsoluteStringCalled = true - } -} -*/ - protocol PigeonApiDelegateWKWebpagePreferences { /// A Boolean value that indicates whether JavaScript from web content is /// allowed to run. @available(iOS 13.0.0, macOS 10.15.0, *) - func setAllowsContentJavaScript(pigeonApi: PigeonApiWKWebpagePreferences, pigeonInstance: WKWebpagePreferences, allow: Bool) throws + func setAllowsContentJavaScript( + pigeonApi: PigeonApiWKWebpagePreferences, pigeonInstance: WKWebpagePreferences, allow: Bool) + throws } protocol PigeonApiProtocolWKWebpagePreferences { } -final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences { +final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateWKWebpagePreferences ///An implementation of [NSObject] used to access callback methods @@ -9460,25 +6938,35 @@ final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateWKWebpagePreferences) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateWKWebpagePreferences + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebpagePreferences?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiWKWebpagePreferences? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() if #available(iOS 13.0.0, macOS 10.15.0, *) { - let setAllowsContentJavaScriptChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.setAllowsContentJavaScript", binaryMessenger: binaryMessenger, codec: codec) + let setAllowsContentJavaScriptChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.setAllowsContentJavaScript", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { setAllowsContentJavaScriptChannel.setMessageHandler { message, reply in let args = message as! [Any?] let pigeonInstanceArg = args[0] as! WKWebpagePreferences let allowArg = args[1] as! Bool do { - try api.pigeonDelegate.setAllowsContentJavaScript(pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) + try api.pigeonDelegate.setAllowsContentJavaScript( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, allow: allowArg) reply(wrapResult(nil)) } catch { reply(wrapError(error)) @@ -9487,16 +6975,21 @@ final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences } else { setAllowsContentJavaScriptChannel.setMessageHandler(nil) } - } else { + } else { let setAllowsContentJavaScriptChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.setAllowsContentJavaScript", + name: + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.setAllowsContentJavaScript", binaryMessenger: binaryMessenger, codec: codec) if api != nil { setAllowsContentJavaScriptChannel.setMessageHandler { message, reply in - reply(wrapError(FlutterError(code: "PigeonUnsupportedOperationError", - message: "Call to setAllowsContentJavaScript requires @available(iOS 13.0.0, macOS 10.15.0, *).", - details: nil - ))) + reply( + wrapError( + FlutterError( + code: "PigeonUnsupportedOperationError", + message: + "Call to setAllowsContentJavaScript requires @available(iOS 13.0.0, macOS 10.15.0, *).", + details: nil + ))) } } else { setAllowsContentJavaScriptChannel.setMessageHandler(nil) @@ -9506,21 +6999,26 @@ final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences ///Creates a Dart instance of WKWebpagePreferences and attaches it to [pigeonInstance]. @available(iOS 13.0.0, macOS 10.15.0, *) - func pigeonNewInstance(pigeonInstance: WKWebpagePreferences, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: WKWebpagePreferences, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.WKWebpagePreferences.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -9538,75 +7036,22 @@ final class PigeonApiWKWebpagePreferences: PigeonApiProtocolWKWebpagePreferences } } } - -/* -// 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. - -import Foundation -import WebKit - - -/// ProxyApi implementation for `WKWebpagePreferences`. -/// -/// 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 { - func setAllowsContentJavaScript(pigeonApi: PigeonApiWKWebpagePreferences, pigeonInstance: WKWebpagePreferences, allow: Bool) throws { - pigeonInstance.allowsContentJavaScript = allow: allow - } - -} -*/ - -/* -// 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. - -import WebKit -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class WebpagePreferencesProxyAPITests: XCTestCase { - func testSetAllowsContentJavaScript() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiWKWebpagePreferences(registrar) - - let instance = TestWebpagePreferences() - let allow = true - api.pigeonDelegate.setAllowsContentJavaScript(pigeonApi: api, pigeonInstance: instance, allow: allow) - - XCTAssertEqual(instance.setAllowsContentJavaScriptArgs, [allow]) - } - -} -class TestWebpagePreferences: WKWebpagePreferences { - var setAllowsContentJavaScriptArgs: [AnyHashable?]? = nil - - - override func setAllowsContentJavaScript() { - setAllowsContentJavaScriptArgs = [allow] - } -} -*/ - protocol PigeonApiDelegateGetTrustResultResponse { /// The result code from the most recent trust evaluation. - func result(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> DartSecTrustResultType + func result(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) + throws -> DartSecTrustResultType /// A result code. /// /// See https://developer.apple.com/documentation/security/security-framework-result-codes?language=objc. - func resultCode(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> Int64 + func resultCode( + pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse + ) throws -> Int64 } protocol PigeonApiProtocolGetTrustResultResponse { } -final class PigeonApiGetTrustResultResponse: PigeonApiProtocolGetTrustResultResponse { +final class PigeonApiGetTrustResultResponse: PigeonApiProtocolGetTrustResultResponse { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateGetTrustResultResponse ///An implementation of [NSObject] used to access callback methods @@ -9614,28 +7059,38 @@ final class PigeonApiGetTrustResultResponse: PigeonApiProtocolGetTrustResultResp return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateGetTrustResultResponse) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, + delegate: PigeonApiDelegateGetTrustResultResponse + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } ///Creates a Dart instance of GetTrustResultResponse and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: GetTrustResultResponse, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: GetTrustResultResponse, + completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let resultArg = try! pigeonDelegate.result(pigeonApi: self, pigeonInstance: pigeonInstance) - let resultCodeArg = try! pigeonDelegate.resultCode(pigeonApi: self, pigeonInstance: pigeonInstance) + let resultCodeArg = try! pigeonDelegate.resultCode( + pigeonApi: self, pigeonInstance: pigeonInstance) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.GetTrustResultResponse.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.GetTrustResultResponse.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg, resultArg, resultCodeArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -9653,105 +7108,32 @@ final class PigeonApiGetTrustResultResponse: PigeonApiProtocolGetTrustResultResp } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `GetTrustResultResponse`. -/// -/// 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 GetTrustResultResponseProxyAPIDelegate : PigeonApiDelegateGetTrustResultResponse { - func result(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> DartSecTrustResultType { - switch pigeonInstance.result { - case .unspecified: - return .unspecified - case .proceed: - return .proceed - case .deny: - return .deny - case .recoverableTrustFailure: - return .recoverableTrustFailure - case .fatalTrustFailure: - return .fatalTrustFailure - case .otherError: - return .otherError - case .invalid: - return .invalid - case .confirm: - return .confirm - @unknown default: - return .unknown - } - } - - func resultCode(pigeonApi: PigeonApiGetTrustResultResponse, pigeonInstance: GetTrustResultResponse) throws -> Int64 { - return pigeonInstance.resultCode - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class GetTrustResultResponseProxyAPITests: XCTestCase { - func testResult() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiGetTrustResultResponse(registrar) - - let instance = TestGetTrustResultResponse() - let value = try? api.pigeonDelegate.result(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.result) - } - - func testResultCode() { - let registrar = TestProxyApiRegistrar() - let api = registrar.apiDelegate.pigeonApiGetTrustResultResponse(registrar) - - let instance = TestGetTrustResultResponse() - let value = try? api.pigeonDelegate.resultCode(pigeonApi: api, pigeonInstance: instance) - - XCTAssertEqual(value, instance.resultCode) - } - -} -*/ - protocol PigeonApiDelegateSecTrust { /// Evaluates trust for the specified certificate and policies. - func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, completion: @escaping (Result) -> Void) + func evaluateWithError( + pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, + completion: @escaping (Result) -> Void) /// Returns an opaque cookie containing exceptions to trust policies that will /// allow future evaluations of the current certificate to succeed. - func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? + func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws + -> FlutterStandardTypedData? /// Sets a list of exceptions that should be ignored when the certificate is /// evaluated. - func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData?) throws -> Bool + func setExceptions( + pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData? + ) throws -> Bool /// Returns the result code from the most recent trust evaluation. - func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse + func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws + -> GetTrustResultResponse /// Certificates used to evaluate trust. - func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [SecCertificateWrapper]? + func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws + -> [SecCertificateWrapper]? } protocol PigeonApiProtocolSecTrust { } -final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { +final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateSecTrust ///An implementation of [NSObject] used to access callback methods @@ -9763,13 +7145,17 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiSecTrust?) { + static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiSecTrust?) + { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let evaluateWithErrorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.evaluateWithError", binaryMessenger: binaryMessenger, codec: codec) + let evaluateWithErrorChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.evaluateWithError", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { evaluateWithErrorChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -9786,7 +7172,9 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { } else { evaluateWithErrorChannel.setMessageHandler(nil) } - let copyExceptionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.copyExceptions", binaryMessenger: binaryMessenger, codec: codec) + let copyExceptionsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.copyExceptions", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { copyExceptionsChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -9801,14 +7189,17 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { } else { copyExceptionsChannel.setMessageHandler(nil) } - let setExceptionsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.setExceptions", binaryMessenger: binaryMessenger, codec: codec) + let setExceptionsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.setExceptions", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { setExceptionsChannel.setMessageHandler { message, reply in let args = message as! [Any?] let trustArg = args[0] as! SecTrustWrapper let exceptionsArg: FlutterStandardTypedData? = nilOrValue(args[1]) do { - let result = try api.pigeonDelegate.setExceptions(pigeonApi: api, trust: trustArg, exceptions: exceptionsArg) + let result = try api.pigeonDelegate.setExceptions( + pigeonApi: api, trust: trustArg, exceptions: exceptionsArg) reply(wrapResult(result)) } catch { reply(wrapError(error)) @@ -9817,7 +7208,9 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { } else { setExceptionsChannel.setMessageHandler(nil) } - let getTrustResultChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.getTrustResult", binaryMessenger: binaryMessenger, codec: codec) + let getTrustResultChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.getTrustResult", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getTrustResultChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -9832,7 +7225,9 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { } else { getTrustResultChannel.setMessageHandler(nil) } - let copyCertificateChainChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.copyCertificateChain", binaryMessenger: binaryMessenger, codec: codec) + let copyCertificateChainChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.copyCertificateChain", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { copyCertificateChainChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -9850,21 +7245,26 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { } ///Creates a Dart instance of SecTrust and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: SecTrustWrapper, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: SecTrustWrapper, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.SecTrust.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -9882,67 +7282,15 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `SecTrust`. -/// -/// 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 SecTrustProxyAPIDelegate : PigeonApiDelegateSecTrust { - func evaluateWithError(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, completion: @escaping (Result) -> Void) { - return SecTrust.evaluateWithError(trust: trust) - } - - func copyExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> FlutterStandardTypedData? { - return SecTrust.copyExceptions(trust: trust) - } - - func setExceptions(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, exceptions: FlutterStandardTypedData?) throws -> Bool { - return SecTrust.setExceptions(trust: trust, exceptions: exceptions) - } - - func getTrustResult(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> GetTrustResultResponse { - return SecTrust.getTrustResult(trust: trust) - } - - func copyCertificateChain(pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper) throws -> [SecCertificateWrapper]? { - return SecTrust.copyCertificateChain(trust: trust) - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class SecTrustProxyAPITests: XCTestCase { -} -*/ - protocol PigeonApiDelegateSecCertificate { - func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws -> FlutterStandardTypedData + func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws + -> FlutterStandardTypedData } protocol PigeonApiProtocolSecCertificate { } -final class PigeonApiSecCertificate: PigeonApiProtocolSecCertificate { +final class PigeonApiSecCertificate: PigeonApiProtocolSecCertificate { unowned let pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar let pigeonDelegate: PigeonApiDelegateSecCertificate ///An implementation of [NSObject] used to access callback methods @@ -9950,17 +7298,24 @@ final class PigeonApiSecCertificate: PigeonApiProtocolSecCertificate { return pigeonRegistrar.apiDelegate.pigeonApiNSObject(pigeonRegistrar) } - init(pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateSecCertificate) { + init( + pigeonRegistrar: WebKitLibraryPigeonProxyApiRegistrar, delegate: PigeonApiDelegateSecCertificate + ) { self.pigeonRegistrar = pigeonRegistrar self.pigeonDelegate = delegate } - static func setUpMessageHandlers(binaryMessenger: FlutterBinaryMessenger, api: PigeonApiSecCertificate?) { + static func setUpMessageHandlers( + binaryMessenger: FlutterBinaryMessenger, api: PigeonApiSecCertificate? + ) { let codec: FlutterStandardMessageCodec = api != nil ? FlutterStandardMessageCodec( - readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter(pigeonRegistrar: api!.pigeonRegistrar)) + readerWriter: WebKitLibraryPigeonInternalProxyApiCodecReaderWriter( + pigeonRegistrar: api!.pigeonRegistrar)) : FlutterStandardMessageCodec.sharedInstance() - let copyDataChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.copyData", binaryMessenger: binaryMessenger, codec: codec) + let copyDataChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.copyData", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { copyDataChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -9978,21 +7333,26 @@ final class PigeonApiSecCertificate: PigeonApiProtocolSecCertificate { } ///Creates a Dart instance of SecCertificate and attaches it to [pigeonInstance]. - func pigeonNewInstance(pigeonInstance: SecCertificateWrapper, completion: @escaping (Result) -> Void) { + func pigeonNewInstance( + pigeonInstance: SecCertificateWrapper, completion: @escaping (Result) -> Void + ) { if pigeonRegistrar.ignoreCallsToDart { completion( .failure( PigeonError( code: "ignore-calls-error", message: "Calls to Dart are being ignored.", details: ""))) - } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { + } else if pigeonRegistrar.instanceManager.containsInstance(pigeonInstance as AnyObject) { completion(.success(())) - } else { - let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeonInstance as AnyObject) + } else { + let pigeonIdentifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance( + pigeonInstance as AnyObject) let binaryMessenger = pigeonRegistrar.binaryMessenger let codec = pigeonRegistrar.codec - let channelName: String = "dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.pigeon_newInstance" - let channel = FlutterBasicMessageChannel(name: channelName, binaryMessenger: binaryMessenger, codec: codec) + let channelName: String = + "dev.flutter.pigeon.webview_flutter_wkwebview.SecCertificate.pigeon_newInstance" + let channel = FlutterBasicMessageChannel( + name: channelName, binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([pigeonIdentifierArg] as [Any?]) { response in guard let listResponse = response as? [Any?] else { completion(.failure(createConnectionError(withChannelName: channelName))) @@ -10010,40 +7370,3 @@ final class PigeonApiSecCertificate: PigeonApiProtocolSecCertificate { } } } - -/* -// 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. - -import Foundation - - - -/// ProxyApi implementation for `SecCertificate`. -/// -/// 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 SecCertificateProxyAPIDelegate : PigeonApiDelegateSecCertificate { - func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws -> FlutterStandardTypedData { - return SecCertificate.copyData(certificate: certificate) - } - -} -*/ - -/* -// 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. - - -import Flutter -import XCTest - -@testable import webview_flutter_wkwebview - -class SecCertificateProxyAPITests: XCTestCase { -} -*/ - diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift index f2a5072623f..ca46bbb223f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift @@ -215,7 +215,8 @@ class WebViewProxyAPIDelegate: PigeonApiDelegateWKWebView, PigeonApiDelegateUIVi let assetFilePath = registrar.assetManager.lookupKeyForAsset(key) throw PigeonError( code: "FWFURLParsingError", - message: "Failed to find asset with filepath: `\(String(describing: assetFilePath))`.", details: nil) + message: "Failed to find asset with filepath: `\(String(describing: assetFilePath))`.", + details: nil) } } 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 48b3950d63d..261e1b3fdf2 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 @@ -8,7 +8,8 @@ import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer, immutable, protected; +import 'package:flutter/foundation.dart' + show ReadBuffer, WriteBuffer, immutable, protected; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; @@ -19,7 +20,8 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -28,6 +30,7 @@ List wrapResponse({Object? result, PlatformException? error, bool empty } return [error.code, error.message, error.details]; } + /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -110,9 +113,10 @@ class PigeonInstanceManager { // by calling instanceManager.getIdentifier() inside of `==` while this was a // HashMap). final Expando _identifiers = Expando(); - final Map> _weakInstances = - >{}; - final Map _strongInstances = {}; + final Map> + _weakInstances = >{}; + final Map _strongInstances = + {}; late final Finalizer _finalizer; int _nextIdentifier = 0; @@ -122,7 +126,8 @@ class PigeonInstanceManager { static PigeonInstanceManager _initInstance() { WidgetsFlutterBinding.ensureInitialized(); - final _PigeonInternalInstanceManagerApi api = _PigeonInternalInstanceManagerApi(); + final _PigeonInternalInstanceManagerApi api = + _PigeonInternalInstanceManagerApi(); // Clears the native `PigeonInstanceManager` on the initial use of the Dart one. api.clear(); final PigeonInstanceManager instanceManager = PigeonInstanceManager( @@ -130,42 +135,76 @@ class PigeonInstanceManager { api.removeStrongReference(identifier); }, ); - _PigeonInternalInstanceManagerApi.setUpMessageHandlers(instanceManager: instanceManager); - URLRequest.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - HTTPURLResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - URLResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKUserScript.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKNavigationAction.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKNavigationResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKFrameInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - NSError.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKScriptMessage.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKSecurityOrigin.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - HTTPCookie.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AuthenticationChallengeResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKWebsiteDataStore.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + _PigeonInternalInstanceManagerApi.setUpMessageHandlers( + instanceManager: instanceManager); + URLRequest.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + HTTPURLResponse.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + URLResponse.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKUserScript.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKNavigationAction.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKNavigationResponse.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKFrameInfo.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + NSError.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKScriptMessage.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKSecurityOrigin.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + HTTPCookie.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AuthenticationChallengeResponse.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKWebsiteDataStore.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); UIView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - UIScrollView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKWebViewConfiguration.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKUserContentController.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKPreferences.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKScriptMessageHandler.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKNavigationDelegate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - NSObject.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - UIViewWKWebView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - NSViewWKWebView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKWebView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKUIDelegate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKHTTPCookieStore.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - UIScrollViewDelegate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - URLCredential.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - URLProtectionSpace.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - URLAuthenticationChallenge.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + UIScrollView.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKWebViewConfiguration.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKUserContentController.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKPreferences.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKScriptMessageHandler.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKNavigationDelegate.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + NSObject.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + UIViewWKWebView.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + NSViewWKWebView.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKWebView.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKUIDelegate.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + WKHTTPCookieStore.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + UIScrollViewDelegate.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + URLCredential.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + URLProtectionSpace.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + URLAuthenticationChallenge.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); URL.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - WKWebpagePreferences.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - GetTrustResultResponse.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - SecTrust.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - SecCertificate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + WKWebpagePreferences.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + GetTrustResultResponse.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + SecTrust.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + SecCertificate.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); return instanceManager; } @@ -229,15 +268,20 @@ class PigeonInstanceManager { /// /// This method also expects the host `InstanceManager` to have a strong /// reference to the instance the identifier is associated with. - T? getInstanceWithWeakReference(int identifier) { - final PigeonInternalProxyApiBaseClass? weakInstance = _weakInstances[identifier]?.target; + T? getInstanceWithWeakReference( + int identifier) { + final PigeonInternalProxyApiBaseClass? weakInstance = + _weakInstances[identifier]?.target; if (weakInstance == null) { - final PigeonInternalProxyApiBaseClass? strongInstance = _strongInstances[identifier]; + final PigeonInternalProxyApiBaseClass? strongInstance = + _strongInstances[identifier]; if (strongInstance != null) { - final PigeonInternalProxyApiBaseClass copy = strongInstance.pigeon_copy(); + final PigeonInternalProxyApiBaseClass copy = + strongInstance.pigeon_copy(); _identifiers[copy] = identifier; - _weakInstances[identifier] = WeakReference(copy); + _weakInstances[identifier] = + WeakReference(copy); _finalizer.attach(copy, identifier, detach: copy); return copy as T; } @@ -261,17 +305,20 @@ class PigeonInstanceManager { /// added. /// /// Returns unique identifier of the [instance] added. - void addHostCreatedInstance(PigeonInternalProxyApiBaseClass instance, int identifier) { + void addHostCreatedInstance( + PigeonInternalProxyApiBaseClass instance, int identifier) { _addInstanceWithIdentifier(instance, identifier); } - void _addInstanceWithIdentifier(PigeonInternalProxyApiBaseClass instance, int identifier) { + void _addInstanceWithIdentifier( + PigeonInternalProxyApiBaseClass instance, int identifier) { assert(!containsIdentifier(identifier)); assert(getIdentifier(instance) == null); assert(identifier >= 0); _identifiers[instance] = identifier; - _weakInstances[identifier] = WeakReference(instance); + _weakInstances[identifier] = + WeakReference(instance); _finalizer.attach(instance, identifier, detach: instance); final PigeonInternalProxyApiBaseClass copy = instance.pigeon_copy(); @@ -398,294 +445,30 @@ class _PigeonInternalInstanceManagerApi { } class _PigeonInternalProxyApiBaseCodec extends _PigeonCodec { - const _PigeonInternalProxyApiBaseCodec(this.instanceManager); - final PigeonInstanceManager instanceManager; - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is PigeonInternalProxyApiBaseClass) { - buffer.putUint8(128); - writeValue(buffer, instanceManager.getIdentifier(value)); - } else { - super.writeValue(buffer, value); - } - } - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return instanceManager - .getInstanceWithWeakReference(readValue(buffer)! as int); - default: - return super.readValueOfType(type, buffer); - } - } -} - -/// Handles constructing objects and calling static methods for the Android -/// Interactive Media Ads native library. -/// -/// This class provides dependency injection for the implementations of the -/// platform interface classes. Improving the ease of unit testing and/or -/// overriding the underlying Android classes. -/// -/// By default each function calls the default constructor of the class it -/// intends to return. -class WebKitGProxy { - /// Constructs an [WebKitGProxy]. - const WebKitGProxy({ - this.newURLRequest = URLRequest.new, - this.newWKUserScript = WKUserScript.new, - this.newHTTPCookie = HTTPCookie.new, - this.newAuthenticationChallengeResponse = - AuthenticationChallengeResponse.new, - this.newWKWebViewConfiguration = WKWebViewConfiguration.new, - this.newWKScriptMessageHandler = WKScriptMessageHandler.new, - this.newWKNavigationDelegate = WKNavigationDelegate.new, - this.newNSObject = NSObject.new, - this.newUIViewWKWebView = UIViewWKWebView.new, - this.newNSViewWKWebView = NSViewWKWebView.new, - this.newWKUIDelegate = WKUIDelegate.new, - this.newUIScrollViewDelegate = UIScrollViewDelegate.new, - this.withUserURLCredential = URLCredential.withUser, - this.evaluateWithErrorSecTrust = SecTrust.evaluateWithError, - this.copyExceptionsSecTrust = SecTrust.copyExceptions, - this.setExceptionsSecTrust = SecTrust.setExceptions, - this.getTrustResultSecTrust = SecTrust.getTrustResult, - this.copyCertificateChainSecTrust = SecTrust.copyCertificateChain, - this.copyDataSecCertificate = SecCertificate.copyData, - this.defaultDataStoreWKWebsiteDataStore = - _defaultDataStoreWKWebsiteDataStore, - }); - - /// Constructs [URLRequest]. - final URLRequest Function({ - required String url, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newURLRequest; - - /// Constructs [WKUserScript]. - final WKUserScript Function({ - required String source, - required UserScriptInjectionTime injectionTime, - required bool isForMainFrameOnly, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newWKUserScript; - - /// Constructs [HTTPCookie]. - final HTTPCookie Function({ - required Map properties, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newHTTPCookie; - - /// Constructs [AuthenticationChallengeResponse]. - final AuthenticationChallengeResponse Function({ - required UrlSessionAuthChallengeDisposition disposition, - URLCredential? credential, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newAuthenticationChallengeResponse; - - /// Constructs [WKWebViewConfiguration]. - final WKWebViewConfiguration Function({ - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newWKWebViewConfiguration; - - /// Constructs [WKScriptMessageHandler]. - final WKScriptMessageHandler Function({ - required void Function( - WKScriptMessageHandler, - WKUserContentController, - WKScriptMessage, - ) didReceiveScriptMessage, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newWKScriptMessageHandler; - - /// Constructs [WKNavigationDelegate]. - final WKNavigationDelegate Function({ - required Future Function( - WKNavigationDelegate, - WKWebView, - WKNavigationAction, - ) decidePolicyForNavigationAction, - required Future Function( - WKNavigationDelegate, - WKWebView, - WKNavigationResponse, - ) decidePolicyForNavigationResponse, - required Future> Function( - WKNavigationDelegate, - WKWebView, - URLAuthenticationChallenge, - ) didReceiveAuthenticationChallenge, - void Function( - WKNavigationDelegate, - WKWebView, - String?, - )? didFinishNavigation, - void Function( - WKNavigationDelegate, - WKWebView, - String?, - )? didStartProvisionalNavigation, - void Function( - WKNavigationDelegate, - WKWebView, - NSError, - )? didFailNavigation, - void Function( - WKNavigationDelegate, - WKWebView, - NSError, - )? didFailProvisionalNavigation, - void Function( - WKNavigationDelegate, - WKWebView, - )? webViewWebContentProcessDidTerminate, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newWKNavigationDelegate; - - /// Constructs [NSObject]. - final NSObject Function({ - void Function( - NSObject, - String?, - NSObject?, - Map?, - )? observeValue, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newNSObject; - - /// Constructs [UIViewWKWebView]. - final UIViewWKWebView Function({ - required WKWebViewConfiguration initialConfiguration, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newUIViewWKWebView; - - /// Constructs [NSViewWKWebView]. - final NSViewWKWebView Function({ - required WKWebViewConfiguration initialConfiguration, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newNSViewWKWebView; - - /// Constructs [WKUIDelegate]. - final WKUIDelegate Function({ - required Future Function( - WKUIDelegate, - WKWebView, - WKSecurityOrigin, - WKFrameInfo, - MediaCaptureType, - ) requestMediaCapturePermission, - required Future Function( - WKUIDelegate, - WKWebView, - String, - WKFrameInfo, - ) runJavaScriptConfirmPanel, - void Function( - WKUIDelegate, - WKWebView, - WKWebViewConfiguration, - WKNavigationAction, - )? onCreateWebView, - Future Function( - WKUIDelegate, - WKWebView, - String, - WKFrameInfo, - )? runJavaScriptAlertPanel, - Future Function( - WKUIDelegate, - WKWebView, - String, - String?, - WKFrameInfo, - )? runJavaScriptTextInputPanel, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newWKUIDelegate; - - /// Constructs [UIScrollViewDelegate]. - final UIScrollViewDelegate Function({ - void Function( - UIScrollViewDelegate, - UIScrollView, - double, - double, - )? scrollViewDidScroll, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) newUIScrollViewDelegate; - - /// Constructs [URLCredential]. - final URLCredential Function({ - required String user, - required String password, - required UrlCredentialPersistence persistence, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) withUserURLCredential; - - /// Calls to [SecTrust.evaluateWithError]. - final Future Function( - SecTrust, { - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) evaluateWithErrorSecTrust; - - /// Calls to [SecTrust.copyExceptions]. - final Future Function( - SecTrust, { - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) copyExceptionsSecTrust; - - /// Calls to [SecTrust.setExceptions]. - final Future Function( - SecTrust, - Uint8List?, { - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) setExceptionsSecTrust; - - /// Calls to [SecTrust.getTrustResult]. - final Future Function( - SecTrust, { - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) getTrustResultSecTrust; - - /// Calls to [SecTrust.copyCertificateChain]. - final Future?> Function( - SecTrust, { - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) copyCertificateChainSecTrust; - - /// Calls to [SecCertificate.copyData]. - final Future Function( - SecCertificate, { - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - }) copyDataSecCertificate; - - /// Calls to [WKWebsiteDataStore.defaultDataStore]. - final WKWebsiteDataStore Function() defaultDataStoreWKWebsiteDataStore; + const _PigeonInternalProxyApiBaseCodec(this.instanceManager); + final PigeonInstanceManager instanceManager; + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is PigeonInternalProxyApiBaseClass) { + buffer.putUint8(128); + writeValue(buffer, instanceManager.getIdentifier(value)); + } else { + super.writeValue(buffer, value); + } + } - static WKWebsiteDataStore _defaultDataStoreWKWebsiteDataStore() => - WKWebsiteDataStore.defaultDataStore; + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return instanceManager + .getInstanceWithWeakReference(readValue(buffer)! as int); + default: + return super.readValueOfType(type, buffer); + } + } } - /// The values that can be returned in a change dictionary. /// /// See https://developer.apple.com/documentation/foundation/nskeyvalueobservingoptions. @@ -693,12 +476,15 @@ enum KeyValueObservingOptions { /// Indicates that the change dictionary should provide the new attribute /// value, if applicable. newValue, + /// Indicates that the change dictionary should contain the old attribute /// value, if applicable. oldValue, + /// If specified, a notification should be sent to the observer immediately, /// before the observer registration method even returns. initialValue, + /// Whether separate notifications should be sent to the observer before and /// after each change, instead of a single notification after the change. priorNotification, @@ -710,15 +496,19 @@ enum KeyValueObservingOptions { enum KeyValueChange { /// Indicates that the value of the observed key path was set to a new value. setting, + /// Indicates that an object has been inserted into the to-many relationship /// that is being observed. insertion, + /// Indicates that an object has been removed from the to-many relationship /// that is being observed. removal, + /// Indicates that an object has been replaced in the to-many relationship /// that is being observed. replacement, + /// The value is not recognized by the wrapper. unknown, } @@ -732,23 +522,28 @@ enum KeyValueChangeKey { /// `KeyValueChange.replacement`, the value of this key is a Set object that /// contains the indexes of the inserted, removed, or replaced objects. indexes, + /// An object that contains a value corresponding to one of the /// `KeyValueChange` enum, indicating what sort of change has occurred. kind, + /// If the value of the `KeyValueChange.kind` entry is /// `KeyValueChange.setting, and `KeyValueObservingOptions.newValue` was /// specified when the observer was registered, the value of this key is the /// new value for the attribute. newValue, + /// If the `KeyValueObservingOptions.priorNotification` option was specified /// when the observer was registered this notification is sent prior to a /// change. notificationIsPrior, + /// If the value of the `KeyValueChange.kind` entry is /// `KeyValueChange.setting`, and `KeyValueObservingOptions.old` was specified /// when the observer was registered, the value of this key is the value /// before the attribute was changed. oldValue, + /// The value is not recognized by the wrapper. unknown, } @@ -760,9 +555,11 @@ enum UserScriptInjectionTime { /// A constant to inject the script after the creation of the webpage’s /// document element, but before loading any other content. atDocumentStart, + /// A constant to inject the script after the document finishes loading, but /// before loading any other subresources. atDocumentEnd, + /// The value is not recognized by the wrapper. unknown, } @@ -773,10 +570,13 @@ enum UserScriptInjectionTime { enum AudiovisualMediaType { /// No media types require a user gesture to begin playing. none, + /// Media types that contain audio require a user gesture to begin playing. audio, + /// Media types that contain video require a user gesture to begin playing. video, + /// All media types require a user gesture to begin playing. all, } @@ -788,18 +588,25 @@ enum AudiovisualMediaType { enum WebsiteDataType { /// Cookies. cookies, + /// In-memory caches. memoryCache, + /// On-disk caches. diskCache, + /// HTML offline web app caches. offlineWebApplicationCache, + /// HTML local storage. localStorage, + /// HTML session storage. sessionStorage, + /// WebSQL databases. webSQLDatabases, + /// IndexedDB databases. indexedDBDatabases, } @@ -811,8 +618,10 @@ enum WebsiteDataType { enum NavigationActionPolicy { /// Allow the navigation to continue. allow, + /// Cancel the navigation. cancel, + /// Allow the download to proceed. download, } @@ -824,8 +633,10 @@ enum NavigationActionPolicy { enum NavigationResponsePolicy { /// Allow the navigation to continue. allow, + /// Cancel the navigation. cancel, + /// Allow the download to proceed. download, } @@ -836,37 +647,51 @@ enum NavigationResponsePolicy { enum HttpCookiePropertyKey { /// A String object containing the comment for the cookie. comment, + /// An Uri object or String object containing the comment URL for the cookie. commentUrl, + /// Aa String object stating whether the cookie should be discarded at the end /// of the session. discard, + /// An String object containing the domain for the cookie. domain, + /// An Date object or String object specifying the expiration date for the /// cookie. expires, + /// An String object containing an integer value stating how long in seconds /// the cookie should be kept, at most. maximumAge, + /// An String object containing the name of the cookie (required). name, + /// A URL or String object containing the URL that set this cookie. originUrl, + /// A String object containing the path for the cookie. path, + /// An String object containing comma-separated integer values specifying the /// ports for the cookie. port, + /// A string indicating the same-site policy for the cookie. sameSitePolicy, + /// A String object indicating that the cookie should be transmitted only over /// secure channels. secure, + /// A String object containing the value of the cookie. value, + /// A String object that specifies the version of the cookie. version, + /// The value is not recognized by the wrapper. unknown, } @@ -877,16 +702,22 @@ enum HttpCookiePropertyKey { enum NavigationType { /// A link activation. linkActivated, + /// A request to submit a form. formSubmitted, + /// A request for the frame’s next or previous item. backForward, + /// A request to reload the webpage. reload, + /// A request to resubmit a form. formResubmitted, + /// A navigation request that originates for some other reason. other, + /// The value is not recognized by the wrapper. unknown, } @@ -897,8 +728,10 @@ enum NavigationType { enum PermissionDecision { /// Deny permission for the requested resource. deny, + /// Deny permission for the requested resource. grant, + /// Prompt the user for permission for the requested resource. prompt, } @@ -909,10 +742,13 @@ enum PermissionDecision { enum MediaCaptureType { /// A media device that can capture video. camera, + /// A media device or devices that can capture audio and video. cameraAndMicrophone, + /// A media device that can capture audio. microphone, + /// The value is not recognized by the wrapper. unknown, } @@ -923,14 +759,18 @@ enum MediaCaptureType { enum UrlSessionAuthChallengeDisposition { /// Use the specified credential, which may be nil. useCredential, + /// Use the default handling for the challenge as though this delegate method /// were not implemented. performDefaultHandling, + /// Cancel the entire request. cancelAuthenticationChallenge, + /// Reject this challenge, and call the authentication delegate method again /// with the next authentication protection space. rejectProtectionSpace, + /// The value is not recognized by the wrapper. unknown, } @@ -941,10 +781,13 @@ enum UrlSessionAuthChallengeDisposition { enum UrlCredentialPersistence { /// The credential should not be stored. none, + /// The credential should be stored only for this session. forSession, + /// The credential should be stored in the keychain. permanent, + /// The credential should be stored permanently in the keychain, and in /// addition should be distributed to other devices based on the owning Apple /// ID. @@ -957,26 +800,33 @@ enum UrlCredentialPersistence { enum DartSecTrustResultType { /// The user did not specify a trust setting. unspecified, + /// The user granted permission to trust the certificate for the purposes /// designated in the specified policies. proceed, + /// The user specified that the certificate should not be trusted. deny, + /// Trust is denied, but recovery may be possible. recoverableTrustFailure, + /// Trust is denied and no simple fix is available. fatalTrustFailure, + /// A value that indicates a failure other than trust evaluation. otherError, + /// An indication of an invalid setting or result. invalid, + /// User confirmation is required before proceeding. confirm, + /// The type is not recognized by this wrapper. unknown, } - class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override @@ -984,49 +834,49 @@ class _PigeonCodec extends StandardMessageCodec { if (value is int) { buffer.putUint8(4); buffer.putInt64(value); - } else if (value is KeyValueObservingOptions) { + } else if (value is KeyValueObservingOptions) { buffer.putUint8(129); writeValue(buffer, value.index); - } else if (value is KeyValueChange) { + } else if (value is KeyValueChange) { buffer.putUint8(130); writeValue(buffer, value.index); - } else if (value is KeyValueChangeKey) { + } else if (value is KeyValueChangeKey) { buffer.putUint8(131); writeValue(buffer, value.index); - } else if (value is UserScriptInjectionTime) { + } else if (value is UserScriptInjectionTime) { buffer.putUint8(132); writeValue(buffer, value.index); - } else if (value is AudiovisualMediaType) { + } else if (value is AudiovisualMediaType) { buffer.putUint8(133); writeValue(buffer, value.index); - } else if (value is WebsiteDataType) { + } else if (value is WebsiteDataType) { buffer.putUint8(134); writeValue(buffer, value.index); - } else if (value is NavigationActionPolicy) { + } else if (value is NavigationActionPolicy) { buffer.putUint8(135); writeValue(buffer, value.index); - } else if (value is NavigationResponsePolicy) { + } else if (value is NavigationResponsePolicy) { buffer.putUint8(136); writeValue(buffer, value.index); - } else if (value is HttpCookiePropertyKey) { + } else if (value is HttpCookiePropertyKey) { buffer.putUint8(137); writeValue(buffer, value.index); - } else if (value is NavigationType) { + } else if (value is NavigationType) { buffer.putUint8(138); writeValue(buffer, value.index); - } else if (value is PermissionDecision) { + } else if (value is PermissionDecision) { buffer.putUint8(139); writeValue(buffer, value.index); - } else if (value is MediaCaptureType) { + } else if (value is MediaCaptureType) { buffer.putUint8(140); writeValue(buffer, value.index); - } else if (value is UrlSessionAuthChallengeDisposition) { + } else if (value is UrlSessionAuthChallengeDisposition) { buffer.putUint8(141); writeValue(buffer, value.index); - } else if (value is UrlCredentialPersistence) { + } else if (value is UrlCredentialPersistence) { buffer.putUint8(142); writeValue(buffer, value.index); - } else if (value is DartSecTrustResultType) { + } else if (value is DartSecTrustResultType) { buffer.putUint8(143); writeValue(buffer, value.index); } else { @@ -1037,49 +887,51 @@ class _PigeonCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 129: + case 129: final int? value = readValue(buffer) as int?; return value == null ? null : KeyValueObservingOptions.values[value]; - case 130: + case 130: final int? value = readValue(buffer) as int?; return value == null ? null : KeyValueChange.values[value]; - case 131: + case 131: final int? value = readValue(buffer) as int?; return value == null ? null : KeyValueChangeKey.values[value]; - case 132: + case 132: final int? value = readValue(buffer) as int?; return value == null ? null : UserScriptInjectionTime.values[value]; - case 133: + case 133: final int? value = readValue(buffer) as int?; return value == null ? null : AudiovisualMediaType.values[value]; - case 134: + case 134: final int? value = readValue(buffer) as int?; return value == null ? null : WebsiteDataType.values[value]; - case 135: + case 135: final int? value = readValue(buffer) as int?; return value == null ? null : NavigationActionPolicy.values[value]; - case 136: + case 136: final int? value = readValue(buffer) as int?; return value == null ? null : NavigationResponsePolicy.values[value]; - case 137: + case 137: final int? value = readValue(buffer) as int?; return value == null ? null : HttpCookiePropertyKey.values[value]; - case 138: + case 138: final int? value = readValue(buffer) as int?; return value == null ? null : NavigationType.values[value]; - case 139: + case 139: final int? value = readValue(buffer) as int?; return value == null ? null : PermissionDecision.values[value]; - case 140: + case 140: final int? value = readValue(buffer) as int?; return value == null ? null : MediaCaptureType.values[value]; - case 141: + case 141: final int? value = readValue(buffer) as int?; - return value == null ? null : UrlSessionAuthChallengeDisposition.values[value]; - case 142: + return value == null + ? null + : UrlSessionAuthChallengeDisposition.values[value]; + case 142: final int? value = readValue(buffer) as int?; return value == null ? null : UrlCredentialPersistence.values[value]; - case 143: + case 143: final int? value = readValue(buffer) as int?; return value == null ? null : DartSecTrustResultType.values[value]; default: @@ -1087,6 +939,7 @@ class _PigeonCodec extends StandardMessageCodec { } } } + /// A URL load request that is independent of protocol or URL scheme. /// /// See https://developer.apple.com/documentation/foundation/urlrequest. @@ -8649,4 +8502,3 @@ class SecCertificate extends NSObject { ); } } - diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 91319e4ba0e..10ab7d0e96e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -32,11 +32,7 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.4.4 - pigeon: - git: - url: git@github.com:bparrishMines/packages.git - ref: pigeon_helper - path: packages/pigeon + pigeon: ^25.2.0 topics: - html From fecf4caab0973bf4e2d5b3a5db63c79cb78c592c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:44:37 -0400 Subject: [PATCH 11/19] add integration test --- .../webview_flutter_test.dart | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart index 42d66dcf35a..f73cca700a8 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart @@ -238,6 +238,36 @@ Future main() async { expect(content.contains('flutter_test_header'), isTrue); }); + testWidgets('loadFlutterAsset does not throw exception', + (WidgetTester tester) async { + final Completer pageFinished = Completer(); + + final PlatformWebViewController controller = PlatformWebViewController( + const PlatformWebViewControllerCreationParams(), + ); + final PlatformNavigationDelegate delegate = PlatformNavigationDelegate( + const PlatformNavigationDelegateCreationParams(), + ); + unawaited(delegate.setOnPageFinished((_) => pageFinished.complete())); + unawaited(controller.setPlatformNavigationDelegate(delegate)); + + await expectLater( + controller.loadFlutterAsset('assets/www/index.html'), + completes, + ); + + await tester.pumpWidget(Builder( + builder: (BuildContext context) { + return PlatformWebViewWidget( + PlatformWebViewWidgetCreationParams(controller: controller), + ).build(context); + }, + )); + + // Verify page also loads. + await pageFinished.future; + }); + testWidgets('JavascriptChannel', (WidgetTester tester) async { final Completer pageFinished = Completer(); final PlatformWebViewController controller = PlatformWebViewController( From d28bf6bdd1bd7f7e6208f652f25c7901f9629e15 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:47:35 -0400 Subject: [PATCH 12/19] unused imports and bad comments --- .../Tests/GetTrustResultResponseProxyAPITests.swift | 8 -------- .../darwin/Tests/SecTrustProxyAPITests.swift | 5 ----- 2 files changed, 13 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift index 8f267640e31..0ab7203f063 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/GetTrustResultResponseProxyAPITests.swift @@ -6,14 +6,6 @@ import XCTest @testable import webview_flutter_wkwebview -#if os(iOS) - import Flutter -#elseif os(macOS) - import FlutterMacOS -#else - #error("Unsupported platform.") -#endif - class GetTrustResultResponseProxyAPITests: XCTestCase { func testResult() { let registrar = TestProxyApiRegistrar() diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift index cd029238ecf..ef92c27eb5f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/SecTrustProxyAPITests.swift @@ -102,24 +102,20 @@ class TestSecTrustProxyAPIDelegate: SecTrustProxyAPIDelegate { return SecCertificateCreateWithData(nil, certificateData!)! } - // Overridable for testing. override func secTrustEvaluateWithError( _ trust: SecTrust, _ error: UnsafeMutablePointer? ) -> Bool { return true } - // Overridable for testing. override func secTrustCopyExceptions(_ trust: SecTrust) -> CFData? { return Data() as CFData } - // Overridable for testing. override func secTrustSetExceptions(_ trust: SecTrust, _ exceptions: CFData?) -> Bool { return false } - // Overridable for testing. override func secTrustGetTrustResult( _ trust: SecTrust, _ result: UnsafeMutablePointer ) -> OSStatus { @@ -127,7 +123,6 @@ class TestSecTrustProxyAPIDelegate: SecTrustProxyAPIDelegate { return -1 } - // Overridable for testing. override func secTrustCopyCertificateChain(_ trust: SecTrust) -> CFArray? { if #available(iOS 15.0, *) { return [createDummyCertificate()] as CFArray From b90ecc864934ac0d88f6bf3f508e4ec5887b0f3e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:51:45 -0400 Subject: [PATCH 13/19] fix format --- .../webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift index fe668c2c11b..5fd11474f80 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift @@ -11,7 +11,7 @@ extension WKFrameInfo { // // See https://github.com/flutter/flutter/issues/163549 and https://developer.apple.com/forums/thread/77888. var maybeRequest: URLRequest? { - return self.perform(#selector(getter: WKFrameInfo.request))?.takeUnretainedValue() + return self.perform(#selector(getter:WKFrameInfo.request))?.takeUnretainedValue() as! URLRequest? } } From 51d228673841de876be24bc7c3edcde80e350586 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:55:28 -0400 Subject: [PATCH 14/19] version bump --- .../webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 5 +++++ .../webview_flutter/webview_flutter_wkwebview/pubspec.yaml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index a4ea405f961..11dbc2c5a86 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,3 +1,8 @@ +## 3.18.6 + +* Fixes `PlatformException` when calling `loadFlutterAsset` on macOS. +* Updates native wrapper with methods handling `SecTust` and `SecCertificate`. + ## 3.18.5 * Fixes crash when sending undefined message via JavaScript channel. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 10ab7d0e96e..73efba1dc8b 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.18.5 +version: 3.18.6 environment: sdk: ^3.5.0 From 52c530b99a014edfdb419c80b92c5e54260c2aa8 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 16:03:00 -0400 Subject: [PATCH 15/19] add security imports --- .../webview_flutter_wkwebview/GetTrustResultResponse.swift | 1 + .../Sources/webview_flutter_wkwebview/SecWrappers.swift | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift index e9155f86524..85393ad5be1 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift @@ -3,6 +3,7 @@ // found in the LICENSE file. import Darwin +import Security /// Data class used to respond to `SecTrustGetTrustResult`. /// diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift index 181f7c0a31a..9dfd19b0dcc 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import Security + /// Wrapper for `SecTrust`. /// /// Corefoundation types don't support being casted in Swift and will always succeed From ddca4582dd93b30d5f56f0523c31bc421a7898b6 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 16:06:09 -0400 Subject: [PATCH 16/19] add docs --- .../Sources/webview_flutter_wkwebview/WebKitLibrary.g.swift | 1 + .../webview_flutter_wkwebview/lib/src/common/web_kit.g.dart | 1 + .../webview_flutter_wkwebview/pigeons/web_kit.dart | 1 + 3 files changed, 3 insertions(+) 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 a4615449a35..9d35176ec17 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 @@ -7283,6 +7283,7 @@ final class PigeonApiSecTrust: PigeonApiProtocolSecTrust { } } protocol PigeonApiDelegateSecCertificate { + /// Returns a DER representation of a certificate given a certificate object. func copyData(pigeonApi: PigeonApiSecCertificate, certificate: SecCertificateWrapper) throws -> FlutterStandardTypedData } 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 261e1b3fdf2..c94b4adb44b 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 @@ -8454,6 +8454,7 @@ class SecCertificate extends NSObject { } } + /// Returns a DER representation of a certificate given a certificate object. static Future copyData( SecCertificate certificate, { BinaryMessenger? pigeon_binaryMessenger, 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 e97f1fe7528..3349c34105a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart @@ -1218,6 +1218,7 @@ abstract class SecTrust extends NSObject { /// See https://developer.apple.com/documentation/security/seccertificate. @ProxyApi(swiftOptions: SwiftProxyApiOptions(name: 'SecCertificateWrapper')) abstract class SecCertificate extends NSObject { + /// Returns a DER representation of a certificate given a certificate object. @static Uint8List copyData(SecCertificate certificate); } From 2469fec231756d424296f1b7958adb757424b5b1 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 6 Apr 2025 16:11:23 -0400 Subject: [PATCH 17/19] remove any --- .../webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift index d69be3d965d..875915bdbff 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift @@ -21,7 +21,7 @@ import Foundation class SecTrustProxyAPIDelegate: PigeonApiDelegateSecTrust { func evaluateWithError( pigeonApi: PigeonApiSecTrust, trust: SecTrustWrapper, - completion: @escaping (Result) -> Void + completion: @escaping (Result) -> Void ) { /// `SecTrustEvaluateWithError` should not be called on main thread, so this calls the method on a background thread. DispatchQueue.global().async { From 86114149382ef550ffede80d0fadf710710d6fe5 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:26:27 -0400 Subject: [PATCH 18/19] unused import and better test name --- .../SecCertificateProxyAPIDelegate.swift | 2 -- .../webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift | 2 -- .../example/integration_test/webview_flutter_test.dart | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift index be555c01ed7..3853154c90a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift @@ -6,10 +6,8 @@ import Foundation #if os(iOS) import Flutter - import UIKit #elseif os(macOS) import FlutterMacOS - import Foundation #else #error("Unsupported platform.") #endif diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift index 875915bdbff..69b91c6c969 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift @@ -6,10 +6,8 @@ import Foundation #if os(iOS) import Flutter - import UIKit #elseif os(macOS) import FlutterMacOS - import Foundation #else #error("Unsupported platform.") #endif diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart index f73cca700a8..91d99625748 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart @@ -238,7 +238,7 @@ Future main() async { expect(content.contains('flutter_test_header'), isTrue); }); - testWidgets('loadFlutterAsset does not throw exception', + testWidgets('loadFlutterAsset successfully loads an HTML asset', (WidgetTester tester) async { final Completer pageFinished = Completer(); From f0f4579d291ad3ad4183f13695825598afc51935 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 14 Apr 2025 13:34:31 -0400 Subject: [PATCH 19/19] proper fix --- .../webview_flutter_wkwebview/FlutterAssetManager.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift index fdfce0a34df..6d5aa3b2b72 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift @@ -24,19 +24,19 @@ open class FlutterAssetManager { func urlForAsset(_ asset: String) -> URL? { let assetFilePath: String? = lookupKeyForAsset(asset) - if assetFilePath == nil { + guard let assetFilePath = assetFilePath else { return nil } var url: URL? = bundle.url( - forResource: (assetFilePath! as NSString).deletingPathExtension, - withExtension: (assetFilePath! as NSString).pathExtension) + forResource: (assetFilePath as NSString).deletingPathExtension, + withExtension: (assetFilePath as NSString).pathExtension) #if os(macOS) // See https://github.com/flutter/flutter/issues/135302 // TODO(stuartmorgan): Remove this if the asset APIs are adjusted to work better for macOS. if url == nil { - url = URL(string: assetFilePath!, relativeTo: bundle.bundleURL) + url = URL(string: assetFilePath, relativeTo: bundle.bundleURL) } #endif