Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update the encrypted-media IDL file #9781

37 changes: 12 additions & 25 deletions encrypted-media/idlharness.https.html
Expand Up @@ -20,31 +20,18 @@ <h1 class="instructions">Description</h1>
<div id='log'></div>

<script>
setup(function() {

fetch( '/interfaces/encrypted-media.idl' )
.then( function( response ) {
if ( !response.ok ) throw new Error( 'IDL fetch failed' );
return response.text();
} )
.then( function( idls ) {

var idl_array = new IdlArray();
idl_array.add_untested_idls("interface Navigator {};");
idl_array.add_untested_idls("interface HTMLMediaElement {};");
idl_array.add_untested_idls("interface Event {};");
idl_array.add_untested_idls("dictionary EventInit {};");
idl_array.add_untested_idls("interface EventTarget {};");

idl_array.add_idls(idls);

idl_array.test();

done();

} );

}, {explicit_done: true});
'use strict';

promise_test(async () => {
const idls = await fetch('/interfaces/encrypted-media.idl').then(r => r.text());
const html = await fetch('/interfaces/html.idl').then(r => r.text());
const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
var idl_array = new IdlArray();
idl_array.add_idls(idls);
idl_array.add_dependency_idls(html);
idl_array.add_dependency_idls(dom);
idl_array.test();
}, 'Test encrypted-media IDL');
</script>
</body>
</html>
138 changes: 66 additions & 72 deletions interfaces/encrypted-media.idl
@@ -1,75 +1,72 @@
// Encrypted Media Extensions WebIDL
//
// NOTE: Please update the link below to the specification version from
// which this IDL was extracted.
//
// https://www.w3.org/TR/2016/WD-encrypted-media-20160610/
// + commit 5499821932391ae2c2e53756ae7ab9fae89d5863
//
// GENERATED CONTENT - DO NOT EDIT
// Content of this file was automatically extracted from the
// "Encrypted Media Extensions" spec.
// See: https://w3c.github.io/encrypted-media/

[Exposed=Window]
partial interface Navigator {
Promise<MediaKeySystemAccess> requestMediaKeySystemAccess (DOMString keySystem, sequence<MediaKeySystemConfiguration> supportedConfigurations);
[SecureContext] Promise<MediaKeySystemAccess> requestMediaKeySystemAccess(DOMString keySystem,
sequence<MediaKeySystemConfiguration> supportedConfigurations);
};

enum MediaKeysRequirement {
"required",
"optional",
"not-allowed"
};

dictionary MediaKeySystemConfiguration {
DOMString label = "";
sequence<DOMString> initDataTypes = [];
sequence<MediaKeySystemMediaCapability> audioCapabilities = [];
sequence<MediaKeySystemMediaCapability> videoCapabilities = [];
MediaKeysRequirement distinctiveIdentifier = "optional";
MediaKeysRequirement persistentState = "optional";
sequence<DOMString> sessionTypes;
DOMString label = "";
sequence<DOMString> initDataTypes = [];
sequence<MediaKeySystemMediaCapability> audioCapabilities = [];
sequence<MediaKeySystemMediaCapability> videoCapabilities = [];
MediaKeysRequirement distinctiveIdentifier = "optional";
MediaKeysRequirement persistentState = "optional";
sequence<DOMString> sessionTypes;
};

dictionary MediaKeySystemMediaCapability {
DOMString contentType = "";
DOMString robustness = "";
DOMString contentType = "";
DOMString robustness = "";
};

[Exposed=Window,
SecureContext]
interface MediaKeySystemAccess {
readonly attribute DOMString keySystem;
MediaKeySystemConfiguration getConfiguration ();
Promise<MediaKeys> createMediaKeys ();
readonly attribute DOMString keySystem;
MediaKeySystemConfiguration getConfiguration();
Promise<MediaKeys> createMediaKeys();
};

enum MediaKeySessionType {
"temporary",
"persistent-usage-record",
"persistent-license"
};

