blob: 68ce913202190d01dc9682cc691f5b4118f9b80b [file] [log] [blame]
// 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 'common/instance_manager.dart';
import 'foundation/foundation.dart';
import 'web_kit/web_kit.dart';
// This convenience method was added because Dart doesn't support constant
// function literals: https://github.com/dart-lang/language/issues/1048.
WKWebsiteDataStore _defaultWebsiteDataStore() =>
WKWebsiteDataStore.defaultDataStore;
/// Handles constructing objects and calling static methods for the WebKit
/// 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 WebKit classes.
///
/// By default each function calls the default constructor of the WebKit class
/// it intends to return.
class WebKitProxy {
/// Constructs a [WebKitProxy].
const WebKitProxy({
this.createWebView = WKWebView.new,
this.createWebViewConfiguration = WKWebViewConfiguration.new,
this.createScriptMessageHandler = WKScriptMessageHandler.new,
this.defaultWebsiteDataStore = _defaultWebsiteDataStore,
this.createNavigationDelegate = WKNavigationDelegate.new,
this.createUIDelegate = WKUIDelegate.new,
});
/// Constructs a [WKWebView].
final WKWebView Function(
WKWebViewConfiguration configuration, {
void Function(
String keyPath,
NSObject object,
Map<NSKeyValueChangeKey, Object?> change,
)? observeValue,
InstanceManager? instanceManager,
}) createWebView;
/// Constructs a [WKWebViewConfiguration].
final WKWebViewConfiguration Function({
InstanceManager? instanceManager,
}) createWebViewConfiguration;
/// Constructs a [WKScriptMessageHandler].
final WKScriptMessageHandler Function({
required void Function(
WKUserContentController userContentController,
WKScriptMessage message,
) didReceiveScriptMessage,
}) createScriptMessageHandler;
/// The default [WKWebsiteDataStore].
final WKWebsiteDataStore Function() defaultWebsiteDataStore;
/// Constructs a [WKNavigationDelegate].
final WKNavigationDelegate Function({
void Function(WKWebView webView, String? url)? didFinishNavigation,
void Function(WKWebView webView, String? url)?
didStartProvisionalNavigation,
Future<WKNavigationActionPolicy> Function(
WKWebView webView,
WKNavigationAction navigationAction,
)? decidePolicyForNavigationAction,
void Function(WKWebView webView, NSError error)? didFailNavigation,
void Function(WKWebView webView, NSError error)?
didFailProvisionalNavigation,
void Function(WKWebView webView)? webViewWebContentProcessDidTerminate,
}) createNavigationDelegate;
/// Constructs a [WKUIDelegate].
final WKUIDelegate Function({
void Function(
WKWebView webView,
WKWebViewConfiguration configuration,
WKNavigationAction navigationAction,
)? onCreateWebView,
Future<WKPermissionDecision> Function(
WKUIDelegate instance,
WKWebView webView,
WKSecurityOrigin origin,
WKFrameInfo frame,
WKMediaCaptureType type,
)? requestMediaCapturePermission,
InstanceManager? instanceManager,
}) createUIDelegate;
}