Index: Source/core/html/MediaProvider.cpp |
diff --git a/Source/core/dom/custom/CustomElementAsyncImportMicrotaskQueue.cpp b/Source/core/html/MediaProvider.cpp |
similarity index 50% |
copy from Source/core/dom/custom/CustomElementAsyncImportMicrotaskQueue.cpp |
copy to Source/core/html/MediaProvider.cpp |
index d5e946c4b0c7c7c94903f766a0981b4648e30b69..98c706acfe9df5542d2405ce43c6d0d9ddd497c8 100644 |
--- a/Source/core/dom/custom/CustomElementAsyncImportMicrotaskQueue.cpp |
+++ b/Source/core/html/MediaProvider.cpp |
@@ -29,27 +29,60 @@ |
*/ |
#include "config.h" |
-#include "core/dom/custom/CustomElementAsyncImportMicrotaskQueue.h" |
+#include "core/html/MediaProvider.h" |
-#include "core/dom/custom/CustomElementMicrotaskImportStep.h" |
+#include "wtf/MainThread.h" |
namespace blink { |
-void CustomElementAsyncImportMicrotaskQueue::enqueue(PassOwnPtrWillBeRawPtr<CustomElementMicrotaskStep> step) |
+class MediaProviderConverterContainer { |
+public: |
+ static MediaProviderConverterContainer& container(); |
+ |
+ void registerMediaProviderConverter(RawPtr<MediaProviderConverter>); |
+ virtual MediaProvider* convert(const ScriptValue&); |
+ |
+private: |
+ Vector<RawPtr<MediaProviderConverter> > m_converters; |
+}; |
+ |
+MediaProviderConverterContainer& MediaProviderConverterContainer::container() |
{ |
- m_queue.append(step); |
+ ASSERT(isMainThread()); |
+ DEFINE_STATIC_LOCAL(MediaProviderConverterContainer, instance, ()); |
+ return instance; |
} |
-void CustomElementAsyncImportMicrotaskQueue::doDispatch() |
+void MediaProviderConverterContainer::registerMediaProviderConverter(RawPtr<MediaProviderConverter> converter) |
{ |
- WillBeHeapVector<OwnPtrWillBeMember<CustomElementMicrotaskStep> > remaining; |
+ if (m_converters.find(converter) == kNotFound) |
+ m_converters.append(converter); |
+} |
- for (unsigned i = 0; i < m_queue.size(); ++i) { |
- if (CustomElementMicrotaskStep::Processing == m_queue[i]->process()) |
- remaining.append(m_queue[i].release()); |
+MediaProvider* MediaProviderConverterContainer::convert(const ScriptValue& value) |
+{ |
+ for (Vector<RawPtr<MediaProviderConverter> >::iterator it = m_converters.begin(); it != m_converters.end(); ++it) { |
+ MediaProvider* provider = (*it)->getMediaProvider(value); |
+ if (provider) |
+ return provider; |
} |
+ return nullptr; |
+} |
- m_queue.swap(remaining); |
+MediaProviderConverter::MediaProviderConverter() |
+{ |
+ MediaProviderConverterContainer::container().registerMediaProviderConverter(this); |
+} |
+ |
+MediaProvider* MediaProviderConverter::convert(const ScriptValue& value) |
+{ |
+ return MediaProviderConverterContainer::container().convert(value); |
+} |
+ |
+MediaProvider::MediaProvider(RawPtr<MediaProviderConverter> converter) |
+{ |
+ MediaProviderConverterContainer& container = MediaProviderConverterContainer::container(); |
+ container.registerMediaProviderConverter(converter); |
} |
} // namespace blink |