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

Side by Side Diff: content/renderer/media/crypto/key_systems.cc

Issue 185993004: Encrypted Media: Confine UUID code to MediaDrmBridge. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments addressed Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/crypto/key_systems.h" 5 #include "content/renderer/media/crypto/key_systems.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 bool IsSupportedKeySystemWithMediaMimeType( 60 bool IsSupportedKeySystemWithMediaMimeType(
61 const std::string& mime_type, 61 const std::string& mime_type,
62 const std::vector<std::string>& codecs, 62 const std::vector<std::string>& codecs,
63 const std::string& key_system); 63 const std::string& key_system);
64 64
65 bool UseAesDecryptor(const std::string& concrete_key_system); 65 bool UseAesDecryptor(const std::string& concrete_key_system);
66 66
67 #if defined(ENABLE_PEPPER_CDMS) 67 #if defined(ENABLE_PEPPER_CDMS)
68 std::string GetPepperType(const std::string& concrete_key_system); 68 std::string GetPepperType(const std::string& concrete_key_system);
69 #elif defined(OS_ANDROID)
70 std::vector<uint8> GetUUID(const std::string& concrete_key_system);
71 #endif 69 #endif
72 70
73 private: 71 private:
74 void AddConcreteSupportedKeySystems( 72 void AddConcreteSupportedKeySystems(
75 const std::vector<KeySystemInfo>& concrete_key_systems); 73 const std::vector<KeySystemInfo>& concrete_key_systems);
76 74
77 void AddConcreteSupportedKeySystem( 75 void AddConcreteSupportedKeySystem(
78 const std::string& key_system, 76 const std::string& key_system,
79 bool use_aes_decryptor, 77 bool use_aes_decryptor,
80 #if defined(ENABLE_PEPPER_CDMS) 78 #if defined(ENABLE_PEPPER_CDMS)
81 const std::string& pepper_type, 79 const std::string& pepper_type,
82 #elif defined(OS_ANDROID)
83 const std::vector<uint8>& uuid,
84 #endif 80 #endif
85 const std::vector<KeySystemInfo::ContainerCodecsPair>& supported_types, 81 const std::vector<KeySystemInfo::ContainerCodecsPair>& supported_types,
86 const std::string& parent_key_system); 82 const std::string& parent_key_system);
87 83
88
89 friend struct base::DefaultLazyInstanceTraits<KeySystems>; 84 friend struct base::DefaultLazyInstanceTraits<KeySystems>;
90 85
91 typedef base::hash_set<std::string> CodecSet; 86 typedef base::hash_set<std::string> CodecSet;
92 typedef std::map<std::string, CodecSet> MimeTypeMap; 87 typedef std::map<std::string, CodecSet> MimeTypeMap;
93 88
94 struct KeySystemProperties { 89 struct KeySystemProperties {
95 KeySystemProperties() : use_aes_decryptor(false) {} 90 KeySystemProperties() : use_aes_decryptor(false) {}
96 91
97 bool use_aes_decryptor; 92 bool use_aes_decryptor;
98 #if defined(ENABLE_PEPPER_CDMS) 93 #if defined(ENABLE_PEPPER_CDMS)
99 std::string pepper_type; 94 std::string pepper_type;
100 #elif defined(OS_ANDROID)
101 std::vector<uint8> uuid;
102 #endif 95 #endif
103 MimeTypeMap types; 96 MimeTypeMap types;
104 }; 97 };
105 98
106 typedef std::map<std::string, KeySystemProperties> KeySystemPropertiesMap; 99 typedef std::map<std::string, KeySystemProperties> KeySystemPropertiesMap;
107 100
108 typedef std::map<std::string, std::string> ParentKeySystemMap; 101 typedef std::map<std::string, std::string> ParentKeySystemMap;
109 102
110 KeySystems(); 103 KeySystems();
111 ~KeySystems() {} 104 ~KeySystems() {}
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 } 143 }
151 144
152 void KeySystems::AddConcreteSupportedKeySystems( 145 void KeySystems::AddConcreteSupportedKeySystems(
153 const std::vector<KeySystemInfo>& concrete_key_systems) { 146 const std::vector<KeySystemInfo>& concrete_key_systems) {
154 for (size_t i = 0; i < concrete_key_systems.size(); ++i) { 147 for (size_t i = 0; i < concrete_key_systems.size(); ++i) {
155 const KeySystemInfo& key_system_info = concrete_key_systems[i]; 148 const KeySystemInfo& key_system_info = concrete_key_systems[i];
156 AddConcreteSupportedKeySystem(key_system_info.key_system, 149 AddConcreteSupportedKeySystem(key_system_info.key_system,
157 key_system_info.use_aes_decryptor, 150 key_system_info.use_aes_decryptor,
158 #if defined(ENABLE_PEPPER_CDMS) 151 #if defined(ENABLE_PEPPER_CDMS)
159 key_system_info.pepper_type, 152 key_system_info.pepper_type,
160 #elif defined(OS_ANDROID)
161 key_system_info.uuid,
162 #endif 153 #endif
163 key_system_info.supported_types, 154 key_system_info.supported_types,
164 key_system_info.parent_key_system); 155 key_system_info.parent_key_system);
165 } 156 }
166 } 157 }
167 158
168 void KeySystems::AddConcreteSupportedKeySystem( 159 void KeySystems::AddConcreteSupportedKeySystem(
169 const std::string& concrete_key_system, 160 const std::string& concrete_key_system,
170 bool use_aes_decryptor, 161 bool use_aes_decryptor,
171 #if defined(ENABLE_PEPPER_CDMS) 162 #if defined(ENABLE_PEPPER_CDMS)
172 const std::string& pepper_type, 163 const std::string& pepper_type,
173 #elif defined(OS_ANDROID)
174 const std::vector<uint8>& uuid,
175 #endif 164 #endif
176 const std::vector<KeySystemInfo::ContainerCodecsPair>& supported_types, 165 const std::vector<KeySystemInfo::ContainerCodecsPair>& supported_types,
177 const std::string& parent_key_system) { 166 const std::string& parent_key_system) {
178 DCHECK(!IsConcreteSupportedKeySystem(concrete_key_system)) 167 DCHECK(!IsConcreteSupportedKeySystem(concrete_key_system))
179 << "Key system '" << concrete_key_system << "' already registered"; 168 << "Key system '" << concrete_key_system << "' already registered";
180 DCHECK(parent_key_system_map_.find(concrete_key_system) == 169 DCHECK(parent_key_system_map_.find(concrete_key_system) ==
181 parent_key_system_map_.end()) 170 parent_key_system_map_.end())
182 << "'" << concrete_key_system << " is already registered as a parent"; 171 << "'" << concrete_key_system << " is already registered as a parent";
183 172
184 KeySystemProperties properties; 173 KeySystemProperties properties;
185 properties.use_aes_decryptor = use_aes_decryptor; 174 properties.use_aes_decryptor = use_aes_decryptor;
186 #if defined(ENABLE_PEPPER_CDMS) 175 #if defined(ENABLE_PEPPER_CDMS)
187 DCHECK_EQ(use_aes_decryptor, pepper_type.empty()); 176 DCHECK_EQ(use_aes_decryptor, pepper_type.empty());
188 properties.pepper_type = pepper_type; 177 properties.pepper_type = pepper_type;
189 #elif defined(OS_ANDROID)
190 DCHECK_EQ(use_aes_decryptor, uuid.empty());
191 DCHECK(use_aes_decryptor || uuid.size() == 16);
192 properties.uuid = uuid;
193 #endif 178 #endif
194 179
195 for (size_t i = 0; i < supported_types.size(); ++i) { 180 for (size_t i = 0; i < supported_types.size(); ++i) {
196 const KeySystemInfo::ContainerCodecsPair& pair = supported_types[i]; 181 const KeySystemInfo::ContainerCodecsPair& pair = supported_types[i];
197 const std::string& mime_type = pair.first; 182 const std::string& mime_type = pair.first;
198 const std::string& codecs_list = pair.second; 183 const std::string& codecs_list = pair.second;
199 AddSupportedType(mime_type, codecs_list, &properties); 184 AddSupportedType(mime_type, codecs_list, &properties);
200 } 185 }
201 186
202 concrete_key_system_map_[concrete_key_system] = properties; 187 concrete_key_system_map_[concrete_key_system] = properties;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 concrete_key_system_map_.find(concrete_key_system); 298 concrete_key_system_map_.find(concrete_key_system);
314 if (key_system_iter == concrete_key_system_map_.end()) { 299 if (key_system_iter == concrete_key_system_map_.end()) {
315 DLOG(FATAL) << concrete_key_system << " is not a known concrete system"; 300 DLOG(FATAL) << concrete_key_system << " is not a known concrete system";
316 return std::string(); 301 return std::string();
317 } 302 }
318 303
319 const std::string& type = key_system_iter->second.pepper_type; 304 const std::string& type = key_system_iter->second.pepper_type;
320 DLOG_IF(FATAL, type.empty()) << concrete_key_system << " is not Pepper-based"; 305 DLOG_IF(FATAL, type.empty()) << concrete_key_system << " is not Pepper-based";
321 return type; 306 return type;
322 } 307 }
323 #elif defined(OS_ANDROID)
324 std::vector<uint8> KeySystems::GetUUID(const std::string& concrete_key_system) {
325 KeySystemPropertiesMap::iterator key_system_iter =
326 concrete_key_system_map_.find(concrete_key_system);
327 if (key_system_iter == concrete_key_system_map_.end()) {
328 DLOG(FATAL) << concrete_key_system << " is not a known concrete system";
329 return std::vector<uint8>();
330 }
331
332 return key_system_iter->second.uuid;
333 }
334 #endif 308 #endif
335 309
336 //------------------------------------------------------------------------------ 310 //------------------------------------------------------------------------------
337 311
338 std::string GetUnprefixedKeySystemName(const std::string& key_system) { 312 std::string GetUnprefixedKeySystemName(const std::string& key_system) {
339 if (key_system == kClearKeyKeySystem) 313 if (key_system == kClearKeyKeySystem)
340 return kUnsupportedClearKeyKeySystem; 314 return kUnsupportedClearKeyKeySystem;
341 315
342 if (key_system == kPrefixedClearKeyKeySystem) 316 if (key_system == kPrefixedClearKeyKeySystem)
343 return kClearKeyKeySystem; 317 return kClearKeyKeySystem;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 } 351 }
378 352
379 bool CanUseAesDecryptor(const std::string& concrete_key_system) { 353 bool CanUseAesDecryptor(const std::string& concrete_key_system) {
380 return KeySystems::GetInstance().UseAesDecryptor(concrete_key_system); 354 return KeySystems::GetInstance().UseAesDecryptor(concrete_key_system);
381 } 355 }
382 356
383 #if defined(ENABLE_PEPPER_CDMS) 357 #if defined(ENABLE_PEPPER_CDMS)
384 std::string GetPepperType(const std::string& concrete_key_system) { 358 std::string GetPepperType(const std::string& concrete_key_system) {
385 return KeySystems::GetInstance().GetPepperType(concrete_key_system); 359 return KeySystems::GetInstance().GetPepperType(concrete_key_system);
386 } 360 }
387 #elif defined(OS_ANDROID)
388 std::vector<uint8> GetUUID(const std::string& concrete_key_system) {
389 return KeySystems::GetInstance().GetUUID(concrete_key_system);
390 }
391 #endif 361 #endif
392 362
393 } // namespace content 363 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698