Changeset 225642 in webkit


Ignore:
Timestamp:
Dec 7, 2017 1:04:21 PM (6 years ago)
Author:
jer.noble@apple.com
Message:

[EME] Support the 'encrypted' event for FPS encrypted streams
https://bugs.webkit.org/show_bug.cgi?id=180480

Reviewed by Eric Carlson.

Source/WebCore:

Test: platform/mac/media/encrypted-media/fps-encrypted-event.html

Pass initData and initDataType up to HTMLMediaElement from SourceBufferPrivateAVFObjC.

Drive-by fix: initialize the initData and initDataType values of MediaEncryptedEvent from
values in its initializer struct.

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
(WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered):

  • html/MediaEncryptedEvent.cpp:

(WebCore::MediaEncryptedEvent::MediaEncryptedEvent):
(WebCore::MediaEncryptedEvent::initDataType): Deleted.
(WebCore::MediaEncryptedEvent::initData): Deleted.

  • html/MediaEncryptedEvent.h:
  • platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
  • platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceAttached):

  • platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

(WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):

LayoutTests:

  • platform/mac/TestExpectations:
  • platform/mac/media/encrypted-media/content/fps-cbcs.mp4: Added.
  • platform/mac/media/encrypted-media/fps-encrypted-event-expected.txt: Added.
  • platform/mac/media/encrypted-media/fps-encrypted-event.html: Added.
