diff options
author | xhwang <xhwang@chromium.org> | 2015-01-31 21:20:46 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-01 05:21:45 +0000 |
commit | 60b430a11d662a93795cef0fd137cb7018172ab9 (patch) | |
tree | b392babb6d1b234867be9a6b24b60931df56740f /media | |
parent | 18493ebe8d788acb9be1a03f2af791d9c3eebd38 (diff) | |
download | chromium_src-60b430a11d662a93795cef0fd137cb7018172ab9.zip chromium_src-60b430a11d662a93795cef0fd137cb7018172ab9.tar.gz chromium_src-60b430a11d662a93795cef0fd137cb7018172ab9.tar.bz2 |
media: Add DefaultMediaPermission.
Also pass MediaPermission to ProxyDecryptor, in preparation for triggering
user prompt from ProxyDecryptor for prefixed EME implementation.
TBR=jam@chromium.org,aa@chromium.org
BUG=446263
Review URL: https://codereview.chromium.org/887873003
Cr-Commit-Position: refs/heads/master@{#314082}
Diffstat (limited to 'media')
-rw-r--r-- | media/BUILD.gn | 2 | ||||
-rw-r--r-- | media/blink/encrypted_media_player_support.cc | 3 | ||||
-rw-r--r-- | media/blink/encrypted_media_player_support.h | 4 | ||||
-rw-r--r-- | media/blink/webencryptedmediaclient_impl.cc | 3 | ||||
-rw-r--r-- | media/blink/webmediaplayer_impl.cc | 1 | ||||
-rw-r--r-- | media/blink/webmediaplayer_params.cc | 2 | ||||
-rw-r--r-- | media/blink/webmediaplayer_params.h | 10 | ||||
-rw-r--r-- | media/cdm/proxy_decryptor.cc | 5 | ||||
-rw-r--r-- | media/cdm/proxy_decryptor.h | 4 | ||||
-rw-r--r-- | media/filters/default_media_permission.cc | 48 | ||||
-rw-r--r-- | media/filters/default_media_permission.h | 39 | ||||
-rw-r--r-- | media/media.gyp | 2 |
12 files changed, 119 insertions, 4 deletions
diff --git a/media/BUILD.gn b/media/BUILD.gn index 4a8c1d9..c4d3ea3 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -114,6 +114,8 @@ component("media") { "filters/decrypting_demuxer_stream.h", "filters/decrypting_video_decoder.cc", "filters/decrypting_video_decoder.h", + "filters/default_media_permission.cc", + "filters/default_media_permission.h", "filters/file_data_source.cc", "filters/file_data_source.h", "filters/frame_processor.cc", diff --git a/media/blink/encrypted_media_player_support.cc b/media/blink/encrypted_media_player_support.cc index 01422e5..920bfc9 100644 --- a/media/blink/encrypted_media_player_support.cc +++ b/media/blink/encrypted_media_player_support.cc @@ -115,9 +115,11 @@ static std::string GuessInitDataType(const unsigned char* init_data, EncryptedMediaPlayerSupport::EncryptedMediaPlayerSupport( scoped_ptr<CdmFactory> cdm_factory, blink::WebMediaPlayerClient* client, + MediaPermission* media_permission, const SetCdmContextCB& set_cdm_context_cb) : cdm_factory_(cdm_factory.Pass()), client_(client), + media_permission_(media_permission), set_cdm_context_cb_(set_cdm_context_cb) { } @@ -156,6 +158,7 @@ EncryptedMediaPlayerSupport::GenerateKeyRequestInternal( if (current_key_system_.empty()) { if (!proxy_decryptor_) { proxy_decryptor_.reset(new ProxyDecryptor( + media_permission_, BIND_TO_RENDER_LOOP(&EncryptedMediaPlayerSupport::OnKeyAdded), BIND_TO_RENDER_LOOP(&EncryptedMediaPlayerSupport::OnKeyError), BIND_TO_RENDER_LOOP(&EncryptedMediaPlayerSupport::OnKeyMessage))); diff --git a/media/blink/encrypted_media_player_support.h b/media/blink/encrypted_media_player_support.h index c261ec3..c512026 100644 --- a/media/blink/encrypted_media_player_support.h +++ b/media/blink/encrypted_media_player_support.h @@ -27,6 +27,7 @@ class WebString; namespace media { +class MediaPermission; class WebContentDecryptionModuleImpl; // Provides support to prefixed EME implementation. @@ -40,6 +41,7 @@ class EncryptedMediaPlayerSupport EncryptedMediaPlayerSupport(scoped_ptr<CdmFactory> cdm_factory, blink::WebMediaPlayerClient* client, + MediaPermission* media_permission, const SetCdmContextCB& set_cdm_context_cb); ~EncryptedMediaPlayerSupport(); @@ -96,6 +98,8 @@ class EncryptedMediaPlayerSupport blink::WebMediaPlayerClient* client_; + MediaPermission* media_permission_; + // The currently selected key system. Empty string means that no key system // has been selected. std::string current_key_system_; diff --git a/media/blink/webencryptedmediaclient_impl.cc b/media/blink/webencryptedmediaclient_impl.cc index 90b62d0..5cd9611 100644 --- a/media/blink/webencryptedmediaclient_impl.cc +++ b/media/blink/webencryptedmediaclient_impl.cc @@ -188,10 +188,11 @@ class WebEncryptedMediaClientImpl::Reporter { WebEncryptedMediaClientImpl::WebEncryptedMediaClientImpl( scoped_ptr<CdmFactory> cdm_factory, - MediaPermission* /* media_permission */) + MediaPermission* media_permission) : cdm_factory_(cdm_factory.Pass()) { // TODO(sandersd): Use |media_permission| to check for media permissions in // this class. + DCHECK(media_permission); } WebEncryptedMediaClientImpl::~WebEncryptedMediaClientImpl() { diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index 21b8012..12839eb 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc @@ -144,6 +144,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( encrypted_media_support_( cdm_factory.Pass(), client, + params.media_permission(), base::Bind(&WebMediaPlayerImpl::SetCdm, AsWeakPtr())), renderer_factory_(renderer_factory.Pass()) { // Threaded compositing isn't enabled universally yet. diff --git a/media/blink/webmediaplayer_params.cc b/media/blink/webmediaplayer_params.cc index df7f5b9..ec602a2 100644 --- a/media/blink/webmediaplayer_params.cc +++ b/media/blink/webmediaplayer_params.cc @@ -17,6 +17,7 @@ WebMediaPlayerParams::WebMediaPlayerParams( const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, const Context3DCB& context_3d_cb, + MediaPermission* media_permission, blink::WebContentDecryptionModule* initial_cdm) : defer_load_cb_(defer_load_cb), audio_renderer_sink_(audio_renderer_sink), @@ -24,6 +25,7 @@ WebMediaPlayerParams::WebMediaPlayerParams( media_task_runner_(media_task_runner), compositor_task_runner_(compositor_task_runner), context_3d_cb_(context_3d_cb), + media_permission_(media_permission), initial_cdm_(initial_cdm) { } diff --git a/media/blink/webmediaplayer_params.h b/media/blink/webmediaplayer_params.h index 6893ed6..02ca007 100644 --- a/media/blink/webmediaplayer_params.h +++ b/media/blink/webmediaplayer_params.h @@ -23,6 +23,7 @@ namespace media { class AudioRendererSink; class MediaLog; +class MediaPermission; // Holds parameters for constructing WebMediaPlayerImpl without having // to plumb arguments through various abstraction layers. @@ -40,6 +41,7 @@ class MEDIA_EXPORT WebMediaPlayerParams { const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, const Context3DCB& context_3d, + MediaPermission* media_permission, blink::WebContentDecryptionModule* initial_cdm); ~WebMediaPlayerParams(); @@ -63,11 +65,14 @@ class MEDIA_EXPORT WebMediaPlayerParams { return compositor_task_runner_; } + Context3DCB context_3d_cb() const { return context_3d_cb_; } + + MediaPermission* media_permission() const { return media_permission_; } + blink::WebContentDecryptionModule* initial_cdm() const { return initial_cdm_; } - Context3DCB context_3d_cb() const { return context_3d_cb_; } private: DeferLoadCB defer_load_cb_; @@ -76,6 +81,9 @@ class MEDIA_EXPORT WebMediaPlayerParams { scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; Context3DCB context_3d_cb_; + + // TODO(xhwang): Remove after prefixed EME API support is removed. + MediaPermission* media_permission_; blink::WebContentDecryptionModule* initial_cdm_; DISALLOW_IMPLICIT_CONSTRUCTORS(WebMediaPlayerParams); diff --git a/media/cdm/proxy_decryptor.cc b/media/cdm/proxy_decryptor.cc index dc05e8b..d1be9d8 100644 --- a/media/cdm/proxy_decryptor.cc +++ b/media/cdm/proxy_decryptor.cc @@ -14,6 +14,7 @@ #include "media/base/cdm_factory.h" #include "media/base/cdm_key_information.h" #include "media/base/key_systems.h" +#include "media/base/media_permission.h" #include "media/cdm/json_web_key.h" #include "media/cdm/key_system_names.h" @@ -24,7 +25,8 @@ namespace media { // EME API. const int kSessionClosedSystemCode = 29127; -ProxyDecryptor::ProxyDecryptor(const KeyAddedCB& key_added_cb, +ProxyDecryptor::ProxyDecryptor(MediaPermission* media_permission, + const KeyAddedCB& key_added_cb, const KeyErrorCB& key_error_cb, const KeyMessageCB& key_message_cb) : key_added_cb_(key_added_cb), @@ -32,6 +34,7 @@ ProxyDecryptor::ProxyDecryptor(const KeyAddedCB& key_added_cb, key_message_cb_(key_message_cb), is_clear_key_(false), weak_ptr_factory_(this) { + DCHECK(media_permission); DCHECK(!key_added_cb_.is_null()); DCHECK(!key_error_cb_.is_null()); DCHECK(!key_message_cb_.is_null()); diff --git a/media/cdm/proxy_decryptor.h b/media/cdm/proxy_decryptor.h index 2c760ea..c8e05d7 100644 --- a/media/cdm/proxy_decryptor.h +++ b/media/cdm/proxy_decryptor.h @@ -21,6 +21,7 @@ class GURL; namespace media { class CdmFactory; +class MediaPermission; // ProxyDecryptor is for EME v0.1b only. It should not be used for the WD API. // A decryptor proxy that creates a real decryptor object on demand and @@ -41,7 +42,8 @@ class MEDIA_EXPORT ProxyDecryptor { const std::vector<uint8>& message, const GURL& destination_url)> KeyMessageCB; - ProxyDecryptor(const KeyAddedCB& key_added_cb, + ProxyDecryptor(MediaPermission* media_permission, + const KeyAddedCB& key_added_cb, const KeyErrorCB& key_error_cb, const KeyMessageCB& key_message_cb); virtual ~ProxyDecryptor(); diff --git a/media/filters/default_media_permission.cc b/media/filters/default_media_permission.cc new file mode 100644 index 0000000..80d7093 --- /dev/null +++ b/media/filters/default_media_permission.cc @@ -0,0 +1,48 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/filters/default_media_permission.h" + +#include "base/bind.h" +#include "base/location.h" +#include "base/logging.h" +#include "base/message_loop/message_loop_proxy.h" + +namespace media { + +DefaultMediaPermission::DefaultMediaPermission(bool allow) : allow_(allow) { +} + +DefaultMediaPermission::~DefaultMediaPermission() { +} + +static void FirePermissionStatusCallback( + const MediaPermission::PermissionStatusCB& permission_status_cb, + bool allow) { + LOG(WARNING) << (allow ? "Allowing" : "Denying") + << "media permission request with a default value instead of " + "real user's consent. This should NOT be used for in a real " + "user-facing product."; + // Return the callback asynchronously. + base::MessageLoopProxy::current()->PostTask( + FROM_HERE, base::Bind(permission_status_cb, allow)); +} + +void DefaultMediaPermission::HasPermission( + Type type, + const GURL& /* security_origin */, + const PermissionStatusCB& permission_status_cb) { + CHECK_EQ(PROTECTED_MEDIA_IDENTIFIER, type); + FirePermissionStatusCallback(permission_status_cb, allow_); +} + +void DefaultMediaPermission::RequestPermission( + Type type, + const GURL& /* security_origin */, + const PermissionStatusCB& permission_status_cb) { + CHECK_EQ(PROTECTED_MEDIA_IDENTIFIER, type); + FirePermissionStatusCallback(permission_status_cb, allow_); +} + +} // namespace media diff --git a/media/filters/default_media_permission.h b/media/filters/default_media_permission.h new file mode 100644 index 0000000..9ad295a --- /dev/null +++ b/media/filters/default_media_permission.h @@ -0,0 +1,39 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_FILTERS_DEFAULT_MEDIA_PERMISSION_H_ +#define MEDIA_FILTERS_DEFAULT_MEDIA_PERMISSION_H_ + +#include "media/base/media_export.h" +#include "media/base/media_permission.h" + +namespace media { + +// Default MediaPermission implementation that will always allow or deny the +// permission request/check based on |allow|. +// WARNING: This class allows or denies permission request/check without real +// user's consent. It should NOT be used in a real user facing product. +class MEDIA_EXPORT DefaultMediaPermission : public MediaPermission { + public: + explicit DefaultMediaPermission(bool allow); + ~DefaultMediaPermission() override; + + // media::MediaPermission implementation. + void HasPermission(Type type, + const GURL& security_origin, + const PermissionStatusCB& permission_status_cb) override; + void RequestPermission( + Type type, + const GURL& security_origin, + const PermissionStatusCB& permission_status_cb) override; + + private: + const bool allow_; + + DISALLOW_COPY_AND_ASSIGN(DefaultMediaPermission); +}; + +} // namespace media + +#endif // MEDIA_FILTERS_DEFAULT_MEDIA_PERMISSION_H_ diff --git a/media/media.gyp b/media/media.gyp index 937e7ac..57695cd 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -438,6 +438,8 @@ 'filters/decrypting_video_decoder.h', 'filters/default_renderer_factory.cc', 'filters/default_renderer_factory.h', + 'filters/default_media_permission.cc', + 'filters/default_media_permission.h', 'filters/ffmpeg_audio_decoder.cc', 'filters/ffmpeg_audio_decoder.h', 'filters/ffmpeg_bitstream_converter.h', |