Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1068)

Unified Diff: Source/core/html/MediaProvider.cpp

Issue 545933002: Implement HTMLMediaElement::srcObject. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rewrite where each MediaProvider module register a converter method. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698