Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 1641f98f8e4856012de8e5c4a0de69143d2026a7
      
https://github.com/WebKit/WebKit/commit/1641f98f8e4856012de8e5c4a0de69143d2026a7
  Author: Matt Woodrow <[email protected]>
  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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to