Changeset 222942 in webkit
- Timestamp:
- Oct 5, 2017 4:14:15 PM (7 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r222941 r222942 1 2017-10-05 Alex Christensen <achristensen@webkit.org> 2 3 Add ObjC SPI with userInfo corresponding to WKPageNavigationClient's decidePolicyForNavigationAction, didStartProvisionalNavigation, and didFailNavigation 4 https://bugs.webkit.org/show_bug.cgi?id=177974 5 <rdar://problem/22888802> 6 7 Reviewed by Tim Horton. 8 9 * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: 10 * UIProcess/Cocoa/NavigationState.h: 11 * UIProcess/Cocoa/NavigationState.mm: 12 (WebKit::NavigationState::setNavigationDelegate): 13 (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): 14 (WebKit::NavigationState::NavigationClient::didStartProvisionalNavigation): 15 (WebKit::NavigationState::NavigationClient::didFailNavigationWithError): 16 * UIProcess/Cocoa/UIDelegate.mm: 17 (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu): 18 1 19 2017-10-05 John Wilander <wilander@apple.com> 2 20 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h
r222802 r222942 78 78 - (void)_webViewDidRemoveNavigationGestureSnapshot:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12), ios(10.0)); 79 79 - (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler WK_API_AVAILABLE(macosx(10.12.3), ios(10.3)); 80 - (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction userInfo:(id <NSSecureCoding>)userInfo decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 81 - (void)_webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation userInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 82 - (void)_webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error userInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 80 83 81 84 - (void)_webView:(WKWebView *)webView URL:(NSURL *)url contentRuleListIdentifiers:(NSArray<NSString *> *)identifiers notifications:(NSArray<NSString *> *)notifications WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); -
trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h
r222802 r222942 177 177 bool webViewDecidePolicyForNavigationActionDecisionHandler : 1; 178 178 bool webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies : 1; 179 bool webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies : 1; 179 180 bool webViewDecidePolicyForNavigationResponseDecisionHandler : 1; 180 181 181 182 bool webViewDidStartProvisionalNavigation : 1; 183 bool webViewDidStartProvisionalNavigationUserInfo : 1; 182 184 bool webViewDidReceiveServerRedirectForProvisionalNavigation : 1; 183 185 bool webViewDidFailProvisionalNavigationWithError : 1; … … 189 191 bool webViewDidFinishNavigation : 1; 190 192 bool webViewDidFailNavigationWithError : 1; 193 bool webViewDidFailNavigationWithErrorUserInfo : 1; 191 194 bool webViewNavigationDidSameDocumentNavigation : 1; 192 195 -
trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm
r222802 r222942 142 142 m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]; 143 143 m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies = [delegate respondsToSelector:@selector(_webView:decidePolicyForNavigationAction:decisionHandler:)]; 144 m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies = [delegate respondsToSelector:@selector(_webView:decidePolicyForNavigationAction:userInfo:decisionHandler:)]; 144 145 m_navigationDelegateMethods.webViewDecidePolicyForNavigationResponseDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationResponse:decisionHandler:)]; 145 146 146 147 m_navigationDelegateMethods.webViewDidStartProvisionalNavigation = [delegate respondsToSelector:@selector(webView:didStartProvisionalNavigation:)]; 148 m_navigationDelegateMethods.webViewDidStartProvisionalNavigationUserInfo = [delegate respondsToSelector:@selector(_webView:didStartProvisionalNavigation:userInfo:)]; 147 149 m_navigationDelegateMethods.webViewDidReceiveServerRedirectForProvisionalNavigation = [delegate respondsToSelector:@selector(webView:didReceiveServerRedirectForProvisionalNavigation:)]; 148 150 m_navigationDelegateMethods.webViewDidFailProvisionalNavigationWithError = [delegate respondsToSelector:@selector(webView:didFailProvisionalNavigation:withError:)]; … … 150 152 m_navigationDelegateMethods.webViewDidFinishNavigation = [delegate respondsToSelector:@selector(webView:didFinishNavigation:)]; 151 153 m_navigationDelegateMethods.webViewDidFailNavigationWithError = [delegate respondsToSelector:@selector(webView:didFailNavigation:withError:)]; 154 m_navigationDelegateMethods.webViewDidFailNavigationWithErrorUserInfo = [delegate respondsToSelector:@selector(_webView:didFailNavigation:withError:userInfo:)]; 152 155 153 156 m_navigationDelegateMethods.webViewNavigationDidFailProvisionalLoadInSubframeWithError = [delegate respondsToSelector:@selector(_webView:navigation:didFailProvisionalLoadInSubframe:withError:)]; … … 391 394 } 392 395 393 void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageProxy& webPageProxy, Ref<API::NavigationAction>&& navigationAction, Ref<WebFramePolicyListenerProxy>&& listener, API::Object* user Data)396 void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageProxy& webPageProxy, Ref<API::NavigationAction>&& navigationAction, Ref<WebFramePolicyListenerProxy>&& listener, API::Object* userInfo) 394 397 { 395 398 String mainFrameURLString = webPageProxy.mainFrame()->url(); 396 399 397 400 if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler 398 && !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies) { 399 Ref<API::NavigationAction> localNavigationAction = navigationAction.copyRef(); 400 RefPtr<WebFramePolicyListenerProxy> localListener = WTFMove(listener); 401 402 tryAppLink(WTFMove(localNavigationAction), mainFrameURLString, [webPage = RefPtr<WebPageProxy>(&webPageProxy), localListener, localNavigationAction = navigationAction.copyRef()] (bool followedLinkToApp) { 401 && !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies 402 && !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies) { 403 auto completionHandler = [webPage = makeRef(webPageProxy), listener = WTFMove(listener), navigationAction = navigationAction.copyRef()] (bool followedLinkToApp) { 403 404 if (followedLinkToApp) { 404 l ocalListener->ignore();405 listener->ignore(); 405 406 return; 406 407 } 407 408 408 if (! localNavigationAction->targetFrame()) {409 l ocalListener->use({ });409 if (!navigationAction->targetFrame()) { 410 listener->use({ }); 410 411 return; 411 412 } 412 413 413 RetainPtr<NSURLRequest> nsURLRequest = adoptNS(wrapper(API::URLRequest::create( localNavigationAction->request()).leakRef()));414 RetainPtr<NSURLRequest> nsURLRequest = adoptNS(wrapper(API::URLRequest::create(navigationAction->request()).leakRef())); 414 415 if ([NSURLConnection canHandleRequest:nsURLRequest.get()] || webPage->urlSchemeHandlerForScheme([nsURLRequest URL].scheme)) { 415 if ( localNavigationAction->shouldPerformDownload())416 l ocalListener->download();416 if (navigationAction->shouldPerformDownload()) 417 listener->download(); 417 418 else 418 l ocalListener->use({ });419 listener->use({ }); 419 420 return; 420 421 } … … 426 427 [[NSWorkspace sharedWorkspace] openURL:[nsURLRequest URL]]; 427 428 #endif 428 l ocalListener->ignore();429 } );430 429 listener->ignore(); 430 }; 431 tryAppLink(WTFMove(navigationAction), mainFrameURLString, WTFMove(completionHandler)); 431 432 return; 432 433 } … … 436 437 return; 437 438 438 bool delegateHasWebsitePolicies = m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies ;439 bool delegateHasWebsitePolicies = m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies || m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies; 439 440 440 RefPtr<CompletionHandlerCallChecker>checker = CompletionHandlerCallChecker::create(navigationDelegate.get(), delegateHasWebsitePolicies ? @selector(_webView:decidePolicyForNavigationAction:decisionHandler:) : @selector(webView:decidePolicyForNavigationAction:decisionHandler:));441 auto checker = CompletionHandlerCallChecker::create(navigationDelegate.get(), delegateHasWebsitePolicies ? @selector(_webView:decidePolicyForNavigationAction:decisionHandler:) : @selector(webView:decidePolicyForNavigationAction:decisionHandler:)); 441 442 442 443 auto decisionHandlerWithPolicies = [localListener = RefPtr<WebFramePolicyListenerProxy>(WTFMove(listener)), localNavigationAction = navigationAction.copyRef(), checker = WTFMove(checker), mainFrameURLString](WKNavigationActionPolicy actionPolicy, _WKWebsitePolicies *websitePolicies) mutable { … … 479 480 }; 480 481 481 if (delegateHasWebsitePolicies) 482 [(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) decisionHandler:BlockPtr<void(WKNavigationActionPolicy, _WKWebsitePolicies *)>::fromCallable(WTFMove(decisionHandlerWithPolicies)).get()]; 483 else { 482 if (delegateHasWebsitePolicies) { 483 auto decisionHandler = BlockPtr<void(WKNavigationActionPolicy, _WKWebsitePolicies *)>::fromCallable(WTFMove(decisionHandlerWithPolicies)); 484 if (m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies) 485 [(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil decisionHandler:decisionHandler.get()]; 486 else 487 [(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) decisionHandler:decisionHandler.get()]; 488 } else { 484 489 auto decisionHandlerWithoutPolicies = [decisionHandlerWithPolicies = WTFMove(decisionHandlerWithPolicies)] (WKNavigationActionPolicy actionPolicy) mutable { 485 490 decisionHandlerWithPolicies(actionPolicy, nil); … … 564 569 } 565 570 566 void NavigationState::NavigationClient::didStartProvisionalNavigation(WebPageProxy& page, API::Navigation* navigation, API::Object*) 567 { 568 if (!m_navigationState.m_navigationDelegateMethods.webViewDidStartProvisionalNavigation) 571 void NavigationState::NavigationClient::didStartProvisionalNavigation(WebPageProxy& page, API::Navigation* navigation, API::Object* userInfo) 572 { 573 if (!m_navigationState.m_navigationDelegateMethods.webViewDidStartProvisionalNavigation 574 && !m_navigationState.m_navigationDelegateMethods.webViewDidStartProvisionalNavigationUserInfo) 569 575 return; 570 576 … … 578 584 wkNavigation = wrapper(*navigation); 579 585 580 [navigationDelegate webView:m_navigationState.m_webView didStartProvisionalNavigation:wkNavigation]; 586 if (m_navigationState.m_navigationDelegateMethods.webViewDidStartProvisionalNavigationUserInfo) 587 [(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView didStartProvisionalNavigation:wkNavigation userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil]; 588 else 589 [navigationDelegate webView:m_navigationState.m_webView didStartProvisionalNavigation:wkNavigation]; 581 590 } 582 591 … … 728 737 729 738 // FIXME: Shouldn't need to pass the WebFrameProxy in here. At most, a FrameHandle. 730 void NavigationState::NavigationClient::didFailNavigationWithError(WebPageProxy& page, WebFrameProxy& webFrameProxy, API::Navigation* navigation, const WebCore::ResourceError& error, API::Object* userData) 731 { 732 if (!m_navigationState.m_navigationDelegateMethods.webViewDidFailNavigationWithError) 739 void NavigationState::NavigationClient::didFailNavigationWithError(WebPageProxy& page, WebFrameProxy& webFrameProxy, API::Navigation* navigation, const WebCore::ResourceError& error, API::Object* userInfo) 740 { 741 if (!m_navigationState.m_navigationDelegateMethods.webViewDidFailNavigationWithError 742 && !m_navigationState.m_navigationDelegateMethods.webViewDidFailNavigationWithErrorUserInfo) 733 743 return; 734 744 … … 743 753 744 754 auto errorWithRecoveryAttempter = createErrorWithRecoveryAttempter(m_navigationState.m_webView, webFrameProxy, error); 745 [navigationDelegate webView:m_navigationState.m_webView didFailNavigation:wkNavigation withError:errorWithRecoveryAttempter.get()]; 755 if (m_navigationState.m_navigationDelegateMethods.webViewDidFailNavigationWithErrorUserInfo) 756 [(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView didFailNavigation:wkNavigation withError:errorWithRecoveryAttempter.get() userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil]; 757 else 758 [navigationDelegate webView:m_navigationState.m_webView didFailNavigation:wkNavigation withError:errorWithRecoveryAttempter.get()]; 746 759 } 747 760 -
trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm
r222059 r222942 189 189 return [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView contextMenu:menu forElement:contextMenuElementInfo.get()]; 190 190 191 return [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView contextMenu:menu forElement:contextMenuElementInfo.get() userInfo: static_cast<id <NSSecureCoding>>(userInfo->wrapper())];191 return [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView contextMenu:menu forElement:contextMenuElementInfo.get() userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil]; 192 192 } 193 193 #endif
Note: See TracChangeset
for help on using the changeset viewer.