| Index: Source/modules/encryptedmedia/MediaKeys.cpp
|
| diff --git a/Source/modules/encryptedmedia/MediaKeys.cpp b/Source/modules/encryptedmedia/MediaKeys.cpp
|
| index 1ffe133cafd67cb3afaaf4cf217e212fe7f7d5e3..f8fb73c65f03fe3dc71916a79dc89d29b988a946 100644
|
| --- a/Source/modules/encryptedmedia/MediaKeys.cpp
|
| +++ b/Source/modules/encryptedmedia/MediaKeys.cpp
|
| @@ -42,8 +42,9 @@
|
| #include "platform/UUID.h"
|
| #include "public/platform/Platform.h"
|
| #include "public/platform/WebContentDecryptionModule.h"
|
| +#include "wtf/ArrayBuffer.h"
|
| +#include "wtf/ArrayBufferView.h"
|
| #include "wtf/RefPtr.h"
|
| -#include "wtf/Uint8Array.h"
|
|
|
| #if ENABLE(ASSERT)
|
| namespace {
|
| @@ -197,9 +198,21 @@ MediaKeys::~MediaKeys()
|
| WTF_LOG(Media, "MediaKeys(%p)::~MediaKeys", this);
|
| }
|
|
|
| -ScriptPromise MediaKeys::createSession(ScriptState* scriptState, const String& initDataType, Uint8Array* initData, const String& sessionType)
|
| +ScriptPromise MediaKeys::createSession(ScriptState* scriptState, const String& initDataType, ArrayBuffer* initData, const String& sessionType)
|
| {
|
| - WTF_LOG(Media, "MediaKeys(%p)::createSession(%s, %d)", this, initDataType.ascii().data(), initData->length());
|
| + RefPtr<ArrayBuffer> initDataCopy = ArrayBuffer::create(initData->data(), initData->byteLength());
|
| + return createSessionInternal(scriptState, initDataType, initDataCopy.release(), sessionType);
|
| +}
|
| +
|
| +ScriptPromise MediaKeys::createSession(ScriptState* scriptState, const String& initDataType, ArrayBufferView* initData, const String& sessionType)
|
| +{
|
| + RefPtr<ArrayBuffer> initDataCopy = ArrayBuffer::create(initData->baseAddress(), initData->byteLength());
|
| + return createSessionInternal(scriptState, initDataType, initDataCopy.release(), sessionType);
|
| +}
|
| +
|
| +ScriptPromise MediaKeys::createSessionInternal(ScriptState* scriptState, const String& initDataType, PassRefPtr<ArrayBuffer> initData, const String& sessionType)
|
| +{
|
| + WTF_LOG(Media, "MediaKeys(%p)::createSession(%s, %d)", this, initDataType.ascii().data(), initData->byteLength());
|
|
|
| // From <http://dvcs.w3.org/hg/html-media/raw-file/default/encrypted-media/encrypted-media.html#dom-createsession>:
|
| // The createSession(initDataType, initData, sessionType) method creates a
|
| @@ -213,7 +226,7 @@ ScriptPromise MediaKeys::createSession(ScriptState* scriptState, const String& i
|
|
|
| // 2. If initData is an empty array, return a promise rejected with a new
|
| // DOMException whose name is"InvalidAccessError".
|
| - if (!initData->length()) {
|
| + if (!initData->byteLength()) {
|
| return createRejectedPromise(scriptState, InvalidAccessError, "The initData parameter is empty.");
|
| }
|
|
|
| @@ -233,12 +246,11 @@ ScriptPromise MediaKeys::createSession(ScriptState* scriptState, const String& i
|
| ASSERT(sessionType == kTemporary || sessionType == kPersistent);
|
|
|
| // 5. Let init data be a copy of the contents of the initData parameter.
|
| - RefPtr<Uint8Array> initDataCopy = Uint8Array::create(initData->data(), initData->length());
|
| -
|
| + // (Copied in the caller.)
|
| // 6. Let promise be a new promise.
|
| // 7. Asynchronously create and initialize the session.
|
| // 8. Return promise.
|
| - return MediaKeySession::create(scriptState, this, initDataType, initDataCopy.release(), sessionType);
|
| + return MediaKeySession::create(scriptState, this, initDataType, initData, sessionType);
|
| }
|
|
|
| bool MediaKeys::isTypeSupported(const String& keySystem, const String& contentType)
|
|
|