Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 7a74dcab081bf155995c7eb7fb745d444dbb4eae
      
https://github.com/WebKit/WebKit/commit/7a74dcab081bf155995c7eb7fb745d444dbb4eae
  Author: Andy Estes <[email protected]>
  Date:   2024-03-08 (Fri, 08 Mar 2024)

  Changed paths:
    M Source/WebCore/SourcesCocoa.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.cpp
    M Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.h
    A 
Source/WebCore/platform/graphics/avfoundation/objc/CDMFairPlayStreamingAVFObjC.mm
    M 
Source/WebCore/platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm
    M 
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h
    M 
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm
    M 
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h
    M 
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm

  Log Message:
  -----------
  [Cocoa] Legacy EME tests time out with 
SampleBufferContentKeySessionSupportEnabled enabled
https://bugs.webkit.org/show_bug.cgi?id=270678
rdar://problem/123089013

Reviewed by Jer Noble.

The following legacy EME + MSE tests time out when enabling 
SampleBufferContentKeySessionSupportEnabled:
- http/tests/media/fairplay/legacy-fairplay-mse-v2.html
- http/tests/media/fairplay/legacy-fairplay-mse-v3.html

This occurred because SourceBufferPrivateAVFObjC::canEnqueueSample would only 
consult m_cdmInstance
(the modern CDM) to determine if a usable key existed to decrypt a sample. When 
legacy EME is in use
there would not be a modern CDM instance, so all samples would be considered 
un-enqueueable and
ultimately the canplay event would never be dispatched.

Addressed this by teaching SourceBufferPrivateAVFObjC to check m_session (the 
legacy CDM) for usable
keys if m_cdmInstance is null. Also, taught CDMSessionAVContentKeySession to 
attach content keys to
samples rather than relying on AVStreamDataParser to do so; this matches how
CDMInstanceSessionFairPlayStreamingAVFObjC attaches handles content key 
attachment.

To fully resolve these timeouts, one additional change was necessary. In 
274351@main we taught the
FairPlay CDM how to decrypt MPEG2-TS streams, but we used a keyID that is 
incompatible with the
AVContentKeyRequests vended by AVContentKeySession. Since AVContentKeySession 
vends MPEG2-TS key
requests with an identifier of "TransportStreamIdentifier" and our CDM prefers 
to use the request
identifier over request initialization data to represent the keyID, this commit 
changes
CDMPrivateFairPlayStreaming::mptsKeyIDs() to return "TransportStreamIdentifier" 
instead of the
preivious 16-byte value

No new tests; covered by existing tests.

* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
(WebCore::CDMPrivateFairPlayStreaming::mptsKeyIDs):
* Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.h:
* 
Source/WebCore/platform/graphics/avfoundation/objc/CDMFairPlayStreamingAVFObjC.mm:
 Added.
(WebCore::CDMPrivateFairPlayStreaming::keyIDsForRequest):
* 
Source/WebCore/platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
(WebCore::keyIDsForRequest):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequest):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequests):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateKeyStatuses):
(WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::contentKeyForSample):
* 
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
* 
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
(WebCore::CDMSessionAVContentKeySession::isAnyKeyUsable const):
(WebCore::CDMSessionAVContentKeySession::attachContentKeyToSample):
(WebCore::CDMSessionAVContentKeySession::contentKeyRequest const):
(WebCore::CDMSessionAVContentKeySession::contentKeyRequest): Deleted.
* 
Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
* 
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(WebCore::SourceBufferPrivateAVFObjC::canEnqueueSample):
(WebCore::SourceBufferPrivateAVFObjC::attachContentKeyToSampleIfNeeded):

Canonical link: https://commits.webkit.org/275839@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to