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

Side by Side Diff: webkit/media/crypto/key_systems.cc

Issue 10704241: Add PpapiDecryptor which wraps a CDM plugin. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add webkit bug in comments. Created 8 years, 5 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
« no previous file with comments | « webkit/media/crypto/key_systems.h ('k') | webkit/media/crypto/ppapi_decryptor.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "webkit/media/crypto/key_systems.h" 5 #include "webkit/media/crypto/key_systems.h"
6 6
7 #include "media/base/decryptor.h" 7 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h "
8 #include "media/crypto/aes_decryptor.h"
9 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" 8 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
10 9
11 namespace webkit_media { 10 namespace webkit_media {
12 11
13 namespace { 12 static const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey";
14 13 static const char kExternalClearKeyKeySystem[] =
15 const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey"; 14 "org.chromium.externalclearkey";
16 15
17 struct MediaFormatAndKeySystem { 16 struct MediaFormatAndKeySystem {
18 const char* mime_type; 17 const char* mime_type;
19 const char* codec; 18 const char* codec;
20 const char* key_system; 19 const char* key_system;
21 }; 20 };
22 21
22 struct KeySystemPluginTypePair {
23 const char* key_system;
24 const char* plugin_type;
25 };
26
23 static const MediaFormatAndKeySystem 27 static const MediaFormatAndKeySystem
24 supported_format_key_system_combinations[] = { 28 supported_format_key_system_combinations[] = {
25 // TODO(ddorwin): Reconsider based on how usage of this class evolves. 29 // TODO(ddorwin): Reconsider based on how usage of this class evolves.
26 // For now, this class is stateless, so we do not have the opportunity to 30 // For now, this class is stateless, so we do not have the opportunity to
27 // build a list using ParseCodecString() like 31 // build a list using ParseCodecString() like
28 // net::MimeUtil::InitializeMimeTypeMaps(). Therfore, the following line must 32 // net::MimeUtil::InitializeMimeTypeMaps(). Therefore, the following line must
29 // be separate entries. 33 // be separate entries.
30 // { "video/webm", "vorbis,vp8,vp8.0", kClearKeyKeySystem }, 34 // { "video/webm", "vorbis,vp8,vp8.0", kClearKeyKeySystem },
31 { "video/webm", "vorbis", kClearKeyKeySystem }, 35 { "video/webm", "vorbis", kClearKeyKeySystem },
32 { "video/webm", "vp8", kClearKeyKeySystem }, 36 { "video/webm", "vp8", kClearKeyKeySystem },
33 { "video/webm", "vp8.0", kClearKeyKeySystem }, 37 { "video/webm", "vp8.0", kClearKeyKeySystem },
34 { "audio/webm", "vorbis", kClearKeyKeySystem }, 38 { "audio/webm", "vorbis", kClearKeyKeySystem },
35 { "video/webm", "", kClearKeyKeySystem }, 39 { "video/webm", "", kClearKeyKeySystem },
36 { "audio/webm", "", kClearKeyKeySystem } 40 { "audio/webm", "", kClearKeyKeySystem },
41 { "video/webm", "vorbis", kExternalClearKeyKeySystem },
42 { "video/webm", "vp8", kExternalClearKeyKeySystem },
43 { "video/webm", "vp8.0", kExternalClearKeyKeySystem },
44 { "audio/webm", "vorbis", kExternalClearKeyKeySystem },
45 { "video/webm", "", kExternalClearKeyKeySystem },
46 { "audio/webm", "", kExternalClearKeyKeySystem }
37 }; 47 };
38 48
39 bool IsSupportedKeySystemWithContainerAndCodec(const std::string& mime_type, 49 static const KeySystemPluginTypePair key_system_to_plugin_type_mapping[] = {
40 const std::string& codec, 50 // TODO(xhwang): Update this with the real plugin name.
41 const std::string& key_system) { 51 { kExternalClearKeyKeySystem, "application/x-ppapi-example" }
52 };
53
54 static bool IsSupportedKeySystemWithContainerAndCodec(
55 const std::string& mime_type,
56 const std::string& codec,
57 const std::string& key_system) {
42 for (size_t i = 0; 58 for (size_t i = 0;
43 i < arraysize(supported_format_key_system_combinations); 59 i < arraysize(supported_format_key_system_combinations);
44 ++i) { 60 ++i) {
45 const MediaFormatAndKeySystem& combination = 61 const MediaFormatAndKeySystem& combination =
46 supported_format_key_system_combinations[i]; 62 supported_format_key_system_combinations[i];
47 if (combination.mime_type == mime_type && 63 if (combination.mime_type == mime_type &&
48 combination.codec == codec && 64 combination.codec == codec &&
49 combination.key_system == key_system) 65 combination.key_system == key_system)
50 return true; 66 return true;
51 } 67 }
52 68
53 return false; 69 return false;
54 } 70 }
55 71
56 } // namespace
57
58 bool IsSupportedKeySystem(const WebKit::WebString& key_system) { 72 bool IsSupportedKeySystem(const WebKit::WebString& key_system) {
59 if (key_system == kClearKeyKeySystem) 73 return CanUseAesDecryptor(key_system.utf8().data()) ||
60 return true; 74 !GetPluginType(key_system.utf8().data()).empty();
61 return false;
62 } 75 }
63 76
64 bool IsSupportedKeySystemWithMediaMimeType( 77 bool IsSupportedKeySystemWithMediaMimeType(
65 const std::string& mime_type, 78 const std::string& mime_type,
66 const std::vector<std::string>& codecs, 79 const std::vector<std::string>& codecs,
67 const std::string& key_system) { 80 const std::string& key_system) {
68 if (codecs.empty()) 81 if (codecs.empty())
69 return IsSupportedKeySystemWithContainerAndCodec(mime_type, "", key_system); 82 return IsSupportedKeySystemWithContainerAndCodec(mime_type, "", key_system);
70 83
71 for (size_t i = 0; i < codecs.size(); ++i) { 84 for (size_t i = 0; i < codecs.size(); ++i) {
72 if (!IsSupportedKeySystemWithContainerAndCodec( 85 if (!IsSupportedKeySystemWithContainerAndCodec(
73 mime_type, codecs[i], key_system)) 86 mime_type, codecs[i], key_system))
74 return false; 87 return false;
75 } 88 }
76 89
77 return true; 90 return true;
78 } 91 }
79 92
80 scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system, 93 bool CanUseAesDecryptor(const std::string& key_system) {
81 media::DecryptorClient* client) { 94 return key_system == kClearKeyKeySystem;
82 if (key_system == kClearKeyKeySystem) 95 }
83 return scoped_ptr<media::Decryptor>(new media::AesDecryptor(client)); 96
84 return scoped_ptr<media::Decryptor>(); 97 std::string GetPluginType(const std::string& key_system) {
98 for (size_t i = 0; i < arraysize(key_system_to_plugin_type_mapping); ++i) {
99 if (key_system_to_plugin_type_mapping[i].key_system == key_system)
100 return key_system_to_plugin_type_mapping[i].plugin_type;
101 }
102
103 return std::string();
85 } 104 }
86 105
87 } // namespace webkit_media 106 } // namespace webkit_media
OLDNEW
« no previous file with comments | « webkit/media/crypto/key_systems.h ('k') | webkit/media/crypto/ppapi_decryptor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698