Chromium Code Reviews| 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()); |
|
ddorwin
2014/03/25 23:03:59
As mentioned before, It seems odd that we make thi
xhwang
2014/03/26 06:02:04
As mentioned earlier, if we check GetCdmId() befor
ddorwin
2014/03/26 19:25:59
Does this mean we'd move kInvalidCdmId up the stac
xhwang
2014/03/27 19:07:42
Added TODO in RMPM.
|
| 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) { |
|
ddorwin
2014/03/25 23:03:59
Why was DCHECK(main_loop_->BelongsToCurrentThread(
xhwang
2014/03/26 06:02:04
Because main_loop_ doesn't exist any more after re
|
| + // 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()); |
|
ddorwin
2014/03/25 23:03:59
Ditto from l1272, though we don't have an abstract
xhwang
2014/03/26 06:02:04
For Clear Key, GetCdmId is kInvalidCdmId and hence
|
| +} |
| + |
| 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; |
| } |