diff --git a/src/webkit.cs b/src/webkit.cs index a856d7517355..ebe772e853c8 100644 --- a/src/webkit.cs +++ b/src/webkit.cs @@ -2429,6 +2429,7 @@ partial interface WebPolicyDelegate { To be added. To be added. """)] + [NoDefaultValue] void DecidePolicyForNavigation (WebView webView, NSDictionary actionInformation, NSUrlRequest request, WebFrame frame, NSObject decisionToken); /// To be added. @@ -2442,6 +2443,7 @@ partial interface WebPolicyDelegate { To be added. To be added. """)] + [NoDefaultValue] void DecidePolicyForNewWindow (WebView webView, NSDictionary actionInformation, NSUrlRequest request, string newFrameName, NSObject decisionToken); /// To be added. @@ -2455,6 +2457,7 @@ partial interface WebPolicyDelegate { To be added. To be added. """)] + [NoDefaultValue] void DecidePolicyForMimeType (WebView webView, string mimeType, NSUrlRequest request, WebFrame frame, NSObject decisionToken); /// To be added. diff --git a/tests/monotouch-test/WebKit/WebViewTest.cs b/tests/monotouch-test/WebKit/WebViewTest.cs new file mode 100644 index 000000000000..17639a5bb6c1 --- /dev/null +++ b/tests/monotouch-test/WebKit/WebViewTest.cs @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#nullable enable + +#if __MACOS__ + +using WebKit; + +namespace MonoTouchFixtures.WebKit { + [TestFixture] + [Preserve (AllMembers = true)] + public class WebViewTest { + [Test] + public void PolicyDelegateSelectors () + { + using var view = new WebView (); + view.UnableToImplementPolicy += (sender, e) => { }; + + var policyDelegate = view.WeakPolicyDelegate ?? throw new AssertionException ("Policy delegate was not created."); + + var navigation = new Selector ("webView:decidePolicyForNavigationAction:request:frame:decisionListener:"); + var newWindow = new Selector ("webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:"); + var mimeType = new Selector ("webView:decidePolicyForMIMEType:request:frame:decisionListener:"); + var failure = new Selector ("webView:unableToImplementPolicyWithError:frame:"); + + void AssertSelectors (bool handlesNavigation, bool handlesNewWindow, bool handlesMimeType) + { + Assert.That (policyDelegate.RespondsToSelector (navigation), Is.EqualTo (handlesNavigation), "Navigation"); + Assert.That (policyDelegate.RespondsToSelector (newWindow), Is.EqualTo (handlesNewWindow), "New window"); + Assert.That (policyDelegate.RespondsToSelector (mimeType), Is.EqualTo (handlesMimeType), "MIME type"); + Assert.That (policyDelegate.RespondsToSelector (failure), Is.True, "Failure notification"); + } + + EventHandler navigationHandler = (sender, e) => { }; + EventHandler newWindowHandler = (sender, e) => { }; + EventHandler mimeTypeHandler = (sender, e) => { }; + + AssertSelectors (false, false, false); + view.DecidePolicyForNavigation += navigationHandler; + AssertSelectors (true, false, false); + view.DecidePolicyForNewWindow += newWindowHandler; + AssertSelectors (true, true, false); + view.DecidePolicyForMimeType += mimeTypeHandler; + AssertSelectors (true, true, true); + view.DecidePolicyForNavigation -= navigationHandler; + AssertSelectors (false, true, true); + view.DecidePolicyForNewWindow -= newWindowHandler; + AssertSelectors (false, false, true); + view.DecidePolicyForMimeType -= mimeTypeHandler; + AssertSelectors (false, false, false); + } + } +} + +#endif