#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "content/renderer/media/crypto/key_systems.h"
+#include "content/renderer/media/crypto/render_cdm_factory.h"
#include "content/renderer/media/webcontentdecryptionmodule_impl.h"
-#include "content/renderer/pepper/pepper_webplugin_impl.h"
#include "media/base/bind_to_current_loop.h"
#include "media/blink/encrypted_media_player_support.h"
#include "third_party/WebKit/public/platform/WebContentDecryptionModule.h"
#if defined(ENABLE_PEPPER_CDMS)
#include "content/renderer/media/crypto/pepper_cdm_wrapper_impl.h"
+#elif defined(ENABLE_BROWSER_CDMS)
+#error Browser side CDM in WMPI for prefixed EME API not supported yet.
#endif
using blink::WebMediaPlayer;
#define BIND_TO_RENDER_LOOP1(function, arg1) \
(media::BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1)))
-
// Prefix for histograms related to Encrypted Media Extensions.
static const char* kMediaEme = "Media.EME.";
// so we keep it as simple as possible without breaking major use cases.
static std::string GuessInitDataType(const unsigned char* init_data,
unsigned init_data_length) {
- // Most WebM files use KeyId of 16 bytes. MP4 init data are always >16 bytes.
+ // Most WebM files use KeyId of 16 bytes. CENC init data is always >16 bytes.
if (init_data_length == 16)
- return "video/webm";
+ return "webm";
- return "video/mp4";
+ return "cenc";
}
scoped_ptr<media::EncryptedMediaPlayerSupport>
return e;
}
-
WebMediaPlayer::MediaKeyException
EncryptedMediaPlayerSupportImpl::GenerateKeyRequestInternal(
blink::WebLocalFrame* frame,
if (current_key_system_.empty()) {
if (!proxy_decryptor_) {
proxy_decryptor_.reset(new ProxyDecryptor(
-#if defined(ENABLE_PEPPER_CDMS)
- // Create() must be called synchronously as |frame| may not be
- // valid afterwards.
- base::Bind(&PepperCdmWrapperImpl::Create, frame),
-#elif defined(ENABLE_BROWSER_CDMS)
-#error Browser side CDM in WMPI for prefixed EME API not supported yet.
-#endif
BIND_TO_RENDER_LOOP(&EncryptedMediaPlayerSupportImpl::OnKeyAdded),
BIND_TO_RENDER_LOOP(&EncryptedMediaPlayerSupportImpl::OnKeyError),
BIND_TO_RENDER_LOOP(&EncryptedMediaPlayerSupportImpl::OnKeyMessage)));
}
GURL security_origin(frame->document().securityOrigin().toString());
- if (!proxy_decryptor_->InitializeCDM(key_system, security_origin))
+
+#if defined(ENABLE_PEPPER_CDMS)
+ RenderCdmFactory cdm_factory(
+ base::Bind(&PepperCdmWrapperImpl::Create, frame));
+#else
+ RenderCdmFactory cdm_factory;
+#endif
+
+ if (!proxy_decryptor_->InitializeCDM(&cdm_factory, key_system,
+ security_origin)) {
return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported;
+ }
if (proxy_decryptor_ && !decryptor_ready_cb_.is_null()) {
base::ResetAndReturn(&decryptor_ready_cb_)
init_data_type_ = type;
const uint8* init_data_ptr = init_data.empty() ? NULL : &init_data[0];
- client_->keyNeeded(
+ client_->encrypted(
WebString::fromUTF8(type), init_data_ptr, init_data.size());
}