| Index: Source/modules/encryptedmedia/MediaKeys.cpp
|
| diff --git a/Source/modules/encryptedmedia/MediaKeys.cpp b/Source/modules/encryptedmedia/MediaKeys.cpp
|
| index 6d87b29f40dc7f6b0968005d963c178e70e00259..d16220ce5a614a407cbc65aa8163e43e0efa91b0 100644
|
| --- a/Source/modules/encryptedmedia/MediaKeys.cpp
|
| +++ b/Source/modules/encryptedmedia/MediaKeys.cpp
|
| @@ -26,12 +26,10 @@
|
| #include "config.h"
|
| #include "modules/encryptedmedia/MediaKeys.h"
|
|
|
| -#if ENABLE(ENCRYPTED_MEDIA_V2)
|
| -
|
| #include "core/dom/EventNames.h"
|
| #include "core/html/HTMLMediaElement.h"
|
| #include "core/platform/UUID.h"
|
| -#include "modules/encryptedmedia/CDM.h"
|
| +#include "core/platform/graphics/ContentDecryptionModule.h"
|
| #include "modules/encryptedmedia/MediaKeyMessageEvent.h"
|
| #include "modules/encryptedmedia/MediaKeySession.h"
|
| #include "wtf/HashSet.h"
|
| @@ -40,7 +38,7 @@ namespace WebCore {
|
|
|
| PassRefPtr<MediaKeys> MediaKeys::create(const String& keySystem, ExceptionCode& ec)
|
| {
|
| - // From <http://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html#dom-media-keys-constructor>:
|
| + // From <http://dvcs.w3.org/hg/html-media/raw-file/default/encrypted-media/encrypted-media.html#dom-media-keys-constructor>:
|
| // The MediaKeys(keySystem) constructor must run the following steps:
|
|
|
| // 1. If keySystem is null or an empty string, throw an INVALID_ACCESS_ERR exception and abort these steps.
|
| @@ -50,14 +48,18 @@ PassRefPtr<MediaKeys> MediaKeys::create(const String& keySystem, ExceptionCode&
|
| }
|
|
|
| // 2. If keySystem is not one of the user agent's supported Key Systems, throw a NOT_SUPPORTED_ERR and abort these steps.
|
| - if (!CDM::supportsKeySystem(keySystem)) {
|
| + if (!ContentDecryptionModule::supportsKeySystem(keySystem)) {
|
| ec = NOT_SUPPORTED_ERR;
|
| return 0;
|
| }
|
|
|
| // 3. Let cdm be the content decryption module corresponding to keySystem.
|
| // 4. Load cdm if necessary.
|
| - OwnPtr<CDM> cdm = CDM::create(keySystem);
|
| + OwnPtr<ContentDecryptionModule> cdm = ContentDecryptionModule::create(keySystem);
|
| + if (!cdm) {
|
| + ec = NOT_SUPPORTED_ERR;
|
| + return 0;
|
| + }
|
|
|
| // 5. Create a new MediaKeys object.
|
| // 5.1 Let the keySystem attribute be keySystem.
|
| @@ -65,28 +67,25 @@ PassRefPtr<MediaKeys> MediaKeys::create(const String& keySystem, ExceptionCode&
|
| return adoptRef(new MediaKeys(keySystem, cdm.release()));
|
| }
|
|
|
| -MediaKeys::MediaKeys(const String& keySystem, PassOwnPtr<CDM> cdm)
|
| +MediaKeys::MediaKeys(const String& keySystem, PassOwnPtr<ContentDecryptionModule> cdm)
|
| : m_mediaElement(0)
|
| , m_keySystem(keySystem)
|
| , m_cdm(cdm)
|
| {
|
| ScriptWrappable::init(this);
|
| - m_cdm->setClient(this);
|
| }
|
|
|
| MediaKeys::~MediaKeys()
|
| {
|
| - // From <http://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html#dom-media-keys-constructor>:
|
| + // From <http://dvcs.w3.org/hg/html-media/raw-file/default/encrypted-media/encrypted-media.html#dom-media-keys-constructor>:
|
| // When destroying a MediaKeys object, follow the steps in close().
|
| - for (size_t i = 0; i < m_sessions.size(); ++i) {
|
| + for (size_t i = 0; i < m_sessions.size(); ++i)
|
| m_sessions[i]->close();
|
| - m_sessions[i]->setKeys(0);
|
| - }
|
| }
|
|
|
| PassRefPtr<MediaKeySession> MediaKeys::createSession(ScriptExecutionContext* context, const String& type, Uint8Array* initData, ExceptionCode& ec)
|
| {
|
| - // From <http://dvcs.w3.org/hg/html-media/raw-file/tip/encrypted-media/encrypted-media.html#dom-createsession>:
|
| + // From <http://dvcs.w3.org/hg/html-media/raw-file/default/encrypted-media/encrypted-media.html#dom-createsession>:
|
| // The createSession(type, initData) method must run the following steps:
|
| // Note: The contents of initData are container-specific Initialization Data.
|
|
|
| @@ -99,15 +98,18 @@ PassRefPtr<MediaKeySession> MediaKeys::createSession(ScriptExecutionContext* con
|
|
|
| // 2. If type contains a MIME type that is not supported or is not supported by the keySystem, throw
|
| // a NOT_SUPPORTED_ERR exception and abort these steps.
|
| - if (!type.isNull() && !type.isEmpty() && !m_cdm->supportsMIMEType(type)) {
|
| + ASSERT(!type.isNull() && !type.isEmpty());
|
| + if (type.isNull() || type.isEmpty() || !m_cdm->supportsMIMEType(type)) {
|
| ec = NOT_SUPPORTED_ERR;
|
| return 0;
|
| }
|
|
|
| // 3. Create a new MediaKeySession object.
|
| + RefPtr<MediaKeySession> session = MediaKeySession::create(context, *m_cdm, this);
|
| // 3.1 Let the keySystem attribute be keySystem.
|
| + ASSERT(!session->keySystem().isEmpty());
|
| // 3.2 Let the sessionId attribute be a unique Session ID string. It may be generated by cdm.
|
| - RefPtr<MediaKeySession> session = MediaKeySession::create(context, this, keySystem());
|
| + // This is handled by m_cdm and may happen asynchronously.
|
|
|
| // 4. Add the new object to an internal list of session objects.
|
| m_sessions.append(session);
|
| @@ -121,16 +123,10 @@ PassRefPtr<MediaKeySession> MediaKeys::createSession(ScriptExecutionContext* con
|
|
|
| void MediaKeys::setMediaElement(HTMLMediaElement* element)
|
| {
|
| + // FIXME: Cause HTMLMediaElement::setMediaKeys() to throw an exception if m_mediaElement is not 0.
|
| + // FIXME: Hook up the CDM to the WebMediaPlayer in Chromium.
|
| + ASSERT(!m_mediaElement);
|
| m_mediaElement = element;
|
| }
|
|
|
| -MediaPlayer* MediaKeys::cdmMediaPlayer(const CDM*) const
|
| -{
|
| - if (m_mediaElement)
|
| - return m_mediaElement->player();
|
| - return 0;
|
| -}
|
| -
|
| }
|
| -
|
| -#endif
|
|
|