Skip to content

Commit

Permalink
Make WTF::Identified work with strongly typed identifiers
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=270560

Reviewed by Darin Adler.

Make WTF::Identified work with strongly typed identifiers instead of uint64_t.
Keep existing code that was using the legacy WTF::Identified working by having
it subclass WTF::LegacyIdentified instead. We should eventually port those to
the new WTF::Identified.

Also adopt WTF::Identified more broadly to reduce boilerplate code in the code
base.

* Source/WTF/wtf/Identified.h:
(WTF::IdentifiedBase::identifier const):
(WTF::Identified::Identified):
(WTF::LegacyIdentified::LegacyIdentified):
(WTF::LegacyThreadSafeIdentified::LegacyThreadSafeIdentified):
(WTF::UUIDIdentified::UUIDIdentified):
(WTF::Identified::generateIdentifier): Deleted.
(WTF::ThreadSafeIdentified::ThreadSafeIdentified): Deleted.
(WTF::ThreadSafeIdentified::generateIdentifier): Deleted.
* Source/WebCore/Modules/encryptedmedia/MediaKeySystemRequest.cpp:
(WebCore::MediaKeySystemRequest::MediaKeySystemRequest):
* Source/WebCore/Modules/encryptedmedia/MediaKeySystemRequest.h:
(WebCore::MediaKeySystemRequest::setAllowCallback):
(WebCore::MediaKeySystemRequest::identifier const): Deleted.
* Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
* Source/WebCore/Modules/mediastream/UserMediaRequest.cpp:
(WebCore::UserMediaRequest::UserMediaRequest):
* Source/WebCore/Modules/mediastream/UserMediaRequest.h:
(WebCore::UserMediaRequest::identifier const): Deleted.
* Source/WebCore/Modules/speech/SpeechRecognitionConnectionClient.h:
(WebCore::SpeechRecognitionConnectionClient::SpeechRecognitionConnectionClient): Deleted.
(WebCore::SpeechRecognitionConnectionClient::identifier const): Deleted.
* Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp:
(WebCore::ThreadableWebSocketChannel::ThreadableWebSocketChannel): Deleted.
* Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h:
(WebCore::ThreadableWebSocketChannel::identifier const): Deleted.
* Source/WebCore/dom/BroadcastChannel.cpp:
(WebCore::BroadcastChannel::MainThreadBridge::name const):
(WebCore::BroadcastChannel::MainThreadBridge::MainThreadBridge):
(WebCore::BroadcastChannel::MainThreadBridge::registerChannel):
(WebCore::BroadcastChannel::MainThreadBridge::unregisterChannel):
(WebCore::BroadcastChannel::MainThreadBridge::postMessage):
(WebCore::BroadcastChannel::MainThreadBridge::identifier const): Deleted.
* Source/WebCore/html/HTMLMediaElement.h:
(WebCore::HTMLMediaElement::identifier const): Deleted.
* Source/WebCore/workers/service/background-fetch/BackgroundFetch.cpp:
(WebCore::BackgroundFetch::Record::Record):
(WebCore::BackgroundFetch::Record::information const):
* Source/WebCore/workers/service/background-fetch/BackgroundFetch.h:
* Source/WebCore/workers/service/server/SWServerRegistration.cpp:
(WebCore::SWServerRegistration::SWServerRegistration):
(WebCore::generateServiceWorkerRegistrationIdentifier): Deleted.
* Source/WebCore/workers/service/server/SWServerRegistration.h:
(WebCore::SWServerRegistration::key const):
(WebCore::SWServerRegistration::identifier const): Deleted.
* Source/WebCore/workers/service/server/SWServerToContextConnection.cpp:
(WebCore::SWServerToContextConnection::SWServerToContextConnection):
(WebCore::generateServerToContextConnectionIdentifier): Deleted.
* Source/WebCore/workers/service/server/SWServerToContextConnection.h:
* Source/WebCore/workers/shared/SharedWorker.cpp:
(WebCore::SharedWorker::SharedWorker):
(WebCore::SharedWorker::~SharedWorker):
(WebCore::SharedWorker::stop):
(WebCore::SharedWorker::suspend):
(WebCore::SharedWorker::resume):
* Source/WebCore/workers/shared/SharedWorker.h:
* Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.cpp:
(WebKit::WebSharedWorker::WebSharedWorker):
(WebKit::WebSharedWorker::~WebSharedWorker):
* Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.h:
(WebKit::WebSharedWorker::identifier const): Deleted.
* Source/WebKit/NetworkProcess/storage/CacheStorageCache.cpp:
(WebKit::CacheStorageCache::CacheStorageCache):
(WebKit::CacheStorageCache::open):
* Source/WebKit/NetworkProcess/storage/CacheStorageCache.h:
(WebKit::CacheStorageCache::identifier const): Deleted.
* Source/WebKit/NetworkProcess/storage/FileSystemStorageHandle.cpp:
(WebKit::FileSystemStorageHandle::FileSystemStorageHandle):
(WebKit::FileSystemStorageHandle::createSyncAccessHandle):
(WebKit::FileSystemStorageHandle::closeSyncAccessHandle):
* Source/WebKit/NetworkProcess/storage/FileSystemStorageHandle.h:
(WebKit::FileSystemStorageHandle::identifier const): Deleted.
* Source/WebKit/NetworkProcess/storage/StorageAreaBase.cpp:
(WebKit::StorageAreaBase::StorageAreaBase):
* Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:
(WebKit::StorageAreaBase::identifier const): Deleted.
* Source/WebKit/NetworkProcess/webtransport/NetworkTransportSession.cpp:
(WebKit::NetworkTransportSession::NetworkTransportSession):
(WebKit::NetworkTransportSession::messageSenderDestinationID const):
* Source/WebKit/NetworkProcess/webtransport/NetworkTransportSession.h:
(WebKit::NetworkTransportSession::identifier const): Deleted.
* Source/WebKit/Shared/mac/MediaFormatReader/MediaSampleCursor.h:
* Source/WebKit/UIProcess/API/APIUserScript.h:
* Source/WebKit/UIProcess/API/APIUserStyleSheet.h:
* Source/WebKit/UIProcess/DrawingAreaProxy.cpp:
(WebKit::DrawingAreaProxy::DrawingAreaProxy):
(WebKit::DrawingAreaProxy::startReceivingMessages):
(WebKit::DrawingAreaProxy::stopReceivingMessages):
* Source/WebKit/UIProcess/DrawingAreaProxy.h:
(WebKit::DrawingAreaProxy::type const):
(WebKit::DrawingAreaProxy::identifier const): Deleted.
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionControllerCocoa.mm:
(WebKit::WebExtensionController::load):
(WebKit::WebExtensionController::unload):
(WebKit::WebExtensionController::addProcessPool):
(WebKit::WebExtensionController::removeProcessPool):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionTabCocoa.mm:
(WebKit::WebExtensionTab::WebExtensionTab):
(WebKit::WebExtensionTab::operator== const):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionWindowCocoa.mm:
(WebKit::WebExtensionWindow::WebExtensionWindow):
(WebKit::WebExtensionWindow::operator== const):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.cpp:
(WebKit::WebExtensionContext::WebExtensionContext):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
(WebKit::WebExtensionContext::identifier const): Deleted.
* Source/WebKit/UIProcess/Extensions/WebExtensionController.cpp:
(WebKit::WebExtensionController::WebExtensionController):
* Source/WebKit/UIProcess/Extensions/WebExtensionController.h:
(WebKit::WebExtensionController::configuration const):
(WebKit::WebExtensionController::identifier const): Deleted.
* Source/WebKit/UIProcess/Extensions/WebExtensionTab.h:
(WebKit::WebExtensionTab::identifier const): Deleted.
* Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h:
(WebKit::WebExtensionWindow::identifier const): Deleted.
* Source/WebKit/UIProcess/Notifications/WebNotification.cpp:
(WebKit::WebNotification::WebNotification):
* Source/WebKit/UIProcess/Notifications/WebNotification.h:
(WebKit::WebNotification::identifier const): Deleted.
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
(WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
(WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
* Source/WebKit/UIProcess/UserContent/WebScriptMessageHandler.h:
* Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp:
(WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
(WebKit::WebUserContentControllerProxy::~WebUserContentControllerProxy):
* Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h:
(WebKit::WebUserContentControllerProxy::identifier const): Deleted.
* Source/WebKit/UIProcess/VisitedLinkStore.cpp:
(WebKit::VisitedLinkStore::VisitedLinkStore):
* Source/WebKit/UIProcess/VisitedLinkStore.h:
* Source/WebKit/UIProcess/WebURLSchemeHandler.cpp:
(WebKit::WebURLSchemeHandler::WebURLSchemeHandler): Deleted.
* Source/WebKit/UIProcess/WebURLSchemeHandler.h:
(WebKit::WebURLSchemeHandler::identifier const): Deleted.
* Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferSetProxy.cpp:
(WebKit::RemoteImageBufferSetProxy::send):
(WebKit::RemoteImageBufferSetProxy::sendSync):
(WebKit::RemoteImageBufferSetProxy::RemoteImageBufferSetProxy):
(WebKit::RemoteImageBufferSetProxy::didPrepareForDisplay):
(WebKit::RemoteImageBufferSetProxy::close):
(WebKit::RemoteImageBufferSetProxy::flushFrontBufferAsync):
(WebKit::RemoteImageBufferSetProxy::willPrepareForDisplay):
(WebKit::RemoteImageBufferSetProxy::remoteBufferSetWasDestroyed):
* Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferSetProxy.h:
(WebKit::RemoteImageBufferSetProxy::identifier const): Deleted.
* Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.cpp:
(WebKit::RemoteAudioHardwareListener::RemoteAudioHardwareListener):
(WebKit::RemoteAudioHardwareListener::~RemoteAudioHardwareListener):
* Source/WebKit/WebProcess/GPU/media/RemoteAudioHardwareListener.h:
* Source/WebKit/WebProcess/GPU/media/RemoteRemoteCommandListener.cpp:
(WebKit::RemoteRemoteCommandListener::RemoteRemoteCommandListener):
(WebKit::RemoteRemoteCommandListener::~RemoteRemoteCommandListener):
(WebKit::RemoteRemoteCommandListener::ensureGPUProcessConnection):
(WebKit::RemoteRemoteCommandListener::updateSupportedCommands):
* Source/WebKit/WebProcess/GPU/media/RemoteRemoteCommandListener.h:
* Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp:
(WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::Proxy):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::~Proxy):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::createRemoteUnit):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::start):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::stop):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManager::Proxy::setAudioOutputDevice):
* Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
(WebKit::MediaRecorderPrivate::MediaRecorderPrivate):
(WebKit::MediaRecorderPrivate::startRecording):
(WebKit::MediaRecorderPrivate::~MediaRecorderPrivate):
(WebKit::MediaRecorderPrivate::videoFrameAvailable):
(WebKit::MediaRecorderPrivate::audioSamplesAvailable):
(WebKit::MediaRecorderPrivate::fetchData):
(WebKit::MediaRecorderPrivate::stopRecording):
(WebKit::MediaRecorderPrivate::pauseRecording):
(WebKit::MediaRecorderPrivate::resumeRecording):
* Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.h:
* Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
(WebKit::SampleBufferDisplayLayer::SampleBufferDisplayLayer):
(WebKit::SampleBufferDisplayLayer::initialize):
(WebKit::SampleBufferDisplayLayer::setLogIdentifier):
(WebKit::SampleBufferDisplayLayer::~SampleBufferDisplayLayer):
(WebKit::SampleBufferDisplayLayer::updateDisplayMode):
(WebKit::SampleBufferDisplayLayer::updateBoundsAndPosition):
(WebKit::SampleBufferDisplayLayer::flush):
(WebKit::SampleBufferDisplayLayer::flushAndRemoveImage):
(WebKit::SampleBufferDisplayLayer::play):
(WebKit::SampleBufferDisplayLayer::pause):
(WebKit::SampleBufferDisplayLayer::enqueueBlackFrameFrom):
(WebKit::SampleBufferDisplayLayer::enqueueVideoFrame):
(WebKit::SampleBufferDisplayLayer::clearVideoFrames):
(WebKit::SampleBufferDisplayLayer::setShouldMaintainAspectRatio):
* Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:
* Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:
(WebKit::WebSocketChannel::messageSenderDestinationID const):
(WebKit::WebSocketChannel::connect):
* Source/WebKit/WebProcess/Network/webrtc/LibWebRTCResolver.cpp:
(WebKit::LibWebRTCResolver::~LibWebRTCResolver):
(WebKit::LibWebRTCResolver::start):
* Source/WebKit/WebProcess/Network/webrtc/LibWebRTCResolver.h:
* Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
(WebKit::LibWebRTCSocket::LibWebRTCSocket):
(WebKit::LibWebRTCSocket::SendTo):
(WebKit::LibWebRTCSocket::Close):
(WebKit::LibWebRTCSocket::SetOption):
(WebKit::LibWebRTCSocket::suspend):
* Source/WebKit/WebProcess/Network/webrtc/LibWebRTCSocket.h:
* Source/WebKit/WebProcess/Plugins/PDF/PDFIncrementalLoader.mm:
* Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:
(WebKit::PDFPlugin::handleContextMenuEvent):
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h:
(WebKit::PDFPluginBase::identifier const): Deleted.
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm:
(WebKit::PDFPluginBase::PDFPluginBase):
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm:
(WebKit::UnifiedPDFPlugin::handleContextMenuEvent):
* Source/WebKit/WebProcess/WebStorage/StorageAreaImpl.cpp:
(WebKit::StorageAreaImpl::StorageAreaImpl):
* Source/WebKit/WebProcess/WebStorage/StorageAreaImpl.h:
* Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:
(WebKit::StorageAreaMap::StorageAreaMap):
(WebKit::StorageAreaMap::sendConnectMessage):
* Source/WebKit/WebProcess/WebStorage/StorageAreaMap.h:
* Source/WebKit/webpushd/PushClientConnection.h:

