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

Unified Diff: content/renderer/media/android/webmediaplayer_android.cc

Issue 193523002: Encrypted Media: Implement IPC based SetCdm(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Manage cdm_id_ in CdmSessionAdapter Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/android/webmediaplayer_android.cc
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc
index b59ddbba967ba7131e63012ca407f452db4fa71a..d8f9503d723fbbf69545db2eb1f071762853bf68 100644
--- a/content/renderer/media/android/webmediaplayer_android.cc
+++ b/content/renderer/media/android/webmediaplayer_android.cc
@@ -18,10 +18,10 @@
#include "cc/layers/video_layer.h"
#include "content/public/common/content_client.h"
#include "content/public/renderer/render_frame.h"
-#include "content/renderer/media/android/proxy_media_keys.h"
#include "content/renderer/media/android/renderer_demuxer_android.h"
#include "content/renderer/media/android/renderer_media_player_manager.h"
#include "content/renderer/media/crypto/key_systems.h"
+#include "content/renderer/media/webcontentdecryptionmodule_impl.h"
#include "content/renderer/media/webmediaplayer_delegate.h"
#include "content/renderer/media/webmediaplayer_util.h"
#include "content/renderer/render_frame_impl.h"
@@ -31,6 +31,8 @@
#include "gpu/command_buffer/common/mailbox_holder.h"
#include "media/base/android/media_player_android.h"
#include "media/base/bind_to_current_loop.h"
+// TODO(xhwang): Remove when we remove prefixed EME implementation.
+#include "media/base/media_keys.h"
#include "media/base/media_switches.h"
#include "media/base/video_frame.h"
#include "net/base/mime_util.h"
@@ -106,6 +108,7 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
current_time_(0),
is_remote_(false),
media_log_(media_log),
+ web_cdm_(NULL),
weak_factory_(this) {
DCHECK(manager_);
@@ -1247,8 +1250,6 @@ WebMediaPlayerAndroid::GenerateKeyRequestInternal(
frame_,
#else
manager_,
- player_id_, // TODO(xhwang): Use cdm_id when MediaKeys are
- // separated from WebMediaPlayer.
#endif // defined(ENABLE_PEPPER_CDMS)
base::Bind(&WebMediaPlayerAndroid::OnKeyAdded,
weak_factory_.GetWeakPtr()),
@@ -1263,11 +1264,12 @@ WebMediaPlayerAndroid::GenerateKeyRequestInternal(
return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported;
}
- if (proxy_decryptor_ && !decryptor_ready_cb_.is_null()) {
+ if (!decryptor_ready_cb_.is_null()) {
base::ResetAndReturn(&decryptor_ready_cb_)
.Run(proxy_decryptor_->GetDecryptor());
}
+ manager_->SetCdm(player_id_, proxy_decryptor_->GetCdmId());
current_key_system_ = key_system;
} else if (key_system != current_key_system_) {
return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState;
@@ -1367,6 +1369,22 @@ WebMediaPlayerAndroid::CancelKeyRequestInternal(const std::string& key_system,
return WebMediaPlayer::MediaKeyExceptionNoError;
}
+void WebMediaPlayerAndroid::setContentDecryptionModule(
+ blink::WebContentDecryptionModule* cdm) {
+ // TODO(xhwang): Support setMediaKeys(0) if necessary: http://crbug.com/330324
+ if (!cdm)
+ return;
+
+ web_cdm_ = ToWebContentDecryptionModuleImpl(cdm);
+ if (!web_cdm_)
+ return;
+
+ if (!decryptor_ready_cb_.is_null())
+ base::ResetAndReturn(&decryptor_ready_cb_).Run(web_cdm_->GetDecryptor());
+
+ manager_->SetCdm(player_id_, web_cdm_->GetCdmId());
+}
+
void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) {
EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1);
@@ -1455,13 +1473,18 @@ void WebMediaPlayerAndroid::SetDecryptorReadyCB(
// detail.
DCHECK(decryptor_ready_cb_.is_null());
+ // Mixed use of prefixed and unprefixed EME APIs is disallowed by Blink.
+ DCHECK(!proxy_decryptor_ || !web_cdm_);
+
if (proxy_decryptor_) {
decryptor_ready_cb.Run(proxy_decryptor_->GetDecryptor());
return;
}
- // TODO(xhwang): Also notify |web_cdm_| when we implement
- // setContentDecryptionModule(). See: http://crbug.com/224786
+ if (web_cdm_) {
+ decryptor_ready_cb.Run(web_cdm_->GetDecryptor());
+ return;
+ }
decryptor_ready_cb_ = decryptor_ready_cb;
}

Powered by Google App Engine
This is Rietveld 408576698