summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-27 12:26:05 +0000
committerddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-27 12:26:05 +0000
commitc94bf3dc23af5f3c73134b4295a30f128073040e (patch)
tree03a96fb17e7e717310db8fd58e5a7d0da16a85ad /webkit
parent794495d77c7fb2ebd19e1c07fdd14d42b7e55640 (diff)
downloadchromium_src-c94bf3dc23af5f3c73134b4295a30f128073040e.zip
chromium_src-c94bf3dc23af5f3c73134b4295a30f128073040e.tar.gz
chromium_src-c94bf3dc23af5f3c73134b4295a30f128073040e.tar.bz2
Move ContentDecryptionModuleFactory to its own files.
BUG=250048 Review URL: https://chromiumcodereview.appspot.com/17769007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@208894 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/renderer/media/crypto/content_decryption_module_factory.cc121
-rw-r--r--webkit/renderer/media/crypto/content_decryption_module_factory.h49
-rw-r--r--webkit/renderer/media/crypto/proxy_decryptor.cc111
-rw-r--r--webkit/renderer/media/crypto/proxy_decryptor.h36
-rw-r--r--webkit/renderer/media/webkit_media.gypi2
5 files changed, 177 insertions, 142 deletions
diff --git a/webkit/renderer/media/crypto/content_decryption_module_factory.cc b/webkit/renderer/media/crypto/content_decryption_module_factory.cc
new file mode 100644
index 0000000..a599c8a
--- /dev/null
+++ b/webkit/renderer/media/crypto/content_decryption_module_factory.cc
@@ -0,0 +1,121 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/media/crypto/content_decryption_module_factory.h"
+
+#include "base/logging.h"
+#include "media/crypto/aes_decryptor.h"
+#include "webkit/renderer/media/crypto/key_systems.h"
+
+#if defined(ENABLE_PEPPER_CDMS)
+#include "third_party/WebKit/public/platform/WebString.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebMediaPlayerClient.h"
+#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
+#include "webkit/plugins/ppapi/ppapi_webplugin_impl.h"
+#include "webkit/renderer/media/crypto/ppapi_decryptor.h"
+#endif // defined(ENABLE_PEPPER_CDMS)
+
+namespace webkit_media {
+
+#if defined(ENABLE_PEPPER_CDMS)
+// Returns the PluginInstance associated with the Helper Plugin.
+// If a non-NULL pointer is returned, the caller must call closeHelperPlugin()
+// when the Helper Plugin is no longer needed.
+static scoped_refptr<webkit::ppapi::PluginInstance> CreateHelperPlugin(
+ const std::string& plugin_type,
+ WebKit::WebMediaPlayerClient* web_media_player_client,
+ WebKit::WebFrame* web_frame) {
+ DCHECK(web_media_player_client);
+ DCHECK(web_frame);
+
+ WebKit::WebPlugin* web_plugin = web_media_player_client->createHelperPlugin(
+ WebKit::WebString::fromUTF8(plugin_type), web_frame);
+ if (!web_plugin)
+ return NULL;
+
+ DCHECK(!web_plugin->isPlaceholder()); // Prevented by Blink.
+ // Only Pepper plugins are supported, so it must be a ppapi object.
+ webkit::ppapi::WebPluginImpl* ppapi_plugin =
+ static_cast<webkit::ppapi::WebPluginImpl*>(web_plugin);
+ return ppapi_plugin->instance();
+}
+
+static scoped_ptr<media::MediaKeys> CreatePpapiDecryptor(
+ const std::string& key_system,
+ const media::KeyAddedCB& key_added_cb,
+ const media::KeyErrorCB& key_error_cb,
+ const media::KeyMessageCB& key_message_cb,
+ const base::Closure& destroy_plugin_cb,
+ WebKit::WebMediaPlayerClient* web_media_player_client,
+ WebKit::WebFrame* web_frame) {
+ DCHECK(web_media_player_client);
+ DCHECK(web_frame);
+
+ std::string plugin_type = GetPepperType(key_system);
+ DCHECK(!plugin_type.empty());
+ const scoped_refptr<webkit::ppapi::PluginInstance>& plugin_instance =
+ CreateHelperPlugin(plugin_type, web_media_player_client, web_frame);
+ if (!plugin_instance.get()) {
+ DLOG(ERROR) << "ProxyDecryptor: plugin instance creation failed.";
+ return scoped_ptr<media::MediaKeys>();
+ }
+
+ scoped_ptr<PpapiDecryptor> decryptor =
+ PpapiDecryptor::Create(key_system,
+ plugin_instance,
+ key_added_cb,
+ key_error_cb,
+ key_message_cb,
+ destroy_plugin_cb);
+
+ if (!decryptor) {
+ ContentDecryptionModuleFactory::DestroyHelperPlugin(
+ web_media_player_client);
+ }
+ // Else the new object will call destroy_plugin_cb to destroy Helper Plugin.
+
+ return scoped_ptr<media::MediaKeys>(decryptor.Pass());
+}
+
+void ContentDecryptionModuleFactory::DestroyHelperPlugin(
+ WebKit::WebMediaPlayerClient* web_media_player_client) {
+ web_media_player_client->closeHelperPlugin();
+}
+#endif // defined(ENABLE_PEPPER_CDMS)
+
+scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
+ const std::string& key_system,
+#if defined(ENABLE_PEPPER_CDMS)
+ WebKit::WebMediaPlayerClient* web_media_player_client,
+ WebKit::WebFrame* web_frame,
+ const base::Closure& destroy_plugin_cb,
+#elif defined(OS_ANDROID)
+ scoped_ptr<media::MediaKeys> media_keys,
+#endif // defined(ENABLE_PEPPER_CDMS)
+ const media::KeyAddedCB& key_added_cb,
+ const media::KeyErrorCB& key_error_cb,
+ const media::KeyMessageCB& key_message_cb) {
+ if (CanUseAesDecryptor(key_system)) {
+ return scoped_ptr<media::MediaKeys>(
+ new media::AesDecryptor(key_added_cb, key_error_cb, key_message_cb));
+ }
+
+#if defined(ENABLE_PEPPER_CDMS)
+ // TODO(ddorwin): Remove when the WD API implementation supports loading
+ // Pepper-based CDMs: http://crbug.com/250049
+ if (!web_media_player_client)
+ return scoped_ptr<media::MediaKeys>();
+
+ return CreatePpapiDecryptor(
+ key_system, key_added_cb, key_error_cb, key_message_cb,
+ destroy_plugin_cb, web_media_player_client, web_frame);
+#elif defined(OS_ANDROID)
+ return media_keys.Pass();
+#else
+ return scoped_ptr<media::MediaKeys>();
+#endif // defined(ENABLE_PEPPER_CDMS)
+}
+
+} // namespace webkit_media
diff --git a/webkit/renderer/media/crypto/content_decryption_module_factory.h b/webkit/renderer/media/crypto/content_decryption_module_factory.h
new file mode 100644
index 0000000..7903030
--- /dev/null
+++ b/webkit/renderer/media/crypto/content_decryption_module_factory.h
@@ -0,0 +1,49 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_MEDIA_CRYPTO_CONTENT_DECRYPTION_MODULE_FACTORY_H_
+#define WEBKIT_RENDERER_MEDIA_CRYPTO_CONTENT_DECRYPTION_MODULE_FACTORY_H_
+
+#include <string>
+
+#include "base/memory/scoped_ptr.h"
+#include "media/base/media_keys.h"
+
+#if defined(ENABLE_PEPPER_CDMS)
+namespace WebKit {
+class WebFrame;
+class WebMediaPlayerClient;
+}
+#endif // defined(ENABLE_PEPPER_CDMS)
+
+namespace webkit_media {
+
+class ContentDecryptionModuleFactory {
+ public:
+ static scoped_ptr<media::MediaKeys> Create(
+ const std::string& key_system,
+#if defined(ENABLE_PEPPER_CDMS)
+ // TODO(ddorwin): We need different pointers for the WD API.
+ WebKit::WebMediaPlayerClient* web_media_player_client,
+ WebKit::WebFrame* web_frame,
+ const base::Closure& destroy_plugin_cb,
+#elif defined(OS_ANDROID)
+ // TODO(scherkus): Revert the ProxyDecryptor changes from r208040 so that
+ // this class always creates the MediaKeys.
+ // A ProxyMediaKeys to be used if |key_system| is not Clear Key.
+ scoped_ptr<media::MediaKeys> media_keys,
+#endif // defined(ENABLE_PEPPER_CDMS)
+ const media::KeyAddedCB& key_added_cb,
+ const media::KeyErrorCB& key_error_cb,
+ const media::KeyMessageCB& key_message_cb);
+
+#if defined(ENABLE_PEPPER_CDMS)
+ static void DestroyHelperPlugin(
+ WebKit::WebMediaPlayerClient* web_media_player_client);
+#endif // defined(ENABLE_PEPPER_CDMS)
+};
+
+} // namespace webkit_media
+
+#endif // WEBKIT_RENDERER_MEDIA_CRYPTO_CONTENT_DECRYPTION_MODULE_FACTORY_H_
diff --git a/webkit/renderer/media/crypto/proxy_decryptor.cc b/webkit/renderer/media/crypto/proxy_decryptor.cc
index 9bcc78b..90001c4 100644
--- a/webkit/renderer/media/crypto/proxy_decryptor.cc
+++ b/webkit/renderer/media/crypto/proxy_decryptor.cc
@@ -7,52 +7,16 @@
#include "base/bind.h"
#include "base/callback_helpers.h"
#include "base/logging.h"
-#include "media/crypto/aes_decryptor.h"
+#include "webkit/renderer/media/crypto/content_decryption_module_factory.h"
#include "webkit/renderer/media/crypto/key_systems.h"
-#if defined(ENABLE_PEPPER_CDMS)
-#include "third_party/WebKit/public/platform/WebString.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "third_party/WebKit/public/web/WebMediaPlayerClient.h"
-#include "webkit/renderer/media/crypto/ppapi_decryptor.h"
-#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
-#include "webkit/plugins/ppapi/ppapi_webplugin_impl.h"
-#endif // defined(ENABLE_PEPPER_CDMS)
-
namespace webkit_media {
#if defined(ENABLE_PEPPER_CDMS)
-// Returns the PluginInstance associated with the Helper Plugin.
-// If a non-NULL pointer is returned, the caller must call closeHelperPlugin()
-// when the Helper Plugin is no longer needed.
-static scoped_refptr<webkit::ppapi::PluginInstance> CreateHelperPlugin(
- const std::string& plugin_type,
- WebKit::WebMediaPlayerClient* web_media_player_client,
- WebKit::WebFrame* web_frame) {
- DCHECK(web_media_player_client);
- DCHECK(web_frame);
-
- WebKit::WebPlugin* web_plugin = web_media_player_client->createHelperPlugin(
- WebKit::WebString::fromUTF8(plugin_type), web_frame);
- if (!web_plugin)
- return NULL;
-
- DCHECK(!web_plugin->isPlaceholder()); // Prevented by Blink.
- // Only Pepper plugins are supported, so it must be a ppapi object.
- webkit::ppapi::WebPluginImpl* ppapi_plugin =
- static_cast<webkit::ppapi::WebPluginImpl*>(web_plugin);
- return ppapi_plugin->instance();
-}
-
-void DestroyHelperPluginForClient(
- WebKit::WebMediaPlayerClient* web_media_player_client) {
- web_media_player_client->closeHelperPlugin();
-}
-
void ProxyDecryptor::DestroyHelperPlugin() {
- DestroyHelperPluginForClient(web_media_player_client_);
+ ContentDecryptionModuleFactory::DestroyHelperPlugin(
+ web_media_player_client_);
}
-
#endif // defined(ENABLE_PEPPER_CDMS)
ProxyDecryptor::ProxyDecryptor(
@@ -153,42 +117,6 @@ void ProxyDecryptor::CancelKeyRequest(const std::string& session_id) {
media_keys_->CancelKeyRequest(session_id);
}
-#if defined(ENABLE_PEPPER_CDMS)
-scoped_ptr<media::MediaKeys>
-ContentDecryptionModuleFactory::CreatePpapiDecryptor(
- const std::string& key_system,
- const media::KeyAddedCB& key_added_cb,
- const media::KeyErrorCB& key_error_cb,
- const media::KeyMessageCB& key_message_cb,
- const base::Closure& destroy_plugin_cb,
- WebKit::WebMediaPlayerClient* web_media_player_client,
- WebKit::WebFrame* web_frame) {
- DCHECK(web_media_player_client);
- DCHECK(web_frame);
-
- std::string plugin_type = GetPepperType(key_system);
- DCHECK(!plugin_type.empty());
- const scoped_refptr<webkit::ppapi::PluginInstance>& plugin_instance =
- CreateHelperPlugin(plugin_type, web_media_player_client, web_frame);
- if (!plugin_instance.get()) {
- DLOG(ERROR) << "ProxyDecryptor: plugin instance creation failed.";
- return scoped_ptr<media::MediaKeys>();
- }
-
- scoped_ptr<webkit_media::PpapiDecryptor> decryptor = PpapiDecryptor::Create(
- key_system,
- plugin_instance,
- key_added_cb, key_error_cb, key_message_cb,
- destroy_plugin_cb);
-
- if (!decryptor)
- DestroyHelperPluginForClient(web_media_player_client);
- // Else the new object will call destroy_plugin_cb to destroy Helper Plugin.
-
- return scoped_ptr<media::MediaKeys>(decryptor.Pass());
-}
-#endif // defined(ENABLE_PEPPER_CDMS)
-
scoped_ptr<media::MediaKeys> ProxyDecryptor::CreateMediaKeys(
const std::string& key_system) {
return ContentDecryptionModuleFactory::Create(
@@ -206,39 +134,6 @@ scoped_ptr<media::MediaKeys> ProxyDecryptor::CreateMediaKeys(
base::Bind(&ProxyDecryptor::KeyMessage, weak_ptr_factory_.GetWeakPtr()));
}
-scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
- const std::string& key_system,
-#if defined(ENABLE_PEPPER_CDMS)
- WebKit::WebMediaPlayerClient* web_media_player_client,
- WebKit::WebFrame* web_frame,
- const base::Closure& destroy_plugin_cb,
-#elif defined(OS_ANDROID)
- scoped_ptr<media::MediaKeys> media_keys,
-#endif // defined(ENABLE_PEPPER_CDMS)
- const media::KeyAddedCB& key_added_cb,
- const media::KeyErrorCB& key_error_cb,
- const media::KeyMessageCB& key_message_cb) {
- if (CanUseAesDecryptor(key_system)) {
- return scoped_ptr<media::MediaKeys>(
- new media::AesDecryptor(key_added_cb, key_error_cb, key_message_cb));
- }
-
-#if defined(ENABLE_PEPPER_CDMS)
- // TODO(ddorwin): Remove when the WD API implementation supports loading
- // Pepper-based CDMs: http://crbug.com/250049
- if (!web_media_player_client)
- return scoped_ptr<media::MediaKeys>();
-
- return CreatePpapiDecryptor(
- key_system, key_added_cb, key_error_cb, key_message_cb,
- destroy_plugin_cb, web_media_player_client, web_frame);
-#elif defined(OS_ANDROID)
- return media_keys.Pass();
-#else
- return scoped_ptr<media::MediaKeys>();
-#endif // defined(ENABLE_PEPPER_CDMS)
-}
-
void ProxyDecryptor::KeyAdded(const std::string& session_id) {
key_added_cb_.Run(session_id);
}
diff --git a/webkit/renderer/media/crypto/proxy_decryptor.h b/webkit/renderer/media/crypto/proxy_decryptor.h
index b9980d9..94dd99f 100644
--- a/webkit/renderer/media/crypto/proxy_decryptor.h
+++ b/webkit/renderer/media/crypto/proxy_decryptor.h
@@ -14,46 +14,14 @@
#include "media/base/media_keys.h"
namespace WebKit {
+#if defined(ENABLE_PEPPER_CDMS)
class WebFrame;
class WebMediaPlayerClient;
+#endif // defined(ENABLE_PEPPER_CDMS)
}
namespace webkit_media {
-// TODO(ddorwin): Move to its own file.
-class ContentDecryptionModuleFactory {
- public:
- static scoped_ptr<media::MediaKeys> Create(
- const std::string& key_system,
-#if defined(ENABLE_PEPPER_CDMS)
- // TODO(ddorwin): We need different pointers for the WD API.
- WebKit::WebMediaPlayerClient* web_media_player_client,
- WebKit::WebFrame* web_frame,
- const base::Closure& destroy_plugin_cb,
-#elif defined(OS_ANDROID)
- // TODO(scherkus): Revert the ProxyDecryptor changes from r208040 so that
- // this class always creates the MediaKeys.
- // A ProxyMediaKeys to be used if |key_system| is not Clear Key.
- scoped_ptr<media::MediaKeys> media_keys,
-#endif // defined(ENABLE_PEPPER_CDMS)
- const media::KeyAddedCB& key_added_cb,
- const media::KeyErrorCB& key_error_cb,
- const media::KeyMessageCB& key_message_cb);
-
- private:
-#if defined(ENABLE_PEPPER_CDMS)
- static scoped_ptr<media::MediaKeys> CreatePpapiDecryptor(
- const std::string& key_system,
- const media::KeyAddedCB& key_added_cb,
- const media::KeyErrorCB& key_error_cb,
- const media::KeyMessageCB& key_message_cb,
- const base::Closure& destroy_plugin_cb,
- // TODO(ddorwin): We need different pointers for the WD API.
- WebKit::WebMediaPlayerClient* web_media_player_client,
- WebKit::WebFrame* web_frame);
-#endif // defined(ENABLE_PEPPER_CDMS)
-};
-
// ProxyDecryptor is for EME v0.1b only. It should not be used for the WD API.
// A decryptor proxy that creates a real decryptor object on demand and
// forwards decryptor calls to it.
diff --git a/webkit/renderer/media/webkit_media.gypi b/webkit/renderer/media/webkit_media.gypi
index ecd0bf3..2873d69 100644
--- a/webkit/renderer/media/webkit_media.gypi
+++ b/webkit/renderer/media/webkit_media.gypi
@@ -48,6 +48,8 @@
'buffered_resource_loader.h',
'cache_util.cc',
'cache_util.h',
+ 'crypto/content_decryption_module_factory.cc',
+ 'crypto/content_decryption_module_factory.h',
'crypto/key_systems.cc',
'crypto/key_systems.h',
'crypto/key_systems_info.cc',