| 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: initDataType=%d",
initDataType); |
| 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 |