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

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

Issue 1712903002: Remove prefixed EME. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix isRenewalMessage() in browser tests. Created 4 years, 10 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 b7580e596b0fd9b9e6fb4d6ba047c6297500335b..45acf306db3c358275d2276eaf650de36d234831 100644
--- a/content/renderer/media/android/webmediaplayer_android.cc
+++ b/content/renderer/media/android/webmediaplayer_android.cc
@@ -26,8 +26,6 @@
#include "content/public/renderer/render_frame.h"
#include "content/renderer/media/android/renderer_demuxer_android.h"
#include "content/renderer/media/android/renderer_media_player_manager.h"
-#include "content/renderer/media/cdm/render_cdm_factory.h"
-#include "content/renderer/media/cdm/renderer_cdm_manager.h"
#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_thread_impl.h"
#include "content/renderer/render_view_impl.h"
@@ -180,7 +178,6 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
base::WeakPtr<media::WebMediaPlayerDelegate> delegate,
RendererMediaPlayerManager* player_manager,
- media::CdmFactory* cdm_factory,
scoped_refptr<StreamTextureFactory> factory,
int frame_id,
bool enable_texture_copy,
@@ -198,8 +195,6 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
seeking_(false),
did_loading_progress_(false),
player_manager_(player_manager),
- cdm_factory_(cdm_factory),
- media_permission_(params.media_permission()),
network_state_(WebMediaPlayer::NetworkStateEmpty),
ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
texture_id_(0),
@@ -219,7 +214,6 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
player_type_(MEDIA_PLAYER_TYPE_URL),
is_remote_(false),
media_log_(params.media_log()),
- init_data_type_(media::EmeInitDataType::UNKNOWN),
cdm_context_(nullptr),
allow_stored_credentials_(false),
is_local_resource_(false),
@@ -232,7 +226,6 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
volume_multiplier_(1.0),
weak_factory_(this) {
DCHECK(player_manager_);
- DCHECK(cdm_factory_);
DCHECK(main_thread_checker_.CalledOnValidThread());
stream_texture_factory_->AddObserver(this);
@@ -1439,237 +1432,6 @@ const gfx::RectF WebMediaPlayerAndroid::GetBoundaryRectangle() {
}
#endif
-// The following EME related code is copied from WebMediaPlayerImpl.
-// TODO(xhwang): Remove duplicate code between WebMediaPlayerAndroid and
-// WebMediaPlayerImpl.
-
-// Convert a WebString to ASCII, falling back on an empty string in the case
-// of a non-ASCII string.
-static std::string ToASCIIOrEmpty(const blink::WebString& string) {
- return base::IsStringASCII(string)
- ? base::UTF16ToASCII(base::StringPiece16(string))
- : std::string();
-}
-
-// Helper functions to report media EME related stats to UMA. They follow the
-// convention of more commonly used macros UMA_HISTOGRAM_ENUMERATION and
-// UMA_HISTOGRAM_COUNTS. The reason that we cannot use those macros directly is
-// that UMA_* macros require the names to be constant throughout the process'
-// lifetime.
-
-static void EmeUMAHistogramEnumeration(const std::string& key_system,
- const std::string& method,
- int sample,
- int boundary_value) {
- base::LinearHistogram::FactoryGet(
- kMediaEme + media::GetKeySystemNameForUMA(key_system) + "." + method,
- 1, boundary_value, boundary_value + 1,
- base::Histogram::kUmaTargetedHistogramFlag)->Add(sample);
-}
-
-static void EmeUMAHistogramCounts(const std::string& key_system,
- const std::string& method,
- int sample) {
- // Use the same parameters as UMA_HISTOGRAM_COUNTS.
- base::Histogram::FactoryGet(
- kMediaEme + media::GetKeySystemNameForUMA(key_system) + "." + method,
- 1, 1000000, 50, base::Histogram::kUmaTargetedHistogramFlag)->Add(sample);
-}
-
-// Helper enum for reporting generateKeyRequest/addKey histograms.
-enum MediaKeyException {
- kUnknownResultId,
- kSuccess,
- kKeySystemNotSupported,
- kInvalidPlayerState,
- kMaxMediaKeyException
-};
-
-static MediaKeyException MediaKeyExceptionForUMA(
- WebMediaPlayer::MediaKeyException e) {
- switch (e) {
- case WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported:
- return kKeySystemNotSupported;
- case WebMediaPlayer::MediaKeyExceptionInvalidPlayerState:
- return kInvalidPlayerState;
- case WebMediaPlayer::MediaKeyExceptionNoError:
- return kSuccess;
- default:
- return kUnknownResultId;
- }
-}
-
-// Helper for converting |key_system| name and exception |e| to a pair of enum
-// values from above, for reporting to UMA.
-static void ReportMediaKeyExceptionToUMA(const std::string& method,
- const std::string& key_system,
- WebMediaPlayer::MediaKeyException e) {
- MediaKeyException result_id = MediaKeyExceptionForUMA(e);
- DCHECK_NE(result_id, kUnknownResultId) << e;
- EmeUMAHistogramEnumeration(
- key_system, method, result_id, kMaxMediaKeyException);
-}
-
-bool WebMediaPlayerAndroid::IsKeySystemSupported(
- const std::string& key_system) {
- // On Android, EME only works with MSE.
- return player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE &&
- media::PrefixedIsSupportedConcreteKeySystem(key_system);
-}
-
-WebMediaPlayer::MediaKeyException WebMediaPlayerAndroid::generateKeyRequest(
- const WebString& key_system,
- const unsigned char* init_data,
- unsigned init_data_length) {
- DVLOG(1) << "generateKeyRequest: " << base::string16(key_system) << ": "
- << std::string(reinterpret_cast<const char*>(init_data),
- static_cast<size_t>(init_data_length));
-
- std::string ascii_key_system =
- media::GetUnprefixedKeySystemName(ToASCIIOrEmpty(key_system));
-
- WebMediaPlayer::MediaKeyException e =
- GenerateKeyRequestInternal(ascii_key_system, init_data, init_data_length);
- ReportMediaKeyExceptionToUMA("generateKeyRequest", ascii_key_system, e);
- return e;
-}
-
-// Guess the type of |init_data|. This is only used to handle some corner cases
-// so we keep it as simple as possible without breaking major use cases.
-static media::EmeInitDataType GuessInitDataType(const unsigned char* init_data,
- unsigned init_data_length) {
- // Most WebM files use KeyId of 16 bytes. CENC init data is always >16 bytes.
- if (init_data_length == 16)
- return media::EmeInitDataType::WEBM;
-
- return media::EmeInitDataType::CENC;
-}
-
-// TODO(xhwang): Report an error when there is encrypted stream but EME is
-// not enabled. Currently the player just doesn't start and waits for
-// ever.
-WebMediaPlayer::MediaKeyException
-WebMediaPlayerAndroid::GenerateKeyRequestInternal(
- const std::string& key_system,
- const unsigned char* init_data,
- unsigned init_data_length) {
- if (!IsKeySystemSupported(key_system))
- return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported;
-
- if (!proxy_decryptor_) {
- DCHECK(current_key_system_.empty());
- proxy_decryptor_.reset(new media::ProxyDecryptor(
- media_permission_,
- player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo(),
- base::Bind(&WebMediaPlayerAndroid::OnKeyAdded,
- weak_factory_.GetWeakPtr()),
- base::Bind(&WebMediaPlayerAndroid::OnKeyError,
- weak_factory_.GetWeakPtr()),
- base::Bind(&WebMediaPlayerAndroid::OnKeyMessage,
- weak_factory_.GetWeakPtr())));
-
- GURL security_origin(
- blink::WebStringToGURL(frame_->document().securityOrigin().toString()));
- proxy_decryptor_->CreateCdm(
- cdm_factory_, key_system, security_origin,
- base::Bind(&WebMediaPlayerAndroid::OnCdmContextReady,
- weak_factory_.GetWeakPtr()));
- current_key_system_ = key_system;
- }
-
- // We do not support run-time switching between key systems for now.
- DCHECK(!current_key_system_.empty());
- if (key_system != current_key_system_)
- return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState;
-
- media::EmeInitDataType init_data_type = init_data_type_;
- if (init_data_type == media::EmeInitDataType::UNKNOWN)
- init_data_type = GuessInitDataType(init_data, init_data_length);
-
- proxy_decryptor_->GenerateKeyRequest(init_data_type, init_data,
- init_data_length);
-
- return WebMediaPlayer::MediaKeyExceptionNoError;
-}
-
-WebMediaPlayer::MediaKeyException WebMediaPlayerAndroid::addKey(
- const WebString& key_system,
- const unsigned char* key,
- unsigned key_length,
- const unsigned char* init_data,
- unsigned init_data_length,
- const WebString& session_id) {
- DVLOG(1) << "addKey: " << base::string16(key_system) << ": "
- << std::string(reinterpret_cast<const char*>(key),
- static_cast<size_t>(key_length)) << ", "
- << std::string(reinterpret_cast<const char*>(init_data),
- static_cast<size_t>(init_data_length)) << " ["
- << base::string16(session_id) << "]";
-
- std::string ascii_key_system =
- media::GetUnprefixedKeySystemName(ToASCIIOrEmpty(key_system));
- std::string ascii_session_id = ToASCIIOrEmpty(session_id);
-
- WebMediaPlayer::MediaKeyException e = AddKeyInternal(ascii_key_system,
- key,
- key_length,
- init_data,
- init_data_length,
- ascii_session_id);
- ReportMediaKeyExceptionToUMA("addKey", ascii_key_system, e);
- return e;
-}
-
-WebMediaPlayer::MediaKeyException WebMediaPlayerAndroid::AddKeyInternal(
- const std::string& key_system,
- const unsigned char* key,
- unsigned key_length,
- const unsigned char* init_data,
- unsigned init_data_length,
- const std::string& session_id) {
- DCHECK(key);
- DCHECK_GT(key_length, 0u);
-
- if (!IsKeySystemSupported(key_system))
- return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported;
-
- if (current_key_system_.empty() || key_system != current_key_system_)
- return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState;
-
- proxy_decryptor_->AddKey(
- key, key_length, init_data, init_data_length, session_id);
- return WebMediaPlayer::MediaKeyExceptionNoError;
-}
-
-WebMediaPlayer::MediaKeyException WebMediaPlayerAndroid::cancelKeyRequest(
- const WebString& key_system,
- const WebString& session_id) {
- DVLOG(1) << "cancelKeyRequest: " << base::string16(key_system) << ": "
- << " [" << base::string16(session_id) << "]";
-
- std::string ascii_key_system =
- media::GetUnprefixedKeySystemName(ToASCIIOrEmpty(key_system));
- std::string ascii_session_id = ToASCIIOrEmpty(session_id);
-
- WebMediaPlayer::MediaKeyException e =
- CancelKeyRequestInternal(ascii_key_system, ascii_session_id);
- ReportMediaKeyExceptionToUMA("cancelKeyRequest", ascii_key_system, e);
- return e;
-}
-
-WebMediaPlayer::MediaKeyException
-WebMediaPlayerAndroid::CancelKeyRequestInternal(const std::string& key_system,
- const std::string& session_id) {
- if (!IsKeySystemSupported(key_system))
- return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported;
-
- if (current_key_system_.empty() || key_system != current_key_system_)
- return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState;
-
- proxy_decryptor_->CancelKeyRequest(session_id);
- return WebMediaPlayer::MediaKeyExceptionNoError;
-}
-
void WebMediaPlayerAndroid::setContentDecryptionModule(
blink::WebContentDecryptionModule* cdm,
blink::WebContentDecryptionModuleResult result) {
@@ -1712,47 +1474,6 @@ void WebMediaPlayerAndroid::ContentDecryptionModuleAttached(
"Unable to set MediaKeys object");
}
-void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) {
- EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1);
-
- encrypted_client_->keyAdded(
- WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)),
- WebString::fromUTF8(session_id));
-}
-
-void WebMediaPlayerAndroid::OnKeyError(const std::string& session_id,
- media::MediaKeys::KeyError error_code,
- uint32_t system_code) {
- EmeUMAHistogramEnumeration(current_key_system_, "KeyError",
- error_code, media::MediaKeys::kMaxKeyError);
-
- unsigned short short_system_code = 0;
- if (system_code > std::numeric_limits<unsigned short>::max()) {
- LOG(WARNING) << "system_code exceeds unsigned short limit.";
- short_system_code = std::numeric_limits<unsigned short>::max();
- } else {
- short_system_code = static_cast<unsigned short>(system_code);
- }
-
- encrypted_client_->keyError(
- WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)),
- WebString::fromUTF8(session_id),
- static_cast<blink::WebMediaPlayerEncryptedMediaClient::MediaKeyErrorCode>(
- error_code),
- short_system_code);
-}
-
-void WebMediaPlayerAndroid::OnKeyMessage(const std::string& session_id,
- const std::vector<uint8_t>& message,
- const GURL& destination_url) {
- DCHECK(destination_url.is_empty() || destination_url.is_valid());
-
- encrypted_client_->keyMessage(
- WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)),
- WebString::fromUTF8(session_id), message.empty() ? NULL : &message[0],
- message.size(), destination_url);
-}
-
void WebMediaPlayerAndroid::OnMediaSourceOpened(
blink::WebMediaSource* web_media_source) {
client_->mediaSourceOpened(web_media_source);
@@ -1763,20 +1484,15 @@ void WebMediaPlayerAndroid::OnEncryptedMediaInitData(
const std::vector<uint8_t>& init_data) {
DCHECK(main_thread_checker_.CalledOnValidThread());
- // Do not fire NeedKey event if encrypted media is not enabled.
- if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() &&
- !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) {
+ // Do not fire the "encrypted" event if Encrypted Media is not enabled.
+ // EME may not be enabled on Android Jelly Bean.
+ if (!blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) {
return;
}
UMA_HISTOGRAM_COUNTS(kMediaEme + std::string("NeedKey"), 1);
DCHECK(init_data_type != media::EmeInitDataType::UNKNOWN);
- DLOG_IF(WARNING, init_data_type_ != media::EmeInitDataType::UNKNOWN &&
- init_data_type != init_data_type_)
- << "Mixed init data type not supported. The new type is ignored.";
- if (init_data_type_ == media::EmeInitDataType::UNKNOWN)
- init_data_type_ = init_data_type;
encrypted_client_->encrypted(ConvertToWebInitDataType(init_data_type),
init_data.data(), init_data.size());
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | content/renderer/media/cdm/render_cdm_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698