diff options
Diffstat (limited to 'Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp')
-rw-r--r-- | Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp b/Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp index 9a2eeb18e..843498657 100644 --- a/Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp +++ b/Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp @@ -28,25 +28,26 @@ #if ENABLE(MEDIA_STREAM) -#include "URL.h" #include "MediaStream.h" +#include "URL.h" #include <wtf/MainThread.h> +#include <wtf/NeverDestroyed.h> namespace WebCore { -MediaStreamRegistry& MediaStreamRegistry::registry() +MediaStreamRegistry& MediaStreamRegistry::shared() { // Since WebWorkers cannot obtain MediaSource objects, we should be on the main thread. ASSERT(isMainThread()); - DEFINE_STATIC_LOCAL(MediaStreamRegistry, instance, ()); + static NeverDestroyed<MediaStreamRegistry> instance; return instance; } -void MediaStreamRegistry::registerURL(SecurityOrigin*, const URL& url, URLRegistrable* stream) +void MediaStreamRegistry::registerURL(SecurityOrigin*, const URL& url, URLRegistrable& stream) { - ASSERT(&stream->registry() == this); + ASSERT(&stream.registry() == this); ASSERT(isMainThread()); - m_mediaStreams.set(url.string(), static_cast<MediaStream*>(stream)); + m_mediaStreams.set(url.string(), static_cast<MediaStream*>(&stream)); } void MediaStreamRegistry::unregisterURL(const URL& url) @@ -61,6 +62,45 @@ URLRegistrable* MediaStreamRegistry::lookup(const String& url) const return m_mediaStreams.get(url); } +MediaStreamRegistry::MediaStreamRegistry() +{ +} + +MediaStream* MediaStreamRegistry::lookUp(const URL& url) const +{ + return static_cast<MediaStream*>(lookup(url.string())); +} + +static Vector<MediaStream*>& mediaStreams() +{ + static NeverDestroyed<Vector<MediaStream*>> streams; + return streams; +} + +void MediaStreamRegistry::registerStream(MediaStream& stream) +{ + mediaStreams().append(&stream); +} + +void MediaStreamRegistry::unregisterStream(MediaStream& stream) +{ + Vector<MediaStream*>& allStreams = mediaStreams(); + size_t pos = allStreams.find(&stream); + if (pos != notFound) + allStreams.remove(pos); +} + +MediaStream* MediaStreamRegistry::lookUp(const MediaStreamPrivate& privateStream) const +{ + Vector<MediaStream*>& allStreams = mediaStreams(); + for (auto& stream : allStreams) { + if (stream->privateStream() == &privateStream) + return stream; + } + + return nullptr; +} + } // namespace WebCore #endif // ENABLE(MEDIA_STREAM) |