Commit f3624458 authored by jrummell@chromium.org's avatar jrummell@chromium.org

Update MediaKeySession events to match latest EME spec

The current prefixed event names used (e.g. webkitkeymessage, etc.) don't match
the event names in the latest EME spec, so this change updates them.  Also add
new event 'close', which wasn't specified in earlier versions of the spec.

BUG=224786
TEST=content_shell tests updated with new event names (and pass)

Review URL: https://codereview.chromium.org/124253003

git-svn-id: svn://svn.chromium.org/blink/trunk@165023 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 5f2ed544
......@@ -2,10 +2,10 @@ This tests the events created by MediaKeys.
RUN(mediaKeys = new MediaKeys("org.w3.clearkey"))
RUN(mediaKeySession = mediaKeys.createSession("video/webm", initData))
EVENT(webkitkeymessage)
EVENT(message)
RUN(mediaKeySession.update(invalidKey))
EVENT(webkitkeyerror)
EVENT(error)
RUN(mediaKeySession.update(validKey))
EVENT(webkitkeyadded)
EVENT(ready)
END OF TEST
......@@ -23,17 +23,17 @@
{
run('mediaKeys = new MediaKeys("org.w3.clearkey")');
run('mediaKeySession = mediaKeys.createSession("video/webm", initData)');
waitForEvent('webkitkeymessage', keyMessage, false, false, mediaKeySession);
waitForEvent('webkitkeyerror', keyError, false, false, mediaKeySession);
waitForEvent('webkitkeyadded', null, true, false, mediaKeySession);
waitForEvent('message', processMessage, false, false, mediaKeySession);
waitForEvent('error', processError, false, false, mediaKeySession);
waitForEvent('ready', null, true, false, mediaKeySession);
}
function keyMessage(event)
function processMessage(event)
{
run('mediaKeySession.update(invalidKey)');
}
function keyError(event)
function processError(event)
{
run('mediaKeySession.update(validKey)');
}
......
......@@ -137,6 +137,7 @@ playing
popstate
progress
ratechange
ready
readystatechange
removesourcebuffer
removestream
......
......@@ -132,15 +132,36 @@ void MediaKeySession::updateTimerFired(Timer<MediaKeySession>*)
}
}
void MediaKeySession::keyAdded()
// Queue a task to fire a simple event named keymessage at the new object
void MediaKeySession::message(const unsigned char* message, size_t messageLength, const KURL& destinationURL)
{
RefPtr<Event> event = Event::create(EventTypeNames::webkitkeyadded);
MediaKeyMessageEventInit init;
init.bubbles = false;
init.cancelable = false;
init.message = Uint8Array::create(message, messageLength);
init.destinationURL = destinationURL;
RefPtr<MediaKeyMessageEvent> event = MediaKeyMessageEvent::create(EventTypeNames::message, init);
event->setTarget(this);
m_asyncEventQueue->enqueueEvent(event.release());
}
void MediaKeySession::ready()
{
RefPtr<Event> event = Event::create(EventTypeNames::ready);
event->setTarget(this);
m_asyncEventQueue->enqueueEvent(event.release());
}
void MediaKeySession::close()
{
RefPtr<Event> event = Event::create(EventTypeNames::close);
event->setTarget(this);
m_asyncEventQueue->enqueueEvent(event.release());
}
// Queue a task to fire a simple event named keyadded at the MediaKeySession object.
void MediaKeySession::keyError(MediaKeyErrorCode errorCode, unsigned long systemCode)
void MediaKeySession::error(MediaKeyErrorCode errorCode, unsigned long systemCode)
{
MediaKeyError::Code mediaKeyErrorCode = MediaKeyError::MEDIA_KEYERR_UNKNOWN;
switch (errorCode) {
......@@ -159,21 +180,7 @@ void MediaKeySession::keyError(MediaKeyErrorCode errorCode, unsigned long system
m_error = MediaKeyError::create(mediaKeyErrorCode, systemCode);
// 3. queue a task to fire a simple event named keyerror at the MediaKeySession object.
RefPtr<Event> event = Event::create(EventTypeNames::webkitkeyerror);
event->setTarget(this);
m_asyncEventQueue->enqueueEvent(event.release());
}
// Queue a task to fire a simple event named keymessage at the new object
void MediaKeySession::keyMessage(const unsigned char* message, size_t messageLength, const KURL& destinationURL)
{
MediaKeyMessageEventInit init;
init.bubbles = false;
init.cancelable = false;
init.message = Uint8Array::create(message, messageLength);
init.destinationURL = destinationURL;
RefPtr<MediaKeyMessageEvent> event = MediaKeyMessageEvent::create(EventTypeNames::webkitkeymessage, init);
RefPtr<Event> event = Event::create(EventTypeNames::error);
event->setTarget(this);
m_asyncEventQueue->enqueueEvent(event.release());
}
......
......@@ -70,10 +70,6 @@ public:
void enqueueEvent(PassRefPtr<Event>);
DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyadded);
DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyerror);
DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeymessage);
virtual const AtomicString& interfaceName() const OVERRIDE;
virtual ExecutionContext* executionContext() const OVERRIDE;
......@@ -83,9 +79,10 @@ private:
void updateTimerFired(Timer<MediaKeySession>*);
// ContentDecryptionModuleSessionClient
virtual void keyAdded() OVERRIDE;
virtual void keyError(MediaKeyErrorCode, unsigned long systemCode) OVERRIDE;
virtual void keyMessage(const unsigned char* message, size_t messageLength, const KURL& destinationURL) OVERRIDE;
virtual void message(const unsigned char* message, size_t messageLength, const KURL& destinationURL) OVERRIDE;
virtual void ready() OVERRIDE;
virtual void close() OVERRIDE;
virtual void error(MediaKeyErrorCode, unsigned long systemCode) OVERRIDE;
String m_keySystem;
RefPtr<MediaKeyError> m_error;
......
......@@ -36,9 +36,4 @@
// session operations
[RaisesException] void update(Uint8Array response);
[RaisesException] void release();
// EventHandlers
[RuntimeEnabled=EncryptedMedia] attribute EventHandler onwebkitkeyadded;
[RuntimeEnabled=EncryptedMedia] attribute EventHandler onwebkitkeyerror;
[RuntimeEnabled=EncryptedMedia] attribute EventHandler onwebkitkeymessage;
};
......@@ -70,19 +70,24 @@ void ContentDecryptionModuleSession::release()
m_session->release();
}
void ContentDecryptionModuleSession::keyAdded()
void ContentDecryptionModuleSession::message(const unsigned char* message, size_t messageLength, const blink::WebURL& destinationURL)
{
m_client->keyAdded();
m_client->message(message, messageLength, destinationURL);
}
void ContentDecryptionModuleSession::keyError(MediaKeyErrorCode errorCode, unsigned long systemCode)
void ContentDecryptionModuleSession::ready()
{
m_client->keyError(static_cast<ContentDecryptionModuleSessionClient::MediaKeyErrorCode>(errorCode), systemCode);
m_client->ready();
}
void ContentDecryptionModuleSession::keyMessage(const unsigned char* message, size_t messageLength, const blink::WebURL& destinationURL)
void ContentDecryptionModuleSession::close()
{
m_client->keyMessage(message, messageLength, destinationURL);
m_client->close();
}
void ContentDecryptionModuleSession::error(MediaKeyErrorCode errorCode, unsigned long systemCode)
{
m_client->error(static_cast<ContentDecryptionModuleSessionClient::MediaKeyErrorCode>(errorCode), systemCode);
}
} // namespace WebCore
......@@ -49,9 +49,10 @@ class KURL;
class PLATFORM_EXPORT ContentDecryptionModuleSessionClient {
public:
enum MediaKeyErrorCode { UnknownError = 1, ClientError };
virtual void keyAdded() = 0;
virtual void keyError(MediaKeyErrorCode, unsigned long systemCode) = 0;
virtual void keyMessage(const unsigned char* message, size_t messageLength, const KURL& destinationURL) = 0;
virtual void message(const unsigned char* message, size_t messageLength, const KURL& destinationURL) = 0;
virtual void ready() = 0;
virtual void close() = 0;
virtual void error(MediaKeyErrorCode, unsigned long systemCode) = 0;
};
class PLATFORM_EXPORT ContentDecryptionModuleSession : private blink::WebContentDecryptionModuleSession::Client {
......@@ -69,9 +70,10 @@ public:
private:
// blink::WebContentDecryptionModuleSession::Client
virtual void keyAdded() OVERRIDE;
virtual void keyError(MediaKeyErrorCode, unsigned long systemCode) OVERRIDE;
virtual void keyMessage(const unsigned char* message, size_t messageLength, const blink::WebURL& destinationURL) OVERRIDE;
virtual void message(const unsigned char* message, size_t messageLength, const blink::WebURL& destinationURL) OVERRIDE;
virtual void ready() OVERRIDE;
virtual void close() OVERRIDE;
virtual void error(MediaKeyErrorCode, unsigned long systemCode) OVERRIDE;
OwnPtr<blink::WebContentDecryptionModuleSession> m_session;
......
......@@ -47,9 +47,15 @@ public:
MediaKeyErrorCodeClient,
};
virtual void keyAdded() = 0;
virtual void keyError(MediaKeyErrorCode, unsigned long systemCode) = 0;
virtual void keyMessage(const unsigned char* message, size_t messageLength, const blink::WebURL& destinationURL) = 0;
virtual void message(const unsigned char* message, size_t messageLength, const blink::WebURL& destinationURL) = 0;
virtual void ready() = 0;
virtual void close() = 0;
virtual void error(MediaKeyErrorCode, unsigned long systemCode) = 0;
// FIXME: Remove when all callers change to using the methods above.
virtual void keyMessage(const unsigned char* actualMessage, size_t messageLength, const blink::WebURL& destinationURL) { message(actualMessage, messageLength, destinationURL); }
virtual void keyAdded() { ready(); }
virtual void keyError(MediaKeyErrorCode errorCode, unsigned long systemCode) { error(errorCode, systemCode); }
protected:
virtual ~Client();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment