[Bug 17199] Provide examples for and get feedback on Key Release

https://www.w3.org/Bugs/Public/show_bug.cgi?id=17199

--- Comment #8 from Mark Watson <watsonm@netflix.com> ---
Text proposal based on the above discussion:

(add to 4.1)
The following sections apply only in the case that both UA and Key System
support secure proof of key release.

4.2 Persistent storage of key release messages

The CDM must provide an origin-specific persistent store of proof of key
release messages, each associated with a sessionId.

4.3 Providing a key release message

Whenever a key is deleted due to execution of a method on MediaKeySession, the
following steps shall be run:

    1. Construct a proof of key release message, containing proof that the keys
and licenses associated with the session were deleted and the time at which
they were deleted.
    2. Store the proof of key release message, together with the associated
sessionId, in the persistent store.
    3. Queue a task to fire a simple event named keymessage at the
MediaKeySession object containing the message constructed at step one.

    Note: the following methods of MediaKeySession may cause keys to be
deleted: close(), update().

If a MediaKeySession object is destroyed whilst keys are still present, for
example due to closure of the window or navigation of the document, the
following steps SHALL be run:

    1. Construct a proof of key release message, containing proof that the keys
and licenses associated with the session were deleted and the time at which
they were deleted.
    2. Store the proof of key release message in persistent store.

Furthermore, the following step SHOULD be run:

    3. Fire a simple event named keymessage at the MediaKeySession object
containing the message constructed at step one.

4.4 Acknowledging receipt of a key release message

Proof of receipt of the secure proof of key release by the server shall be
provided within KeySystem-specific messages using the update() method of
MediaKeySession. The following steps are added to step 2, substep 4 of the
update() procedure:

    3. For each acknowledgement of receipt of a secure proof of key release in
key:
        1. Remove the proof of key release message associated with sessionId
from persistent store

4.5 Retrieving stored key release messages

Step 2 of the procedure for the createSession() method of MediaKeys is modified
by the introduction of a new step 1a as follows:

    1a. If type is equal to the special string "keyrelease", then the 'retrieve
a session with released key(s)' procedure shall be executed and the following
steps aborted.

When the 'retrieve a session with released key(s)' procedure is to be executed
the following steps are run:

    1. Let sessionId be the sessionId associated with the oldest proof of key
release message in the persistent store for which no MediaKeySession object
exists. If no such sessionId exists, thow a NOT_FOUND_ERR exeception and abort
the procedure.
    2. Create a new MediaKeySession object
        1. Let the keySystem attribute be keySystem
        2. Let the sessionId attribute be sessionId
    3. Add the new object to an internal list of session objects
    4. Schedule a task to generate a key release message, providing initData
and the new object

        The user agent will asynchronously execute the following steps in the
task:

            1. Let cdm be the cdm loaded in the MediaKeys constructor
            2. Let defaultURL be null
            3. Use cdm to generate a key release message and follow the  steps
for the first matching condition from the following list:

                - If a key release message is sucessfully retrieved
                    1. Let keyrelease be the key release message generated by
the CDM using initData, if provided
                    2. If initData was not null and contains a default URL for
keySystem, let defaultURL be that URL
                - Otherwise
                    1. Create a new MediaKeyError object with the following
attributes
                        code = the appropriate MediaKeyError code
                        systemCode = a Key System-specific value, if provided,
and 0 otherwise
                    2. Set the MediaKeySession object's error attribute to the
error object created in the previous step
                    3. queue a task to fire a simple event named keyerror at
the MediaKeySession object
                    4. Abort the task

            4. queue a task to fire a simple event named keymessage at the new
object
            The event if of type MediaKeyMessageEvent and has:
                message = keyrelease
                destinationURL = defaultURL

    5. Return the new object to the caller.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Monday, 15 October 2012 19:33:16 UTC