OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h" | 6 #include "modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h" |
7 | 7 |
8 #include "bindings/core/v8/ExceptionState.h" | 8 #include "bindings/core/v8/ExceptionState.h" |
9 #include "bindings/core/v8/ScriptPromise.h" | 9 #include "bindings/core/v8/ScriptPromise.h" |
10 #include "bindings/core/v8/ScriptPromiseResolver.h" | 10 #include "bindings/core/v8/ScriptPromiseResolver.h" |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 // 1. If mediaKeys and the mediaKeys attribute are the same object, return | 300 // 1. If mediaKeys and the mediaKeys attribute are the same object, return |
301 // a promise resolved with undefined. | 301 // a promise resolved with undefined. |
302 if (thisElement.m_mediaKeys == mediaKeys) | 302 if (thisElement.m_mediaKeys == mediaKeys) |
303 return ScriptPromise::cast(scriptState, v8::Undefined(scriptState->isola
te())); | 303 return ScriptPromise::cast(scriptState, v8::Undefined(scriptState->isola
te())); |
304 | 304 |
305 // 2. Let promise be a new promise. Remaining steps done in handler. | 305 // 2. Let promise be a new promise. Remaining steps done in handler. |
306 return SetMediaKeysHandler::create(scriptState, element, mediaKeys); | 306 return SetMediaKeysHandler::create(scriptState, element, mediaKeys); |
307 } | 307 } |
308 | 308 |
309 // Create a MediaEncryptedEvent for WD EME. | 309 // Create a MediaEncryptedEvent for WD EME. |
310 static PassRefPtrWillBeRawPtr<Event> createEncryptedEvent(const String& initData
Type, const unsigned char* initData, unsigned initDataLength) | 310 static PassRefPtrWillBeRawPtr<Event> createEncryptedEvent(WebEncryptedMediaInitD
ataType initDataType, const unsigned char* initData, unsigned initDataLength) |
311 { | 311 { |
312 MediaEncryptedEventInit initializer; | 312 MediaEncryptedEventInit initializer; |
313 initializer.setInitDataType(initDataType); | 313 switch (initDataType) { |
| 314 case WebEncryptedMediaInitDataType::Cenc: |
| 315 initializer.setInitDataType("cenc"); |
| 316 break; |
| 317 case WebEncryptedMediaInitDataType::Keyids: |
| 318 initializer.setInitDataType("keyids"); |
| 319 break; |
| 320 case WebEncryptedMediaInitDataType::Webm: |
| 321 initializer.setInitDataType("webm"); |
| 322 break; |
| 323 case WebEncryptedMediaInitDataType::Unknown: |
| 324 initializer.setInitDataType(emptyString()); |
| 325 break; |
| 326 } |
314 initializer.setInitData(DOMArrayBuffer::create(initData, initDataLength)); | 327 initializer.setInitData(DOMArrayBuffer::create(initData, initDataLength)); |
315 initializer.setBubbles(false); | 328 initializer.setBubbles(false); |
316 initializer.setCancelable(false); | 329 initializer.setCancelable(false); |
317 | 330 |
318 return MediaEncryptedEvent::create(EventTypeNames::encrypted, initializer); | 331 return MediaEncryptedEvent::create(EventTypeNames::encrypted, initializer); |
319 } | 332 } |
320 | 333 |
321 // Create a 'needkey' MediaKeyEvent for v0.1b EME. | 334 // Create a 'needkey' MediaKeyEvent for v0.1b EME. |
322 static PassRefPtrWillBeRawPtr<Event> createWebkitNeedKeyEvent(const unsigned cha
r* initData, unsigned initDataLength) | 335 static PassRefPtrWillBeRawPtr<Event> createWebkitNeedKeyEvent(const unsigned cha
r* initData, unsigned initDataLength) |
323 { | 336 { |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 initializer.setKeySystem(keySystem); | 516 initializer.setKeySystem(keySystem); |
504 initializer.setSessionId(sessionId); | 517 initializer.setSessionId(sessionId); |
505 initializer.setMessage(DOMUint8Array::create(message, messageLength)); | 518 initializer.setMessage(DOMUint8Array::create(message, messageLength)); |
506 initializer.setDefaultURL(KURL(defaultURL)); | 519 initializer.setDefaultURL(KURL(defaultURL)); |
507 | 520 |
508 RefPtrWillBeRawPtr<Event> event = MediaKeyEvent::create(EventTypeNames::webk
itkeymessage, initializer); | 521 RefPtrWillBeRawPtr<Event> event = MediaKeyEvent::create(EventTypeNames::webk
itkeymessage, initializer); |
509 event->setTarget(&element); | 522 event->setTarget(&element); |
510 element.scheduleEvent(event.release()); | 523 element.scheduleEvent(event.release()); |
511 } | 524 } |
512 | 525 |
513 void HTMLMediaElementEncryptedMedia::encrypted(HTMLMediaElement& element, const
String& initDataType, const unsigned char* initData, unsigned initDataLength) | 526 void HTMLMediaElementEncryptedMedia::encrypted(HTMLMediaElement& element, WebEnc
ryptedMediaInitDataType initDataType, const unsigned char* initData, unsigned in
itDataLength) |
514 { | 527 { |
515 WTF_LOG(Media, "HTMLMediaElementEncryptedMedia::encrypted: initDataType=%s",
initDataType.utf8().data()); | 528 WTF_LOG(Media, "HTMLMediaElementEncryptedMedia::encrypted"); |
516 | 529 |
517 if (RuntimeEnabledFeatures::encryptedMediaEnabled()) { | 530 if (RuntimeEnabledFeatures::encryptedMediaEnabled()) { |
518 // Send event for WD EME. | 531 // Send event for WD EME. |
519 RefPtrWillBeRawPtr<Event> event; | 532 RefPtrWillBeRawPtr<Event> event; |
520 if (element.isMediaDataCORSSameOrigin(element.executionContext()->securi
tyOrigin())) { | 533 if (element.isMediaDataCORSSameOrigin(element.executionContext()->securi
tyOrigin())) { |
521 event = createEncryptedEvent(initDataType, initData, initDataLength)
; | 534 event = createEncryptedEvent(initDataType, initData, initDataLength)
; |
522 } else { | 535 } else { |
523 // Current page is not allowed to see content from the media file, | 536 // Current page is not allowed to see content from the media file, |
524 // so don't return the initData. However, they still get an event. | 537 // so don't return the initData. However, they still get an event. |
525 event = createEncryptedEvent(emptyString(), nullptr, 0); | 538 event = createEncryptedEvent(WebEncryptedMediaInitDataType::Unknown,
nullptr, 0); |
526 } | 539 } |
527 | 540 |
528 event->setTarget(&element); | 541 event->setTarget(&element); |
529 element.scheduleEvent(event.release()); | 542 element.scheduleEvent(event.release()); |
530 } | 543 } |
531 | 544 |
532 if (RuntimeEnabledFeatures::prefixedEncryptedMediaEnabled()) { | 545 if (RuntimeEnabledFeatures::prefixedEncryptedMediaEnabled()) { |
533 // Send event for v0.1b EME. | 546 // Send event for v0.1b EME. |
534 RefPtrWillBeRawPtr<Event> event = createWebkitNeedKeyEvent(initData, ini
tDataLength); | 547 RefPtrWillBeRawPtr<Event> event = createWebkitNeedKeyEvent(initData, ini
tDataLength); |
535 event->setTarget(&element); | 548 event->setTarget(&element); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 return thisElement.contentDecryptionModule(); | 610 return thisElement.contentDecryptionModule(); |
598 } | 611 } |
599 | 612 |
600 DEFINE_TRACE(HTMLMediaElementEncryptedMedia) | 613 DEFINE_TRACE(HTMLMediaElementEncryptedMedia) |
601 { | 614 { |
602 visitor->trace(m_mediaKeys); | 615 visitor->trace(m_mediaKeys); |
603 WillBeHeapSupplement<HTMLMediaElement>::trace(visitor); | 616 WillBeHeapSupplement<HTMLMediaElement>::trace(visitor); |
604 } | 617 } |
605 | 618 |
606 } // namespace blink | 619 } // namespace blink |
OLD | NEW |