OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "config.h" | |
6 #include "core/html/MediaProvider.h" | |
7 | |
8 #include "wtf/HashMap.h" | |
9 #include "wtf/MainThread.h" | |
10 #include "wtf/text/StringHash.h" | |
11 | |
12 namespace blink { | |
13 | |
14 class MediaProviderConverterContainer { | |
15 public: | |
16 static MediaProviderConverterContainer& container(); | |
17 | |
18 void registerMediaProviderConverter(const String& interfaceName, const Media Provider::Converter&); | |
19 virtual MediaProvider* convert(const ScriptValue&); | |
20 | |
21 private: | |
22 HashMap<String, MediaProvider::Converter> m_converters; | |
23 }; | |
24 | |
25 MediaProviderConverterContainer& MediaProviderConverterContainer::container() | |
26 { | |
27 ASSERT(isMainThread()); | |
28 DEFINE_STATIC_LOCAL(MediaProviderConverterContainer, instance, ()); | |
29 return instance; | |
30 } | |
31 | |
32 void MediaProviderConverterContainer::registerMediaProviderConverter(const Strin g& interfaceName, const MediaProvider::Converter& converter) | |
33 { | |
34 if (m_converters.get(interfaceName).isNull()) | |
35 m_converters.set(interfaceName, converter); | |
36 } | |
37 | |
38 MediaProvider* MediaProviderConverterContainer::convert(const ScriptValue& value ) | |
39 { | |
40 for (HashMap<String, MediaProvider::Converter>::iterator it = m_converters.b egin(); it != m_converters.end(); ++it) { | |
41 MediaProvider* provider = (it->value)(value); | |
42 if (provider) | |
43 return provider; | |
44 } | |
45 return nullptr; | |
46 } | |
47 | |
48 MediaProvider::MediaProvider(const String& interfaceName, const Converter& conve rter) | |
49 { | |
50 MediaProviderConverterContainer& container = MediaProviderConverterContainer ::container(); | |
51 container.registerMediaProviderConverter(interfaceName, converter); | |
haraken
2014/09/20 08:52:20
Don't we need to unregister the convert at some po
perkj_chrome
2014/09/24 11:39:38
I don't think so since what we register is the sta
| |
52 } | |
53 | |
54 MediaProvider* MediaProvider::convert(const ScriptValue& value) | |
55 { | |
56 MediaProviderConverterContainer& container = MediaProviderConverterContainer ::container(); | |
57 return container.convert(value); | |
58 } | |
59 | |
60 } // namespace blink | |
OLD | NEW |