summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorxhwang <xhwang@chromium.org>2015-01-31 21:20:46 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-01 05:21:45 +0000
commit60b430a11d662a93795cef0fd137cb7018172ab9 (patch)
treeb392babb6d1b234867be9a6b24b60931df56740f /media
parent18493ebe8d788acb9be1a03f2af791d9c3eebd38 (diff)
downloadchromium_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.gn2
-rw-r--r--media/blink/encrypted_media_player_support.cc3
-rw-r--r--media/blink/encrypted_media_player_support.h4
-rw-r--r--media/blink/webencryptedmediaclient_impl.cc3
-rw-r--r--media/blink/webmediaplayer_impl.cc1
-rw-r--r--media/blink/webmediaplayer_params.cc2
-rw-r--r--media/blink/webmediaplayer_params.h10
-rw-r--r--media/cdm/proxy_decryptor.cc5
-rw-r--r--media/cdm/proxy_decryptor.h4
-rw-r--r--media/filters/default_media_permission.cc48
-rw-r--r--media/filters/default_media_permission.h39
-rw-r--r--media/media.gyp2
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',