Bug 1404230 - Part2 - Add a web api to support HDCP policy check on MediaKeys. r=cpearce,smaug

MozReview-Commit-ID: HW7DtQ6GuOa

--HG--
extra : rebase_source : 27c4fe3845068d979cac1868d0a7cf9262a3e153
This commit is contained in:
James Cheng 2017-10-02 17:39:00 +08:00
Родитель 0a1ba37059
Коммит 0df3d7fa98
3 изменённых файлов: 45 добавлений и 0 удалений

Просмотреть файл

@ -597,5 +597,37 @@ MediaKeys::GetSessionsInfo(nsString& sessionsInfo)
}
}
already_AddRefed<Promise>
MediaKeys::GetStatusForPolicy(const MediaKeysPolicy& aPolicy,
ErrorResult& aRv)
{
RefPtr<DetailedPromise> promise(MakePromise(aRv,
NS_LITERAL_CSTRING("MediaKeys::GetStatusForPolicy()")));
if (aRv.Failed()) {
return nullptr;
}
// Currently, only widevine CDM supports for this API.
if (!IsWidevineKeySystem(mKeySystem)) {
EME_LOG("MediaKeys[%p]::GetStatusForPolicy() HDCP policy check on unsupported keysystem ", this);
NS_WARNING("Tried to query without a CDM");
promise->MaybeReject(NS_ERROR_DOM_NOT_SUPPORTED_ERR,
NS_LITERAL_CSTRING("HDCP policy check on unsupported keysystem"));
return promise.forget();
}
if (!mProxy) {
NS_WARNING("Tried to use a MediaKeys without a CDM");
promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR,
NS_LITERAL_CSTRING("Null CDM in MediaKeys.GetStatusForPolicy()"));
return promise.forget();
}
EME_LOG("GetStatusForPolicy minHdcpVersion = %s.", NS_ConvertUTF16toUTF8(aPolicy.mMinHdcpVersion).get());
// TODO: Ask CDM to get the real policy.
promise->MaybeResolve(MediaKeyStatus::Usable);
return promise.forget();
}
} // namespace dom
} // namespace mozilla

Просмотреть файл

@ -29,6 +29,7 @@ namespace dom {
class ArrayBufferViewOrArrayBuffer;
class MediaKeySession;
struct MediaKeysPolicy;
class HTMLMediaElement;
typedef nsRefPtrHashtable<nsStringHashKey, MediaKeySession> KeySessionHashMap;
@ -130,6 +131,10 @@ public:
void GetSessionsInfo(nsString& sessionsInfo);
// JavaScript: MediaKeys.GetStatusForPolicy()
already_AddRefed<Promise> GetStatusForPolicy(const MediaKeysPolicy& aPolicy,
ErrorResult& aR);
private:
// Instantiate CDMProxy instance.

Просмотреть файл

@ -18,6 +18,11 @@ enum MediaKeySessionType {
// persistent-usage-record,
};
// https://github.com/WICG/media-capabilities/blob/master/eme-extension-policy-check.md
dictionary MediaKeysPolicy {
DOMString minHdcpVersion = "";
};
interface MediaKeys {
readonly attribute DOMString keySystem;
@ -26,4 +31,7 @@ interface MediaKeys {
[NewObject]
Promise<void> setServerCertificate(BufferSource serverCertificate);
[Pref="media.eme.hdcp-policy-check.enabled", NewObject]
Promise<MediaKeyStatus> getStatusForPolicy(optional MediaKeysPolicy policy);
};