| 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
|
|
|