[Exposed=Window,
SecureContext]
interface MediaKeys {
MediaKeySession createSession (optional MediaKeySessionType sessionType = "temporary");
Promise<boolean> setServerCertificate (BufferSource serverCertificate);
MediaKeySession createSession(optional MediaKeySessionType sessionType = "temporary");
Promise<boolean> setServerCertificate(BufferSource serverCertificate);
};

[Exposed=Window,
SecureContext]
interface MediaKeySession : EventTarget {
readonly attribute DOMString sessionId;
readonly attribute unrestricted double expiration;
readonly attribute Promise<void> closed;
readonly attribute MediaKeyStatusMap keyStatuses;
attribute EventHandler onkeystatuseschange;
attribute EventHandler onmessage;
Promise<void> generateRequest (DOMString initDataType, BufferSource initData);
Promise<boolean> load (DOMString sessionId);
Promise<void> update (BufferSource response);
Promise<void> close ();
Promise<void> remove ();
};

readonly attribute DOMString sessionId;
readonly attribute unrestricted double expiration;
readonly attribute Promise<void> closed;
readonly attribute MediaKeyStatusMap keyStatuses;
attribute EventHandler onkeystatuseschange;
attribute EventHandler onmessage;
Promise<void> generateRequest(DOMString initDataType,
BufferSource initData);
Promise<boolean> load(DOMString sessionId);
Promise<void> update(BufferSource response);
Promise<void> close();
Promise<void> remove();
};
[Exposed=Window,
SecureContext]
interface MediaKeyStatusMap {
iterable<BufferSource,MediaKeyStatus>;
readonly attribute unsigned long size;
boolean has (BufferSource keyId);
any get (BufferSource keyId);
iterable<BufferSource, MediaKeyStatus>;
readonly attribute unsigned long size;
boolean has(BufferSource keyId);
any get(BufferSource keyId);
};

enum MediaKeyStatus {
"usable",
"expired",
Expand All @@ -79,41 +76,38 @@ enum MediaKeyStatus {
"status-pending",
"internal-error"
};

enum MediaKeyMessageType {
"license-request",
"license-renewal",
"license-release",
"individualization-request"
};

[Constructor(DOMString type, MediaKeyMessageEventInit eventInitDict)]
[Exposed=Window,
SecureContext,
Constructor(DOMString type, MediaKeyMessageEventInit eventInitDict)]
interface MediaKeyMessageEvent : Event {
readonly attribute MediaKeyMessageType messageType;
readonly attribute ArrayBuffer message;
readonly attribute MediaKeyMessageType messageType;
readonly attribute ArrayBuffer message;
};

dictionary MediaKeyMessageEventInit : EventInit {
required MediaKeyMessageType messageType;
required ArrayBuffer message;
required MediaKeyMessageType messageType;
required ArrayBuffer message;
};

// partial interface HTMLMediaElement : EventTarget {
[Exposed=Window]
partial interface HTMLMediaElement {
readonly attribute MediaKeys? mediaKeys;
attribute EventHandler onencrypted;
attribute EventHandler onwaitingforkey;
Promise<void> setMediaKeys (MediaKeys? mediaKeys);
};

[Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict)]
[SecureContext]
readonly attribute MediaKeys? mediaKeys;
attribute EventHandler onencrypted;
attribute EventHandler onwaitingforkey;
[SecureContext] Promise<void> setMediaKeys(MediaKeys? mediaKeys);
};
[Exposed=Window,
Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict)]
interface MediaEncryptedEvent : Event {
readonly attribute DOMString initDataType;
readonly attribute ArrayBuffer? initData;
readonly attribute DOMString initDataType;
readonly attribute ArrayBuffer? initData;
};

dictionary MediaEncryptedEventInit : EventInit {
DOMString initDataType = "";
ArrayBuffer? initData = null;
DOMString initDataType = "";
ArrayBuffer? initData = null;
};