Title: [287781] trunk/Source
Revision
287781
Author
pan...@apple.com
Date
2022-01-07 13:52:15 -0800 (Fri, 07 Jan 2022)

Log Message

[Cocoa] Web Driver: WebSocket over TLS failing over WebDriver with acceptInsecureCerts on Big Sur
https://bugs.webkit.org/show_bug.cgi?id=234403

Reviewed by BJ Burg.
Source/WebCore:

* page/SocketProvider.cpp:
(WebCore::SocketProvider::createSocketStreamHandle):
* platform/network/cf/SocketStreamHandleImpl.h:
(WebCore::SocketStreamHandleImpl::create):
* platform/network/cf/SocketStreamHandleImplCFNet.cpp:
(WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
(WebCore::SocketStreamHandleImpl::createStreams):
* platform/network/curl/SocketStreamHandleImpl.h:
(WebCore::SocketStreamHandleImpl::create):
* platform/network/soup/SocketStreamHandleImpl.h:

Source/WebKit:

macOS Big Sur and earlier do not use NSURLSession-based WebSockets, so we need a way to allow insecure
certificates under automation that does not rely on the `WKNavigationDelegate` to determine if an
authentication challenge should be accepted. In order to accomplish this we now plumb through an
`_shouldAcceptInsecureCertificatesForWebSockets` value from `_WKAutomationSessionConfiguration` to
`SocketStreamHandleImplCFNet` on platforms that do not `HAVE(NSURLSESSION_WEBSOCKET)`, which allows automation
clients to enable this behavior when the `acceptInsecureCerts` capability is set on a session.

* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::createSocketStream):
* NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::NetworkSession):
* NetworkProcess/NetworkSession.h:
(WebKit::NetworkSession::shouldAcceptInsecureCertificatesForWebSockets const):
* NetworkProcess/NetworkSessionCreationParameters.cpp:
(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):
* NetworkProcess/NetworkSessionCreationParameters.h:
* NetworkProcess/NetworkSocketStream.cpp:
(WebKit::NetworkSocketStream::create):
(WebKit::NetworkSocketStream::NetworkSocketStream):
* NetworkProcess/NetworkSocketStream.h:
* UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
* UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
(-[_WKWebsiteDataStoreConfiguration _shouldAcceptInsecureCertificatesForWebSockets]):
(-[_WKWebsiteDataStoreConfiguration _setShouldAcceptInsecureCertificatesForWebSockets:]):
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::parameters):
* UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
(WebKit::WebsiteDataStoreConfiguration::copy const):
* UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
(WebKit::WebsiteDataStoreConfiguration::shouldAcceptInsecureCertificatesForWebSockets const):
(WebKit::WebsiteDataStoreConfiguration::setShouldAcceptInsecureCertificatesForWebSockets):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (287780 => 287781)


--- trunk/Source/WebCore/ChangeLog	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebCore/ChangeLog	2022-01-07 21:52:15 UTC (rev 287781)
@@ -1,3 +1,21 @@
+2022-01-07  Patrick Angle  <pan...@apple.com>
+
+        [Cocoa] Web Driver: WebSocket over TLS failing over WebDriver with acceptInsecureCerts on Big Sur
+        https://bugs.webkit.org/show_bug.cgi?id=234403
+
+        Reviewed by BJ Burg.
+
+        * page/SocketProvider.cpp:
+        (WebCore::SocketProvider::createSocketStreamHandle):
+        * platform/network/cf/SocketStreamHandleImpl.h:
+        (WebCore::SocketStreamHandleImpl::create):
+        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
+        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
+        (WebCore::SocketStreamHandleImpl::createStreams):
+        * platform/network/curl/SocketStreamHandleImpl.h:
+        (WebCore::SocketStreamHandleImpl::create):
+        * platform/network/soup/SocketStreamHandleImpl.h:
+
 2022-01-07  Alan Bujtas  <za...@apple.com>
 
         Inline blocks that contain text with min-width, box-sizing: border-box incorrectly include the border in width calculation

