Changeset 214413 in webkit
- Timestamp:
- Mar 27, 2017, 8:43:34 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 9 added
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r214411 r214413 1 2017-03-27 Alex Christensen <achristensen@webkit.org> 2 3 Make WebSockets work in network process 4 https://bugs.webkit.org/show_bug.cgi?id=169930 5 6 Reviewed by Youenn Fablet. 7 8 * http/tests/websocket/tests/hybi/network-process-crash-error-expected.txt: Added. 9 * http/tests/websocket/tests/hybi/network-process-crash-error.html: Added. 10 * http/tests/websocket/tests/hybi/slow-reply_wsh.py: Added. 11 (web_socket_do_extra_handshake): 12 (web_socket_transfer_data): 13 * platform/ios-simulator-wk1/TestExpectations: 14 * platform/mac-wk1/TestExpectations: 15 * platform/win/TestExpectations: 16 1 17 2017-03-27 Antoine Quint <graouts@apple.com> 2 18 -
trunk/LayoutTests/platform/ios-simulator-wk1/TestExpectations
r213735 r214413 1886 1886 fast/css/deferred-parsing/hover-test.html [ Skip ] 1887 1887 1888 # There is not NetworkProcess in WK1, so it can't crash. 1889 http/tests/websocket/tests/hybi/network-process-crash-error.html [ Skip ] -
trunk/LayoutTests/platform/mac-wk1/TestExpectations
r214128 r214413 167 167 ######################################## 168 168 169 # Th is test isWebKit2-only169 # These tests are WebKit2-only 170 170 http/tests/contentfiltering/load-substitute-data-from-appcache.html 171 171 fast/dom/Window/child-window-focus.html … … 335 335 webkit.org/b/167752 media/modern-media-controls/icon-button/icon-button-active-state.html [ Pass Timeout ] 336 336 webkit.org/b/167477 [ Debug ] media/modern-media-controls/play-pause-button/play-pause-button.html [ Pass Timeout ] 337 338 # There is not NetworkProcess in WK1, so it can't crash. 339 http/tests/websocket/tests/hybi/network-process-crash-error.html [ Skip ] -
trunk/LayoutTests/platform/win/TestExpectations
r213676 r214413 3803 3803 # webglcontextchanged event not supported 3804 3804 fast/canvas/webgl/webglcontextchangedevent.html [ Skip ] 3805 3806 # There is not NetworkProcess in WK1, so it can't crash. 3807 http/tests/websocket/tests/hybi/network-process-crash-error.html [ Skip ] -
trunk/Source/WebCore/ChangeLog
r214411 r214413 1 2017-03-27 Alex Christensen <achristensen@webkit.org> 2 3 Make WebSockets work in network process 4 https://bugs.webkit.org/show_bug.cgi?id=169930 5 6 Reviewed by Youenn Fablet. 7 8 Covered by 136 existing tests in http/tests/websocket/tests/hybi 9 This also does fine with the 544 websocket tests in the web-platform-tests which we have not yet imported. 10 Also added http/tests/websocket/tests/hybi/network-process-crash-error.html 11 to test a new condition that couldn't happen before this move: the NetworkProcess crashing. 12 13 * Modules/websockets/WebSocketChannel.cpp: 14 (WebCore::WebSocketChannel::fail): 15 We were asserting that didCloseSocketStream was called. It is still called, 16 but not synchronously like it used to. This assertion is now invalid, but tests 17 that would hit it still pass. 18 * platform/network/cf/SocketStreamHandleImplCFNet.cpp: 19 (WebCore::SocketStreamHandleImpl::platformSendInternal): 20 CFWriteStreamCanAcceptBytes crashes if you give it a null parameter, and that can happen now. 21 If we have no write stream, then we cannot write. Tests that hit this pass still. 22 1 23 2017-03-27 Antoine Quint <graouts@apple.com> 2 24 -
trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp
r214190 r214413 239 239 240 240 if (m_handle && !m_closed) 241 m_handle->disconnect(); // Will call didClose(). 242 243 // We should be closed by now, but if we never got a handshake then we never even opened. 244 ASSERT(m_closed || !m_handshake); 241 m_handle->disconnect(); // Will call didCloseSocketStream() but maybe not synchronously. 245 242 } 246 243 … … 367 364 } 368 365 m_shouldDiscardReceivedData = true; 366 if (m_client) 367 m_client->didReceiveMessageError(); 369 368 handle.disconnect(); 370 369 } -
trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp
r214114 r214413 656 656 std::optional<size_t> SocketStreamHandleImpl::platformSendInternal(const char* data, size_t length) 657 657 { 658 if (!m_writeStream) 659 return std::nullopt; 660 658 661 if (!CFWriteStreamCanAcceptBytes(m_writeStream.get())) 659 662 return std::nullopt; -
trunk/Source/WebKit2/CMakeLists.txt
r214033 r214413 120 120 NetworkProcess/NetworkResourceLoader.cpp 121 121 NetworkProcess/NetworkSession.cpp 122 NetworkProcess/NetworkSocketStream.cpp 122 123 123 124 NetworkProcess/cache/NetworkCache.cpp … … 514 515 WebProcess/Network/WebResourceLoader.cpp 515 516 WebProcess/Network/WebSocketProvider.cpp 517 WebProcess/Network/WebSocketStream.cpp 516 518 517 519 WebProcess/Notifications/NotificationPermissionRequestManager.cpp … … 597 599 NetworkProcess/NetworkProcess.messages.in 598 600 NetworkProcess/NetworkResourceLoader.messages.in 601 NetworkProcess/NetworkSocketStream.messages.in 599 602 600 603 NetworkProcess/webrtc/NetworkRTCMonitor.messages.in … … 664 667 WebProcess/Network/NetworkProcessConnection.messages.in 665 668 WebProcess/Network/WebResourceLoader.messages.in 669 WebProcess/Network/WebSocketStream.messages.in 666 670 667 671 WebProcess/Notifications/WebNotificationManager.messages.in -
trunk/Source/WebKit2/ChangeLog
r214412 r214413 1 2017-03-27 Alex Christensen <achristensen@webkit.org> 2 3 Make WebSockets work in network process 4 https://bugs.webkit.org/show_bug.cgi?id=169930 5 6 Reviewed by Youenn Fablet. 7 8 This adds WebSocketStream, which is a SocketStreamHandle that sends asynchronous 9 messages to a NetworkSocketStream in the NetworkProcess. WebKit1 uses a SocketStreamHandleImpl 10 still, but WebKit2 now has a SocketStreamHandleImpl in the NetworkProcess owned by the 11 NetworkSocketStream, which is a SocketStreamHandleClient that sends asynchronous messages back 12 to the WebProcess. WebSocketStream's implementation of SocketStreamHandle::platformSend is special 13 because it stores the completion handler in a map and asynchronously reports to the caller whether 14 it succeeded or not. If the network processes crashes before the completion handlers are called, 15 then they are called indicating failure and an error is reported, but that never happens, right? 16 17 * CMakeLists.txt: 18 * DerivedSources.make: 19 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 20 (WebKit::NetworkConnectionToWebProcess::didReceiveMessage): 21 (WebKit::NetworkConnectionToWebProcess::createSocketStream): 22 (WebKit::NetworkConnectionToWebProcess::destroySocketStream): 23 * NetworkProcess/NetworkConnectionToWebProcess.h: 24 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 25 * NetworkProcess/NetworkProcess.cpp: 26 (WebKit::NetworkProcess::setAllowsAnySSLCertificateForWebSocket): 27 * NetworkProcess/NetworkProcess.h: 28 * NetworkProcess/NetworkProcess.messages.in: 29 * NetworkProcess/NetworkSocketStream.cpp: Added. 30 (WebKit::NetworkSocketStream::create): 31 (WebKit::NetworkSocketStream::NetworkSocketStream): 32 (WebKit::NetworkSocketStream::sendData): 33 (WebKit::NetworkSocketStream::close): 34 (WebKit::NetworkSocketStream::didOpenSocketStream): 35 (WebKit::NetworkSocketStream::didCloseSocketStream): 36 (WebKit::NetworkSocketStream::didReceiveSocketStreamData): 37 (WebKit::NetworkSocketStream::didFailToReceiveSocketStreamData): 38 (WebKit::NetworkSocketStream::didUpdateBufferedAmount): 39 (WebKit::NetworkSocketStream::didFailSocketStream): 40 (WebKit::NetworkSocketStream::messageSenderConnection): 41 (WebKit::NetworkSocketStream::messageSenderDestinationID): 42 * NetworkProcess/NetworkSocketStream.h: Added. 43 * NetworkProcess/NetworkSocketStream.messages.in: Added. 44 * UIProcess/API/C/WKContext.cpp: 45 (WKContextSetAllowsAnySSLCertificateForWebSocketTesting): 46 (WKContextTerminateNetworkProcess): 47 * UIProcess/API/C/WKContextPrivate.h: 48 * UIProcess/WebProcessPool.cpp: 49 (WebKit::WebProcessPool::sendSyncToNetworkingProcess): 50 (WebKit::WebProcessPool::setAllowsAnySSLCertificateForWebSocket): 51 (WebKit::WebProcessPool::terminateNetworkProcess): 52 * UIProcess/WebProcessPool.h: 53 * WebKit2.xcodeproj/project.pbxproj: 54 * WebProcess/Network/NetworkProcessConnection.cpp: 55 (WebKit::NetworkProcessConnection::didReceiveMessage): 56 * WebProcess/Network/WebSocketProvider.cpp: 57 (WebKit::WebSocketProvider::createSocketStreamHandle): 58 * WebProcess/Network/WebSocketStream.cpp: Added. 59 (WebKit::globalWebSocketStreamMap): 60 (WebKit::WebSocketStream::streamWithIdentifier): 61 (WebKit::WebSocketStream::networkProcessCrashed): 62 (WebKit::WebSocketStream::create): 63 (WebKit::WebSocketStream::WebSocketStream): 64 (WebKit::WebSocketStream::~WebSocketStream): 65 (WebKit::WebSocketStream::messageSenderConnection): 66 (WebKit::WebSocketStream::messageSenderDestinationID): 67 (WebKit::WebSocketStream::platformSend): 68 (WebKit::WebSocketStream::didSendData): 69 (WebKit::WebSocketStream::platformClose): 70 (WebKit::WebSocketStream::bufferedAmount): 71 (WebKit::WebSocketStream::didOpenSocketStream): 72 (WebKit::WebSocketStream::didCloseSocketStream): 73 (WebKit::WebSocketStream::didReceiveSocketStreamData): 74 (WebKit::WebSocketStream::didFailToReceiveSocketStreamData): 75 (WebKit::WebSocketStream::didUpdateBufferedAmount): 76 (WebKit::WebSocketStream::didFailSocketStream): 77 * WebProcess/Network/WebSocketStream.h: Added. 78 * WebProcess/Network/WebSocketStream.messages.in: Added. 79 * WebProcess/WebProcess.cpp: 80 (WebKit::WebProcess::networkProcessConnectionClosed): 81 1 82 2017-03-27 Adrian Perez de Castro <aperez@igalia.com> 2 83 -
trunk/Source/WebKit2/DerivedSources.make
r214027 r214413 109 109 NetworkRTCSocket \ 110 110 NetworkResourceLoader \ 111 NetworkSocketStream \ 111 112 PluginControllerProxy \ 112 113 PluginProcess \ … … 165 166 WebResourceLoader \ 166 167 WebResourceLoadStatisticsStore \ 168 WebSocketStream \ 167 169 WebUserContentController \ 168 170 WebUserContentControllerProxy \ -
trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp
r213759 r214413 41 41 #include "NetworkResourceLoader.h" 42 42 #include "NetworkResourceLoaderMessages.h" 43 #include "NetworkSocketStream.h" 44 #include "NetworkSocketStreamMessages.h" 43 45 #include "RemoteNetworkingContext.h" 44 46 #include "SessionTracker.h" … … 99 101 } 100 102 103 if (decoder.messageReceiverName() == Messages::NetworkSocketStream::messageReceiverName()) { 104 auto socketIterator = m_networkSocketStreams.find(decoder.destinationID()); 105 if (socketIterator != m_networkSocketStreams.end()) { 106 socketIterator->value->didReceiveMessage(connection, decoder); 107 if (decoder.messageName() == Messages::NetworkSocketStream::Close::name()) 108 m_networkSocketStreams.remove(socketIterator); 109 } 110 return; 111 } 112 101 113 #if USE(LIBWEBRTC) 102 114 if (decoder.messageReceiverName() == Messages::NetworkRTCSocket::messageReceiverName()) { … … 159 171 void NetworkConnectionToWebProcess::didReceiveInvalidMessage(IPC::Connection&, IPC::StringReference, IPC::StringReference) 160 172 { 173 } 174 175 void NetworkConnectionToWebProcess::createSocketStream(URL&& url, SessionID sessionID, String cachePartition, uint64_t identifier) 176 { 177 ASSERT(!m_networkSocketStreams.contains(identifier)); 178 m_networkSocketStreams.set(identifier, NetworkSocketStream::create(WTFMove(url), sessionID, cachePartition, identifier, m_connection)); 179 } 180 181 void NetworkConnectionToWebProcess::destroySocketStream(uint64_t identifier) 182 { 183 ASSERT(m_networkSocketStreams.get(identifier)); 184 m_networkSocketStreams.remove(identifier); 161 185 } 162 186 -
trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h
r213759 r214413 44 44 class NetworkConnectionToWebProcess; 45 45 class NetworkResourceLoader; 46 class NetworkSocketStream; 46 47 class SyncNetworkResourceLoader; 47 48 typedef uint64_t ResourceLoadIdentifier; … … 105 106 void storeDerivedDataToCache(const WebKit::NetworkCache::DataKey&, const IPC::DataReference&); 106 107 108 void createSocketStream(WebCore::URL&&, WebCore::SessionID, String cachePartition, uint64_t); 109 void destroySocketStream(uint64_t); 110 107 111 void ensureLegacyPrivateBrowsingSession(); 108 112 … … 113 117 Ref<IPC::Connection> m_connection; 114 118 119 HashMap<uint64_t, RefPtr<NetworkSocketStream>> m_networkSocketStreams; 115 120 HashMap<ResourceLoadIdentifier, RefPtr<NetworkResourceLoader>> m_networkResourceLoaders; 116 121 HashMap<String, RefPtr<WebCore::BlobDataFileReference>> m_blobDataFileReferences; -
trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r213759 r214413 52 52 StoreDerivedDataToCache(WebKit::NetworkCache::DataKey key, IPC::DataReference data) 53 53 54 CreateSocketStream(WebCore::URL url, WebCore::SessionID sessionID, String cachePartition, uint64_t identifier) 55 54 56 EnsureLegacyPrivateBrowsingSession() 55 57 } -
trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp
r213927 r214413 62 62 #include <WebCore/SecurityOriginHash.h> 63 63 #include <WebCore/SessionID.h> 64 #include <WebCore/Settings.h> 64 65 #include <WebCore/URLParser.h> 65 66 #include <wtf/OptionSet.h> … … 582 583 } 583 584 585 void NetworkProcess::setAllowsAnySSLCertificateForWebSocket(bool allows) 586 { 587 Settings::setAllowsAnySSLCertificate(allows); 588 } 589 584 590 void NetworkProcess::logDiagnosticMessage(uint64_t webPageID, const String& message, const String& description, ShouldSample shouldSample) 585 591 { -
trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h
r213871 r214413 190 190 void getNetworkProcessStatistics(uint64_t callbackID); 191 191 void clearCacheForAllOrigins(uint32_t cachesToClear); 192 void setAllowsAnySSLCertificateForWebSocket(bool); 192 193 193 194 void didGrantSandboxExtensionsToDatabaseProcessForBlobs(uint64_t requestID); -
trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in
r213871 r214413 63 63 SetCookieStoragePartitioningEnabled(bool enabled) 64 64 #endif 65 SetAllowsAnySSLCertificateForWebSocket(bool enabled) -> () 65 66 66 67 AllowSpecificHTTPSCertificateForHost(WebCore::CertificateInfo certificate, String host) -
trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp
r213690 r214413 528 528 } 529 529 530 void WKContextSetAllowsAnySSLCertificateForWebSocketTesting(WKContextRef context, bool allows) 531 { 532 toImpl(context)->setAllowsAnySSLCertificateForWebSocket(allows); 533 } 534 530 535 void WKContextClearCachedCredentials(WKContextRef context) 531 536 { … … 574 579 } 575 580 581 void WKContextTerminateNetworkProcess(WKContextRef context) 582 { 583 toImpl(context)->terminateNetworkProcess(); 584 } 585 576 586 pid_t WKContextGetNetworkProcessIdentifier(WKContextRef contextRef) 577 587 { -
trunk/Source/WebKit2/UIProcess/API/C/WKContextPrivate.h
r212832 r214413 82 82 WK_EXPORT void WKContextSetUsesNetworkProcess(WKContextRef, bool); 83 83 84 WK_EXPORT void WKContextTerminateNetworkProcess(WKContextRef); 85 86 WK_EXPORT void WKContextSetAllowsAnySSLCertificateForWebSocketTesting(WKContextRef, bool); 87 84 88 // Test only. Should be called before any secondary processes are started. 85 89 WK_EXPORT void WKContextUseTestingNetworkSession(WKContextRef context); -
trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp
r214127 r214413 1227 1227 } 1228 1228 1229 template<typename T, typename U> 1230 void WebProcessPool::sendSyncToNetworkingProcess(T&& message, U&& reply) 1231 { 1232 if (m_networkProcess && m_networkProcess->canSendMessage()) 1233 m_networkProcess->sendSync(std::forward<T>(message), std::forward<U>(reply), 0); 1234 } 1235 1236 void WebProcessPool::setAllowsAnySSLCertificateForWebSocket(bool allows) 1237 { 1238 sendSyncToNetworkingProcess(Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket(allows), Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket::Reply()); 1239 } 1240 1229 1241 void WebProcessPool::clearCachedCredentials() 1230 1242 { … … 1243 1255 m_databaseProcess = nullptr; 1244 1256 #endif 1257 } 1258 1259 void WebProcessPool::terminateNetworkProcess() 1260 { 1261 if (!m_networkProcess) 1262 return; 1263 1264 m_networkProcess->terminate(); 1265 m_networkProcess = nullptr; 1245 1266 } 1246 1267 -
trunk/Source/WebKit2/UIProcess/WebProcessPool.h
r214127 r214413 162 162 // Sends the message to WebProcess or NetworkProcess as approporiate for current process model. 163 163 template<typename T> void sendToNetworkingProcess(T&& message); 164 template<typename T, typename U> void sendSyncToNetworkingProcess(T&& message, U&& reply); 164 165 template<typename T> void sendToNetworkingProcessRelaunchingIfNecessary(T&& message); 165 166 … … 255 256 bool isUsingTestingNetworkSession() const { return m_shouldUseTestingNetworkSession; } 256 257 258 void setAllowsAnySSLCertificateForWebSocket(bool); 259 257 260 void clearCachedCredentials(); 258 261 void terminateDatabaseProcess(); 262 void terminateNetworkProcess(); 259 263 260 264 void reportWebContentCPUTime(int64_t cpuTime, uint64_t activityState); -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r214403 r214413 1130 1130 53DEA3661DDE423100E82648 /* json.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 53DEA3651DDE422E00E82648 /* json.hpp */; }; 1131 1131 5C052F261C6D3BD30076E919 /* AuthenticationManagerCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C052F241C6D3AB60076E919 /* AuthenticationManagerCocoa.mm */; }; 1132 5C0B17781E7C880E00E9123C /* NetworkSocketStreamMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C0B17741E7C879C00E9123C /* NetworkSocketStreamMessageReceiver.cpp */; }; 1133 5C0B17791E7C882100E9123C /* WebSocketStreamMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C0B17761E7C879C00E9123C /* WebSocketStreamMessageReceiver.cpp */; }; 1134 5C0B177C1E7C885400E9123C /* WebSocketStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C0B177A1E7C884F00E9123C /* WebSocketStream.cpp */; }; 1135 5C0B17811E7C8C2600E9123C /* NetworkSocketStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C0B177D1E7C886700E9123C /* NetworkSocketStream.cpp */; }; 1132 1136 5C1426EC1C23F80900D41183 /* NetworkProcessCreationParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C1426E21C23F80500D41183 /* NetworkProcessCreationParameters.cpp */; }; 1133 1137 5C1426ED1C23F80900D41183 /* NetworkProcessCreationParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1426E31C23F80500D41183 /* NetworkProcessCreationParameters.h */; }; … … 3374 3378 579D18B71CCFE34B00B1974C /* PhotosSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhotosSPI.h; sourceTree = "<group>"; }; 3375 3379 5C052F241C6D3AB60076E919 /* AuthenticationManagerCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AuthenticationManagerCocoa.mm; path = Authentication/cocoa/AuthenticationManagerCocoa.mm; sourceTree = "<group>"; }; 3380 5C0B17741E7C879C00E9123C /* NetworkSocketStreamMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkSocketStreamMessageReceiver.cpp; sourceTree = "<group>"; }; 3381 5C0B17751E7C879C00E9123C /* NetworkSocketStreamMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkSocketStreamMessages.h; sourceTree = "<group>"; }; 3382 5C0B17761E7C879C00E9123C /* WebSocketStreamMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketStreamMessageReceiver.cpp; sourceTree = "<group>"; }; 3383 5C0B17771E7C879C00E9123C /* WebSocketStreamMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketStreamMessages.h; sourceTree = "<group>"; }; 3384 5C0B177A1E7C884F00E9123C /* WebSocketStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSocketStream.cpp; path = Network/WebSocketStream.cpp; sourceTree = "<group>"; }; 3385 5C0B177B1E7C884F00E9123C /* WebSocketStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketStream.h; path = Network/WebSocketStream.h; sourceTree = "<group>"; }; 3386 5C0B177D1E7C886700E9123C /* NetworkSocketStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkSocketStream.cpp; path = NetworkProcess/NetworkSocketStream.cpp; sourceTree = "<group>"; }; 3387 5C0B177E1E7C886700E9123C /* NetworkSocketStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkSocketStream.h; path = NetworkProcess/NetworkSocketStream.h; sourceTree = "<group>"; }; 3388 5C0B177F1E7C886700E9123C /* NetworkSocketStream.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = NetworkSocketStream.messages.in; path = NetworkProcess/NetworkSocketStream.messages.in; sourceTree = "<group>"; }; 3389 5C0B17801E7C888000E9123C /* WebSocketStream.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = WebSocketStream.messages.in; path = Network/WebSocketStream.messages.in; sourceTree = "<group>"; }; 3376 3390 5C1426E21C23F80500D41183 /* NetworkProcessCreationParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkProcessCreationParameters.cpp; path = NetworkProcess/NetworkProcessCreationParameters.cpp; sourceTree = "<group>"; }; 3377 3391 5C1426E31C23F80500D41183 /* NetworkProcessCreationParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkProcessCreationParameters.h; path = NetworkProcess/NetworkProcessCreationParameters.h; sourceTree = "<group>"; }; … … 5823 5837 isa = PBXGroup; 5824 5838 children = ( 5839 5C0B17801E7C888000E9123C /* WebSocketStream.messages.in */, 5840 5C0B177A1E7C884F00E9123C /* WebSocketStream.cpp */, 5841 5C0B177B1E7C884F00E9123C /* WebSocketStream.h */, 5825 5842 4130759E1DE85E650039EC69 /* webrtc */, 5826 5843 5105B0D4162F7A7A00E27709 /* NetworkProcessConnection.cpp */, … … 5841 5858 isa = PBXGroup; 5842 5859 children = ( 5860 5C0B177D1E7C886700E9123C /* NetworkSocketStream.cpp */, 5861 5C0B177E1E7C886700E9123C /* NetworkSocketStream.h */, 5862 5C0B177F1E7C886700E9123C /* NetworkSocketStream.messages.in */, 5843 5863 E489D2821A0A2BE80078C06A /* cache */, 5844 5864 539BD5B21DADB0BA00F2E4E1 /* capture */, … … 7652 7672 isa = PBXGroup; 7653 7673 children = ( 7674 5C0B17741E7C879C00E9123C /* NetworkSocketStreamMessageReceiver.cpp */, 7675 5C0B17751E7C879C00E9123C /* NetworkSocketStreamMessages.h */, 7676 5C0B17761E7C879C00E9123C /* WebSocketStreamMessageReceiver.cpp */, 7677 5C0B17771E7C879C00E9123C /* WebSocketStreamMessages.h */, 7654 7678 512F58A012A883AD00629530 /* AuthenticationManagerMessageReceiver.cpp */, 7655 7679 512F58A112A883AD00629530 /* AuthenticationManagerMessages.h */, … … 10293 10317 8360349F1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp in Sources */, 10294 10318 1A52C0F71A38CDC70016160A /* WebStorageNamespaceProvider.cpp in Sources */, 10319 5C0B177C1E7C885400E9123C /* WebSocketStream.cpp in Sources */, 10295 10320 BCC5715C115ADAEF001CCAF9 /* WebSystemInterface.mm in Sources */, 10296 10321 51032F18180F73BB00961BB7 /* WebToDatabaseProcessConnection.cpp in Sources */, … … 10307 10332 1AAF08B719269E6D00B6390C /* WebUserContentControllerMessageReceiver.cpp in Sources */, 10308 10333 1AAF08A1192681D100B6390C /* WebUserContentControllerProxy.cpp in Sources */, 10334 5C0B17811E7C8C2600E9123C /* NetworkSocketStream.cpp in Sources */, 10309 10335 7C361D78192803BD0036A59D /* WebUserContentControllerProxyMessageReceiver.cpp in Sources */, 10310 10336 15739BBE1B42046600D258C1 /* WebUserMediaClient.cpp in Sources */, … … 10443 10469 374436881820E7240049579F /* WKObject.mm in Sources */, 10444 10470 1ACC50F11CBC381D003C7D03 /* WKOpenPanelParameters.mm in Sources */, 10471 5C0B17791E7C882100E9123C /* WebSocketStreamMessageReceiver.cpp in Sources */, 10445 10472 BC85806312B8505700EDEB2E /* WKOpenPanelParametersRef.cpp in Sources */, 10446 10473 BC85806212B8505700EDEB2E /* WKOpenPanelResultListener.cpp in Sources */, … … 10499 10526 07297FA21C186ADB003F0735 /* WKUserMediaPermissionCheck.cpp in Sources */, 10500 10527 4A3CC18E19B07B8500D14AEF /* WKUserMediaPermissionRequest.cpp in Sources */, 10528 5C0B17781E7C880E00E9123C /* NetworkSocketStreamMessageReceiver.cpp in Sources */, 10501 10529 1AAF089A19267EE500B6390C /* WKUserScript.mm in Sources */, 10502 10530 7C89D2A31A678875003A5FDE /* WKUserScriptRef.cpp in Sources */, -
trunk/Source/WebKit2/WebProcess/Network/NetworkProcessConnection.cpp
r211441 r214413 37 37 #include "WebRTCSocketMessages.h" 38 38 #include "WebResourceLoaderMessages.h" 39 #include "WebSocketStream.h" 40 #include "WebSocketStreamMessages.h" 39 41 #include <WebCore/CachedResource.h> 40 42 #include <WebCore/MemoryCache.h> … … 61 63 if (auto* webResourceLoader = WebProcess::singleton().webLoaderStrategy().webResourceLoaderForIdentifier(decoder.destinationID())) 62 64 webResourceLoader->didReceiveWebResourceLoaderMessage(connection, decoder); 65 return; 66 } 67 if (decoder.messageReceiverName() == Messages::WebSocketStream::messageReceiverName()) { 68 if (auto* stream = WebSocketStream::streamWithIdentifier(decoder.destinationID())) 69 stream->didReceiveMessage(connection, decoder); 63 70 return; 64 71 } -
trunk/Source/WebKit2/WebProcess/Network/WebSocketProvider.cpp
r211751 r214413 34 34 #if ENABLE(WEB_SOCKETS) 35 35 36 #include <WebCore/SocketStreamHandleImpl.h>36 #include "WebSocketStream.h" 37 37 38 38 using namespace WebCore; … … 42 42 Ref<SocketStreamHandle> WebSocketProvider::createSocketStreamHandle(const URL& url, SocketStreamHandleClient& client, SessionID sessionID, const String& credentialPartition) 43 43 { 44 // FIXME: This should return a proxy so we can do the actual network interactions in the NetworkProcess. 45 return SocketStreamHandleImpl::create(url, client, sessionID, credentialPartition); 44 return WebSocketStream::create(url, client, sessionID, credentialPartition); 46 45 } 47 46 -
trunk/Source/WebKit2/WebProcess/WebProcess.cpp
r214320 r214413 64 64 #include "WebProcessProxyMessages.h" 65 65 #include "WebResourceLoadStatisticsStoreMessages.h" 66 #include "WebSocketStream.h" 66 67 #include "WebsiteData.h" 67 68 #include "WebsiteDataType.h" … … 1126 1127 1127 1128 m_webLoaderStrategy.networkProcessCrashed(); 1129 WebSocketStream::networkProcessCrashed(); 1128 1130 } 1129 1131 -
trunk/Tools/ChangeLog
r214399 r214413 1 2017-03-27 Alex Christensen <achristensen@webkit.org> 2 3 Make WebSockets work in network process 4 https://bugs.webkit.org/show_bug.cgi?id=169930 5 6 Reviewed by Youenn Fablet. 7 8 * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: 9 Add terminateNetworkProcess for the new test 10 http/tests/websocket/tests/hybi/network-process-crash-error.html 11 * WebKitTestRunner/InjectedBundle/TestRunner.cpp: 12 (WTR::TestRunner::setAllowsAnySSLCertificate): 13 (WTR::TestRunner::terminateNetworkProcess): 14 * WebKitTestRunner/InjectedBundle/TestRunner.h: 15 * WebKitTestRunner/TestController.cpp: 16 (WTR::TestController::setAllowsAnySSLCertificate): 17 (WTR::TestController::terminateNetworkProcess): 18 * WebKitTestRunner/TestController.h: 19 * WebKitTestRunner/TestInvocation.cpp: 20 (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): 21 (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): 22 * WebKitTestRunner/cocoa/TestControllerCocoa.mm: 23 (WTR::TestController::platformContext): 24 * WebKitTestRunner/gtk/TestControllerGtk.cpp: 25 (WTR::TestController::platformContext): 26 (WTR::TestController::platformLibraryPathForTesting): 27 Add some infrastructure for http/tests/websocket/tests/hybi/simple-wss.html 28 which calls testRunner.setAllowsAnySSLCertificate. It used to only be effective 29 for the WebProcess, but SocketStreamHandleImpl::createStreams is now in the NetworkProcess, 30 and we need its call to Settings::allowsAnySSLCertificate to be loosened for this test, 31 which tests that wss works, but our test certificate has an invalid certificate chain. 32 We want production software to not have the ability to have its security weakened, so this 33 is a test code path that is only implemented in WebKitTestRunner. 34 1 35 2017-03-25 Jonathan Bedard <jbedard@apple.com> 2 36 -
trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
r214080 r214413 271 271 272 272 void setWebRTCLegacyAPIEnabled(boolean value); 273 274 void terminateNetworkProcess(); 273 275 }; -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
r214080 r214413 433 433 void TestRunner::setAllowsAnySSLCertificate(bool enabled) 434 434 { 435 InjectedBundle::singleton().setAllowsAnySSLCertificate(enabled); 435 auto& injectedBundle = InjectedBundle::singleton(); 436 injectedBundle.setAllowsAnySSLCertificate(enabled); 437 438 WKRetainPtr<WKStringRef> messageName(AdoptWK, WKStringCreateWithUTF8CString("SetAllowsAnySSLCertificate")); 439 WKRetainPtr<WKBooleanRef> messageBody(AdoptWK, WKBooleanCreate(enabled)); 440 WKBundlePagePostSynchronousMessageForTesting(injectedBundle.page()->page(), messageName.get(), messageBody.get(), nullptr); 436 441 } 437 442 … … 1102 1107 } 1103 1108 1109 void TestRunner::terminateNetworkProcess() 1110 { 1111 WKRetainPtr<WKStringRef> messageName(AdoptWK, WKStringCreateWithUTF8CString("TerminateNetworkProcess")); 1112 WKBundlePagePostMessage(InjectedBundle::singleton().page()->page(), messageName.get(), nullptr); 1113 } 1114 1104 1115 static unsigned nextUIScriptCallbackID() 1105 1116 { -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
r214080 r214413 372 372 void setOpenPanelFiles(JSValueRef); 373 373 374 void terminateNetworkProcess(); 375 374 376 private: 375 377 TestRunner(); -
trunk/Tools/WebKitTestRunner/TestController.cpp
r213764 r214413 889 889 } 890 890 891 void TestController::setAllowsAnySSLCertificate(bool allows) 892 { 893 WKContextSetAllowsAnySSLCertificateForWebSocketTesting(platformContext(), allows); 894 } 895 891 896 static std::string testPath(WKURLRef url) 892 897 { … … 2303 2308 WKResourceLoadStatisticsManagerResetToConsistentState(); 2304 2309 } 2305 2310 2311 void TestController::terminateNetworkProcess() 2312 { 2313 WKContextTerminateNetworkProcess(platformContext()); 2314 } 2315 2306 2316 #if !PLATFORM(COCOA) 2307 2317 void TestController::platformWillRunTest(const TestInvocation&) -
trunk/Tools/WebKitTestRunner/TestController.h
r213688 r214413 134 134 void setAuthenticationUsername(String username) { m_authenticationUsername = username; } 135 135 void setAuthenticationPassword(String password) { m_authenticationPassword = password; } 136 void setAllowsAnySSLCertificate(bool); 136 137 137 138 void setBlockAllPlugins(bool shouldBlock) { m_shouldBlockAllPlugins = shouldBlock; } … … 168 169 void setOpenPanelFileURLs(WKArrayRef fileURLs) { m_openPanelFileURLs = fileURLs; } 169 170 171 void terminateNetworkProcess(); 172 170 173 private: 171 174 WKRetainPtr<WKPageConfigurationRef> generatePageConfiguration(WKContextConfigurationRef); … … 193 196 void platformRunUntil(bool& done, double timeout); 194 197 void platformDidCommitLoadForFrame(WKPageRef, WKFrameRef); 198 WKContextRef platformContext(); 195 199 WKPreferencesRef platformPreferences(); 196 200 void initializeInjectedBundlePath(); -
trunk/Tools/WebKitTestRunner/TestInvocation.cpp
r213688 r214413 720 720 } 721 721 722 if (WKStringIsEqualToUTF8CString(messageName, "TerminateNetworkProcess")) { 723 ASSERT(!messageBody); 724 TestController::singleton().terminateNetworkProcess(); 725 return; 726 } 727 722 728 if (WKStringIsEqualToUTF8CString(messageName, "RunUIProcessScript")) { 723 729 WKDictionaryRef messageBodyDictionary = static_cast<WKDictionaryRef>(messageBody); … … 799 805 return nullptr; 800 806 } 801 807 808 if (WKStringIsEqualToUTF8CString(messageName, "SetAllowsAnySSLCertificate")) { 809 TestController::singleton().setAllowsAnySSLCertificate(WKBooleanGetValue(static_cast<WKBooleanRef>(messageBody))); 810 return nullptr; 811 } 812 802 813 if (WKStringIsEqualToUTF8CString(messageName, "ImageCountInGeneralPasteboard")) { 803 814 unsigned count = TestController::singleton().imageCountInGeneralPasteboard(); -
trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm
r209760 r214413 72 72 #endif 73 73 globalWebViewConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone; 74 #endif 75 } 76 77 WKContextRef TestController::platformContext() 78 { 79 #if WK_API_ENABLED 80 return (WKContextRef)globalWebViewConfiguration.processPool; 81 #else 82 return nullptr; 74 83 #endif 75 84 } -
trunk/Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp
r203777 r214413 134 134 } 135 135 136 WKContextRef TestController::platformContext() 137 { 138 return nullptr; 139 } 140 136 141 const char* TestController::platformLibraryPathForTesting() 137 142 { 138 return 0;143 return nullptr; 139 144 } 140 145
Note:
See TracChangeset
for help on using the changeset viewer.