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

Unified Diff: content/renderer/media/crypto/key_systems.cc

Issue 23484019: Refactor KeySystems code to call a function to populate the info. (relanding r221932) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix build error (cannot |= an enum) Created 7 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
« no previous file with comments | « content/renderer/media/crypto/key_systems.h ('k') | content/renderer/media/crypto/key_systems_info.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/crypto/key_systems.cc
diff --git a/content/renderer/media/crypto/key_systems.cc b/content/renderer/media/crypto/key_systems.cc
index c828da0cc79b4e1bcfae965a846daca00a1858f8..4eeb111ed88b85d492c197a55a77353f9a73dc83 100644
--- a/content/renderer/media/crypto/key_systems.cc
+++ b/content/renderer/media/crypto/key_systems.cc
@@ -9,6 +9,9 @@
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/strings/string_util.h"
+#include "content/public/common/content_client.h"
+#include "content/public/renderer/content_renderer_client.h"
+#include "content/public/renderer/key_system_info.h"
#include "content/renderer/media/crypto/key_systems_info.h"
#include "net/base/mime_util.h"
#include "third_party/WebKit/public/platform/WebCString.h"
@@ -24,21 +27,7 @@ static std::string ToASCIIOrEmpty(const WebKit::WebString& string) {
class KeySystems {
public:
- static KeySystems* GetInstance();
-
- void AddConcreteSupportedKeySystem(
- const std::string& key_system,
- bool use_aes_decryptor,
-#if defined(ENABLE_PEPPER_CDMS)
- const std::string& pepper_type,
-#elif defined(OS_ANDROID)
- const uint8 uuid[16],
-#endif
- const std::string& parent_key_system);
-
- void AddSupportedType(const std::string& key_system,
- const std::string& mime_type,
- const std::string& codecs_list);
+ static KeySystems& GetInstance();
bool IsConcreteSupportedKeySystem(const std::string& key_system);
@@ -56,6 +45,21 @@ class KeySystems {
#endif
private:
+ void AddConcreteSupportedKeySystems(
+ const std::vector<KeySystemInfo>& concrete_key_systems);
+
+ void AddConcreteSupportedKeySystem(
+ const std::string& key_system,
+ bool use_aes_decryptor,
+#if defined(ENABLE_PEPPER_CDMS)
+ const std::string& pepper_type,
+#elif defined(OS_ANDROID)
+ const std::vector<uint8>& uuid,
+#endif
+ const std::vector<KeySystemInfo::ContainerCodecsPair>& supported_types,
+ const std::string& parent_key_system);
+
+
friend struct base::DefaultLazyInstanceTraits<KeySystems>;
typedef base::hash_set<std::string> CodecSet;
@@ -77,7 +81,12 @@ class KeySystems {
typedef std::map<std::string, std::string> ParentKeySystemMap;
- KeySystems() {}
+ KeySystems();
+ ~KeySystems() {}
+
+ void AddSupportedType(const std::string& mime_type,
+ const std::string& codecs_list,
+ KeySystemProperties* properties);
bool IsSupportedKeySystemWithContainerAndCodec(
const std::string& mime_type,
@@ -96,15 +105,35 @@ class KeySystems {
static base::LazyInstance<KeySystems> g_key_systems = LAZY_INSTANCE_INITIALIZER;
-KeySystems* KeySystems::GetInstance() {
- KeySystems* key_systems = &g_key_systems.Get();
- // TODO(ddorwin): Call out to ContentClient to register key systems.
- static bool is_registered = false;
- if (!is_registered) {
- is_registered = true; // Prevent reentrancy when Add*() is called.
- RegisterKeySystems();
+KeySystems& KeySystems::GetInstance() {
+ return g_key_systems.Get();
+}
+
+// Because we use a LazyInstance, the key systems info must be populated when
+// the instance is lazily initiated.
+KeySystems::KeySystems() {
+ std::vector<KeySystemInfo> key_systems_info;
+ GetContentClient()->renderer()->AddKeySystems(&key_systems_info);
+ // TODO(ddorwin): Remove in next CL after moving info to
+ // ChromeContentRendererClient.
+ AddKeySystems(&key_systems_info);
+ AddConcreteSupportedKeySystems(key_systems_info);
+}
+
+void KeySystems::AddConcreteSupportedKeySystems(
+ const std::vector<KeySystemInfo>& concrete_key_systems) {
+ for (size_t i = 0; i < concrete_key_systems.size(); ++i) {
+ const KeySystemInfo& key_system_info = concrete_key_systems[i];
+ AddConcreteSupportedKeySystem(key_system_info.key_system,
+ key_system_info.use_aes_decryptor,
+#if defined(ENABLE_PEPPER_CDMS)
+ key_system_info.pepper_type,
+#elif defined(OS_ANDROID)
+ key_system_info.uuid,
+#endif
+ key_system_info.supported_types,
+ key_system_info.parent_key_system);
}
- return key_systems;
}
void KeySystems::AddConcreteSupportedKeySystem(
@@ -113,11 +142,15 @@ void KeySystems::AddConcreteSupportedKeySystem(
#if defined(ENABLE_PEPPER_CDMS)
const std::string& pepper_type,
#elif defined(OS_ANDROID)
- const uint8 uuid[16],
+ const std::vector<uint8>& uuid,
#endif
+ const std::vector<KeySystemInfo::ContainerCodecsPair>& supported_types,
const std::string& parent_key_system) {
DCHECK(!IsConcreteSupportedKeySystem(concrete_key_system))
<< "Key system '" << concrete_key_system << "' already registered";
+ DCHECK(parent_key_system_map_.find(concrete_key_system) ==
+ parent_key_system_map_.end())
+ << "'" << concrete_key_system << " is already registered as a parent";
KeySystemProperties properties;
properties.use_aes_decryptor = use_aes_decryptor;
@@ -125,23 +158,33 @@ void KeySystems::AddConcreteSupportedKeySystem(
DCHECK_EQ(use_aes_decryptor, pepper_type.empty());
properties.pepper_type = pepper_type;
#elif defined(OS_ANDROID)
- // Since |uuid| can't be empty, use |use_aes_decryptor|.
- if (!use_aes_decryptor)
- properties.uuid.assign(uuid, uuid + 16);
+ DCHECK_EQ(use_aes_decryptor, uuid.empty());
+ DCHECK(use_aes_decryptor || uuid.size() == 16);
+ properties.uuid = uuid;
#endif
+
+ for (size_t i = 0; i < supported_types.size(); ++i) {
+ const KeySystemInfo::ContainerCodecsPair& pair = supported_types[i];
+ const std::string& mime_type = pair.first;
+ const std::string& codecs_list = pair.second;
+ AddSupportedType(mime_type, codecs_list, &properties);
+ }
+
concrete_key_system_map_[concrete_key_system] = properties;
if (!parent_key_system.empty()) {
+ DCHECK(!IsConcreteSupportedKeySystem(parent_key_system))
+ << "Parent '" << parent_key_system << "' already registered concrete";
DCHECK(parent_key_system_map_.find(parent_key_system) ==
parent_key_system_map_.end())
- << "Parent '" << parent_key_system.c_str() << "' already registered.";
+ << "Parent '" << parent_key_system << "' already registered";
parent_key_system_map_[parent_key_system] = concrete_key_system;
}
}
-void KeySystems::AddSupportedType(const std::string& concrete_key_system,
- const std::string& mime_type,
- const std::string& codecs_list) {
+void KeySystems::AddSupportedType(const std::string& mime_type,
+ const std::string& codecs_list,
+ KeySystemProperties* properties) {
std::vector<std::string> mime_type_codecs;
net::ParseCodecString(codecs_list, &mime_type_codecs, false);
@@ -149,10 +192,7 @@ void KeySystems::AddSupportedType(const std::string& concrete_key_system,
// Support the MIME type string alone, without codec(s) specified.
codecs.insert(std::string());
- KeySystemPropertiesMap::iterator key_system_iter =
- concrete_key_system_map_.find(concrete_key_system);
- DCHECK(key_system_iter != concrete_key_system_map_.end());
- MimeTypeMap& mime_types_map = key_system_iter->second.types;
+ MimeTypeMap& mime_types_map = properties->types;
// mime_types_map must not be repeated for a given key system.
DCHECK(mime_types_map.find(mime_type) == mime_types_map.end());
mime_types_map[mime_type] = codecs;
@@ -254,34 +294,8 @@ std::vector<uint8> KeySystems::GetUUID(const std::string& concrete_key_system) {
//------------------------------------------------------------------------------
-void AddConcreteSupportedKeySystem(
- const std::string& key_system,
- bool use_aes_decryptor,
-#if defined(ENABLE_PEPPER_CDMS)
- const std::string& pepper_type,
-#elif defined(OS_ANDROID)
- const uint8 uuid[16],
-#endif
- const std::string& parent_key_system) {
- KeySystems::GetInstance()->AddConcreteSupportedKeySystem(key_system,
- use_aes_decryptor,
-#if defined(ENABLE_PEPPER_CDMS)
- pepper_type,
-#elif defined(OS_ANDROID)
- uuid,
-#endif
- parent_key_system);
-}
-
-void AddSupportedType(const std::string& key_system,
- const std::string& mime_type,
- const std::string& codecs_list) {
- KeySystems::GetInstance()->AddSupportedType(key_system,
- mime_type, codecs_list);
-}
-
bool IsConcreteSupportedKeySystem(const WebKit::WebString& key_system) {
- return KeySystems::GetInstance()->IsConcreteSupportedKeySystem(
+ return KeySystems::GetInstance().IsConcreteSupportedKeySystem(
ToASCIIOrEmpty(key_system));
}
@@ -289,7 +303,7 @@ bool IsSupportedKeySystemWithMediaMimeType(
const std::string& mime_type,
const std::vector<std::string>& codecs,
const std::string& key_system) {
- return KeySystems::GetInstance()->IsSupportedKeySystemWithMediaMimeType(
+ return KeySystems::GetInstance().IsSupportedKeySystemWithMediaMimeType(
mime_type, codecs, key_system);
}
@@ -298,16 +312,16 @@ std::string KeySystemNameForUMA(const WebKit::WebString& key_system) {
}
bool CanUseAesDecryptor(const std::string& concrete_key_system) {
- return KeySystems::GetInstance()->UseAesDecryptor(concrete_key_system);
+ return KeySystems::GetInstance().UseAesDecryptor(concrete_key_system);
}
#if defined(ENABLE_PEPPER_CDMS)
std::string GetPepperType(const std::string& concrete_key_system) {
- return KeySystems::GetInstance()->GetPepperType(concrete_key_system);
+ return KeySystems::GetInstance().GetPepperType(concrete_key_system);
}
#elif defined(OS_ANDROID)
std::vector<uint8> GetUUID(const std::string& concrete_key_system) {
- return KeySystems::GetInstance()->GetUUID(concrete_key_system);
+ return KeySystems::GetInstance().GetUUID(concrete_key_system);
}
#endif
« no previous file with comments | « content/renderer/media/crypto/key_systems.h ('k') | content/renderer/media/crypto/key_systems_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698