Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebCore / Modules / mediasource / MediaSourceRegistry.cpp
index 1c62674..98c663b 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 Google Inc. All rights reserved.
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
 
 #if ENABLE(MEDIA_SOURCE)
 
-#include "KURL.h"
 #include "MediaSource.h"
 #include <wtf/MainThread.h>
+#include <wtf/NeverDestroyed.h>
+#include <wtf/URL.h>
 
 namespace WebCore {
 
 MediaSourceRegistry& MediaSourceRegistry::registry()
 {
     ASSERT(isMainThread());
-    DEFINE_STATIC_LOCAL(MediaSourceRegistry, instance, ());
+    static NeverDestroyed<MediaSourceRegistry> instance;
     return instance;
 }
 
-void MediaSourceRegistry::registerMediaSourceURL(const KURL& url, PassRefPtr<MediaSource> source)
+void MediaSourceRegistry::registerURL(SecurityOrigin*, const URL& url, URLRegistrable& registrable)
 {
+    ASSERT(&registrable.registry() == this);
     ASSERT(isMainThread());
 
-    source->setPendingActivity(source.get());
-
-    m_mediaSources.set(url.string(), source);
+    MediaSource& source = static_cast<MediaSource&>(registrable);
+    source.addedToRegistry();
+    m_mediaSources.set(url.string(), &source);
 }
 
-void MediaSourceRegistry::unregisterMediaSourceURL(const KURL& url)
+void MediaSourceRegistry::unregisterURL(const URL& url)
 {
     ASSERT(isMainThread());
-    HashMap<String, RefPtr<MediaSource> >::iterator iter = m_mediaSources.find(url.string());
-    if (iter == m_mediaSources.end())
-        return;
-
-    RefPtr<MediaSource> source = iter->value;
-    m_mediaSources.remove(iter);
-
-    // Remove the pending activity added in registerMediaSourceURL().
-    source->unsetPendingActivity(source.get());
+    if (auto source = m_mediaSources.take(url.string()))
+        source->removedFromRegistry();
 }
 
-MediaSource* MediaSourceRegistry::lookupMediaSource(const String& url)
+URLRegistrable* MediaSourceRegistry::lookup(const String& url) const
 {
     ASSERT(isMainThread());
-    return m_mediaSources.get(url).get();
+    return m_mediaSources.get(url);
+}
+
+MediaSourceRegistry::MediaSourceRegistry()
+{
+    MediaSource::setRegistry(this);
 }
 
 } // namespace WebCore