Diff
Modified: trunk/LayoutTests/ChangeLog (250421 => 250422)
--- trunk/LayoutTests/ChangeLog 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/LayoutTests/ChangeLog 2019-09-27 14:34:13 UTC (rev 250422)
@@ -1,3 +1,13 @@
+2019-09-27 Alex Christensen <achristen...@webkit.org>
+
+ Remove unused WebProcessPool::setCanHandleHTTPSServerTrustEvaluation
+ https://bugs.webkit.org/show_bug.cgi?id=202285
+
+ Reviewed by Youenn Fablet.
+
+ * http/tests/ssl/certificate-validation-expected.txt: Removed.
+ * http/tests/ssl/certificate-validation.html: Removed.
+
2019-09-26 Chris Dumez <cdu...@apple.com>
Pages frequently fails to enter the back/forward cache due to pending loads
Deleted: trunk/LayoutTests/http/tests/ssl/certificate-validation-expected.txt (250421 => 250422)
--- trunk/LayoutTests/http/tests/ssl/certificate-validation-expected.txt 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/LayoutTests/http/tests/ssl/certificate-validation-expected.txt 2019-09-27 14:34:13 UTC (rev 250422)
@@ -1,3 +0,0 @@
-
-PASS Certificate validation in Network Process
-
Deleted: trunk/LayoutTests/http/tests/ssl/certificate-validation.html (250421 => 250422)
--- trunk/LayoutTests/http/tests/ssl/certificate-validation.html 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/LayoutTests/http/tests/ssl/certificate-validation.html 2019-09-27 14:34:13 UTC (rev 250422)
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>Certificate validation in Network Process</title>
-<script src=""
-<script src=""
-</head>
-<body>
-<script>
-function with_iframe(url) {
- return new Promise(function(resolve) {
- var frame = document.createElement('iframe');
- frame.className = 'test-iframe';
- frame.src = ""
- frame._onload_ = function() { resolve(frame); };
- document.body.appendChild(frame);
- });
-}
-
-async function doTest()
-{
- assert_true(!!window.testRunner, "Test requires testRunner");
-
- if (!window.testRunner.canDoServerTrustEvaluationInNetworkProcess)
- return;
-
- // This should trigger network process server trust evaluation.
- window.testRunner.setCanHandleHTTPSServerTrustEvaluation(false);
-
- // Crash network process to make sure we create new HTTPS connections.
- window.testRunner.terminateNetworkProcess();
-
- const currentCallbackCounts = window.testRunner.serverTrustEvaluationCallbackCallsCount;
-
- const iframe = await with_iframe("https://localhost:8443");
- iframe.remove();
-
- assert_equals(window.testRunner.serverTrustEvaluationCallbackCallsCount - currentCallbackCounts, 1);
-}
-
-doTest().then(done, (e) => { assert_unreached("test failed: " + e); done(); });
-
-</script>
-</body>
-</html>
Modified: trunk/Source/WebKit/ChangeLog (250421 => 250422)
--- trunk/Source/WebKit/ChangeLog 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/ChangeLog 2019-09-27 14:34:13 UTC (rev 250422)
@@ -1,5 +1,38 @@
2019-09-27 Alex Christensen <achristen...@webkit.org>
+ Remove unused WebProcessPool::setCanHandleHTTPSServerTrustEvaluation
+ https://bugs.webkit.org/show_bug.cgi?id=202285
+
+ Reviewed by Youenn Fablet.
+
+ The SPI to set this was deprecated in r250377 with a replacement that was adopted in rdar://problem/55731135
+ I removed a layout test using the old SPI and replaced it with a more precise API test verifying the behavior of the new SPI
+ before and after the introduction of NSURLSession's _strictTrustEvaluate:queue:completionHandler:
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::initializeNetworkProcess):
+ (WebKit::NetworkProcess::setCanHandleHTTPSServerTrustEvaluation): Deleted.
+ * NetworkProcess/NetworkProcess.h:
+ (WebKit::NetworkProcess::canHandleHTTPSServerTrustEvaluation const): Deleted.
+ * NetworkProcess/NetworkProcess.messages.in:
+ * NetworkProcess/NetworkProcessCreationParameters.cpp:
+ (WebKit::NetworkProcessCreationParameters::encode const):
+ (WebKit::NetworkProcessCreationParameters::decode):
+ * NetworkProcess/NetworkProcessCreationParameters.h:
+ * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+ (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
+ (canNSURLSessionTrustEvaluate): Deleted.
+ * UIProcess/API/C/WKContext.cpp:
+ (WKContextSetCanHandleHTTPSServerTrustEvaluation):
+ * UIProcess/API/Cocoa/WKProcessPool.mm:
+ (-[WKProcessPool _setCanHandleHTTPSServerTrustEvaluation:]):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::ensureNetworkProcess):
+ (WebKit::WebProcessPool::setCanHandleHTTPSServerTrustEvaluation): Deleted.
+ * UIProcess/WebProcessPool.h:
+
+2019-09-27 Alex Christensen <achristen...@webkit.org>
+
Remove unused APIProcessPoolConfiguration::diskCacheSpeculativeValidationEnabled
https://bugs.webkit.org/show_bug.cgi?id=202290
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (250421 => 250422)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-09-27 14:34:13 UTC (rev 250422)
@@ -307,8 +307,6 @@
setCacheModel(parameters.cacheModel, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory);
- setCanHandleHTTPSServerTrustEvaluation(parameters.canHandleHTTPSServerTrustEvaluation);
-
if (parameters.shouldUseTestingNetworkSession) {
m_shouldUseTestingNetworkStorageSession = true;
m_defaultNetworkStorageSession = newTestingSession(PAL::SessionID::defaultSessionID());
@@ -2017,11 +2015,6 @@
});
}
-void NetworkProcess::setCanHandleHTTPSServerTrustEvaluation(bool value)
-{
- m_canHandleHTTPSServerTrustEvaluation = value;
-}
-
void NetworkProcess::getNetworkProcessStatistics(uint64_t callbackID)
{
StatisticsData data;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (250421 => 250422)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-09-27 14:34:13 UTC (rev 250422)
@@ -178,8 +178,6 @@
void ensureSession(const PAL::SessionID&, const String& identifier);
#endif
- bool canHandleHTTPSServerTrustEvaluation() const { return m_canHandleHTTPSServerTrustEvaluation; }
-
void processWillSuspendImminently();
void processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&&);
void prepareToSuspend();
@@ -414,7 +412,6 @@
void setCacheModel(CacheModel, String overrideCacheStorageDirectory);
void allowSpecificHTTPSCertificateForHost(const WebCore::CertificateInfo&, const String& host);
- void setCanHandleHTTPSServerTrustEvaluation(bool);
void getNetworkProcessStatistics(uint64_t callbackID);
void clearCacheForAllOrigins(uint32_t cachesToClear);
void setAllowsAnySSLCertificateForWebSocket(bool, CompletionHandler<void()>&&);
@@ -480,7 +477,6 @@
CacheModel m_cacheModel { CacheModel::DocumentViewer };
bool m_suppressMemoryPressureHandler { false };
bool m_diskCacheIsDisabledForTesting { false };
- bool m_canHandleHTTPSServerTrustEvaluation { true };
String m_uiProcessBundleIdentifier;
DownloadManager m_downloadManager;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (250421 => 250422)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2019-09-27 14:34:13 UTC (rev 250422)
@@ -67,7 +67,6 @@
SyncAllCookies()
AllowSpecificHTTPSCertificateForHost(WebCore::CertificateInfo certificate, String host)
- SetCanHandleHTTPSServerTrustEvaluation(bool value)
GetNetworkProcessStatistics(uint64_t callbackID)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp (250421 => 250422)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp 2019-09-27 14:34:13 UTC (rev 250422)
@@ -40,7 +40,6 @@
void NetworkProcessCreationParameters::encode(IPC::Encoder& encoder) const
{
encoder.encodeEnum(cacheModel);
- encoder << canHandleHTTPSServerTrustEvaluation;
#if PLATFORM(MAC)
encoder << uiProcessCookieStorageIdentifier;
#endif
@@ -94,8 +93,6 @@
{
if (!decoder.decodeEnum(result.cacheModel))
return false;
- if (!decoder.decode(result.canHandleHTTPSServerTrustEvaluation))
- return false;
#if PLATFORM(MAC)
if (!decoder.decode(result.uiProcessCookieStorageIdentifier))
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h (250421 => 250422)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h 2019-09-27 14:34:13 UTC (rev 250422)
@@ -52,7 +52,6 @@
static bool decode(IPC::Decoder&, NetworkProcessCreationParameters&);
CacheModel cacheModel { CacheModel::DocumentViewer };
- bool canHandleHTTPSServerTrustEvaluation { true };
#if PLATFORM(MAC)
Vector<uint8_t> uiProcessCookieStorageIdentifier;
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm (250421 => 250422)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2019-09-27 14:34:13 UTC (rev 250422)
@@ -538,11 +538,6 @@
}
#if HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE)
-static bool canNSURLSessionTrustEvaluate()
-{
- return [NSURLSession respondsToSelector:@selector(_strictTrustEvaluate: queue: completionHandler:)];
-}
-
static inline void processServerTrustEvaluation(NetworkSessionCocoa *session, NSURLAuthenticationChallenge *challenge, NetworkDataTaskCocoa::TaskIdentifier taskIdentifier, NetworkDataTaskCocoa* networkDataTask, CompletionHandler<void(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential)>&& completionHandler)
{
session->continueDidReceiveChallenge(challenge, taskIdentifier, networkDataTask, [completionHandler = WTFMove(completionHandler), secTrust = retainPtr(challenge.protectionSpace.serverTrust)] (WebKit::AuthenticationChallengeDisposition disposition, const WebCore::Credential& credential) mutable {
@@ -578,25 +573,24 @@
return completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
// Handle server trust evaluation at platform-level if requested, for performance reasons and to use ATS defaults.
- if (!_session->networkProcess().canHandleHTTPSServerTrustEvaluation() || _session->fastServerTrustEvaluationEnabled()) {
+ if (_session->fastServerTrustEvaluationEnabled()) {
#if HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE)
- if (canNSURLSessionTrustEvaluate()) {
- auto* networkDataTask = [self existingTask:task];
- ASSERT(networkDataTask);
- auto decisionHandler = makeBlockPtr([_session = makeWeakPtr(_session.get()), completionHandler = makeBlockPtr(completionHandler), taskIdentifier, networkDataTask = RefPtr<NetworkDataTaskCocoa>(networkDataTask)](NSURLAuthenticationChallenge *challenge, OSStatus trustResult) mutable {
- auto task = WTFMove(networkDataTask);
- auto* session = _session.get();
- if (trustResult == noErr || !session) {
- completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
- return;
- }
- processServerTrustEvaluation(session, challenge, taskIdentifier, task.get(), WTFMove(completionHandler));
- });
- [NSURLSession _strictTrustEvaluate:challenge queue:[NSOperationQueue mainQueue].underlyingQueue completionHandler:decisionHandler.get()];
- return;
- }
+ auto* networkDataTask = [self existingTask:task];
+ ASSERT(networkDataTask);
+ auto decisionHandler = makeBlockPtr([_session = makeWeakPtr(_session.get()), completionHandler = makeBlockPtr(completionHandler), taskIdentifier, networkDataTask = RefPtr<NetworkDataTaskCocoa>(networkDataTask)](NSURLAuthenticationChallenge *challenge, OSStatus trustResult) mutable {
+ auto task = WTFMove(networkDataTask);
+ auto* session = _session.get();
+ if (trustResult == noErr || !session) {
+ completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
+ return;
+ }
+ processServerTrustEvaluation(session, challenge, taskIdentifier, task.get(), WTFMove(completionHandler));
+ });
+ [NSURLSession _strictTrustEvaluate:challenge queue:[NSOperationQueue mainQueue].underlyingQueue completionHandler:decisionHandler.get()];
+ return;
+#else
+ return completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil);
#endif
- return completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil);
}
}
_session->continueDidReceiveChallenge(challenge, taskIdentifier, [self existingTask:task], [completionHandler = makeBlockPtr(completionHandler)] (WebKit::AuthenticationChallengeDisposition disposition, const WebCore::Credential& credential) mutable {
Modified: trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp (250421 => 250422)
--- trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp 2019-09-27 14:34:13 UTC (rev 250422)
@@ -381,7 +381,6 @@
void WKContextSetCanHandleHTTPSServerTrustEvaluation(WKContextRef contextRef, bool value)
{
- WebKit::toImpl(contextRef)->setCanHandleHTTPSServerTrustEvaluation(value);
}
void WKContextSetPrewarmsProcessesAutomatically(WKContextRef contextRef, bool value)
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (250421 => 250422)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2019-09-27 14:34:13 UTC (rev 250422)
@@ -201,7 +201,6 @@
- (void)_setCanHandleHTTPSServerTrustEvaluation:(BOOL)value
{
- _processPool->setCanHandleHTTPSServerTrustEvaluation(value);
}
static WebKit::HTTPCookieAcceptPolicy toHTTPCookieAcceptPolicy(NSHTTPCookieAcceptPolicy policy)
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (250421 => 250422)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-09-27 14:34:13 UTC (rev 250422)
@@ -491,7 +491,6 @@
}
parameters.cacheModel = LegacyGlobalSettings::singleton().cacheModel();
- parameters.canHandleHTTPSServerTrustEvaluation = m_canHandleHTTPSServerTrustEvaluation;
for (auto& scheme : globalURLSchemesWithCustomProtocolHandlers())
parameters.urlSchemesRegisteredForCustomProtocols.append(scheme);
@@ -1505,15 +1504,6 @@
sendToAllProcesses(Messages::WebProcess::SetDomainRelaxationForbiddenForURLScheme(urlScheme));
}
-void WebProcessPool::setCanHandleHTTPSServerTrustEvaluation(bool value)
-{
- m_canHandleHTTPSServerTrustEvaluation = value;
- if (m_networkProcess) {
- m_networkProcess->send(Messages::NetworkProcess::SetCanHandleHTTPSServerTrustEvaluation(value), 0);
- return;
- }
-}
-
void WebProcessPool::registerURLSchemeAsLocal(const String& urlScheme)
{
m_schemesToRegisterAsLocal.add(urlScheme);
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (250421 => 250422)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-09-27 14:34:13 UTC (rev 250422)
@@ -267,7 +267,6 @@
void registerURLSchemeAsSecure(const String&);
void registerURLSchemeAsBypassingContentSecurityPolicy(const String&);
void setDomainRelaxationForbiddenForURLScheme(const String&);
- void setCanHandleHTTPSServerTrustEvaluation(bool);
void registerURLSchemeAsLocal(const String&);
void registerURLSchemeAsNoAccess(const String&);
void registerURLSchemeAsDisplayIsolated(const String&);
@@ -708,7 +707,6 @@
bool m_processTerminationEnabled { true };
- bool m_canHandleHTTPSServerTrustEvaluation { true };
bool m_didNetworkProcessCrash { false };
std::unique_ptr<NetworkProcessProxy> m_networkProcess;
Modified: trunk/Tools/ChangeLog (250421 => 250422)
--- trunk/Tools/ChangeLog 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/ChangeLog 2019-09-27 14:34:13 UTC (rev 250422)
@@ -1,5 +1,37 @@
2019-09-27 Alex Christensen <achristen...@webkit.org>
+ Remove unused WebProcessPool::setCanHandleHTTPSServerTrustEvaluation
+ https://bugs.webkit.org/show_bug.cgi?id=202285
+
+ Reviewed by Youenn Fablet.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
+ (-[ServerTrustDelegate webView:didFinishNavigation:]):
+ (-[ServerTrustDelegate webView:didFailProvisionalNavigation:withError:]):
+ (-[ServerTrustDelegate waitForDidFinishNavigation]):
+ (-[ServerTrustDelegate waitForDidFailProvisionalNavigationError]):
+ (-[ServerTrustDelegate authenticationChallengeCount]):
+ (-[ServerTrustDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
+ (TestWebKitAPI::TEST):
+ * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::setCanHandleHTTPSServerTrustEvaluation): Deleted.
+ (WTR::TestRunner::canDoServerTrustEvaluationInNetworkProcess): Deleted.
+ (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount): Deleted.
+ * WebKitTestRunner/InjectedBundle/TestRunner.h:
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::resetStateToConsistentValues):
+ (WTR::TestController::didReceiveAuthenticationChallenge):
+ (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const): Deleted.
+ * WebKitTestRunner/TestController.h:
+ (WTR::TestController::serverTrustEvaluationCallbackCallsCount const): Deleted.
+ * WebKitTestRunner/TestInvocation.cpp:
+ (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
+ * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+ (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const): Deleted.
+
+2019-09-27 Alex Christensen <achristen...@webkit.org>
+
Remove unused APIProcessPoolConfiguration::diskCacheSpeculativeValidationEnabled
https://bugs.webkit.org/show_bug.cgi?id=202290
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm (250421 => 250422)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm 2019-09-27 14:34:13 UTC (rev 250422)
@@ -33,7 +33,11 @@
#import <WebKit/WKNavigationDelegate.h>
#import <WebKit/WKProcessPoolPrivate.h>
#import <WebKit/WKWebsiteDataRecordPrivate.h>
+#import <WebKit/WKWebsiteDataStorePrivate.h>
#import <WebKit/WebKit.h>
+#import <WebKit/_WKErrorRecoveryAttempting.h>
+#import <WebKit/_WKWebsiteDataStoreConfiguration.h>
+#import <wtf/Platform.h>
#import <wtf/RetainPtr.h>
#import <wtf/spi/cocoa/SecuritySPI.h>
@@ -284,17 +288,47 @@
}
@interface ServerTrustDelegate : NSObject <WKNavigationDelegate>
+- (void)waitForDidFinishNavigation;
+- (NSError *)waitForDidFailProvisionalNavigationError;
+- (size_t)authenticationChallengeCount;
@end
-@implementation ServerTrustDelegate
+@implementation ServerTrustDelegate {
+ size_t _authenticationChallengeCount;
+ bool _navigationFinished;
+ RetainPtr<NSError> _provisionalNavigationFailedError;
+}
-- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
- navigationFinished = true;
+ _navigationFinished = true;
}
+- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error
+{
+ _provisionalNavigationFailedError = error;
+}
+
+- (void)waitForDidFinishNavigation
+{
+ TestWebKitAPI::Util::run(&_navigationFinished);
+}
+
+- (NSError *)waitForDidFailProvisionalNavigationError
+{
+ while (!_provisionalNavigationFailedError)
+ TestWebKitAPI::Util::spinRunLoop();
+ return _provisionalNavigationFailedError.autorelease();
+}
+
+- (size_t)authenticationChallengeCount
+{
+ return _authenticationChallengeCount;
+}
+
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler
{
+ _authenticationChallengeCount++;
SecTrustRef trust = challenge.protectionSpace.serverTrust;
verifyCertificateAndPublicKey(trust);
completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:trust]);
@@ -321,11 +355,41 @@
[webView setNavigationDelegate:delegate.get()];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://localhost:%d/", server.port()]]]];
- TestWebKitAPI::Util::run(&navigationFinished);
+ [delegate waitForDidFinishNavigation];
verifyCertificateAndPublicKey([webView serverTrust]);
+ EXPECT_EQ([delegate authenticationChallengeCount], 1u);
}
+TEST(WebKit, FastServerTrust)
+{
+#if HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE)
+ TCPServer server(TCPServer::Protocol::HTTPS, TCPServer::respondWithOK);
+#else
+ TCPServer server(TCPServer::Protocol::HTTPS, [](SSL* ssl) {
+ EXPECT_FALSE(ssl);
+ });
+#endif
+ WKWebViewConfiguration *configuration = [[[WKWebViewConfiguration alloc] init] autorelease];
+ _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease];
+ dataStoreConfiguration.fastServerTrustEvaluationEnabled = YES;
+ configuration.websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease];
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration]);
+ auto delegate = adoptNS([ServerTrustDelegate new]);
+ [webView setNavigationDelegate:delegate.get()];
+ [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://localhost:%d/", server.port()]]]];
+#if HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE)
+ [delegate waitForDidFinishNavigation];
+ EXPECT_EQ([delegate authenticationChallengeCount], 1ull);
+#else
+ NSError *error = [delegate waitForDidFailProvisionalNavigationError];
+ EXPECT_WK_STREQ([error.userInfo[_WKRecoveryAttempterErrorKey] className], @"WKReloadFrameErrorRecoveryAttempter");
+ EXPECT_WK_STREQ(error.domain, NSURLErrorDomain);
+ EXPECT_EQ(error.code, NSURLErrorServerCertificateUntrusted);
+ EXPECT_EQ([delegate authenticationChallengeCount], 0ull);
+#endif
+}
+
} // namespace TestWebKitAPI
#endif // HAVE(SSL)
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (250421 => 250422)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl 2019-09-27 14:34:13 UTC (rev 250422)
@@ -366,8 +366,6 @@
void terminateNetworkProcess();
void terminateServiceWorkerProcess();
- void setCanHandleHTTPSServerTrustEvaluation(boolean canHandle);
- readonly attribute boolean canDoServerTrustEvaluationInNetworkProcess;
readonly attribute unsigned long serverTrustEvaluationCallbackCallsCount;
readonly attribute boolean didCancelClientRedirect;
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (250421 => 250422)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2019-09-27 14:34:13 UTC (rev 250422)
@@ -2929,22 +2929,6 @@
return WKBooleanGetValue(adoptWK(static_cast<WKBooleanRef>(returnData)).get());
}
-void TestRunner::setCanHandleHTTPSServerTrustEvaluation(bool canHandle)
-{
- WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("SetCanHandleHTTPSServerTrustEvaluation"));
- WKRetainPtr<WKBooleanRef> messageBody = adoptWK(WKBooleanCreate(canHandle));
- WKBundlePostSynchronousMessage(InjectedBundle::singleton().bundle(), messageName.get(), messageBody.get(), nullptr);
-}
-
-bool TestRunner::canDoServerTrustEvaluationInNetworkProcess()
-{
- WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("CanDoServerTrustEvaluationInNetworkProcess"));
- WKTypeRef returnData = nullptr;
- WKBundlePagePostSynchronousMessageForTesting(InjectedBundle::singleton().page()->page(), messageName.get(), nullptr, &returnData);
- ASSERT(WKGetTypeID(returnData) == WKBooleanGetTypeID());
- return WKBooleanGetValue(adoptWK(static_cast<WKBooleanRef>(returnData)).get());
-}
-
unsigned long TestRunner::serverTrustEvaluationCallbackCallsCount()
{
WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("ServerTrustEvaluationCallbackCallsCount"));
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (250421 => 250422)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h 2019-09-27 14:34:13 UTC (rev 250422)
@@ -494,8 +494,6 @@
void cleanUpKeychain(JSStringRef attrLabel, JSStringRef applicationTagBase64);
bool keyExistsInKeychain(JSStringRef attrLabel, JSStringRef applicationTagBase64);
- void setCanHandleHTTPSServerTrustEvaluation(bool canHandle);
- bool canDoServerTrustEvaluationInNetworkProcess();
unsigned long serverTrustEvaluationCallbackCallsCount();
// Ad Click Attribution.
Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (250421 => 250422)
--- trunk/Tools/WebKitTestRunner/TestController.cpp 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp 2019-09-27 14:34:13 UTC (rev 250422)
@@ -3576,11 +3576,6 @@
return false;
}
-bool TestController::canDoServerTrustEvaluationInNetworkProcess() const
-{
- return false;
-}
-
void TestController::installCustomMenuAction(const String&, bool)
{
}
Modified: trunk/Tools/WebKitTestRunner/TestController.h (250421 => 250422)
--- trunk/Tools/WebKitTestRunner/TestController.h 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/WebKitTestRunner/TestController.h 2019-09-27 14:34:13 UTC (rev 250422)
@@ -310,7 +310,6 @@
void setAllowedMenuActions(const Vector<String>&);
void installCustomMenuAction(const String& name, bool dismissesAutomatically);
- bool canDoServerTrustEvaluationInNetworkProcess() const;
uint64_t serverTrustEvaluationCallbackCallsCount() const { return m_serverTrustEvaluationCallbackCallsCount; }
void setShouldDismissJavaScriptAlertsAsynchronously(bool);
Modified: trunk/Tools/WebKitTestRunner/TestInvocation.cpp (250421 => 250422)
--- trunk/Tools/WebKitTestRunner/TestInvocation.cpp 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/WebKitTestRunner/TestInvocation.cpp 2019-09-27 14:34:13 UTC (rev 250422)
@@ -1629,18 +1629,6 @@
return result;
}
- if (WKStringIsEqualToUTF8CString(messageName, "SetCanHandleHTTPSServerTrustEvaluation")) {
- ASSERT(WKGetTypeID(messageBody) == WKBooleanGetTypeID());
- auto canHandle = WKBooleanGetValue(static_cast<WKBooleanRef>(messageBody));
- WKContextSetCanHandleHTTPSServerTrustEvaluation(TestController::singleton().context(), canHandle);
- return nullptr;
- }
-
- if (WKStringIsEqualToUTF8CString(messageName, "CanDoServerTrustEvaluationInNetworkProcess")) {
- WKRetainPtr<WKTypeRef> result = adoptWK(WKBooleanCreate(TestController::singleton().canDoServerTrustEvaluationInNetworkProcess()));
- return result;
- }
-
if (WKStringIsEqualToUTF8CString(messageName, "ServerTrustEvaluationCallbackCallsCount")) {
WKRetainPtr<WKTypeRef> result = adoptWK(WKUInt64Create(TestController::singleton().serverTrustEvaluationCallbackCallsCount()));
return result;
Modified: trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm (250421 => 250422)
--- trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm 2019-09-27 14:05:46 UTC (rev 250421)
+++ trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm 2019-09-27 14:34:13 UTC (rev 250422)
@@ -411,15 +411,6 @@
[globalWebsiteDataStoreDelegateClient setAllowAnySSLCertificate: allows];
}
-bool TestController::canDoServerTrustEvaluationInNetworkProcess() const
-{
-#if HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE)
- return true;
-#else
- return false;
-#endif
-}
-
void TestController::installCustomMenuAction(const String& name, bool dismissesAutomatically)
{
#if PLATFORM(IOS_FAMILY)