Modified: trunk/Source/WebCore/page/SocketProvider.cpp (287780 => 287781)


--- trunk/Source/WebCore/page/SocketProvider.cpp	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebCore/page/SocketProvider.cpp	2022-01-07 21:52:15 UTC (rev 287781)
@@ -33,7 +33,8 @@
     
 Ref<SocketStreamHandle> SocketProvider::createSocketStreamHandle(const URL& url, SocketStreamHandleClient& client, WebSocketIdentifier, PAL::SessionID sessionID, const String& credentialPartition, const StorageSessionProvider* provider)
 {
-    return SocketStreamHandleImpl::create(url, client, sessionID, credentialPartition, { }, provider);
+    static const auto shouldAcceptInsecureCertificates = false;
+    return SocketStreamHandleImpl::create(url, client, sessionID, credentialPartition, { }, provider, shouldAcceptInsecureCertificates);
 }
 
 RefPtr<ThreadableWebSocketChannel> SocketProvider::createWebSocketChannel(Document&, WebSocketChannelClient&)

Modified: trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImpl.h (287780 => 287781)


--- trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImpl.h	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImpl.h	2022-01-07 21:52:15 UTC (rev 287781)
@@ -47,7 +47,7 @@
 
 class SocketStreamHandleImpl : public SocketStreamHandle {
 public:
-    static Ref<SocketStreamHandleImpl> create(const URL& url, SocketStreamHandleClient& client, PAL::SessionID sessionID, const String& credentialPartition, SourceApplicationAuditToken&& auditData, const StorageSessionProvider* provider) { return adoptRef(*new SocketStreamHandleImpl(url, client, sessionID, credentialPartition, WTFMove(auditData), provider)); }
+    static Ref<SocketStreamHandleImpl> create(const URL& url, SocketStreamHandleClient& client, PAL::SessionID sessionID, const String& credentialPartition, SourceApplicationAuditToken&& auditData, const StorageSessionProvider* provider, bool shouldAcceptInsecureCertificates) { return adoptRef(*new SocketStreamHandleImpl(url, client, sessionID, credentialPartition, WTFMove(auditData), provider, shouldAcceptInsecureCertificates)); }
 
     virtual ~SocketStreamHandleImpl();
 
@@ -61,7 +61,7 @@
     std::optional<size_t> platformSendInternal(const uint8_t*, size_t);
     bool sendPendingData();
 
-    WEBCORE_EXPORT SocketStreamHandleImpl(const URL&, SocketStreamHandleClient&, PAL::SessionID, const String& credentialPartition, SourceApplicationAuditToken&&, const StorageSessionProvider*);
+    WEBCORE_EXPORT SocketStreamHandleImpl(const URL&, SocketStreamHandleClient&, PAL::SessionID, const String& credentialPartition, SourceApplicationAuditToken&&, const StorageSessionProvider*, bool shouldAcceptInsecureCertificates);
     void createStreams();
     void scheduleStreams();
     void chooseProxy();
@@ -99,6 +99,7 @@
 
     RetainPtr<CFHTTPMessageRef> m_proxyResponseMessage;
     bool m_sentStoredCredentials;
+    bool m_shouldAcceptInsecureCertificates;
     RetainPtr<CFReadStreamRef> m_readStream;
     RetainPtr<CFWriteStreamRef> m_writeStream;
 

Modified: trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp (287780 => 287781)


--- trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp	2022-01-07 21:52:15 UTC (rev 287781)
@@ -96,11 +96,12 @@
 #endif
 }
 
