diff options
author | xhwang <xhwang@chromium.org> | 2015-01-27 09:54:01 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-27 17:54:56 +0000 |
commit | 36b1f3badd1e3f36d0fb5eb63328d2de4da051ae (patch) | |
tree | 9f7cc4f2ea15f7e41d175a575e80ee22b0775449 /media | |
parent | 8bd6f985f24f3ab29fbfd325e678121f33dd3518 (diff) | |
download | chromium_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.gn | 2 | ||||
-rw-r--r-- | media/base/media_permission.cc | 15 | ||||
-rw-r--r-- | media/base/media_permission.h | 49 | ||||
-rw-r--r-- | media/blink/webencryptedmediaclient_impl.cc | 6 | ||||
-rw-r--r-- | media/blink/webencryptedmediaclient_impl.h | 5 | ||||
-rw-r--r-- | media/media.gyp | 2 |
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', |