diff --git a/index.html b/index.html index 26ee23f..8f01626 100644 --- a/index.html +++ b/index.html @@ -322,7 +322,39 @@

Encrypted Media Extensions

document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at - https://www.w3.org/TR/.

+ https://www.w3.org/TR/.

+

+ Two new features were added since publication as a W3C Recommendation in September 2017: +

+ +

+ Inclusion of other features is out of scope for the Media Working Group. On top of + editorial updates, other substantive changes made to this specification address maintenance + issues against this specification: +

+ +

+ For a full list of changes made since the previous version, see the commits. +

+

This document was published by the Media Working Group as an Editor's Draft.

Publication as an Editor's Draft does not @@ -1586,7 +1618,7 @@

Encrypted Media Extensions

  • If this's relevant global object's associated Document is not - allowed to use the encrypted-media feature, then + allowed to use the encrypted-media feature, then throw a "SecurityError" DOMException and abort these steps.

  • @@ -2359,7 +2391,7 @@

    Encrypted Media Extensions

  • Let encryption scheme be requested media capability’s - encryptionScheme member. + encryptionScheme member.

  • @@ -2903,7 +2935,7 @@

    Encrypted Media Extensions

    WebIDLdictionary MediaKeySystemMediaCapability {
       DOMString contentType = "";
    -  DOMString? encryptionScheme = null;
    +  DOMString? encryptionScheme = null;
       DOMString robustness = "";
     };

    3.4.1 @@ -3071,9 +3103,9 @@

    Encrypted Media Extensions

    configuration each time this method is called.

    Note

    - If encryptionScheme was not given by the + If encryptionScheme was not given by the application, the accumulated configuration MUST still contain an - encryptionScheme field with a value of + encryptionScheme field with a value of null, so that polyfills can detect the user agent's support for the field without specifying specific values.

    @@ -3298,7 +3330,7 @@

    Encrypted Media Extensions

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

    5.1 @@ -3429,7 +3461,7 @@

    Encrypted Media Extensions

    - Returns the MediaKeyStatus for a given MediaKeysPolicy. + Returns the MediaKeyStatus for a given MediaKeysPolicy.

    WebIDLdictionary MediaKeysPolicy {
    @@ -3446,7 +3478,7 @@ 

    Encrypted Media Extensions

    The HDCP Policy is represented by minHdcpVersion. If the system can enable the HDCP version specified or higher, then the policy will result in a - MediaKeyStatus of "usable". The + MediaKeyStatus of "usable". The [EME-HDCP-VERSION-REGISTRY] provides the mapping from minHdcpVersion values to HDCP specifications.

    @@ -3490,7 +3522,7 @@

    Encrypted Media Extensions

    1. - If the CDM cannot determine the MediaKeyStatus for the + If the CDM cannot determine the MediaKeyStatus for the dictionary member, then reject promise with NotSupportedError and abort these steps.

      @@ -3673,7 +3705,7 @@

      Encrypted Media Extensions

      The CDM unavailable algorithm is run to close all MediaKeySession objects associated with a MediaKeys object, media keys when the CDM instance becomes unavailable. Requests to run this algorithm include a - MediaKeySessionClosedReason value. + MediaKeySessionClosedReason value.

      The following steps are run: @@ -3681,7 +3713,7 @@

      Encrypted Media Extensions

      1. - Let the reason be the specified MediaKeySessionClosedReason value. + Let the reason be the specified MediaKeySessionClosedReason value.

      2. @@ -3778,7 +3810,7 @@

        Encrypted Media Extensions

        The following steps of an algorithm are always aborted when rejecting a promise.

        -
        WebIDLenum MediaKeySessionClosedReason {
        +      
        WebIDLenum MediaKeySessionClosedReason {
           "internal-error",
           "closed-by-application",
           "release-acknowledged",
        @@ -3860,7 +3892,7 @@ 

        Encrypted Media Extensions

        WebIDL[Exposed=Window, SecureContext] interface MediaKeySession : EventTarget {
           readonly        attribute DOMString                            sessionId;
           readonly        attribute unrestricted double                  expiration;
        -  readonly        attribute Promise<MediaKeySessionClosedReason> closed;
        +  readonly        attribute Promise<MediaKeySessionClosedReason> closed;
           readonly        attribute MediaKeyStatusMap                    keyStatuses;
                           attribute EventHandler                         onkeystatuseschange;
                           attribute EventHandler                         onmessage;
        @@ -3897,7 +3929,7 @@ 

        Encrypted Media Extensions

    - closed of type Promise<MediaKeySessionClosedReason>, readonly + closed of type Promise<MediaKeySessionClosedReason>, readonly

    @@ -3932,7 +3964,7 @@

    Encrypted Media Extensions

    implement this member as follows: Whenever a non-empty list is appropriate, such as when the key session represented by this object may contain key(s), populate the map with a single pair containing the one-byte key ID 0 and the - MediaKeyStatus most appropriate for the aggregated status of this object. + MediaKeyStatus most appropriate for the aggregated status of this object.

    @@ -4212,7 +4244,7 @@

    Encrypted Media Extensions

  • If any of the preceding steps failed due to a lack of resources, reject - promise with QuotaExceededError. + promise with QuotaExceededError.

  • @@ -4337,7 +4369,7 @@

    Encrypted Media Extensions

    If there is a MediaKeySession object that is not closed in this object's Document whose sessionId attribute is sanitized session ID, - reject promise with a QuotaExceededError. + reject promise with a QuotaExceededError.

    Note

    In other words, do not create a session if a non-closed session, regardless @@ -4396,7 +4428,7 @@

    Encrypted Media Extensions

  • If there is a MediaKeySession object that is not closed in any Document and that represents the session - data, reject promise with a QuotaExceededError. + data, reject promise with a QuotaExceededError.

    Note

    In other words, do not create a session if a non-closed persistent @@ -4463,7 +4495,7 @@

    Encrypted Media Extensions

    If the loaded session contains information about any keys (there are known keys), run the Update Key Statuses algorithm on the session, providing each key's key ID along with the - appropriate MediaKeyStatus. + appropriate MediaKeyStatus.

    Should additional processing be necessary to determine with certainty the @@ -4775,7 +4807,7 @@

    Encrypted Media Extensions

    If the set of keys known to the CDM for this object changed or the status of any key(s) changed, run the Update Key Statuses algorithm on the session, providing each known key's key ID along with the appropriate - MediaKeyStatus. + MediaKeyStatus.

    Should additional processing be necessary to determine with @@ -5042,7 +5074,7 @@

    Encrypted Media Extensions

    Run the Update Key Statuses algorithm on the session, providing all key ID(s) in the session along with the - "released" MediaKeyStatus value for each. + "released" MediaKeyStatus value for each.

  • @@ -5109,10 +5141,10 @@

    Encrypted Media Extensions

    has been or is currently needed to decrypt media data.

    WebIDL[Exposed=Window, SecureContext] interface MediaKeyStatusMap {
    -  iterable<BufferSource,MediaKeyStatus>;
    +  iterable<BufferSource,MediaKeyStatus>;
       readonly attribute unsigned long size;
       boolean has (BufferSource keyId);
    -  (MediaKeyStatus or undefined) get (BufferSource keyId);
    +  (MediaKeyStatus or undefined) get (BufferSource keyId);
     };

    6.3.1 Attributes @@ -5148,7 +5180,7 @@

    Encrypted Media Extensions

  • - Returns the MediaKeyStatus of the key identified by keyId or + Returns the MediaKeyStatus of the key identified by keyId or undefined if the status of the key identified by keyId is not known.

    @@ -5161,7 +5193,7 @@

    Encrypted Media Extensions

    The value pairs to iterate over are a snapshot of the set of pairs formed from the - key ID and associated MediaKeyStatus value for all known keys, sorted by + key ID and associated MediaKeyStatus value for all known keys, sorted by key ID. Key IDs are compared as follows: For key IDs A of length m and B of length n, assigned such that m <= n, let A < B if and only if the m @@ -5169,13 +5201,13 @@

    Encrypted Media Extensions

    octets of B or those octets are equal and m < n.

    -
    WebIDLenum MediaKeyStatus {
    +        
    WebIDLenum MediaKeyStatus {
       "usable",
       "expired",
       "released",
       "output-restricted",
       "output-downscaled",
    -  "usable-in-future",
    +  "usable-in-future",
       "status-pending",
       "internal-error"
     };
    @@ -5500,7 +5532,7 @@

    Encrypted Media Extensions

    The Update Key Statuses algorithm updates the set of known keys for a MediaKeySession or the status of one or more of the keys. Requests to run this algorithm include a target MediaKeySession object and a sequence of key ID and - associated MediaKeyStatus pairs. + associated MediaKeyStatus pairs.

    Note

    The algorithm is always run in a task. @@ -5517,7 +5549,7 @@

    Encrypted Media Extensions

  • Let the input statuses be the sequence of pairs key ID and associated - MediaKeyStatus pairs. + MediaKeyStatus pairs.

  • @@ -5549,7 +5581,7 @@

    Encrypted Media Extensions

  • Insert an entry for pair's key ID into statuses with - the value of pair's MediaKeyStatus value. + the value of pair's MediaKeyStatus value.

  • @@ -5623,7 +5655,7 @@

    Encrypted Media Extensions

    The Session Closed algorithm updates the MediaKeySession state after a key session has been closed by the CDM. Requests to run this algorithm include a - target MediaKeySession object and a MediaKeySessionClosedReason. + target MediaKeySession object and a MediaKeySessionClosedReason.

    Note

    The algorithm is always run in a task. @@ -5754,7 +5786,7 @@

    Encrypted Media Extensions

    1. - Let statuses be a list of key ID and MediaKeyStatus value pairs + Let statuses be a list of key ID and MediaKeyStatus value pairs containing one pair for each key known to session.

    2. @@ -5790,7 +5822,7 @@

      Encrypted Media Extensions

      If cdm has closed session, queue a task to run the Session Closed algorithm on session with an appropriate - MediaKeySessionClosedReason value. + MediaKeySessionClosedReason value.

    3. @@ -6184,7 +6216,7 @@

      Encrypted Media Extensions

      then let this object's attaching media keys value be false and - reject promise with a QuotaExceededError. + reject promise with a QuotaExceededError.

    4. @@ -6714,7 +6746,7 @@

      Encrypted Media Extensions

      result of running the preceding step, queue a task to run the Update Key Statuses algorithm on each affected session, providing all key ID(s) in the session along with the appropriate - MediaKeyStatus value(s) for each. + MediaKeyStatus value(s) for each.

    5. @@ -7824,7 +7856,7 @@

      Encrypted Media Extensions

      1. - encryptionScheme: Implementations MUST + encryptionScheme: Implementations MUST support the "cenc" scheme, and MAY support other schemes.

      2. @@ -10455,7 +10487,9 @@

        Encrypted Media Extensions

        Referenced in: