⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 269103 in webkit


Ignore:
Timestamp:
Oct 28, 2020, 8:24:44 AM (6 years ago)
Author:
calvaris@igalia.com
Message:

[GStreamer][EME][Thunder] Do not sanitize CENC init data
​https://bugs.webkit.org/show_bug.cgi?id=218182

Reviewed by Philippe Normand.

In certain cases, like smoothstreaming with PlayReady, the init
datas we are getting are correct but are not in PSSH box format
they would be "sanitized away". In this patch you can enable
sanitization customization depending on the CDM you're using.

  • Modules/encryptedmedia/CDM.cpp:

(WebCore::CDM::sanitizeInitData):

  • platform/encryptedmedia/CDMPrivate.cpp:

(WebCore::CDMPrivate::sanitizeInitData const):

  • platform/encryptedmedia/CDMPrivate.h:
  • platform/graphics/gstreamer/eme/CDMThunder.cpp:

(WebCore::CDMPrivateThunder::sanitizeInitData const):

  • platform/graphics/gstreamer/eme/CDMThunder.h:
Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r269102 r269103  
     12020-10-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>
     2
     3        [GStreamer][EME][Thunder] Do not sanitize CENC init data
     4        https://bugs.webkit.org/show_bug.cgi?id=218182
     5
     6        Reviewed by Philippe Normand.
     7
     8        In certain cases, like smoothstreaming with PlayReady, the init
     9        datas we are getting are correct but are not in PSSH box format
     10        they would be "sanitized away". In this patch you can enable
     11        sanitization customization depending on the CDM you're using.
     12
     13        * Modules/encryptedmedia/CDM.cpp:
     14        (WebCore::CDM::sanitizeInitData):
     15        * platform/encryptedmedia/CDMPrivate.cpp:
     16        (WebCore::CDMPrivate::sanitizeInitData const):
     17        * platform/encryptedmedia/CDMPrivate.h:
     18        * platform/graphics/gstreamer/eme/CDMThunder.cpp:
     19        (WebCore::CDMPrivateThunder::sanitizeInitData const):
     20        * platform/graphics/gstreamer/eme/CDMThunder.h:
     21
    1222020-10-28  Zalan Bujtas  <zalan@apple.com>
    223
  • trunk/Source/WebCore/Modules/encryptedmedia/CDM.cpp

    r262324 r269103  
    138138RefPtr<SharedBuffer> CDM::sanitizeInitData(const AtomString& initDataType, const SharedBuffer& initData)
    139139{
    140     return InitDataRegistry::shared().sanitizeInitData(initDataType, initData);
     140    if (!m_private)
     141        return nullptr;
     142    return m_private->sanitizeInitData(initDataType, initData);
    141143}
    142144
  • trunk/Source/WebCore/platform/encryptedmedia/CDMPrivate.cpp

    r257660 r269103  
    3333#include "CDMRequirement.h"
    3434#include "CDMRestrictions.h"
     35#include "InitDataRegistry.h"
    3536#include "MediaPlayer.h"
    3637#include "NotImplemented.h"
    … …  
    515516}
    516517
     518RefPtr<SharedBuffer> CDMPrivate::sanitizeInitData(const AtomString& initDataType, const SharedBuffer& initData) const
     519{
     520    return InitDataRegistry::shared().sanitizeInitData(initDataType, initData);
     521}
     522
    517523
    518524}
  • trunk/Source/WebCore/platform/encryptedmedia/CDMPrivate.h

    r258295 r269103  
    7575    virtual bool supportsSessions() const = 0;
    7676    virtual bool supportsInitData(const AtomString&, const SharedBuffer&) const = 0;
     77    WEBCORE_EXPORT virtual RefPtr<SharedBuffer> sanitizeInitData(const AtomString& initDataType, const SharedBuffer& initData) const;
    7778    virtual RefPtr<SharedBuffer> sanitizeResponse(const SharedBuffer&) const = 0;
    7879    virtual Optional<String> sanitizeSessionId(const String&) const = 0;
  • trunk/Source/WebCore/platform/graphics/gstreamer/eme/CDMThunder.cpp

    r269030 r269103  
    217217
    218218    return false;
     219}
     220
     221RefPtr<SharedBuffer> CDMPrivateThunder::sanitizeInitData(const AtomString& initDataType, const SharedBuffer& initData) const
     222{
     223    // Validate the initData buffer as CENC initData. FIXME: Validate it is actually CENC.
     224    if (equalLettersIgnoringASCIICase(initDataType, "cenc") && !initData.isEmpty())
     225        return initData.copy();
     226
     227    return CDMPrivate::sanitizeInitData(initDataType, initData);
    219228}
    220229
  • trunk/Source/WebCore/platform/graphics/gstreamer/eme/CDMThunder.h

    r264219 r269103  
    9696    bool supportsSessions() const final;
    9797    bool supportsInitData(const AtomString&, const SharedBuffer&) const final;
     98    RefPtr<SharedBuffer> sanitizeInitData(const AtomString& initDataType, const SharedBuffer& initData) const final;
    9899    RefPtr<SharedBuffer> sanitizeResponse(const SharedBuffer&) const final;
    99100    Optional<String> sanitizeSessionId(const String&) const final;
Note: See TracChangeset for help on using the changeset viewer.