[webkit-changes] [WebKit/WebKit] 1641f9: Prevent mixing of ObjectIdentifier::generate and g...
mattwoodrow
noreply at github.com
Fri Apr 7 22:05:29 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 1641f98f8e4856012de8e5c4a0de69143d2026a7
https://github.com/WebKit/WebKit/commit/1641f98f8e4856012de8e5c4a0de69143d2026a7
Author: Matt Woodrow <mattwoodrow at apple.com>
Date: 2023-04-07 (Fri, 07 Apr 2023)
Changed paths:
M Source/JavaScriptCore/runtime/Microtask.h
M Source/JavaScriptCore/runtime/VM.h
M Source/WTF/wtf/CrossThreadCopier.h
M Source/WTF/wtf/Forward.h
M Source/WTF/wtf/ObjectIdentifier.cpp
M Source/WTF/wtf/ObjectIdentifier.h
M Source/WebCore/Modules/cache/DOMCacheIdentifier.h
M Source/WebCore/Modules/filesystemaccess/FileSystemHandleIdentifier.h
M Source/WebCore/Modules/filesystemaccess/FileSystemSyncAccessHandleIdentifier.h
M Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnectionCallbackIdentifier.h
M Source/WebCore/Modules/mediastream/RTCDataChannel.cpp
M Source/WebCore/Modules/permissions/MainThreadPermissionObserverIdentifier.h
M Source/WebCore/Modules/web-locks/WebLockIdentifier.h
M Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h
M Source/WebCore/Modules/websockets/WebSocketChannelInspector.h
M Source/WebCore/Modules/websockets/WebSocketIdentifier.h
M Source/WebCore/dom/BroadcastChannelIdentifier.h
M Source/WebCore/dom/MessageChannel.cpp
M Source/WebCore/dom/PortIdentifier.h
M Source/WebCore/dom/ScriptExecutionContext.h
M Source/WebCore/inspector/InspectorInstrumentation.h
M Source/WebCore/inspector/LegacyWebSocketInspectorInstrumentation.h
M Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
M Source/WebCore/loader/DocumentLoader.cpp
M Source/WebCore/loader/DocumentThreadableLoader.cpp
M Source/WebCore/loader/FrameLoader.cpp
M Source/WebCore/loader/PingLoader.cpp
M Source/WebCore/loader/ResourceLoader.cpp
M Source/WebCore/loader/ResourceLoaderIdentifier.h
M Source/WebCore/loader/WorkerThreadableLoader.cpp
M Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp
M Source/WebCore/loader/cache/CachedResource.cpp
M Source/WebCore/page/SecurityOriginData.h
M Source/WebCore/platform/graphics/RenderingResourceIdentifier.h
M Source/WebCore/platform/graphics/mac/DisplayConfigurationMonitor.h
M Source/WebCore/platform/mediastream/RTCDataChannelLocalIdentifier.h
M Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCSocketIdentifier.h
M Source/WebCore/testing/Internals.cpp
M Source/WebCore/testing/js/WebCoreTestSupport.cpp
M Source/WebCore/workers/service/ServiceWorkerClients.h
M Source/WebCore/workers/service/ServiceWorkerIdentifier.h
M Source/WebCore/workers/service/ServiceWorkerTypes.h
M Source/WebCore/workers/service/server/SWRegistrationDatabase.cpp
M Source/WebCore/workers/service/server/SWServer.cpp
M Source/WebCore/workers/service/server/SWServerRegistration.cpp
M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
M Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
M Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp
M Source/WebKit/Platform/IPC/Connection.cpp
M Source/WebKit/Platform/IPC/Connection.h
M Source/WebKit/Platform/IPC/MessageSender.h
M Source/WebKit/Platform/IPC/MessageSenderInlines.h
M Source/WebKit/Platform/IPC/StreamClientConnection.h
M Source/WebKit/Shared/StorageAreaIdentifier.h
M Source/WebKit/Shared/WebsiteData/QuotaIncreaseRequestIdentifier.h
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/WebProcess/GPU/graphics/DisplayListRecorderFlushIdentifier.h
M Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderFlushIdentifier.h
M Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.cpp
M Source/WebKit/WebProcess/GPU/graphics/RemoteSerializedImageBufferIdentifier.h
M Source/WebKit/WebProcess/GPU/media/RemoteVideoFrameIdentifier.h
M Source/WebKit/WebProcess/GPU/webrtc/VideoDecoderIdentifier.h
M Source/WebKit/WebProcess/GPU/webrtc/VideoEncoderIdentifier.h
M Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
M Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
M Source/WebKit/WebProcess/Network/WebSocketChannelManager.cpp
M Source/WebKit/WebProcess/Network/webrtc/LibWebRTCResolver.h
M Source/WebKit/WebProcess/Network/webrtc/LibWebRTCResolverIdentifier.h
M Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocket.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
M Source/WebKitLegacy/WebCoreSupport/WebSocketChannel.h
Log Message:
-----------
Prevent mixing of ObjectIdentifier::generate and generateThreadSafe at compile time.
https://bugs.webkit.org/show_bug.cgi?id=254873
Reviewed by Chris Dumez.
This introduces an extra parameter for ObjectIdentifier type to specify whether they want
thread safe or main-run loop only (the default) usage.
generate and generateThreadSafe use separate counter variables, so mixing usage will cause
collisions.
This also introduces an assertion that non-threadsafe usage only happens on the main run loop. This is strictly
more restrictive than necessary (races between unrelated types wouldn't cause meaningful collisions), but is the
only way we can add useful checking to prevent unsafe usage of the non-threadsafe variant.
Functional changes:
Changing some DOMCacheIdentifier callsites to use generateThreadSafe.
This previously had mixed usage, but appeared to be using them in separate contexts, so the collision wouldn't
have had runtime problems.
Uses generateThreadSafe for linear/radial gradient callsites of RenderingResourceIdentifier. This is to match
the rest of the callsites for RenderingResourceIdentifier.
Uses thread safe for Connection::UniqueID. These can be allocated from multiple threads, so need to use threadsafe.
ResourceLoaderIdentifier, LibWebRTCSocketIdentifier, LibWebRTCResolverIdentifier, PortIdentifier, DisplayListRecorderFlushIdentifier, ServerWorkerRegisrationIdentifier and ServiceWorkerIdentifier all moved to use threadsafe
since they can run on (multiple) worker threads.
* Source/JavaScriptCore/runtime/Microtask.h:
* Source/JavaScriptCore/runtime/VM.h:
* Source/WTF/wtf/CrossThreadCopier.h:
* Source/WTF/wtf/Forward.h:
* Source/WTF/wtf/ObjectIdentifier.cpp:
(WTF::ObjectIdentifierMainThreadAccessTraits::generateIdentifierInternal):
(WTF::ObjectIdentifierThreadSafeAccessTraits::generateThreadSafeIdentifierInternal):
(WTF::ObjectIdentifierBase::generateIdentifierInternal): Deleted.
(WTF::ObjectIdentifierBase::generateThreadSafeIdentifierInternal): Deleted.
* Source/WTF/wtf/ObjectIdentifier.h:
(WTF::ObjectIdentifier::generate):
(WTF::ObjectIdentifier::generateThreadSafe):
(WTF::makeObjectIdentifier):
(WTF::add):
(WTF::ObjectIdentifierHash::hash):
(WTF::ObjectIdentifierHash::equal):
(WTF::operator<<):
(WTF::StringTypeAdapter<ObjectIdentifier<T>>::StringTypeAdapter): Deleted.
(WTF::StringTypeAdapter<ObjectIdentifier<T>>::length const): Deleted.
(WTF::StringTypeAdapter<ObjectIdentifier<T>>::is8Bit const): Deleted.
(WTF::StringTypeAdapter<ObjectIdentifier<T>>::writeTo const): Deleted.
* Source/WebCore/Modules/cache/DOMCacheIdentifier.h:
* Source/WebCore/Modules/filesystemaccess/FileSystemHandleIdentifier.h:
* Source/WebCore/Modules/filesystemaccess/FileSystemSyncAccessHandleIdentifier.h:
* Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnectionCallbackIdentifier.h:
* Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:
(WebCore::RTCDataChannel::RTCDataChannel):
* Source/WebCore/Modules/permissions/MainThreadPermissionObserverIdentifier.h:
* Source/WebCore/Modules/web-locks/WebLockIdentifier.h:
* Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h:
* Source/WebCore/Modules/websockets/WebSocketChannelInspector.h:
* Source/WebCore/Modules/websockets/WebSocketIdentifier.h:
* Source/WebCore/dom/BroadcastChannelIdentifier.h:
* Source/WebCore/dom/ScriptExecutionContext.h:
* Source/WebCore/inspector/InspectorInstrumentation.h:
* Source/WebCore/inspector/LegacyWebSocketInspectorInstrumentation.h:
* Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:
(WebCore::InspectorNetworkAgent::didLoadResourceFromMemoryCache):
* Source/WebCore/loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::tryLoadingSubstituteData):
(WebCore::DocumentLoader::loadMainResource):
* Source/WebCore/loader/DocumentThreadableLoader.cpp:
(WebCore::DocumentThreadableLoader::loadRequest):
* Source/WebCore/loader/FrameLoader.cpp:
(WebCore::FrameLoader::requestFromDelegate):
* Source/WebCore/loader/PingLoader.cpp:
(WebCore::PingLoader::startPingLoad):
* Source/WebCore/loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::willSendRequestInternal):
* Source/WebCore/loader/ResourceLoaderIdentifier.h:
* Source/WebCore/loader/WorkerThreadableLoader.cpp:
(WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
* Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp:
(WebCore::ApplicationCacheGroup::update):
(WebCore::ApplicationCacheGroup::startLoadingEntry):
* Source/WebCore/loader/cache/CachedResource.cpp:
(WebCore::CachedResource::load):
* Source/WebCore/page/SecurityOriginData.h:
* Source/WebCore/platform/graphics/RenderingResourceIdentifier.h:
* Source/WebCore/platform/graphics/mac/DisplayConfigurationMonitor.h:
* Source/WebCore/platform/mediastream/RTCDataChannelLocalIdentifier.h:
* Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCSocketIdentifier.h:
* Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp:
(WebCore::RenderSVGResourceLinearGradient::buildGradient const):
* Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp:
(WebCore::RenderSVGResourceRadialGradient::buildGradient const):
* Source/WebCore/testing/js/WebCoreTestSupport.cpp:
(WebCoreTestSupport::setupNewlyCreatedServiceWorker):
* Source/WebCore/workers/service/ServiceWorkerClients.h:
* Source/WebCore/workers/service/ServiceWorkerIdentifier.h:
* Source/WebCore/workers/service/ServiceWorkerTypes.h:
* Source/WebCore/workers/service/server/RegistrationDatabase.cpp:
(WebCore::RegistrationDatabase::importRecords):
* Source/WebCore/workers/service/server/SWServer.cpp:
(WebCore::SWServer::updateWorker):
(WebCore::SWServer::softUpdate):
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::escapeIDForJSON):
* Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp:
(WebKit::CacheStorage::Caches::open):
(WebKit::CacheStorage::Caches::readCachesFromDisk):
* Source/WebKit/Platform/IPC/Connection.cpp:
(IPC::Connection::Connection):
(IPC::Connection::dispatchMessage):
* Source/WebKit/Platform/IPC/Connection.h:
(IPC::Connection::sendWithAsyncReply):
(IPC::Connection::send):
(IPC::Connection::sendSync):
(IPC::Connection::waitForAndDispatchImmediately):
(IPC::Connection::waitForAsyncReplyAndDispatchImmediately):
* Source/WebKit/Platform/IPC/MessageSender.h:
* Source/WebKit/Platform/IPC/MessageSenderInlines.h:
(IPC::MessageSender::send):
(IPC::MessageSender::sendSync):
(IPC::MessageSender::sendWithAsyncReply):
* Source/WebKit/Platform/IPC/StreamClientConnection.h:
(IPC::StreamClientConnection::send):
(IPC::StreamClientConnection::sendWithAsyncReply):
(IPC::StreamClientConnection::sendSync):
(IPC::StreamClientConnection::waitForAndDispatchImmediately):
* Source/WebKit/Shared/StorageAreaIdentifier.h:
* Source/WebKit/Shared/WebsiteData/QuotaIncreaseRequestIdentifier.h:
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/WebProcess/GPU/graphics/RemoteSerializedImageBufferIdentifier.h:
* Source/WebKit/WebProcess/GPU/media/RemoteVideoFrameIdentifier.h:
* Source/WebKit/WebProcess/GPU/webrtc/VideoDecoderIdentifier.h:
* Source/WebKit/WebProcess/GPU/webrtc/VideoEncoderIdentifier.h:
* Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp:
(WebKit::NetworkProcessConnection::didReceiveMessage):
* Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::WebLoaderStrategy::startPingLoad):
(WebKit::WebLoaderStrategy::preconnectTo):
* Source/WebKit/WebProcess/Network/WebSocketChannelManager.cpp:
(WebKit::WebSocketChannelManager::didReceiveMessage):
* Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
(WebKit::LibWebRTCSocket::LibWebRTCSocket):
* Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::sendH2Ping):
* Source/WebKitLegacy/WebCoreSupport/WebSocketChannel.h:
* Source/WebCore/dom/MessageChannel.cpp:
(WebCore::generateMessagePorts):
* Source/WebCore/dom/PortIdentifier.h:
* Source/WebCore/testing/Internals.cpp:
(WebCore::Internals::isMessagePortAlive const):
* Source/WebKit/WebProcess/GPU/graphics/DisplayListRecorderFlushIdentifier.h:
* Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderFlushIdentifier.h:
* Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.cpp:
(WebKit::RemoteImageBufferProxy::flushDrawingContextAsync):
* Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp:
(WebKit::NetworkProcessConnection::didReceiveMessage):
* Source/WebKit/WebProcess/Network/webrtc/LibWebRTCResolver.h:
* Source/WebKit/WebProcess/Network/webrtc/LibWebRTCResolverIdentifier.h:
Canonical link: https://commits.webkit.org/262749@main
More information about the webkit-changes
mailing list