Diff
Modified: trunk/Source/WebKit/ChangeLog (247025 => 247026)
--- trunk/Source/WebKit/ChangeLog 2019-07-01 21:55:03 UTC (rev 247025)
+++ trunk/Source/WebKit/ChangeLog 2019-07-01 22:07:09 UTC (rev 247026)
@@ -1,5 +1,22 @@
2019-07-01 Alex Christensen <[email protected]>
+ Add new decidePolicyForNavigationAction SPI with preferences and userInfo
+ https://bugs.webkit.org/show_bug.cgi?id=199371
+ <rdar://problem/52352905>
+
+ Reviewed by Tim Horton.
+
+ Also deprecate some older SPI so we may someday clean up this mess.
+
+ * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
+ * UIProcess/Cocoa/NavigationState.h:
+ * UIProcess/Cocoa/NavigationState.mm:
+ (WebKit::NavigationState::setNavigationDelegate):
+ (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
+ (WebKit::NavigationState::NavigationClient::shouldBypassContentModeSafeguards const):
+
+2019-07-01 Alex Christensen <[email protected]>
+
Deprecate but still call _webView:showCustomSheetForElement: after transition to UIContextMenuInteraction
https://bugs.webkit.org/show_bug.cgi?id=199296
<rdar://problem/51041960>
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h (247025 => 247026)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h 2019-07-01 21:55:03 UTC (rev 247025)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h 2019-07-01 22:07:09 UTC (rev 247026)
@@ -93,8 +93,9 @@
- (void)_webViewWillEndNavigationGesture:(WKWebView *)webView withNavigationToBackForwardListItem:(WKBackForwardListItem *)item;
- (void)_webView:(WKWebView *)webView willSnapshotBackForwardListItem:(WKBackForwardListItem *)item;
- (void)_webViewDidRemoveNavigationGestureSnapshot:(WKWebView *)webView WK_API_AVAILABLE(macos(10.12), ios(10.0));
-- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler WK_API_DEPRECATED_WITH_REPLACEMENT("_webView:decidePolicyForNavigationAction:userInfo:decisionHandler:", macos(10.12.3, 10.14.4), ios(10.3, 12.2));
-- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction userInfo:(id <NSSecureCoding>)userInfo decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
+- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler WK_API_DEPRECATED_WITH_REPLACEMENT("_webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:", macos(10.12.3, 10.14.4), ios(10.3, 12.2));
+- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction userInfo:(id <NSSecureCoding>)userInfo decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler WK_API_DEPRECATED_WITH_REPLACEMENT("_webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:", macos(10.13.4, WK_MAC_TBA), ios(11.3, WK_IOS_TBA));
+-(void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences userInfo:(id <NSSecureCoding>)userInfo decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
- (void)_webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation userInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
- (void)_webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error userInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
Modified: trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h (247025 => 247026)
--- trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h 2019-07-01 21:55:03 UTC (rev 247025)
+++ trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h 2019-07-01 22:07:09 UTC (rev 247026)
@@ -193,6 +193,7 @@
struct {
bool webViewDecidePolicyForNavigationActionDecisionHandler : 1;
bool webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler : 1;
+ bool webViewDecidePolicyForNavigationActionWithPreferencesUserInfoDecisionHandler : 1;
bool webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies : 1;
bool webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies : 1;
bool webViewDecidePolicyForNavigationResponseDecisionHandler : 1;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm (247025 => 247026)
--- trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm 2019-07-01 21:55:03 UTC (rev 247025)
+++ trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm 2019-07-01 22:07:09 UTC (rev 247026)
@@ -149,6 +149,7 @@
m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:preferences:decisionHandler:)];
m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies = [delegate respondsToSelector:@selector(_webView:decidePolicyForNavigationAction:decisionHandler:)];
m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies = [delegate respondsToSelector:@selector(_webView:decidePolicyForNavigationAction:userInfo:decisionHandler:)];
+ m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesUserInfoDecisionHandler = [delegate respondsToSelector:@selector(_webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:)];
m_navigationDelegateMethods.webViewDecidePolicyForNavigationResponseDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationResponse:decisionHandler:)];
m_navigationDelegateMethods.webViewDidStartProvisionalNavigation = [delegate respondsToSelector:@selector(webView:didStartProvisionalNavigation:)];
@@ -522,6 +523,7 @@
defaultWebsitePolicies = policies->copy();
if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler
+ && !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesUserInfoDecisionHandler
&& !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler
&& !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies
&& !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies) {
@@ -561,12 +563,13 @@
if (!navigationDelegate)
return;
- bool delegateHasWebpagePreferences = m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler;
+ bool delegateHasWebpagePreferences = m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler
+ || m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesUserInfoDecisionHandler;
bool delegateHasWebsitePolicies = m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies || m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies;
auto selectorForCompletionHandlerChecker = ([&] () -> SEL {
if (delegateHasWebpagePreferences)
- return @selector(webView:decidePolicyForNavigationAction:preferences:decisionHandler:);
+ return m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler ? @selector(webView:decidePolicyForNavigationAction:preferences:decisionHandler:) : @selector(_webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:);
if (delegateHasWebsitePolicies)
return @selector(_webView:decidePolicyForNavigationAction:decisionHandler:);
return @selector(webView:decidePolicyForNavigationAction:decisionHandler:);
@@ -636,13 +639,18 @@
}
};
- if (delegateHasWebpagePreferences)
- [navigationDelegate webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) preferences:wrapper(defaultWebsitePolicies) decisionHandler:makeBlockPtr(WTFMove(decisionHandlerWithPreferencesOrPolicies)).get()];
- else if (delegateHasWebsitePolicies) {
+ if (delegateHasWebpagePreferences) {
+ if (m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler)
+ [navigationDelegate webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) preferences:wrapper(defaultWebsitePolicies) decisionHandler:makeBlockPtr(WTFMove(decisionHandlerWithPreferencesOrPolicies)).get()];
+ else
+ [(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) preferences:wrapper(defaultWebsitePolicies) userInfo:userInfo ? static_cast<id<NSSecureCoding>>(userInfo->wrapper()) : nil decisionHandler:makeBlockPtr(WTFMove(decisionHandlerWithPreferencesOrPolicies)).get()];
+ } else if (delegateHasWebsitePolicies) {
auto decisionHandler = makeBlockPtr(WTFMove(decisionHandlerWithPreferencesOrPolicies));
- if (m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies)
+ if (m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies) {
+ ALLOW_DEPRECATED_DECLARATIONS_BEGIN
[(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil decisionHandler:decisionHandler.get()];
- else {
+ ALLOW_DEPRECATED_DECLARATIONS_END
+ } else {
ALLOW_DEPRECATED_DECLARATIONS_BEGIN
[(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) decisionHandler:decisionHandler.get()];
ALLOW_DEPRECATED_DECLARATIONS_END
@@ -947,7 +955,8 @@
bool NavigationState::NavigationClient::shouldBypassContentModeSafeguards() const
{
- return m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler;
+ return m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler
+ || m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesUserInfoDecisionHandler;
}
static AuthenticationChallengeDisposition toAuthenticationChallengeDisposition(NSURLSessionAuthChallengeDisposition disposition)
Modified: trunk/Tools/ChangeLog (247025 => 247026)
--- trunk/Tools/ChangeLog 2019-07-01 21:55:03 UTC (rev 247025)
+++ trunk/Tools/ChangeLog 2019-07-01 22:07:09 UTC (rev 247026)
@@ -1,5 +1,19 @@
2019-07-01 Alex Christensen <[email protected]>
+ Add new decidePolicyForNavigationAction SPI with preferences and userInfo
+ https://bugs.webkit.org/show_bug.cgi?id=199371
+ <rdar://problem/52352905>
+
+ Reviewed by Tim Horton.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
+ (-[NavigationActionSPIDelegate webView:didFinishNavigation:]):
+ (-[NavigationActionSPIDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
+ (-[NavigationActionSPIDelegate spiCalled]):
+ (TEST):
+
+2019-07-01 Alex Christensen <[email protected]>
+
Deprecate _webView:showCustomSheetForElement: after transition to UIContextMenuInteraction
https://bugs.webkit.org/show_bug.cgi?id=199296
<rdar://problem/51041960>
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm (247025 => 247026)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm 2019-07-01 21:55:03 UTC (rev 247025)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm 2019-07-01 22:07:09 UTC (rev 247026)
@@ -354,6 +354,42 @@
ASSERT_TRUE(didCancelRedirect);
}
+@interface NavigationActionSPIDelegate : NSObject <WKNavigationDelegate> {
+@public
+ BOOL _spiCalled;
+}
+- (BOOL)spiCalled;
+@end
+
+@implementation NavigationActionSPIDelegate
+
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
+{
+ isDone = true;
+}
+
+-(void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences userInfo:(id <NSSecureCoding>)userInfo decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler {
+ _spiCalled = TRUE;
+ decisionHandler(WKNavigationActionPolicyAllow, preferences);
+}
+
+- (BOOL)spiCalled
+{
+ return _spiCalled;
+}
+
+@end
+
+TEST(WKNavigation, NavigationActionSPI)
+{
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
+ auto delegate = adoptNS([[NavigationActionSPIDelegate alloc] init]);
+ [webView setNavigationDelegate:delegate.get()];
+ [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"data:text/html,1"]]];
+ TestWebKitAPI::Util::run(&isDone);
+ EXPECT_TRUE([delegate spiCalled]);
+}
+
#if PLATFORM(MAC)
static bool navigationComplete;
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm (247025 => 247026)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm 2019-07-01 21:55:03 UTC (rev 247025)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm 2019-07-01 22:07:09 UTC (rev 247026)
@@ -250,7 +250,9 @@
@implementation WebsitePoliciesNavigationDelegate
+IGNORE_WARNINGS_BEGIN("deprecated-implementations")
- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction userInfo:(id <NSSecureCoding>)userInfo decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler
+IGNORE_WARNINGS_END
{
if (_decidePolicyForNavigationActionWithWebsitePolicies)
_decidePolicyForNavigationActionWithWebsitePolicies(navigationAction, userInfo, decisionHandler);
@@ -1127,7 +1129,9 @@
@implementation CustomUserAgentDelegate
+IGNORE_WARNINGS_BEGIN("deprecated-implementations")
- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction userInfo:(id <NSSecureCoding>)userInfo decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler
+IGNORE_WARNINGS_END
{
_WKWebsitePolicies *websitePolicies = [[[_WKWebsitePolicies alloc] init] autorelease];
if (navigationAction.targetFrame.mainFrame)