Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(407)

Unified Diff: Source/WebKit/UIProcess/Cocoa/NavigationState.mm

Issue 339530043: SB prototype
Patch Set: Squashed patch Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/WebKit/UIProcess/Cocoa/NavigationState.mm
diff --git a/Source/WebKit/UIProcess/Cocoa/NavigationState.mm b/Source/WebKit/UIProcess/Cocoa/NavigationState.mm
index 8c3fa9d7496026b0b631aa7a11f9c2fa1287e0bb..ed8a0766456ab0b1a0db6b0eb0d0c4674b7bdd62 100644
--- a/Source/WebKit/UIProcess/Cocoa/NavigationState.mm
+++ b/Source/WebKit/UIProcess/Cocoa/NavigationState.mm
@@ -39,6 +39,7 @@
#import "Logging.h"
#import "NavigationActionData.h"
#import "PageLoadState.h"
+#import "SafeBrowsingController.h"
#import "WKBackForwardListInternal.h"
#import "WKBackForwardListItemInternal.h"
#import "WKFrameInfoInternal.h"
@@ -105,6 +106,7 @@ NavigationState::NavigationState(WKWebView *webView)
navigationStates().add(m_webView->_page.get(), this);
m_webView->_page->pageLoadState().addObserver(*this);
+ m_safeBrowsingController = std::make_unique<SafeBrowsingController>(webView);
}
NavigationState::~NavigationState()
@@ -478,29 +480,37 @@ static void tryAppLink(Ref<API::NavigationAction>&& navigationAction, const Stri
void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageProxy& webPageProxy, Ref<API::NavigationAction>&& navigationAction, Ref<WebFramePolicyListenerProxy>&& listener, API::Object* userInfo)
{
ASSERT(webPageProxy.mainFrame());
+ auto policyDecider = [&webPageProxy, navigationAction = navigationAction.copyRef(), userInfo, this] (WTF::Function<void(WKNavigationActionPolicy, std::optional<WebsitePoliciesData>&&)>&& completionHandler) mutable {
+ decidePolicyForNavigationActionInternal(webPageProxy, WTFMove(navigationAction), WTFMove(completionHandler), userInfo);
+ };
+ m_navigationState.m_safeBrowsingController->checkURL(WTFMove(navigationAction), WTFMove(policyDecider), WTFMove(listener));
+}
+
+void NavigationState::NavigationClient::decidePolicyForNavigationActionInternal(WebPageProxy& webPageProxy, Ref<API::NavigationAction>&& navigationAction, WTF::Function<void(WKNavigationActionPolicy, std::optional<WebsitePoliciesData>&&)>&& completionHandler, API::Object* userInfo)
+{
String mainFrameURLString = webPageProxy.mainFrame()->url();
bool subframeNavigation = navigationAction->targetFrame() && !navigationAction->targetFrame()->isMainFrame();
if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler
&& !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies
&& !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionUserInfoDecisionHandlerWebsitePolicies) {
- auto completionHandler = [webPage = makeRef(webPageProxy), listener = WTFMove(listener), navigationAction = navigationAction.copyRef()] (bool followedLinkToApp) {
+ auto localCompletionHandler = [webPage = makeRef(webPageProxy), completionHandler = WTFMove(completionHandler), navigationAction = navigationAction.copyRef()] (bool followedLinkToApp) {
if (followedLinkToApp) {
- listener->ignore();
+ completionHandler(WKNavigationActionPolicyCancel, std::nullopt);
return;
}
if (!navigationAction->targetFrame()) {
- listener->use(std::nullopt);
+ completionHandler(WKNavigationActionPolicyAllow, std::nullopt);
return;
}
RetainPtr<NSURLRequest> nsURLRequest = adoptNS(wrapper(API::URLRequest::create(navigationAction->request()).leakRef()));
if ([NSURLConnection canHandleRequest:nsURLRequest.get()] || webPage->urlSchemeHandlerForScheme([nsURLRequest URL].scheme)) {
if (navigationAction->shouldPerformDownload())
- listener->download();
+ completionHandler(_WKNavigationActionPolicyDownload, std::nullopt);
else
- listener->use(std::nullopt);
+ completionHandler(WKNavigationActionPolicyAllow, std::nullopt);
return;
}
@@ -510,9 +520,9 @@ void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageP
if (![[nsURLRequest URL] isFileURL])
[[NSWorkspace sharedWorkspace] openURL:[nsURLRequest URL]];
#endif
- listener->ignore();
+ completionHandler(WKNavigationActionPolicyCancel, std::nullopt);
};
- tryAppLink(WTFMove(navigationAction), mainFrameURLString, WTFMove(completionHandler));
+ tryAppLink(WTFMove(navigationAction), mainFrameURLString, WTFMove(localCompletionHandler));
return;
}
@@ -524,7 +534,7 @@ void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageP
auto checker = CompletionHandlerCallChecker::create(navigationDelegate.get(), delegateHasWebsitePolicies ? @selector(_webView:decidePolicyForNavigationAction:decisionHandler:) : @selector(webView:decidePolicyForNavigationAction:decisionHandler:));
- auto decisionHandlerWithPolicies = [localListener = WTFMove(listener), navigationAction = navigationAction.copyRef(), checker = WTFMove(checker), mainFrameURLString, webPageProxy = makeRef(webPageProxy), subframeNavigation](WKNavigationActionPolicy actionPolicy, _WKWebsitePolicies *websitePolicies) mutable {
+ auto decisionHandlerWithPolicies = [localCompletionHandler = WTFMove(completionHandler), navigationAction = navigationAction.copyRef(), checker = WTFMove(checker), mainFrameURLString, webPageProxy = makeRef(webPageProxy), subframeNavigation](WKNavigationActionPolicy actionPolicy, _WKWebsitePolicies *websitePolicies) mutable {
if (checker->completionHandlerHasBeenCalled())
return;
checker->didCallCompletionHandler();
@@ -545,30 +555,30 @@ void NavigationState::NavigationClient::decidePolicyForNavigationAction(WebPageP
switch (actionPolicy) {
case WKNavigationActionPolicyAllow:
- tryAppLink(WTFMove(navigationAction), mainFrameURLString, [localListener = WTFMove(localListener), data = WTFMove(data)](bool followedLinkToApp) mutable {
+ tryAppLink(WTFMove(navigationAction), mainFrameURLString, [localCompletionHandler = WTFMove(localCompletionHandler), data = WTFMove(data)](bool followedLinkToApp) mutable {
if (followedLinkToApp) {
- localListener->ignore();
+ localCompletionHandler(WKNavigationActionPolicyCancel, std::nullopt);
return;
}
- localListener->use(WTFMove(data));
+ localCompletionHandler(WKNavigationActionPolicyAllow, WTFMove(data));
});
break;
case WKNavigationActionPolicyCancel:
- localListener->ignore();
+ localCompletionHandler(WKNavigationActionPolicyCancel, std::nullopt);
break;
// FIXME: Once we have a new enough compiler everywhere we don't need to ignore -Wswitch.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wswitch"
case _WKNavigationActionPolicyDownload:
- localListener->download();
+ localCompletionHandler(_WKNavigationActionPolicyDownload, std::nullopt);
break;
case _WKNavigationActionPolicyAllowWithoutTryingAppLink:
#pragma clang diagnostic pop
- localListener->use(WTFMove(data));
+ localCompletionHandler(WKNavigationActionPolicyAllow, WTFMove(data));
break;
}
};
« no previous file with comments | « Source/WebKit/UIProcess/Cocoa/NavigationState.h ('k') | Source/WebKit/UIProcess/Cocoa/SafeBrowsingController.h » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b