Index: webkit/media/crypto/key_systems.cc |
diff --git a/webkit/media/crypto/key_systems.cc b/webkit/media/crypto/key_systems.cc |
index b4aeb90b56ce84bb11f981889a09abd04ea78a84..2e20b643068159b92d0c21428be745abb274d477 100644 |
--- a/webkit/media/crypto/key_systems.cc |
+++ b/webkit/media/crypto/key_systems.cc |
@@ -7,12 +7,14 @@ |
#include "media/base/decryptor.h" |
#include "media/crypto/aes_decryptor.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" |
+#include "webkit/media/crypto/ppapi_decryptor.h" |
namespace webkit_media { |
namespace { |
const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey"; |
+const char kExternalClearKeyKeySystem[] = "webkit-org.w3.external-clearkey"; |
ddorwin
2012/07/17 21:31:28
I haven't thought this through entirely, but it se
xhwang
2012/07/18 19:43:17
Done.
|
struct MediaFormatAndKeySystem { |
const char* mime_type; |
@@ -20,6 +22,11 @@ struct MediaFormatAndKeySystem { |
const char* key_system; |
}; |
+struct KeySystemPluginNamePair { |
ddorwin
2012/07/17 21:31:28
MimeType here and below.
xhwang
2012/07/18 19:43:17
Use PluginType as discussed.
|
+ const char* key_system; |
+ const char* plugin_name; |
+}; |
+ |
static const MediaFormatAndKeySystem |
supported_format_key_system_combinations[] = { |
// TODO(ddorwin): Reconsider based on how usage of this class evolves. |
@@ -36,6 +43,11 @@ supported_format_key_system_combinations[] = { |
{ "audio/webm", "", kClearKeyKeySystem } |
ddorwin
2012/07/17 21:31:28
Need to update these tables too.
xhwang
2012/07/18 19:43:17
Done.
|
}; |
+static const KeySystemPluginNamePair key_system_to_plugin_name_mapping[] = { |
+ // TODO(xhwang): Update this with the real plugin name. |
+ { kExternalClearKeyKeySystem, "application/x-ppapi-example" } |
ddorwin
2012/07/17 21:31:28
FYI, the same TODO as in the above table would app
|
+}; |
+ |
bool IsSupportedKeySystemWithContainerAndCodec(const std::string& mime_type, |
const std::string& codec, |
const std::string& key_system) { |
@@ -77,10 +89,24 @@ bool IsSupportedKeySystemWithMediaMimeType( |
return true; |
} |
-scoped_ptr<media::Decryptor> CreateDecryptor(const std::string& key_system, |
- media::DecryptorClient* client) { |
+const char* GetPluginName(const std::string& key_system) { |
+ for (size_t i = 0; i < arraysize(key_system_to_plugin_name_mapping); ++i) { |
+ if (key_system_to_plugin_name_mapping[i].key_system == key_system) |
+ return key_system_to_plugin_name_mapping[i].plugin_name; |
+ } |
+ |
+ return NULL; |
+} |
+ |
+scoped_ptr<media::Decryptor> CreateDecryptor( |
+ const std::string& key_system, |
+ media::DecryptorClient* client, |
+ const CreatePluginCB& create_plugin_cb) { |
ddorwin
2012/07/17 21:31:28
It's unexpected that this cb isn't always called.
xhwang
2012/07/18 19:43:17
Removed CreatePluginCB and just passing the client
|
if (key_system == kClearKeyKeySystem) |
return scoped_ptr<media::Decryptor>(new media::AesDecryptor(client)); |
+ else if (key_system == kExternalClearKeyKeySystem) |
ddorwin
2012/07/17 21:31:28
I think we should GetPlugingMimeType() and if not
xhwang
2012/07/18 19:43:17
Moved this check and related logic into PpapiDecry
|
+ return scoped_ptr<media::Decryptor>( |
+ new webkit_media::PpapiDecryptor(client, create_plugin_cb)); |
return scoped_ptr<media::Decryptor>(); |
} |