| 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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 | 241 |
| 242 void SetMediaKeysHandler::trace(Visitor* visitor) | 242 void SetMediaKeysHandler::trace(Visitor* visitor) |
| 243 { | 243 { |
| 244 visitor->trace(m_element); | 244 visitor->trace(m_element); |
| 245 visitor->trace(m_newMediaKeys); | 245 visitor->trace(m_newMediaKeys); |
| 246 ScriptPromiseResolver::trace(visitor); | 246 ScriptPromiseResolver::trace(visitor); |
| 247 } | 247 } |
| 248 | 248 |
| 249 HTMLMediaElementEncryptedMedia::HTMLMediaElementEncryptedMedia() | 249 HTMLMediaElementEncryptedMedia::HTMLMediaElementEncryptedMedia() |
| 250 : m_emeMode(EmeModeNotSelected) | 250 : m_emeMode(EmeModeNotSelected) |
| 251 , m_isWaitingForKey(false) |
| 251 { | 252 { |
| 252 } | 253 } |
| 253 | 254 |
| 254 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(HTMLMediaElementEncryptedMedia) | 255 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(HTMLMediaElementEncryptedMedia) |
| 255 | 256 |
| 256 const char* HTMLMediaElementEncryptedMedia::supplementName() | 257 const char* HTMLMediaElementEncryptedMedia::supplementName() |
| 257 { | 258 { |
| 258 return "HTMLMediaElementEncryptedMedia"; | 259 return "HTMLMediaElementEncryptedMedia"; |
| 259 } | 260 } |
| 260 | 261 |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 } | 530 } |
| 530 | 531 |
| 531 if (RuntimeEnabledFeatures::prefixedEncryptedMediaEnabled()) { | 532 if (RuntimeEnabledFeatures::prefixedEncryptedMediaEnabled()) { |
| 532 // Send event for v0.1b EME. | 533 // Send event for v0.1b EME. |
| 533 RefPtrWillBeRawPtr<Event> event = createWebkitNeedKeyEvent(initData, ini
tDataLength); | 534 RefPtrWillBeRawPtr<Event> event = createWebkitNeedKeyEvent(initData, ini
tDataLength); |
| 534 event->setTarget(&element); | 535 event->setTarget(&element); |
| 535 element.scheduleEvent(event.release()); | 536 element.scheduleEvent(event.release()); |
| 536 } | 537 } |
| 537 } | 538 } |
| 538 | 539 |
| 540 void HTMLMediaElementEncryptedMedia::didBlockPlaybackWaitingForKey(HTMLMediaElem
ent& element) |
| 541 { |
| 542 WTF_LOG(Media, "HTMLMediaElementEncryptedMedia::didBlockPlaybackWaitingForKe
y"); |
| 543 |
| 544 // From https://w3c.github.io/encrypted-media/#queue-waitingforkey: |
| 545 // It should only be called when the HTMLMediaElement object is potentially |
| 546 // playing and its readyState is equal to HAVE_FUTURE_DATA or greater. |
| 547 // FIXME: Is this really required? |
| 548 |
| 549 // 1. Let the media element be the specified HTMLMediaElement object. |
| 550 HTMLMediaElementEncryptedMedia& thisElement = HTMLMediaElementEncryptedMedia
::from(element); |
| 551 |
| 552 // 2. If the media element's waiting for key value is false, queue a task |
| 553 // to fire a simple event named waitingforkey at the media element. |
| 554 if (!thisElement.m_isWaitingForKey) { |
| 555 RefPtrWillBeRawPtr<Event> event = Event::create(EventTypeNames::waitingf
orkey); |
| 556 event->setTarget(&element); |
| 557 element.scheduleEvent(event.release()); |
| 558 } |
| 559 |
| 560 // 3. Set the media element's waiting for key value to true. |
| 561 thisElement.m_isWaitingForKey = true; |
| 562 |
| 563 // 4. Suspend playback. |
| 564 // (Already done on the Chromium side by the decryptors.) |
| 565 } |
| 566 |
| 567 void HTMLMediaElementEncryptedMedia::didResumePlaybackBlockedForKey(HTMLMediaEle
ment& element) |
| 568 { |
| 569 WTF_LOG(Media, "HTMLMediaElementEncryptedMedia::didResumePlaybackBlockedForK
ey"); |
| 570 |
| 571 // Logic is on the Chromium side to attempt to resume playback when a new |
| 572 // key is available. However, |m_isWaitingForKey| needs to be cleared so |
| 573 // that a later waitingForKey() call can generate the event. |
| 574 HTMLMediaElementEncryptedMedia& thisElement = HTMLMediaElementEncryptedMedia
::from(element); |
| 575 thisElement.m_isWaitingForKey = false; |
| 576 } |
| 577 |
| 539 void HTMLMediaElementEncryptedMedia::playerDestroyed(HTMLMediaElement& element) | 578 void HTMLMediaElementEncryptedMedia::playerDestroyed(HTMLMediaElement& element) |
| 540 { | 579 { |
| 541 #if ENABLE(OILPAN) | 580 #if ENABLE(OILPAN) |
| 542 // FIXME: Oilpan: remove this once the media player is on the heap. crbug.co
m/378229 | 581 // FIXME: Oilpan: remove this once the media player is on the heap. crbug.co
m/378229 |
| 543 if (element.isFinalizing()) | 582 if (element.isFinalizing()) |
| 544 return; | 583 return; |
| 545 #endif | 584 #endif |
| 546 | 585 |
| 547 HTMLMediaElementEncryptedMedia& thisElement = HTMLMediaElementEncryptedMedia
::from(element); | 586 HTMLMediaElementEncryptedMedia& thisElement = HTMLMediaElementEncryptedMedia
::from(element); |
| 548 if (!thisElement.m_mediaKeys) | 587 if (!thisElement.m_mediaKeys) |
| 549 return; | 588 return; |
| 550 | 589 |
| 551 ASSERT(thisElement.m_emeMode == EmeModeUnprefixed); | 590 ASSERT(thisElement.m_emeMode == EmeModeUnprefixed); |
| 552 thisElement.m_mediaKeys.clear(); | 591 thisElement.m_mediaKeys.clear(); |
| 553 } | 592 } |
| 554 | 593 |
| 555 WebContentDecryptionModule* HTMLMediaElementEncryptedMedia::contentDecryptionMod
ule(HTMLMediaElement& element) | 594 WebContentDecryptionModule* HTMLMediaElementEncryptedMedia::contentDecryptionMod
ule(HTMLMediaElement& element) |
| 556 { | 595 { |
| 557 HTMLMediaElementEncryptedMedia& thisElement = HTMLMediaElementEncryptedMedia
::from(element); | 596 HTMLMediaElementEncryptedMedia& thisElement = HTMLMediaElementEncryptedMedia
::from(element); |
| 558 return thisElement.contentDecryptionModule(); | 597 return thisElement.contentDecryptionModule(); |
| 559 } | 598 } |
| 560 | 599 |
| 561 void HTMLMediaElementEncryptedMedia::trace(Visitor* visitor) | 600 void HTMLMediaElementEncryptedMedia::trace(Visitor* visitor) |
| 562 { | 601 { |
| 563 visitor->trace(m_mediaKeys); | 602 visitor->trace(m_mediaKeys); |
| 564 WillBeHeapSupplement<HTMLMediaElement>::trace(visitor); | 603 WillBeHeapSupplement<HTMLMediaElement>::trace(visitor); |
| 565 } | 604 } |
| 566 | 605 |
| 567 } // namespace blink | 606 } // namespace blink |
| OLD | NEW |