Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / renderer / media / crypto / encrypted_media_player_support_impl.cc
index 42f86b6..cf24056 100644 (file)
@@ -13,8 +13,8 @@
 #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"
@@ -26,6 +26,8 @@
 
 #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;
@@ -40,7 +42,6 @@ namespace content {
 #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.";
 
@@ -117,11 +118,11 @@ static void ReportMediaKeyExceptionToUMA(const std::string& method,
 // 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>
@@ -159,7 +160,6 @@ EncryptedMediaPlayerSupportImpl::GenerateKeyRequest(
   return e;
 }
 
-
 WebMediaPlayer::MediaKeyException
 EncryptedMediaPlayerSupportImpl::GenerateKeyRequestInternal(
     blink::WebLocalFrame* frame,
@@ -173,21 +173,24 @@ EncryptedMediaPlayerSupportImpl::GenerateKeyRequestInternal(
   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_)
@@ -387,7 +390,7 @@ void EncryptedMediaPlayerSupportImpl::OnNeedKey(const std::string& type,
     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());
 }