WebKit Bugzilla
Attachment 373251 Details for
Bug 199371
: Add new decidePolicyForNavigationAction SPI with preferences and userInfo
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-199371-20190701133518.patch (text/plain), 14.38 KB, created by
Alex Christensen
on 2019-07-01 13:35:18 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2019-07-01 13:35:18 PDT
Size:
14.38 KB
patch
obsolete
>Subversion Revision: 246896 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index dcb3e109101ae7c82471a0356db0837bcc825f13..f586e95457d2cd4222a576da993aa8bcb002a294 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,20 @@ >+2019-07-01 Alex Christensen <achristensen@webkit.org> >+ >+ Add new decidePolicyForNavigationAction SPI with preferences and userInfo >+ https://bugs.webkit.org/show_bug.cgi?id=199371 >+ <rdar://problem/52352905> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-06-27 Carlos Garcia Campos <cgarcia@igalia.com> > > WebSockets: avoid data copies when queuing tasks in WebSocketChannel >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h >index 3926bb0f3f36841996faba32db18a8b172634b19..06e101f307fe4818ffcfa7c2210847a0ed687e89 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h >@@ -93,8 +93,9 @@ static const WKNavigationResponsePolicy _WKNavigationResponsePolicyBecomeDownloa > - (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)); > >diff --git a/Source/WebKit/UIProcess/Cocoa/NavigationState.h b/Source/WebKit/UIProcess/Cocoa/NavigationState.h >index d61628dda001b57e98f9cf26060a57725f9ffa6a..b3a3d6fba96746ab42e241559343a488d5cf763e 100644 >--- a/Source/WebKit/UIProcess/Cocoa/NavigationState.h >+++ b/Source/WebKit/UIProcess/Cocoa/NavigationState.h >@@ -193,6 +193,7 @@ private: > struct { > bool webViewDecidePolicyForNavigationActionDecisionHandler : 1; > bool webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler : 1; >+ bool webViewDecidePolicyForNavigationActionWithPreferencesUserInfoDecisionHandler : 1; > bool webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies : 1; > bool webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies : 1; > bool webViewDecidePolicyForNavigationResponseDecisionHandler : 1; >diff --git a/Source/WebKit/UIProcess/Cocoa/NavigationState.mm b/Source/WebKit/UIProcess/Cocoa/NavigationState.mm >index 6e99500a9444c4eadab75c81b44fcb6b446f6422..59f87a2c74292146e6d41ec7764407b322841b00 100644 >--- a/Source/WebKit/UIProcess/Cocoa/NavigationState.mm >+++ b/Source/WebKit/UIProcess/Cocoa/NavigationState.mm >@@ -149,6 +149,7 @@ void NavigationState::setNavigationDelegate(id <WKNavigationDelegate> delegate) > 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 @@ void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageP > 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 @@ void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageP > 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 @@ void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageP > } > }; > >- 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 @@ void NavigationState::NavigationClient::renderingProgressDidChange(WebPageProxy& > > 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) >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index e14b12394b510c1278ff483b17d556a5fbff8a48..bdfd2d6087c19e77a911c00b3c169ae127636255 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,17 @@ >+2019-07-01 Alex Christensen <achristensen@webkit.org> >+ >+ Add new decidePolicyForNavigationAction SPI with preferences and userInfo >+ https://bugs.webkit.org/show_bug.cgi?id=199371 >+ <rdar://problem/52352905> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm: >+ (-[NavigationActionSPIDelegate webView:didFinishNavigation:]): >+ (-[NavigationActionSPIDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]): >+ (-[NavigationActionSPIDelegate spiCalled]): >+ (TEST): >+ > 2019-06-27 Beth Dakin <bdakin@apple.com> > > Upstream use of MACCATALYST >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm >index ea3ace5050b6832072bb4484a862431d9e74ab41..adb223d0ac40fae64d645a350427c9203a977899 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm >@@ -354,6 +354,42 @@ TEST(WKNavigation, WebViewDidCancelClientRedirect) > 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;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 199371
:
373251
|
373264