[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