-SocketStreamHandleImpl::SocketStreamHandleImpl(const URL& url, SocketStreamHandleClient& client, PAL::SessionID sessionID, const String& credentialPartition, SourceApplicationAuditToken&& auditData, const StorageSessionProvider* provider)
+SocketStreamHandleImpl::SocketStreamHandleImpl(const URL& url, SocketStreamHandleClient& client, PAL::SessionID sessionID, const String& credentialPartition, SourceApplicationAuditToken&& auditData, const StorageSessionProvider* provider, bool acceptInsecureCertificates)
     : SocketStreamHandle(url, client)
     , m_connectingSubstate(New)
     , m_connectionType(Unknown)
     , m_sentStoredCredentials(false)
+    , m_shouldAcceptInsecureCertificates(acceptInsecureCertificates)
     , m_credentialPartition(credentialPartition)
     , m_auditData(WTFMove(auditData))
     , m_storageSessionProvider(provider)
@@ -357,7 +358,8 @@
     }
 
     if (shouldUseSSL()) {
-        CFBooleanRef validateCertificateChain = DeprecatedGlobalSettings::allowsAnySSLCertificate() ? kCFBooleanFalse : kCFBooleanTrue;
+        // FIXME: rdar://86641948 Remove shouldAcceptInsecureCertificatesForWebSockets once HAVE(NSURLSESSION_WEBSOCKET) is supported on all Cocoa platforms.
+        CFBooleanRef validateCertificateChain = DeprecatedGlobalSettings::allowsAnySSLCertificate() || m_shouldAcceptInsecureCertificates ? kCFBooleanFalse : kCFBooleanTrue;
         const void* keys[] = {
             kCFStreamSSLPeerName,
             kCFStreamSSLLevel,

Modified: trunk/Source/WebCore/platform/network/curl/SocketStreamHandleImpl.h (287780 => 287781)


--- trunk/Source/WebCore/platform/network/curl/SocketStreamHandleImpl.h	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebCore/platform/network/curl/SocketStreamHandleImpl.h	2022-01-07 21:52:15 UTC (rev 287781)
@@ -44,7 +44,7 @@
 
 class SocketStreamHandleImpl : public SocketStreamHandle, public CurlStream::Client {
 public:
-    static Ref<SocketStreamHandleImpl> create(const URL& url, SocketStreamHandleClient& client, PAL::SessionID, const String&, SourceApplicationAuditToken&&, const StorageSessionProvider* provider) { return adoptRef(*new SocketStreamHandleImpl(url, client, provider)); }
+    static Ref<SocketStreamHandleImpl> create(const URL& url, SocketStreamHandleClient& client, PAL::SessionID, const String&, SourceApplicationAuditToken&&, const StorageSessionProvider* provider, bool) { return adoptRef(*new SocketStreamHandleImpl(url, client, provider)); }
 
     virtual ~SocketStreamHandleImpl();
 

Modified: trunk/Source/WebCore/platform/network/soup/SocketStreamHandleImpl.h (287780 => 287781)


--- trunk/Source/WebCore/platform/network/soup/SocketStreamHandleImpl.h	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebCore/platform/network/soup/SocketStreamHandleImpl.h	2022-01-07 21:52:15 UTC (rev 287781)
@@ -47,7 +47,7 @@
 
 class SocketStreamHandleImpl final : public SocketStreamHandle {
 public:
-    static Ref<SocketStreamHandleImpl> create(const URL&, SocketStreamHandleClient&, PAL::SessionID, const String&, SourceApplicationAuditToken&&, const StorageSessionProvider*)
+    static Ref<SocketStreamHandleImpl> create(const URL&, SocketStreamHandleClient&, PAL::SessionID, const String&, SourceApplicationAuditToken&&, const StorageSessionProvider*, bool)
     {
         RELEASE_ASSERT_NOT_REACHED();
     }

Modified: trunk/Source/WebKit/ChangeLog (287780 => 287781)


--- trunk/Source/WebKit/ChangeLog	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/ChangeLog	2022-01-07 21:52:15 UTC (rev 287781)
@@ -1,3 +1,43 @@
+2022-01-07  Patrick Angle  <pan...@apple.com>
+
+        [Cocoa] Web Driver: WebSocket over TLS failing over WebDriver with acceptInsecureCerts on Big Sur
+        https://bugs.webkit.org/show_bug.cgi?id=234403
+
+        Reviewed by BJ Burg.
+        
+        macOS Big Sur and earlier do not use NSURLSession-based WebSockets, so we need a way to allow insecure
+        certificates under automation that does not rely on the `WKNavigationDelegate` to determine if an
+        authentication challenge should be accepted. In order to accomplish this we now plumb through an
+        `_shouldAcceptInsecureCertificatesForWebSockets` value from `_WKAutomationSessionConfiguration` to
+        `SocketStreamHandleImplCFNet` on platforms that do not `HAVE(NSURLSESSION_WEBSOCKET)`, which allows automation
+        clients to enable this behavior when the `acceptInsecureCerts` capability is set on a session.
+
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::createSocketStream):
+        * NetworkProcess/NetworkSession.cpp:
+        (WebKit::NetworkSession::NetworkSession):
+        * NetworkProcess/NetworkSession.h:
+        (WebKit::NetworkSession::shouldAcceptInsecureCertificatesForWebSockets const):
+        * NetworkProcess/NetworkSessionCreationParameters.cpp:
+        (WebKit::NetworkSessionCreationParameters::encode const):
+        (WebKit::NetworkSessionCreationParameters::decode):
+        * NetworkProcess/NetworkSessionCreationParameters.h:
+        * NetworkProcess/NetworkSocketStream.cpp:
+        (WebKit::NetworkSocketStream::create):
+        (WebKit::NetworkSocketStream::NetworkSocketStream):
+        * NetworkProcess/NetworkSocketStream.h:
+        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
+        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
+        (-[_WKWebsiteDataStoreConfiguration _shouldAcceptInsecureCertificatesForWebSockets]):
+        (-[_WKWebsiteDataStoreConfiguration _setShouldAcceptInsecureCertificatesForWebSockets:]):
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::parameters):
+        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
+        (WebKit::WebsiteDataStoreConfiguration::copy const):
+        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
+        (WebKit::WebsiteDataStoreConfiguration::shouldAcceptInsecureCertificatesForWebSockets const):
+        (WebKit::WebsiteDataStoreConfiguration::setShouldAcceptInsecureCertificatesForWebSockets):
+
 2021-10-30  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         Web process shouldn't crash if ImageBuffer::ensureBackendCreated() fails

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (287780 => 287781)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2022-01-07 21:52:15 UTC (rev 287781)
@@ -430,7 +430,12 @@
 #if PLATFORM(COCOA)
     token = { m_networkProcess->sourceApplicationAuditData() };
 #endif
-    m_networkSocketStreams.add(identifier, NetworkSocketStream::create(m_networkProcess.get(), WTFMove(url), m_sessionID, cachePartition, identifier, m_connection, WTFMove(token)));
+    auto acceptInsecureCertificates = false;
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    if (auto* session = networkSession())
+        acceptInsecureCertificates = session->shouldAcceptInsecureCertificatesForWebSockets();
+#endif
+    m_networkSocketStreams.add(identifier, NetworkSocketStream::create(m_networkProcess.get(), WTFMove(url), m_sessionID, cachePartition, identifier, m_connection, WTFMove(token), acceptInsecureCertificates));
 }
 
 void NetworkConnectionToWebProcess::createSocketChannel(const ResourceRequest& request, const String& protocol, WebSocketIdentifier identifier,  WebPageProxyIdentifier webPageProxyID, const ClientOrigin& clientOrigin)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp (287780 => 287781)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2022-01-07 21:52:15 UTC (rev 287781)
@@ -132,6 +132,9 @@
 #if ENABLE(BUILT_IN_NOTIFICATIONS)
     , m_notificationManager(*this, parameters.webPushMachServiceName)
 #endif
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    , m_shouldAcceptInsecureCertificatesForWebSockets(parameters.shouldAcceptInsecureCertificatesForWebSockets)
+#endif
 {
     if (!m_sessionID.isEphemeral()) {
         String networkCacheDirectory = parameters.networkCacheDirectory;

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.h (287780 => 287781)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2022-01-07 21:52:15 UTC (rev 287781)
@@ -244,6 +244,10 @@
 #if ENABLE(BUILT_IN_NOTIFICATIONS)
     NetworkNotificationManager& notificationManager() { return m_notificationManager; }
 #endif
+    
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    bool shouldAcceptInsecureCertificatesForWebSockets() const { return m_shouldAcceptInsecureCertificatesForWebSockets; }
+#endif
 
 protected:
     NetworkSession(NetworkProcess&, const NetworkSessionCreationParameters&);
@@ -331,6 +335,9 @@
 #if ENABLE(BUILT_IN_NOTIFICATIONS)
     NetworkNotificationManager m_notificationManager;
 #endif
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    bool m_shouldAcceptInsecureCertificatesForWebSockets { false };
+#endif
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp (287780 => 287781)


--- trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp	2022-01-07 21:52:15 UTC (rev 287781)
@@ -92,6 +92,9 @@
     encoder << pcmMachServiceName;
     encoder << webPushMachServiceName;
     encoder << enablePrivateClickMeasurementDebugMode;
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    encoder << shouldAcceptInsecureCertificatesForWebSockets;
+#endif
     encoder << resourceLoadStatisticsParameters;
 }
 
@@ -324,6 +327,13 @@
     if (!enablePrivateClickMeasurementDebugMode)
         return std::nullopt;
 
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    std::optional<bool> shouldAcceptInsecureCertificatesForWebSockets;
+    decoder >> shouldAcceptInsecureCertificatesForWebSockets;
+    if (!shouldAcceptInsecureCertificatesForWebSockets)
+        return std::nullopt;
+#endif
+
     std::optional<ResourceLoadStatisticsParameters> resourceLoadStatisticsParameters;
     decoder >> resourceLoadStatisticsParameters;
     if (!resourceLoadStatisticsParameters)
@@ -382,6 +392,9 @@
         , WTFMove(*pcmMachServiceName)
         , WTFMove(*webPushMachServiceName)
         , WTFMove(*enablePrivateClickMeasurementDebugMode)
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+        , WTFMove(*shouldAcceptInsecureCertificatesForWebSockets)
+#endif
         , WTFMove(*resourceLoadStatisticsParameters)
     }};
 }

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h (287780 => 287781)


--- trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h	2022-01-07 21:52:15 UTC (rev 287781)
@@ -108,6 +108,9 @@
     String pcmMachServiceName;
     String webPushMachServiceName;
     bool enablePrivateClickMeasurementDebugMode { false };
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    bool shouldAcceptInsecureCertificatesForWebSockets { false };
+#endif
 
     ResourceLoadStatisticsParameters resourceLoadStatisticsParameters;
 };

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSocketStream.cpp (287780 => 287781)


--- trunk/Source/WebKit/NetworkProcess/NetworkSocketStream.cpp	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSocketStream.cpp	2022-01-07 21:52:15 UTC (rev 287781)
@@ -35,15 +35,15 @@
 namespace WebKit {
 using namespace WebCore;
 
-Ref<NetworkSocketStream> NetworkSocketStream::create(NetworkProcess& networkProcess, URL&& url, PAL::SessionID sessionID, const String& credentialPartition, WebSocketIdentifier identifier, IPC::Connection& connection, SourceApplicationAuditToken&& auditData)
+Ref<NetworkSocketStream> NetworkSocketStream::create(NetworkProcess& networkProcess, URL&& url, PAL::SessionID sessionID, const String& credentialPartition, WebSocketIdentifier identifier, IPC::Connection& connection, SourceApplicationAuditToken&& auditData, bool shouldAcceptInsecureCertificates)
 {
-    return adoptRef(*new NetworkSocketStream(networkProcess, WTFMove(url), sessionID, credentialPartition, identifier, connection, WTFMove(auditData)));
+    return adoptRef(*new NetworkSocketStream(networkProcess, WTFMove(url), sessionID, credentialPartition, identifier, connection, WTFMove(auditData), shouldAcceptInsecureCertificates));
 }
 
-NetworkSocketStream::NetworkSocketStream(NetworkProcess& networkProcess, URL&& url, PAL::SessionID sessionID, const String& credentialPartition, WebSocketIdentifier identifier, IPC::Connection& connection, SourceApplicationAuditToken&& auditData)
+NetworkSocketStream::NetworkSocketStream(NetworkProcess& networkProcess, URL&& url, PAL::SessionID sessionID, const String& credentialPartition, WebSocketIdentifier identifier, IPC::Connection& connection, SourceApplicationAuditToken&& auditData, bool shouldAcceptInsecureCertificates)
     : m_identifier(identifier)
     , m_connection(connection)
-    , m_impl(SocketStreamHandleImpl::create(url, *this, sessionID, credentialPartition, WTFMove(auditData), NetworkStorageSessionProvider::create(networkProcess, sessionID).ptr()))
+    , m_impl(SocketStreamHandleImpl::create(url, *this, sessionID, credentialPartition, WTFMove(auditData), NetworkStorageSessionProvider::create(networkProcess, sessionID).ptr(), shouldAcceptInsecureCertificates))
     , m_delayFailTimer(*this, &NetworkSocketStream::sendDelayedFailMessage)
 {
 }

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSocketStream.h (287780 => 287781)


--- trunk/Source/WebKit/NetworkProcess/NetworkSocketStream.h	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSocketStream.h	2022-01-07 21:52:15 UTC (rev 287781)
@@ -46,7 +46,7 @@
 
 class NetworkSocketStream : public RefCounted<NetworkSocketStream>, public IPC::MessageSender, public IPC::MessageReceiver, public WebCore::SocketStreamHandleClient {
 public:
-    static Ref<NetworkSocketStream> create(NetworkProcess&, URL&&, PAL::SessionID, const String& credentialPartition, WebCore::WebSocketIdentifier, IPC::Connection&, WebCore::SourceApplicationAuditToken&&);
+    static Ref<NetworkSocketStream> create(NetworkProcess&, URL&&, PAL::SessionID, const String& credentialPartition, WebCore::WebSocketIdentifier, IPC::Connection&, WebCore::SourceApplicationAuditToken&&, bool shouldAcceptInsecureCertificates);
     ~NetworkSocketStream();
 
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
@@ -68,7 +68,7 @@
     IPC::Connection* messageSenderConnection() const final;
     uint64_t messageSenderDestinationID() const final;
 
-    NetworkSocketStream(NetworkProcess&, URL&&, PAL::SessionID, const String& credentialPartition, WebCore::WebSocketIdentifier, IPC::Connection&, WebCore::SourceApplicationAuditToken&&);
+    NetworkSocketStream(NetworkProcess&, URL&&, PAL::SessionID, const String& credentialPartition, WebCore::WebSocketIdentifier, IPC::Connection&, WebCore::SourceApplicationAuditToken&&, bool shouldAcceptInsecureCertificates);
 
     WebCore::WebSocketIdentifier m_identifier;
     IPC::Connection& m_connection;

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h (287780 => 287781)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h	2022-01-07 21:52:15 UTC (rev 287781)
@@ -54,6 +54,9 @@
 @property (nonatomic) BOOL requiresSecureHTTPSProxyConnection WK_API_AVAILABLE(macos(11.0), ios(14.0));
 @property (nonatomic) BOOL shouldRunServiceWorkersOnMainThreadForTesting WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 
+// FIXME: rdar://86641948 Remove acceptInsecureCertificatesForWebSockets once HAVE(NSURLSESSION_WEBSOCKET) is supported on all Cocoa platforms.
+@property (nonatomic, setter=_setShouldAcceptInsecureCertificatesForWebSockets:) BOOL _shouldAcceptInsecureCertificatesForWebSockets WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
 // These properties only make sense for persistent data stores, and will throw
 // an exception if set for non-persistent stores.
 @property (nonatomic, copy, setter=_setWebStorageDirectory:) NSURL *_webStorageDirectory;

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm (287780 => 287781)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm	2022-01-07 21:52:15 UTC (rev 287781)
@@ -496,6 +496,24 @@
     _configuration->setShouldRunServiceWorkersOnMainThreadForTesting(shouldRunOnMainThread);
 }
 
+- (BOOL)_shouldAcceptInsecureCertificatesForWebSockets
+{
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    return _configuration->shouldAcceptInsecureCertificatesForWebSockets();
+#else
+    return false;
+#endif
+}
+
+- (void)_setShouldAcceptInsecureCertificatesForWebSockets:(BOOL)accept
+{
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    _configuration->setShouldAcceptInsecureCertificatesForWebSockets(accept);
+#else
+    UNUSED_PARAM(accept);
+#endif
+}
+
 - (void)setProxyConfiguration:(NSDictionary *)configuration
 {
     _configuration->setProxyConfiguration((__bridge CFDictionaryRef)[configuration copy]);

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (287780 => 287781)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2022-01-07 21:52:15 UTC (rev 287781)
@@ -1891,6 +1891,9 @@
     networkSessionParameters.allowsHSTSWithUntrustedRootCertificate = m_configuration->allowsHSTSWithUntrustedRootCertificate();
     networkSessionParameters.pcmMachServiceName = m_configuration->pcmMachServiceName();
     networkSessionParameters.webPushMachServiceName = m_configuration->webPushMachServiceName();
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    networkSessionParameters.shouldAcceptInsecureCertificatesForWebSockets = m_configuration->shouldAcceptInsecureCertificatesForWebSockets();
+#endif
 
     parameters.networkSessionParameters = WTFMove(networkSessionParameters);
 

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp (287780 => 287781)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp	2022-01-07 21:52:15 UTC (rev 287781)
@@ -115,6 +115,9 @@
 #if ENABLE(ARKIT_INLINE_PREVIEW)
     copy->m_modelElementCacheDirectory = this->m_modelElementCacheDirectory;
 #endif
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    copy->m_shouldAcceptInsecureCertificatesForWebSockets = this->m_shouldAcceptInsecureCertificatesForWebSockets;
+#endif
 
     return copy;
 }

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h (287780 => 287781)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h	2022-01-07 21:25:37 UTC (rev 287780)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h	2022-01-07 21:52:15 UTC (rev 287781)
@@ -197,6 +197,11 @@
     void setWebPushMachServiceName(String&& name) { m_webPushMachServiceName = WTFMove(name); }
     const String& webPushMachServiceName() const { return m_webPushMachServiceName; }
 
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    bool shouldAcceptInsecureCertificatesForWebSockets() const { return m_shouldAcceptInsecureCertificatesForWebSockets; }
+    void setShouldAcceptInsecureCertificatesForWebSockets(bool accept) { m_shouldAcceptInsecureCertificatesForWebSockets = accept; }
+#endif
+
 private:
     IsPersistent m_isPersistent { IsPersistent::No };
 
@@ -253,6 +258,9 @@
     bool m_allowsHSTSWithUntrustedRootCertificate { false };
     String m_pcmMachServiceName;
     String m_webPushMachServiceName;
+#if !HAVE(NSURLSESSION_WEBSOCKET)
+    bool m_shouldAcceptInsecureCertificatesForWebSockets { false };
+#endif
 #if PLATFORM(COCOA)
     RetainPtr<CFDictionaryRef> m_proxyConfiguration;
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to