summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorxhwang <xhwang@chromium.org>2015-01-27 09:54:01 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-27 17:54:56 +0000
commit36b1f3badd1e3f36d0fb5eb63328d2de4da051ae (patch)
tree9f7cc4f2ea15f7e41d175a575e80ee22b0775449 /media
parent8bd6f985f24f3ab29fbfd325e678121f33dd3518 (diff)
downloadchromium_src-36b1f3badd1e3f36d0fb5eb63328d2de4da051ae.zip
chromium_src-36b1f3badd1e3f36d0fb5eb63328d2de4da051ae.tar.gz
chromium_src-36b1f3badd1e3f36d0fb5eb63328d2de4da051ae.tar.bz2
media: Add MediaPermission interface and MediaPermissionDispatcher.
MediaPermission is the interface for media code to check/request media related permissions. MediaPermissionDispatcher is a MediaPermission implementation in content/. Plan of follow-up CL: - Use MediaPermission in ProxyDecryptor and remove current protected media identifier info bar code in the browser process (on Android and ChromeOS). BUG=446263 TEST=Tested on Android with encrypted-media-requestmediakeysystemaccess.html layout test by calling MediaPermission methods manually in webencryptedmediaclient_impl.cc. Review URL: https://codereview.chromium.org/871663003 Cr-Commit-Position: refs/heads/master@{#313303}
Diffstat (limited to 'media')
-rw-r--r--media/base/BUILD.gn2
-rw-r--r--media/base/media_permission.cc15
-rw-r--r--media/base/media_permission.h49
-rw-r--r--media/blink/webencryptedmediaclient_impl.cc6
-rw-r--r--media/blink/webencryptedmediaclient_impl.h5
-rw-r--r--media/media.gyp2
6 files changed, 77 insertions, 2 deletions
diff --git a/media/base/BUILD.gn b/media/base/BUILD.gn
index 9eedf1f..fd1bfe0 100644
--- a/media/base/BUILD.gn
+++ b/media/base/BUILD.gn
@@ -113,6 +113,8 @@ source_set("base") {
"media_log.cc",
"media_log.h",
"media_log_event.h",
+ "media_permission.cc",
+ "media_permission.h",
"media_switches.cc",
"media_switches.h",
"multi_channel_resampler.cc",
diff --git a/media/base/media_permission.cc b/media/base/media_permission.cc
new file mode 100644
index 0000000..739e445
--- /dev/null
+++ b/media/base/media_permission.cc
@@ -0,0 +1,15 @@
+// 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/base/media_permission.h"
+
+namespace media {
+
+MediaPermission::MediaPermission() {
+}
+
+MediaPermission::~MediaPermission() {
+}
+
+} // namespace media
diff --git a/media/base/media_permission.h b/media/base/media_permission.h
new file mode 100644
index 0000000..760ba0c
--- /dev/null
+++ b/media/base/media_permission.h
@@ -0,0 +1,49 @@
+// 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_BASE_MEDIA_PERMISSION_H_
+#define MEDIA_BASE_MEDIA_PERMISSION_H_
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "media/base/media_export.h"
+
+class GURL;
+
+namespace media {
+
+// Interface to handle media related permission checks and requests.
+class MEDIA_EXPORT MediaPermission {
+ public:
+ typedef base::Callback<void(bool)> PermissionStatusCB;
+
+ enum Type {
+ PROTECTED_MEDIA_IDENTIFIER,
+ };
+
+ MediaPermission();
+ virtual ~MediaPermission();
+
+ // Checks whether |type| is permitted for |security_origion| without
+ // triggering user interaction (e.g. permission prompt). The status will be
+ // |false| if the permission has never been set.
+ virtual void HasPermission(
+ Type type,
+ const GURL& security_origin,
+ const PermissionStatusCB& permission_status_cb) = 0;
+
+ // Requests |type| permission for |security_origion|. This may trigger user
+ // interaction (e.g. permission prompt) if the permission has never been set.
+ virtual void RequestPermission(
+ Type type,
+ const GURL& security_origin,
+ const PermissionStatusCB& permission_status_cb) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MediaPermission);
+};
+
+} // namespace media
+
+#endif // MEDIA_BASE_MEDIA_PERMISSION_H_
diff --git a/media/blink/webencryptedmediaclient_impl.cc b/media/blink/webencryptedmediaclient_impl.cc
index dd1eaac..0050b43 100644
--- a/media/blink/webencryptedmediaclient_impl.cc
+++ b/media/blink/webencryptedmediaclient_impl.cc
@@ -8,6 +8,7 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "media/base/key_systems.h"
+#include "media/base/media_permission.h"
#include "net/base/mime_util.h"
#include "third_party/WebKit/public/platform/WebEncryptedMediaRequest.h"
#include "third_party/WebKit/public/platform/WebMediaKeySystemConfiguration.h"
@@ -131,8 +132,11 @@ static bool GetSupportedConfiguration(
}
WebEncryptedMediaClientImpl::WebEncryptedMediaClientImpl(
- scoped_ptr<CdmFactory> cdm_factory)
+ scoped_ptr<CdmFactory> cdm_factory,
+ MediaPermission* /* media_permission */)
: cdm_factory_(cdm_factory.Pass()) {
+ // TODO(sandersd): Use |media_permission| to check for media permissions in
+ // this class.
}
WebEncryptedMediaClientImpl::~WebEncryptedMediaClientImpl() {
diff --git a/media/blink/webencryptedmediaclient_impl.h b/media/blink/webencryptedmediaclient_impl.h
index 2b4e9d5..7aadfc2 100644
--- a/media/blink/webencryptedmediaclient_impl.h
+++ b/media/blink/webencryptedmediaclient_impl.h
@@ -13,10 +13,13 @@
namespace media {
+class MediaPermission;
+
class MEDIA_EXPORT WebEncryptedMediaClientImpl
: public blink::WebEncryptedMediaClient {
public:
- WebEncryptedMediaClientImpl(scoped_ptr<CdmFactory> cdm_factory);
+ WebEncryptedMediaClientImpl(scoped_ptr<CdmFactory> cdm_factory,
+ MediaPermission* media_permission);
virtual ~WebEncryptedMediaClientImpl();
// WebEncryptedMediaClient implementation.
diff --git a/media/media.gyp b/media/media.gyp
index 6fe8230..937e7ac 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -325,6 +325,8 @@
'base/media_log.h',
'base/media_log_event.h',
'base/media_posix.cc',
+ 'base/media_permission.cc',
+ 'base/media_permission.h',
'base/media_switches.cc',
'base/media_switches.h',
'base/media_win.cc',