summaryrefslogtreecommitdiff
path: root/Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp')
-rw-r--r--Source/WebCore/Modules/mediastream/MediaStreamRegistry.cpp52
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)