diff options
author | mdempsky <mdempsky@chromium.org> | 2015-05-11 18:21:27 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-12 01:21:47 +0000 |
commit | ca9edf06f6a2fba3836ba888c3e008fbaf1ab232 (patch) | |
tree | 520cede749402b21d15782729cc0b49aafe6bdd0 | |
parent | 405ed7a88665ab878556df117abcd02552c86d4c (diff) | |
download | chromium_src-ca9edf06f6a2fba3836ba888c3e008fbaf1ab232.zip chromium_src-ca9edf06f6a2fba3836ba888c3e008fbaf1ab232.tar.gz chromium_src-ca9edf06f6a2fba3836ba888c3e008fbaf1ab232.tar.bz2 |
Revert of Restrict use of hardware-secure codecs based on the RendererPreference. (patchset #11 id:210001 of https://codereview.chromium.org/1124863005/)
Reason for revert:
Compile failure in KeySystemConfigSelectorTest::SelectConfig().
../../media/blink/key_system_config_selector_unittest.cc:177:57: error: too few arguments to function call, expected 6, have 5
http://build.chromium.org/p/chromium.linux/builders/Linux%20GN%20Clobber/builds/113
Original issue's description:
> Restrict use of hardware-secure codecs based on the RendererPreference.
>
> This passes the value of |use_video_overlay_for_embedded_encrypted_video| from RendererPreferences to requestMediaKeySystemAccess() so that it can correctly block either non-hardware-secure codecs or hardware-secure codecs.
>
> BUG=467779
>
> Committed: https://crrev.com/491fea8c41977b1557a79cf2f53d4b60ecd159d9
> Cr-Commit-Position: refs/heads/master@{#329296}
TBR=xhwang@chromium.org,ddorwin@chromium.org,nasko@chromium.org,sky@chromium.org,sandersd@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=467779
Review URL: https://codereview.chromium.org/1137993004
Cr-Commit-Position: refs/heads/master@{#329307}
-rw-r--r-- | components/html_viewer/html_document.cc | 9 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 15 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.h | 1 | ||||
-rw-r--r-- | media/base/eme_constants.h | 13 | ||||
-rw-r--r-- | media/base/key_systems.cc | 7 | ||||
-rw-r--r-- | media/blink/key_system_config_selector.cc | 28 | ||||
-rw-r--r-- | media/blink/key_system_config_selector.h | 12 | ||||
-rw-r--r-- | media/blink/webencryptedmediaclient_impl.cc | 11 | ||||
-rw-r--r-- | media/blink/webencryptedmediaclient_impl.h | 11 |
9 files changed, 32 insertions, 75 deletions
diff --git a/components/html_viewer/html_document.cc b/components/html_viewer/html_document.cc index b922390..227dae3 100644 --- a/components/html_viewer/html_document.cc +++ b/components/html_viewer/html_document.cc @@ -109,12 +109,6 @@ bool CanNavigateLocally(blink::WebFrame* frame, return false; } -bool AreSecureCodecsSupported() { - // Hardware-secure codecs are not currently supported by HTML Viewer on any - // platform. - return false; -} - } // namespace HTMLDocument::HTMLDocument( @@ -334,8 +328,7 @@ void HTMLDocument::didNavigateWithinPage( blink::WebEncryptedMediaClient* HTMLDocument::encryptedMediaClient() { if (!web_encrypted_media_client_) { web_encrypted_media_client_.reset(new media::WebEncryptedMediaClientImpl( - base::Bind(&AreSecureCodecsSupported), GetCdmFactory(), - GetMediaPermission())); + GetCdmFactory(), GetMediaPermission())); } return web_encrypted_media_client_.get(); } diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 49a5d1f..ba27618 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -3587,11 +3587,6 @@ blink::WebUserMediaClient* RenderFrameImpl::userMediaClient() { blink::WebEncryptedMediaClient* RenderFrameImpl::encryptedMediaClient() { if (!web_encrypted_media_client_) { web_encrypted_media_client_.reset(new media::WebEncryptedMediaClientImpl( - // base::Unretained(this) is safe because WebEncryptedMediaClientImpl - // is destructed before |this|, and does not give away ownership of the - // callback. - base::Bind(&RenderFrameImpl::AreSecureCodecsSupported, - base::Unretained(this)), GetCdmFactory(), GetMediaPermission())); } return web_encrypted_media_client_.get(); @@ -4932,16 +4927,6 @@ media::MediaPermission* RenderFrameImpl::GetMediaPermission() { return media_permission_dispatcher_; } -bool RenderFrameImpl::AreSecureCodecsSupported() { -#if defined(OS_ANDROID) - // Hardware-secure codecs are only supported if secure surfaces are enabled. - return render_view_->renderer_preferences_ - .use_video_overlay_for_embedded_encrypted_video; -#else - return false; -#endif // defined(OS_ANDROID) -} - media::CdmFactory* RenderFrameImpl::GetCdmFactory() { #if defined(ENABLE_BROWSER_CDMS) if (!cdm_manager_) diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index ea47e62..21b4df4 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h @@ -813,7 +813,6 @@ class CONTENT_EXPORT RenderFrameImpl RendererMediaPlayerManager* GetMediaPlayerManager(); #endif - bool AreSecureCodecsSupported(); media::MediaPermission* GetMediaPermission(); media::CdmFactory* GetCdmFactory(); diff --git a/media/base/eme_constants.h b/media/base/eme_constants.h index 55ba254..6d6399d 100644 --- a/media/base/eme_constants.h +++ b/media/base/eme_constants.h @@ -129,14 +129,15 @@ enum class EmeConfigRule { // The configuration option is supported if both a distinctive identifier and // persistent state are available. IDENTIFIER_AND_PERSISTENCE_REQUIRED, - // The configuration option prevents use of hardware-secure codecs. - // This rule only has meaning on platforms that distinguish hardware-secure - // codecs (ie. Android). +#if defined(OS_ANDROID) + // The configuration option is supported if no hardware-secure codecs are used + // (as they would be for video if secure surfaces are enabled). SECURE_CODECS_NOT_ALLOWED, - // The configuration option is supported if hardware-secure codecs are used. - // This rule only has meaning on platforms that distinguish hardware-secure - // codecs (ie. Android). + // The configuration option is supported if only hardware-secure codecs are + // used. This implies that secure surfaces (hole-punching) are required for + // video. SECURE_CODECS_REQUIRED, +#endif // defined(OS_ANDROID) // The configuration option is supported without conditions. SUPPORTED, }; diff --git a/media/base/key_systems.cc b/media/base/key_systems.cc index 684e60a..17c4210 100644 --- a/media/base/key_systems.cc +++ b/media/base/key_systems.cc @@ -716,10 +716,8 @@ EmeConfigRule KeySystemsImpl::GetContentTypeConfigRule( if ((codec & key_system_codec_mask & container_codec_mask) == 0) return EmeConfigRule::NOT_SUPPORTED; #if defined(OS_ANDROID) - // Check whether the codec supports a hardware-secure mode. The goal is to - // prevent mixing of non-hardware-secure codecs with hardware-secure codecs, - // since the mode is fixed at CDM creation. - // + // Check whether the codec supports a hardware-secure mode; if not, indicate + // that hardware-secure codecs are not available for all listed codecs. // Because the check for regular codec support is early-exit, we don't have // to consider codecs that are only supported in hardware-secure mode. We // could do so, and make use of SECURE_CODECS_REQUIRED, if it turns out that @@ -727,6 +725,7 @@ EmeConfigRule KeySystemsImpl::GetContentTypeConfigRule( if ((codec & key_system_secure_codec_mask) == 0) support = EmeConfigRule::SECURE_CODECS_NOT_ALLOWED; #endif // defined(OS_ANDROID) + } return support; diff --git a/media/blink/key_system_config_selector.cc b/media/blink/key_system_config_selector.cc index f34bd8f..324a28f6 100644 --- a/media/blink/key_system_config_selector.cc +++ b/media/blink/key_system_config_selector.cc @@ -131,12 +131,11 @@ struct KeySystemConfigSelector::SelectionRequest { blink::WebVector<blink::WebMediaKeySystemConfiguration> candidate_configurations; blink::WebSecurityOrigin security_origin; - base::Callback<void(const blink::WebMediaKeySystemConfiguration&, bool)> + base::Callback<void(const blink::WebMediaKeySystemConfiguration&)> succeeded_cb; base::Callback<void(const blink::WebString&)> not_supported_cb; bool was_permission_requested = false; bool is_permission_granted = false; - bool are_secure_codecs_supported = false; }; // Accumulates configuration rules to determine if a feature (additional @@ -158,10 +157,6 @@ class KeySystemConfigSelector::ConfigState { bool IsIdentifierRecommended() const { return is_identifier_recommended_; } - bool AreSecureCodecsRequired() const { - return are_secure_codecs_required_; - } - // Checks whether a rule is compatible with all previously added rules. bool IsRuleSupported(EmeConfigRule rule) const { switch (rule) { @@ -182,10 +177,12 @@ class KeySystemConfigSelector::ConfigState { case EmeConfigRule::IDENTIFIER_AND_PERSISTENCE_REQUIRED: return (!is_identifier_not_allowed_ && IsPermissionPossible() && !is_persistence_not_allowed_); +#if defined(OS_ANDROID) case EmeConfigRule::SECURE_CODECS_NOT_ALLOWED: return !are_secure_codecs_required_; case EmeConfigRule::SECURE_CODECS_REQUIRED: return !are_secure_codecs_not_allowed_; +#endif // defined(OS_ANDROID) case EmeConfigRule::SUPPORTED: return true; } @@ -219,12 +216,14 @@ class KeySystemConfigSelector::ConfigState { is_identifier_required_ = true; is_persistence_required_ = true; return; +#if defined(OS_ANDROID) case EmeConfigRule::SECURE_CODECS_NOT_ALLOWED: are_secure_codecs_not_allowed_ = true; return; case EmeConfigRule::SECURE_CODECS_REQUIRED: are_secure_codecs_required_ = true; return; +#endif // defined(OS_ANDROID) case EmeConfigRule::SUPPORTED: return; } @@ -253,10 +252,11 @@ class KeySystemConfigSelector::ConfigState { bool is_persistence_required_ = false; bool is_persistence_not_allowed_ = false; - // Whether a rule has been added that requires or blocks hardware-secure - // codecs. +#if defined(OS_ANDROID) + // Whether a rule has been added that requires or blocks secure codecs. bool are_secure_codecs_required_ = false; bool are_secure_codecs_not_allowed_ = false; +#endif // defined(OS_ANDROID) }; KeySystemConfigSelector::KeySystemConfigSelector( @@ -392,6 +392,7 @@ KeySystemConfigSelector::GetSupportedConfiguration( const blink::WebMediaKeySystemConfiguration& candidate, ConfigState* config_state, blink::WebMediaKeySystemConfiguration* accumulated_configuration) { + // TODO(sandersd): Set state of SECURE_CODECS from renderer pref. // From https://w3c.github.io/encrypted-media/#get-supported-configuration // 1. Let accumulated configuration be empty. (Done by caller.) // 2. If the initDataTypes member is present in candidate configuration, run @@ -672,8 +673,7 @@ void KeySystemConfigSelector::SelectConfig( const blink::WebVector<blink::WebMediaKeySystemConfiguration>& candidate_configurations, const blink::WebSecurityOrigin& security_origin, - bool are_secure_codecs_supported, - base::Callback<void(const blink::WebMediaKeySystemConfiguration&, bool)> + base::Callback<void(const blink::WebMediaKeySystemConfiguration&)> succeeded_cb, base::Callback<void(const blink::WebString&)> not_supported_cb) { // Continued from requestMediaKeySystemAccess(), step 7, from @@ -699,7 +699,6 @@ void KeySystemConfigSelector::SelectConfig( request->key_system = key_system_ascii; request->candidate_configurations = candidate_configurations; request->security_origin = security_origin; - request->are_secure_codecs_supported = are_secure_codecs_supported; request->succeeded_cb = succeeded_cb; request->not_supported_cb = not_supported_cb; SelectConfigInternal(request.Pass()); @@ -722,10 +721,6 @@ void KeySystemConfigSelector::SelectConfigInternal( // new MediaKeySystemAccess object.] ConfigState config_state(request->was_permission_requested, request->is_permission_granted); - DCHECK(config_state.IsRuleSupported( - EmeConfigRule::SECURE_CODECS_NOT_ALLOWED)); - if (!request->are_secure_codecs_supported) - config_state.AddRule(EmeConfigRule::SECURE_CODECS_NOT_ALLOWED); blink::WebMediaKeySystemConfiguration accumulated_configuration; ConfigurationSupport support = GetSupportedConfiguration( request->key_system, request->candidate_configurations[i], @@ -746,8 +741,7 @@ void KeySystemConfigSelector::SelectConfigInternal( weak_factory_.GetWeakPtr(), base::Passed(&request))); return; case CONFIGURATION_SUPPORTED: - request->succeeded_cb.Run(accumulated_configuration, - config_state.AreSecureCodecsRequired()); + request->succeeded_cb.Run(accumulated_configuration); return; } } diff --git a/media/blink/key_system_config_selector.h b/media/blink/key_system_config_selector.h index 0d84fe3..86eec7e 100644 --- a/media/blink/key_system_config_selector.h +++ b/media/blink/key_system_config_selector.h @@ -9,7 +9,6 @@ #include <vector> #include "base/bind.h" -#include "base/callback.h" #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" #include "media/base/eme_constants.h" @@ -32,9 +31,8 @@ class MediaPermission; class MEDIA_EXPORT KeySystemConfigSelector { public: - KeySystemConfigSelector( - const KeySystems* key_systems, - MediaPermission* media_permission); + KeySystemConfigSelector(const KeySystems* key_systems, + MediaPermission* media_permission); ~KeySystemConfigSelector(); @@ -43,10 +41,8 @@ class MEDIA_EXPORT KeySystemConfigSelector { const blink::WebVector<blink::WebMediaKeySystemConfiguration>& candidate_configurations, const blink::WebSecurityOrigin& security_origin, - bool are_secure_codecs_supported, - // The second argument is |are_secure_codecs_required|. - base::Callback<void(const blink::WebMediaKeySystemConfiguration&, - bool)> succeeded_cb, + base::Callback<void(const blink::WebMediaKeySystemConfiguration&)> + succeeded_cb, base::Callback<void(const blink::WebString&)> not_supported_cb); private: diff --git a/media/blink/webencryptedmediaclient_impl.cc b/media/blink/webencryptedmediaclient_impl.cc index 3ce96ed..dd7a2dc 100644 --- a/media/blink/webencryptedmediaclient_impl.cc +++ b/media/blink/webencryptedmediaclient_impl.cc @@ -78,11 +78,9 @@ class WebEncryptedMediaClientImpl::Reporter { }; WebEncryptedMediaClientImpl::WebEncryptedMediaClientImpl( - base::Callback<bool(void)> are_secure_codecs_supported_cb, CdmFactory* cdm_factory, MediaPermission* media_permission) - : are_secure_codecs_supported_cb_(are_secure_codecs_supported_cb), - cdm_factory_(cdm_factory), + : cdm_factory_(cdm_factory), key_system_config_selector_(KeySystems::GetInstance(), media_permission), weak_factory_(this) { DCHECK(cdm_factory_); @@ -96,7 +94,7 @@ void WebEncryptedMediaClientImpl::requestMediaKeySystemAccess( GetReporter(request.keySystem())->ReportRequested(); key_system_config_selector_.SelectConfig( request.keySystem(), request.supportedConfigurations(), - request.securityOrigin(), are_secure_codecs_supported_cb_.Run(), + request.securityOrigin(), base::Bind(&WebEncryptedMediaClientImpl::OnRequestSucceeded, weak_factory_.GetWeakPtr(), request), base::Bind(&WebEncryptedMediaClientImpl::OnRequestNotSupported, @@ -116,11 +114,8 @@ void WebEncryptedMediaClientImpl::CreateCdm( void WebEncryptedMediaClientImpl::OnRequestSucceeded( blink::WebEncryptedMediaRequest request, - const blink::WebMediaKeySystemConfiguration& accumulated_configuration, - bool are_secure_codecs_required) { + const blink::WebMediaKeySystemConfiguration& accumulated_configuration) { GetReporter(request.keySystem())->ReportSupported(); - // TODO(sandersd): Pass |are_secure_codecs_required| along and use it to - // configure the CDM security level and use of secure surfaces on Android. request.requestSucceeded(WebContentDecryptionModuleAccessImpl::Create( request.keySystem(), accumulated_configuration, request.securityOrigin(), weak_factory_.GetWeakPtr())); diff --git a/media/blink/webencryptedmediaclient_impl.h b/media/blink/webencryptedmediaclient_impl.h index ba8f9bd..5a1f3e4a 100644 --- a/media/blink/webencryptedmediaclient_impl.h +++ b/media/blink/webencryptedmediaclient_impl.h @@ -7,7 +7,6 @@ #include <string> -#include "base/callback.h" #include "base/containers/scoped_ptr_hash_map.h" #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" @@ -32,10 +31,8 @@ class MediaPermission; class MEDIA_EXPORT WebEncryptedMediaClientImpl : public blink::WebEncryptedMediaClient { public: - WebEncryptedMediaClientImpl( - base::Callback<bool(void)> are_secure_codecs_supported_cb, - CdmFactory* cdm_factory, - MediaPermission* media_permission); + WebEncryptedMediaClientImpl(CdmFactory* cdm_factory, + MediaPermission* media_permission); virtual ~WebEncryptedMediaClientImpl(); // WebEncryptedMediaClient implementation. @@ -61,8 +58,7 @@ class MEDIA_EXPORT WebEncryptedMediaClientImpl // accumulated configuration. void OnRequestSucceeded( blink::WebEncryptedMediaRequest request, - const blink::WebMediaKeySystemConfiguration& accumulated_configuration, - bool are_secure_codecs_required); + const blink::WebMediaKeySystemConfiguration& accumulated_configuration); // Complete a requestMediaKeySystemAccess() request with an error message. void OnRequestNotSupported(blink::WebEncryptedMediaRequest request, @@ -75,7 +71,6 @@ class MEDIA_EXPORT WebEncryptedMediaClientImpl // Reporter singletons. base::ScopedPtrHashMap<std::string, scoped_ptr<Reporter>> reporters_; - base::Callback<bool(void)> are_secure_codecs_supported_cb_; CdmFactory* cdm_factory_; KeySystemConfigSelector key_system_config_selector_; base::WeakPtrFactory<WebEncryptedMediaClientImpl> weak_factory_; |