Location:
trunk
Files:
4 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r225641 r225642  
     12017-12-07  Jer Noble  <jer.noble@apple.com>
     2
     3        [EME] Support the 'encrypted' event for FPS encrypted streams
     4        https://bugs.webkit.org/show_bug.cgi?id=180480
     5
     6        Reviewed by Eric Carlson.
     7
     8        * platform/mac/TestExpectations:
     9        * platform/mac/media/encrypted-media/content/fps-cbcs.mp4: Added.
     10        * platform/mac/media/encrypted-media/fps-encrypted-event-expected.txt: Added.
     11        * platform/mac/media/encrypted-media/fps-encrypted-event.html: Added.
     12
    1132017-12-07  Myles C. Maxfield  <mmaxfield@apple.com>
    214
  • trunk/LayoutTests/platform/mac/TestExpectations

    r225641 r225642  
    17481748[ ElCapitan Sierra ] platform/mac/media/encrypted-media/fps-createSession.html [ Skip ]
    17491749[ ElCapitan Sierra ] platform/mac/media/encrypted-media/fps-generateRequest.html [ Skip ]
     1750[ ElCapitan Sierra ] platform/mac/media/encrypted-media/fps-encrypted-event.html [ Skip ]
    17501751
    17511752# rdar://problem/35395437
  • trunk/Source/WebCore/ChangeLog

    r225641 r225642  
     12017-12-07  Jer Noble  <jer.noble@apple.com>
     2
     3        [EME] Support the 'encrypted' event for FPS encrypted streams
     4        https://bugs.webkit.org/show_bug.cgi?id=180480
     5
     6        Reviewed by Eric Carlson.
     7
     8        Test: platform/mac/media/encrypted-media/fps-encrypted-event.html
     9
     10        Pass initData and initDataType up to HTMLMediaElement from SourceBufferPrivateAVFObjC.
     11
     12        Drive-by fix: initialize the initData and initDataType values of MediaEncryptedEvent from
     13        values in its initializer struct.
     14
     15        * html/HTMLMediaElement.cpp:
     16        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
     17        (WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered):
     18        * html/MediaEncryptedEvent.cpp:
     19        (WebCore::MediaEncryptedEvent::MediaEncryptedEvent):
     20        (WebCore::MediaEncryptedEvent::initDataType): Deleted.
     21        (WebCore::MediaEncryptedEvent::initData): Deleted.
     22        * html/MediaEncryptedEvent.h:
     23        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
     24        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
     25        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceAttached):
     26        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
     27        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
     28
    1292017-12-07  Myles C. Maxfield  <mmaxfield@apple.com>
    230
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r225477 r225642  
    25852585        return false;
    25862586
    2587     if (!hasEventListeners("webkitneedkey")) {
     2587    if (!hasEventListeners("webkitneedkey")
     2588#if ENABLE(ENCRYPTED_MEDIA)
     2589        // Only fire an error if ENCRYPTED_MEDIA is not enabled, to give clients of the
     2590        // "encrypted" event a chance to handle it without resulting in a synthetic error.
     2591        && !RuntimeEnabledFeatures::sharedFeatures().encryptedMediaAPIEnabled()
     2592#endif
     2593        ) {
    25882594        m_error = MediaError::create(MediaError::MEDIA_ERR_ENCRYPTED);
    25892595        scheduleEvent(eventNames().errorEvent);
     
    27192725void HTMLMediaElement::mediaPlayerInitializationDataEncountered(const String& initDataType, RefPtr<ArrayBuffer>&& initData)
    27202726{
     2727    if (!RuntimeEnabledFeatures::sharedFeatures().encryptedMediaAPIEnabled())
     2728        return;
     2729
    27212730    // https://w3c.github.io/encrypted-media/#initdata-encountered
    27222731    // W3C Editor's Draft 23 June 2017
  • trunk/Source/WebCore/html/MediaEncryptedEvent.cpp

    r208539 r225642  
    3838MediaEncryptedEvent::MediaEncryptedEvent(const AtomicString& type, const MediaEncryptedEventInit& initializer, IsTrusted isTrusted)
    3939    : Event(type, initializer, isTrusted)
     40    , m_initDataType(initializer.initDataType)
     41    , m_initData(initializer.initData)
    4042{
    4143}
     
    4850}
    4951
    50 String MediaEncryptedEvent::initDataType()
    51 {
    52     notImplemented();
    53     return emptyString();
    54 }
    55 
    56 ArrayBuffer* MediaEncryptedEvent::initData()
    57 {
    58     notImplemented();
    59     return nullptr;
    60 }
    61 
    6252} // namespace WebCore
    6353
  • trunk/Source/WebCore/html/MediaEncryptedEvent.h

    r208539 r225642  
    5151    virtual ~MediaEncryptedEvent();
    5252
    53     String initDataType();
    54     JSC::ArrayBuffer* initData();
     53    String initDataType() { return m_initDataType; }
     54    JSC::ArrayBuffer* initData() { return m_initData.get(); }
    5555
    5656private:
     
    5959    // Event
    6060    EventInterface eventInterface() const override;
     61
     62    String m_initDataType;
     63    RefPtr<JSC::ArrayBuffer> m_initData;
    6164};
    6265
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h

    r222946 r225642  
    126126    CDMSessionMediaSourceAVFObjC* cdmSession() const { return m_session; }
    127127    void keyNeeded(Uint8Array*);
     128#endif
     129#if ENABLE(ENCRYPTED_MEDIA)
     130    void initializationDataEncountered(const String&, RefPtr<ArrayBuffer>&&);
    128131#endif
    129132
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm

    r224574 r225642  
    958958#endif
    959959
     960#if ENABLE(ENCRYPTED_MEDIA)
     961void MediaPlayerPrivateMediaSourceAVFObjC::initializationDataEncountered(const String& initDataType, RefPtr<ArrayBuffer>&& initData)
     962{
     963    m_player->initializationDataEncountered(initDataType, WTFMove(initData));
     964}
     965#endif
     966
    960967const Vector<ContentType>& MediaPlayerPrivateMediaSourceAVFObjC::mediaContentTypesRequiringHardwareSupport() const
    961968{
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm

    r225635 r225642  
    4141#import "MediaSourcePrivateAVFObjC.h"
    4242#import "NotImplemented.h"
     43#import "SharedBuffer.h"
    4344#import "SourceBufferPrivateClient.h"
    4445#import "TimeRanges.h"
     
    673674        m_hasSessionSemaphore = hasSessionSemaphore;
    674675    }
    675 #else
     676#endif
     677
     678#if ENABLE(ENCRYPTED_MEDIA)
     679    if (m_mediaSource) {
     680        auto initDataBuffer = SharedBuffer::create(initData);
     681        m_mediaSource->player()->initializationDataEncountered("sinf", initDataBuffer->tryCreateArrayBuffer());
     682    }
     683#endif
     684
     685#if !ENABLE(ENCRYPTED_MEDIA) && !ENABLE(LEGACY_ENCRYPTED_MEDIA)
    676686    UNUSED_PARAM(initData);
    677687    UNUSED_PARAM(trackID);
Note: See TracChangeset for help on using the changeset viewer.