OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Apple Inc. All rights reserved. | 2 * Copyright (C) 2013 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 Remove | 129 Remove |
130 }; | 130 }; |
131 | 131 |
132 Type getType() const { return m_type; } | 132 Type getType() const { return m_type; } |
133 | 133 |
134 const Persistent<ContentDecryptionModuleResult> result() const | 134 const Persistent<ContentDecryptionModuleResult> result() const |
135 { | 135 { |
136 return m_result; | 136 return m_result; |
137 } | 137 } |
138 | 138 |
139 DOMArrayBuffer* data() const | 139 const PassRefPtr<DOMArrayBuffer> data() const |
140 { | 140 { |
141 ASSERT(m_type == GenerateRequest || m_type == Update); | 141 ASSERT(m_type == GenerateRequest || m_type == Update); |
142 return m_data; | 142 return m_data; |
143 } | 143 } |
144 | 144 |
145 WebEncryptedMediaInitDataType initDataType() const | 145 WebEncryptedMediaInitDataType initDataType() const |
146 { | 146 { |
147 ASSERT(m_type == GenerateRequest); | 147 ASSERT(m_type == GenerateRequest); |
148 return m_initDataType; | 148 return m_initDataType; |
149 } | 149 } |
150 | 150 |
151 const String& sessionId() const | 151 const String& sessionId() const |
152 { | 152 { |
153 ASSERT(m_type == Load); | 153 ASSERT(m_type == Load); |
154 return m_stringData; | 154 return m_stringData; |
155 } | 155 } |
156 | 156 |
157 static PendingAction* CreatePendingGenerateRequest(ContentDecryptionModuleRe
sult* result, WebEncryptedMediaInitDataType initDataType, DOMArrayBuffer* initDa
ta) | 157 static PendingAction* CreatePendingGenerateRequest(ContentDecryptionModuleRe
sult* result, WebEncryptedMediaInitDataType initDataType, PassRefPtr<DOMArrayBuf
fer> initData) |
158 { | 158 { |
159 ASSERT(result); | 159 ASSERT(result); |
160 ASSERT(initData); | 160 ASSERT(initData); |
161 return new PendingAction(GenerateRequest, result, initDataType, initData
, String()); | 161 return new PendingAction(GenerateRequest, result, initDataType, initData
, String()); |
162 } | 162 } |
163 | 163 |
164 static PendingAction* CreatePendingLoadRequest(ContentDecryptionModuleResult
* result, const String& sessionId) | 164 static PendingAction* CreatePendingLoadRequest(ContentDecryptionModuleResult
* result, const String& sessionId) |
165 { | 165 { |
166 ASSERT(result); | 166 ASSERT(result); |
167 return new PendingAction(Load, result, WebEncryptedMediaInitDataType::Un
known, nullptr, sessionId); | 167 return new PendingAction(Load, result, WebEncryptedMediaInitDataType::Un
known, PassRefPtr<DOMArrayBuffer>(), sessionId); |
168 } | 168 } |
169 | 169 |
170 static PendingAction* CreatePendingUpdate(ContentDecryptionModuleResult* res
ult, DOMArrayBuffer* data) | 170 static PendingAction* CreatePendingUpdate(ContentDecryptionModuleResult* res
ult, PassRefPtr<DOMArrayBuffer> data) |
171 { | 171 { |
172 ASSERT(result); | 172 ASSERT(result); |
173 ASSERT(data); | 173 ASSERT(data); |
174 return new PendingAction(Update, result, WebEncryptedMediaInitDataType::
Unknown, data, String()); | 174 return new PendingAction(Update, result, WebEncryptedMediaInitDataType::
Unknown, data, String()); |
175 } | 175 } |
176 | 176 |
177 static PendingAction* CreatePendingClose(ContentDecryptionModuleResult* resu
lt) | 177 static PendingAction* CreatePendingClose(ContentDecryptionModuleResult* resu
lt) |
178 { | 178 { |
179 ASSERT(result); | 179 ASSERT(result); |
180 return new PendingAction(Close, result, WebEncryptedMediaInitDataType::U
nknown, nullptr, String()); | 180 return new PendingAction(Close, result, WebEncryptedMediaInitDataType::U
nknown, PassRefPtr<DOMArrayBuffer>(), String()); |
181 } | 181 } |
182 | 182 |
183 static PendingAction* CreatePendingRemove(ContentDecryptionModuleResult* res
ult) | 183 static PendingAction* CreatePendingRemove(ContentDecryptionModuleResult* res
ult) |
184 { | 184 { |
185 ASSERT(result); | 185 ASSERT(result); |
186 return new PendingAction(Remove, result, WebEncryptedMediaInitDataType::
Unknown, nullptr, String()); | 186 return new PendingAction(Remove, result, WebEncryptedMediaInitDataType::
Unknown, PassRefPtr<DOMArrayBuffer>(), String()); |
187 } | 187 } |
188 | 188 |
189 ~PendingAction() | 189 ~PendingAction() |
190 { | 190 { |
191 } | 191 } |
192 | 192 |
193 DEFINE_INLINE_TRACE() | 193 DEFINE_INLINE_TRACE() |
194 { | 194 { |
195 visitor->trace(m_result); | 195 visitor->trace(m_result); |
196 visitor->trace(m_data); | |
197 } | 196 } |
198 | 197 |
199 private: | 198 private: |
200 PendingAction(Type type, ContentDecryptionModuleResult* result, WebEncrypted
MediaInitDataType initDataType, DOMArrayBuffer* data, const String& stringData) | 199 PendingAction(Type type, ContentDecryptionModuleResult* result, WebEncrypted
MediaInitDataType initDataType, PassRefPtr<DOMArrayBuffer> data, const String& s
tringData) |
201 : m_type(type) | 200 : m_type(type) |
202 , m_result(result) | 201 , m_result(result) |
203 , m_initDataType(initDataType) | 202 , m_initDataType(initDataType) |
204 , m_data(data) | 203 , m_data(data) |
205 , m_stringData(stringData) | 204 , m_stringData(stringData) |
206 { | 205 { |
207 } | 206 } |
208 | 207 |
209 const Type m_type; | 208 const Type m_type; |
210 const Member<ContentDecryptionModuleResult> m_result; | 209 const Member<ContentDecryptionModuleResult> m_result; |
211 const WebEncryptedMediaInitDataType m_initDataType; | 210 const WebEncryptedMediaInitDataType m_initDataType; |
212 const Member<DOMArrayBuffer> m_data; | 211 const RefPtr<DOMArrayBuffer> m_data; |
213 const String m_stringData; | 212 const String m_stringData; |
214 }; | 213 }; |
215 | 214 |
216 // This class wraps the promise resolver used when initializing a new session | 215 // This class wraps the promise resolver used when initializing a new session |
217 // and is passed to Chromium to fullfill the promise. This implementation of | 216 // and is passed to Chromium to fullfill the promise. This implementation of |
218 // completeWithSession() will resolve the promise with void, while | 217 // completeWithSession() will resolve the promise with void, while |
219 // completeWithError() will reject the promise with an exception. complete() | 218 // completeWithError() will reject the promise with an exception. complete() |
220 // is not expected to be called, and will reject the promise. | 219 // is not expected to be called, and will reject the promise. |
221 class NewSessionResultPromise : public ContentDecryptionModuleResultPromise { | 220 class NewSessionResultPromise : public ContentDecryptionModuleResultPromise { |
222 public: | 221 public: |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 // (blink side doesn't know what the CDM supports, so the proper check | 426 // (blink side doesn't know what the CDM supports, so the proper check |
428 // will be done on the Chromium side. However, we can verify that | 427 // will be done on the Chromium side. However, we can verify that |
429 // |initDataType| is one of the registered values.) | 428 // |initDataType| is one of the registered values.) |
430 WebEncryptedMediaInitDataType initDataType = EncryptedMediaUtils::convertToI
nitDataType(initDataTypeString); | 429 WebEncryptedMediaInitDataType initDataType = EncryptedMediaUtils::convertToI
nitDataType(initDataTypeString); |
431 if (initDataType == WebEncryptedMediaInitDataType::Unknown) { | 430 if (initDataType == WebEncryptedMediaInitDataType::Unknown) { |
432 return ScriptPromise::rejectWithDOMException( | 431 return ScriptPromise::rejectWithDOMException( |
433 scriptState, DOMException::create(NotSupportedError, "The initializa
tion data type '" + initDataTypeString + "' is not supported.")); | 432 scriptState, DOMException::create(NotSupportedError, "The initializa
tion data type '" + initDataTypeString + "' is not supported.")); |
434 } | 433 } |
435 | 434 |
436 // 6. Let init data be a copy of the contents of the initData parameter. | 435 // 6. Let init data be a copy of the contents of the initData parameter. |
437 DOMArrayBuffer* initDataBuffer = DOMArrayBuffer::create(initData.data(), ini
tData.byteLength()); | 436 RefPtr<DOMArrayBuffer> initDataBuffer = DOMArrayBuffer::create(initData.data
(), initData.byteLength()); |
438 | 437 |
439 // 7. Let session type be this object's session type. | 438 // 7. Let session type be this object's session type. |
440 // (Done in constructor.) | 439 // (Done in constructor.) |
441 | 440 |
442 // 8. Let promise be a new promise. | 441 // 8. Let promise be a new promise. |
443 NewSessionResultPromise* result = new NewSessionResultPromise(scriptState, t
his); | 442 NewSessionResultPromise* result = new NewSessionResultPromise(scriptState, t
his); |
444 ScriptPromise promise = result->promise(); | 443 ScriptPromise promise = result->promise(); |
445 | 444 |
446 // 9. Run the following steps asynchronously (documented in | 445 // 9. Run the following steps asynchronously (documented in |
447 // actionTimerFired()) | 446 // actionTimerFired()) |
448 m_pendingActions.append(PendingAction::CreatePendingGenerateRequest(result,
initDataType, initDataBuffer)); | 447 m_pendingActions.append(PendingAction::CreatePendingGenerateRequest(result,
initDataType, initDataBuffer.release())); |
449 ASSERT(!m_actionTimer.isActive()); | 448 ASSERT(!m_actionTimer.isActive()); |
450 m_actionTimer.startOneShot(0, BLINK_FROM_HERE); | 449 m_actionTimer.startOneShot(0, BLINK_FROM_HERE); |
451 | 450 |
452 // 10. Return promise. | 451 // 10. Return promise. |
453 return promise; | 452 return promise; |
454 } | 453 } |
455 | 454 |
456 ScriptPromise MediaKeySession::load(ScriptState* scriptState, const String& sess
ionId) | 455 ScriptPromise MediaKeySession::load(ScriptState* scriptState, const String& sess
ionId) |
457 { | 456 { |
458 WTF_LOG(Media, "MediaKeySession(%p)::load %s", this, sessionId.ascii().data(
)); | 457 WTF_LOG(Media, "MediaKeySession(%p)::load %s", this, sessionId.ascii().data(
)); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 return CreateRejectedPromiseNotCallable(scriptState); | 521 return CreateRejectedPromiseNotCallable(scriptState); |
523 | 522 |
524 // 2. If response is an empty array, return a promise rejected with a | 523 // 2. If response is an empty array, return a promise rejected with a |
525 // new DOMException whose name is InvalidAccessError. | 524 // new DOMException whose name is InvalidAccessError. |
526 if (!response.byteLength()) { | 525 if (!response.byteLength()) { |
527 return ScriptPromise::rejectWithDOMException( | 526 return ScriptPromise::rejectWithDOMException( |
528 scriptState, DOMException::create(InvalidAccessError, "The response
parameter is empty.")); | 527 scriptState, DOMException::create(InvalidAccessError, "The response
parameter is empty.")); |
529 } | 528 } |
530 | 529 |
531 // 3. Let response copy be a copy of the contents of the response parameter. | 530 // 3. Let response copy be a copy of the contents of the response parameter. |
532 DOMArrayBuffer* responseCopy = DOMArrayBuffer::create(response.data(), respo
nse.byteLength()); | 531 RefPtr<DOMArrayBuffer> responseCopy = DOMArrayBuffer::create(response.data()
, response.byteLength()); |
533 | 532 |
534 // 4. Let promise be a new promise. | 533 // 4. Let promise be a new promise. |
535 SimpleContentDecryptionModuleResultPromise* result = new SimpleContentDecryp
tionModuleResultPromise(scriptState); | 534 SimpleContentDecryptionModuleResultPromise* result = new SimpleContentDecryp
tionModuleResultPromise(scriptState); |
536 ScriptPromise promise = result->promise(); | 535 ScriptPromise promise = result->promise(); |
537 | 536 |
538 // 5. Run the following steps asynchronously (documented in | 537 // 5. Run the following steps asynchronously (documented in |
539 // actionTimerFired()) | 538 // actionTimerFired()) |
540 m_pendingActions.append(PendingAction::CreatePendingUpdate(result, responseC
opy)); | 539 m_pendingActions.append(PendingAction::CreatePendingUpdate(result, responseC
opy.release())); |
541 if (!m_actionTimer.isActive()) | 540 if (!m_actionTimer.isActive()) |
542 m_actionTimer.startOneShot(0, BLINK_FROM_HERE); | 541 m_actionTimer.startOneShot(0, BLINK_FROM_HERE); |
543 | 542 |
544 // 6. Return promise. | 543 // 6. Return promise. |
545 return promise; | 544 return promise; |
546 } | 545 } |
547 | 546 |
548 ScriptPromise MediaKeySession::close(ScriptState* scriptState) | 547 ScriptPromise MediaKeySession::close(ScriptState* scriptState) |
549 { | 548 { |
550 WTF_LOG(Media, "MediaKeySession(%p)::close", this); | 549 WTF_LOG(Media, "MediaKeySession(%p)::close", this); |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 visitor->trace(m_asyncEventQueue); | 922 visitor->trace(m_asyncEventQueue); |
924 visitor->trace(m_pendingActions); | 923 visitor->trace(m_pendingActions); |
925 visitor->trace(m_mediaKeys); | 924 visitor->trace(m_mediaKeys); |
926 visitor->trace(m_keyStatusesMap); | 925 visitor->trace(m_keyStatusesMap); |
927 visitor->trace(m_closedPromise); | 926 visitor->trace(m_closedPromise); |
928 RefCountedGarbageCollectedEventTargetWithInlineData<MediaKeySession>::trace(
visitor); | 927 RefCountedGarbageCollectedEventTargetWithInlineData<MediaKeySession>::trace(
visitor); |
929 ActiveDOMObject::trace(visitor); | 928 ActiveDOMObject::trace(visitor); |
930 } | 929 } |
931 | 930 |
932 } // namespace blink | 931 } // namespace blink |
OLD | NEW |