Canonical link: https://commits.webkit.org/275739@main
  • Loading branch information
cdumez committed Mar 6, 2024
1 parent 4e0d0a1 commit 1b1dcd6
Show file tree
Hide file tree
Showing 80 changed files with 227 additions and 313 deletions.
53 changes: 32 additions & 21 deletions Source/WTF/wtf/Identified.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,18 @@
#pragma once

#include <atomic>
#include <type_traits>
#include <wtf/NeverDestroyed.h>
#include <wtf/ObjectIdentifier.h>
#include <wtf/ThreadAssertions.h>
#include <wtf/UUID.h>

namespace WTF {

template <typename IdentifierType, typename ClassType>
template <typename IdentifierType>
class IdentifiedBase {
public:
IdentifierType identifier() const
{
return m_identifier;
}
IdentifierType identifier() const { return m_identifier; }

protected:
IdentifiedBase(const IdentifiedBase&) = default;
Expand All @@ -54,19 +53,30 @@ class IdentifiedBase {
IdentifierType m_identifier;
};

template <typename T>
class Identified : public IdentifiedBase<uint64_t, T> {
template <typename ObjectIdentifierType>
class Identified : public IdentifiedBase<ObjectIdentifierType> {
protected:
Identified()
: IdentifiedBase<uint64_t, T>(generateIdentifier())
: IdentifiedBase<ObjectIdentifierType>(ObjectIdentifierType::generate())
{
}

Identified(const Identified&) = default;
Identified& operator=(const Identified&) = default;
};

template <typename T>
class LegacyIdentified : public IdentifiedBase<uint64_t> {
protected:
LegacyIdentified()
: IdentifiedBase<uint64_t>(generateIdentifier())
{
}

LegacyIdentified(const LegacyIdentified&) = default;
LegacyIdentified& operator=(const LegacyIdentified&) = default;

explicit Identified(uint64_t identifier)
: IdentifiedBase<uint64_t, T>(identifier)
explicit LegacyIdentified(uint64_t identifier)
: IdentifiedBase<uint64_t>(identifier)
{
}

Expand All @@ -82,18 +92,18 @@ class Identified : public IdentifiedBase<uint64_t, T> {
};

template <typename T>
class ThreadSafeIdentified : public IdentifiedBase<uint64_t, T> {
class LegacyThreadSafeIdentified : public IdentifiedBase<uint64_t> {
protected:
ThreadSafeIdentified()
: IdentifiedBase<uint64_t, T>(generateIdentifier())
LegacyThreadSafeIdentified()
: IdentifiedBase<uint64_t>(generateIdentifier())
{
}

ThreadSafeIdentified(const ThreadSafeIdentified&) = default;
ThreadSafeIdentified& operator=(const ThreadSafeIdentified&) = default;
LegacyThreadSafeIdentified(const LegacyThreadSafeIdentified&) = default;
LegacyThreadSafeIdentified& operator=(const LegacyThreadSafeIdentified&) = default;

explicit ThreadSafeIdentified(uint64_t identifier)
: IdentifiedBase<uint64_t, T>(identifier)
explicit LegacyThreadSafeIdentified(uint64_t identifier)
: IdentifiedBase<uint64_t>(identifier)
{
}

Expand All @@ -110,10 +120,10 @@ class ThreadSafeIdentified : public IdentifiedBase<uint64_t, T> {
};

template <typename T>
class UUIDIdentified : public IdentifiedBase<UUID, T> {
class UUIDIdentified : public IdentifiedBase<UUID> {
protected:
UUIDIdentified()
: IdentifiedBase<UUID, T>(UUID::createVersion4())
: IdentifiedBase<UUID>(UUID::createVersion4())
{
}

Expand All @@ -123,5 +133,6 @@ class UUIDIdentified : public IdentifiedBase<UUID, T> {
} // namespace WTF

using WTF::Identified;
using WTF::ThreadSafeIdentified;
using WTF::LegacyIdentified;
using WTF::LegacyThreadSafeIdentified;
using WTF::UUIDIdentified;
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ Ref<MediaKeySystemRequest> MediaKeySystemRequest::create(Document& document, con

MediaKeySystemRequest::MediaKeySystemRequest(Document& document, const String& keySystem, Ref<DeferredPromise>&& promise)
: ActiveDOMObject(document)
, m_identifier(MediaKeySystemRequestIdentifier::generate())
, m_keySystem(keySystem)
, m_promise(WTFMove(promise))
{
Expand Down
6 changes: 2 additions & 4 deletions Source/WebCore/Modules/encryptedmedia/MediaKeySystemRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "MediaKeySystemRequestIdentifier.h"
#include <wtf/CompletionHandler.h>
#include <wtf/Forward.h>
#include <wtf/Identified.h>
#include <wtf/ObjectIdentifier.h>
#include <wtf/UniqueRef.h>

Expand All @@ -42,13 +43,12 @@ class MediaKeySystem;

template <typename IDLType> class DOMPromiseDeferred;

class MediaKeySystemRequest : public RefCounted<MediaKeySystemRequest>, public ActiveDOMObject {
class MediaKeySystemRequest : public RefCounted<MediaKeySystemRequest>, public ActiveDOMObject, public Identified<MediaKeySystemRequestIdentifier> {
public:
WEBCORE_EXPORT static Ref<MediaKeySystemRequest> create(Document&, const String& keySystem, Ref<DeferredPromise>&&);
virtual ~MediaKeySystemRequest();

void setAllowCallback(CompletionHandler<void(Ref<DeferredPromise>&&)>&& callback) { m_allowCompletionHandler = WTFMove(callback); }
MediaKeySystemRequestIdentifier identifier() const { return m_identifier; }
WEBCORE_EXPORT void start();

WEBCORE_EXPORT void allow();
Expand All @@ -65,8 +65,6 @@ class MediaKeySystemRequest : public RefCounted<MediaKeySystemRequest>, public A
void stop() final;
const char* activeDOMObjectName() const final;

MediaKeySystemRequestIdentifier m_identifier;

String m_keySystem;
Ref<DeferredPromise> m_promise;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class ServerOpenDBRequest;
class UniqueIDBDatabase;
class UniqueIDBDatabaseTransaction;

class UniqueIDBDatabaseConnection : public RefCounted<UniqueIDBDatabaseConnection>, public ThreadSafeIdentified<UniqueIDBDatabaseConnection>, public CanMakeWeakPtr<UniqueIDBDatabaseConnection> {
class UniqueIDBDatabaseConnection : public RefCounted<UniqueIDBDatabaseConnection>, public LegacyThreadSafeIdentified<UniqueIDBDatabaseConnection>, public CanMakeWeakPtr<UniqueIDBDatabaseConnection> {
public:
static Ref<UniqueIDBDatabaseConnection> create(UniqueIDBDatabase&, ServerOpenDBRequest&);

Expand Down
1 change: 0 additions & 1 deletion Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ Ref<UserMediaRequest> UserMediaRequest::create(Document& document, MediaStreamRe

UserMediaRequest::UserMediaRequest(Document& document, MediaStreamRequest&& request, TrackConstraints&& audioConstraints, TrackConstraints&& videoConstraints, DOMPromiseDeferred<IDLInterface<MediaStream>>&& promise)
: ActiveDOMObject(document)
, m_identifier(UserMediaRequestIdentifier::generate())
, m_promise(makeUniqueRef<DOMPromiseDeferred<IDLInterface<MediaStream>>>(WTFMove(promise)))
, m_request(WTFMove(request))
, m_audioConstraints(WTFMove(audioConstraints))
Expand Down
6 changes: 2 additions & 4 deletions Source/WebCore/Modules/mediastream/UserMediaRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include "MediaStreamRequest.h"
#include "UserMediaRequestIdentifier.h"
#include <wtf/CompletionHandler.h>
#include <wtf/Identified.h>
#include <wtf/ObjectIdentifier.h>
#include <wtf/UniqueRef.h>

Expand All @@ -54,13 +55,12 @@ class SecurityOrigin;

template<typename IDLType> class DOMPromiseDeferred;

class UserMediaRequest : public RefCounted<UserMediaRequest>, public ActiveDOMObject {
class UserMediaRequest : public RefCounted<UserMediaRequest>, public ActiveDOMObject, public Identified<UserMediaRequestIdentifier> {
public:
using TrackConstraints = std::variant<bool, MediaTrackConstraints>;
static Ref<UserMediaRequest> create(Document&, MediaStreamRequest&&, TrackConstraints&&, TrackConstraints&&, DOMPromiseDeferred<IDLInterface<MediaStream>>&&);
virtual ~UserMediaRequest();

UserMediaRequestIdentifier identifier() const { return m_identifier; }
void start();

WEBCORE_EXPORT void setAllowedMediaDeviceUIDs(const String& audioDeviceUID, const String& videoDeviceUID);
Expand All @@ -86,8 +86,6 @@ class UserMediaRequest : public RefCounted<UserMediaRequest>, public ActiveDOMOb
void stop() final;
const char* activeDOMObjectName() const final;

UserMediaRequestIdentifier m_identifier;

Vector<String> m_videoDeviceUIDs;
Vector<String> m_audioDeviceUIDs;

Expand Down
13 changes: 3 additions & 10 deletions Source/WebCore/Modules/speech/SpeechRecognitionConnectionClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,17 @@
#pragma once

#include "SpeechRecognitionConnectionClientIdentifier.h"
#include <wtf/Identified.h>
#include <wtf/WeakPtr.h>

namespace WebCore {

struct SpeechRecognitionError;
struct SpeechRecognitionResultData;

class SpeechRecognitionConnectionClient : public CanMakeWeakPtr<SpeechRecognitionConnectionClient> {
class SpeechRecognitionConnectionClient : public Identified<SpeechRecognitionConnectionClientIdentifier>, public CanMakeWeakPtr<SpeechRecognitionConnectionClient> {
public:
SpeechRecognitionConnectionClient()
: m_identifier(SpeechRecognitionConnectionClientIdentifier::generate())
{
}
SpeechRecognitionConnectionClient() = default;

virtual ~SpeechRecognitionConnectionClient() { }

Expand All @@ -53,11 +51,6 @@ class SpeechRecognitionConnectionClient : public CanMakeWeakPtr<SpeechRecognitio
virtual void didReceiveResult(Vector<SpeechRecognitionResultData>&& resultDatas) = 0;
virtual void didError(const SpeechRecognitionError&) = 0;
virtual void didEnd() = 0;

SpeechRecognitionConnectionClientIdentifier identifier() const { return m_identifier; };

private:
SpeechRecognitionConnectionClientIdentifier m_identifier;
};

} // namespace WebCore
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,7 @@ RefPtr<ThreadableWebSocketChannel> ThreadableWebSocketChannel::create(ScriptExec
return create(downcast<Document>(context), client, provider);
}

ThreadableWebSocketChannel::ThreadableWebSocketChannel()
: m_identifier(WebSocketIdentifier::generate())
{
}
ThreadableWebSocketChannel::ThreadableWebSocketChannel() = default;

std::optional<ThreadableWebSocketChannel::ValidatedURL> ThreadableWebSocketChannel::validateURL(Document& document, const URL& requestedURL)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

#include "WebSocketIdentifier.h"
#include <wtf/Forward.h>
#include <wtf/Identified.h>
#include <wtf/Noncopyable.h>
#include <wtf/ObjectIdentifier.h>
#include <wtf/URL.h>
Expand All @@ -54,7 +55,7 @@ class WebSocketChannelClient;

using WebSocketChannelIdentifier = AtomicObjectIdentifier<WebSocketChannel>;

class ThreadableWebSocketChannel {
class ThreadableWebSocketChannel : public Identified<WebSocketIdentifier> {
WTF_MAKE_NONCOPYABLE(ThreadableWebSocketChannel);
public:
static RefPtr<ThreadableWebSocketChannel> create(Document&, WebSocketChannelClient&, SocketProvider&);
Expand All @@ -64,8 +65,6 @@ class ThreadableWebSocketChannel {
void ref() { refThreadableWebSocketChannel(); }
void deref() { derefThreadableWebSocketChannel(); }

WebSocketIdentifier identifier() const { return m_identifier; };

enum class ConnectStatus { KO, OK };
virtual ConnectStatus connect(const URL&, const String& protocol) = 0;
virtual String subprotocol() = 0; // Will be available after didConnect() callback is invoked.
Expand Down Expand Up @@ -123,8 +122,6 @@ class ThreadableWebSocketChannel {
};
WEBCORE_EXPORT static std::optional<ValidatedURL> validateURL(Document&, const URL&);
WEBCORE_EXPORT static std::optional<ResourceRequest> webSocketConnectRequest(Document&, const URL&);

WebSocketIdentifier m_identifier;
};

} // namespace WebCore
16 changes: 7 additions & 9 deletions Source/WebCore/dom/BroadcastChannel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "WorkerThread.h"
#include <wtf/CallbackAggregator.h>
#include <wtf/HashMap.h>
#include <wtf/Identified.h>
#include <wtf/IsoMallocInlines.h>
#include <wtf/MainThread.h>
#include <wtf/Scope.h>
Expand Down Expand Up @@ -67,7 +68,7 @@ static PartitionedSecurityOrigin partitionedSecurityOriginFromContext(ScriptExec
return { WTFMove(topOrigin), WTFMove(securityOrigin) };
}

class BroadcastChannel::MainThreadBridge : public ThreadSafeRefCounted<MainThreadBridge, WTF::DestructionThread::Main> {
class BroadcastChannel::MainThreadBridge : public ThreadSafeRefCounted<MainThreadBridge, WTF::DestructionThread::Main>, public Identified<BroadcastChannelIdentifier> {
public:
static Ref<MainThreadBridge> create(BroadcastChannel& channel, const String& name)
{
Expand All @@ -80,22 +81,19 @@ class BroadcastChannel::MainThreadBridge : public ThreadSafeRefCounted<MainThrea
void detach() { m_broadcastChannel = nullptr; }

String name() const { return m_name.isolatedCopy(); }
BroadcastChannelIdentifier identifier() const { return m_identifier; }

private:
MainThreadBridge(BroadcastChannel&, const String& name);

void ensureOnMainThread(Function<void(Page*)>&&);

WeakPtr<BroadcastChannel, WeakPtrImplWithEventTargetData> m_broadcastChannel;
const BroadcastChannelIdentifier m_identifier;
const String m_name; // Main thread only.
PartitionedSecurityOrigin m_origin; // Main thread only.
};

BroadcastChannel::MainThreadBridge::MainThreadBridge(BroadcastChannel& channel, const String& name)
: m_broadcastChannel(channel)
, m_identifier(BroadcastChannelIdentifier::generate())
, m_name(name.isolatedCopy())
, m_origin(partitionedSecurityOriginFromContext(*channel.protectedScriptExecutionContext()).isolatedCopy())
{
Expand Down Expand Up @@ -130,17 +128,17 @@ void BroadcastChannel::MainThreadBridge::registerChannel()
{
ensureOnMainThread([this, contextIdentifier = m_broadcastChannel->scriptExecutionContext()->identifier()](auto* page) mutable {
if (page)
page->protectedBroadcastChannelRegistry()->registerChannel(m_origin, m_name, m_identifier);
channelToContextIdentifier().add(m_identifier, contextIdentifier);
page->protectedBroadcastChannelRegistry()->registerChannel(m_origin, m_name, identifier());
channelToContextIdentifier().add(identifier(), contextIdentifier);
});
}

void BroadcastChannel::MainThreadBridge::unregisterChannel()
{
ensureOnMainThread([this](auto* page) {
if (page)
page->protectedBroadcastChannelRegistry()->unregisterChannel(m_origin, m_name, m_identifier);
channelToContextIdentifier().remove(m_identifier);
page->protectedBroadcastChannelRegistry()->unregisterChannel(m_origin, m_name, identifier());
channelToContextIdentifier().remove(identifier());
});
}

Expand All @@ -151,7 +149,7 @@ void BroadcastChannel::MainThreadBridge::postMessage(Ref<SerializedScriptValue>&
return;

auto blobHandles = message->blobHandles();
page->protectedBroadcastChannelRegistry()->postMessage(m_origin, m_name, m_identifier, WTFMove(message), [blobHandles = WTFMove(blobHandles)] {
page->protectedBroadcastChannelRegistry()->postMessage(m_origin, m_name, identifier(), WTFMove(message), [blobHandles = WTFMove(blobHandles)] {
// Keeps Blob data inside messageData alive until the message has been delivered.
});
});
Expand Down
8 changes: 4 additions & 4 deletions Source/WebCore/html/HTMLMediaElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
#include "VisibilityChangeClient.h"
#include <wtf/Forward.h>
#include <wtf/Function.h>
#include <wtf/Identified.h>
#include <wtf/LoggerHelper.h>
#include <wtf/Observer.h>
#include <wtf/WallTime.h>
Expand Down Expand Up @@ -146,6 +147,7 @@ class HTMLMediaElement
, public ActiveDOMObject
, public MediaControllerInterface
, public PlatformMediaSessionClient
, public Identified<HTMLMediaElementIdentifier>
, private MediaCanStartListener
, private MediaPlayerClient
, private MediaProducer
Expand All @@ -170,8 +172,6 @@ class HTMLMediaElement
using CanMakeWeakPtr<HTMLMediaElement, WeakPtrFactoryInitialization::Eager>::WeakValueType;
using CanMakeWeakPtr<HTMLMediaElement, WeakPtrFactoryInitialization::Eager>::WeakPtrImplType;

HTMLMediaElementIdentifier identifier() const { return m_identifier; }

MediaPlayer* player() const { return m_player.get(); }
RefPtr<MediaPlayer> protectedPlayer() const { return m_player; }
WEBCORE_EXPORT std::optional<MediaPlayerIdentifier> playerIdentifier() const;
Expand Down Expand Up @@ -583,6 +583,8 @@ class HTMLMediaElement

bool supportsSeeking() const override;

using Identified<HTMLMediaElementIdentifier>::identifier;

#if !RELEASE_LOG_DISABLED
const Logger& logger() const final { return *m_logger.get(); }
Ref<Logger> protectedLogger() const;
Expand Down Expand Up @@ -1068,8 +1070,6 @@ class HTMLMediaElement

bool shouldDisableHDR() const;

HTMLMediaElementIdentifier m_identifier { HTMLMediaElementIdentifier::generate() };

Timer m_progressEventTimer;
Timer m_playbackProgressTimer;
Timer m_scanTimer;
Expand Down
Loading

0 comments on commit 1b1dcd6

Please sign in to comment.