InitDataRegistry.h [plain text]
#pragma once
#if ENABLE(ENCRYPTED_MEDIA)
#include <wtf/Function.h>
#include <wtf/HashMap.h>
#include <wtf/Optional.h>
#include <wtf/Ref.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
#include <wtf/text/AtomString.h>
#include <wtf/text/AtomStringHash.h>
namespace WebCore {
class ISOProtectionSystemSpecificHeaderBox;
class SharedBuffer;
class InitDataRegistry {
public:
WEBCORE_EXPORT static InitDataRegistry& shared();
friend class NeverDestroyed<InitDataRegistry>;
RefPtr<SharedBuffer> sanitizeInitData(const AtomString& initDataType, const SharedBuffer&);
WEBCORE_EXPORT Optional<Vector<Ref<SharedBuffer>>> extractKeyIDs(const AtomString& initDataType, const SharedBuffer&);
struct InitDataTypeCallbacks {
using SanitizeInitDataCallback = Function<RefPtr<SharedBuffer>(const SharedBuffer&)>;
using ExtractKeyIDsCallback = Function<Optional<Vector<Ref<SharedBuffer>>>(const SharedBuffer&)>;
SanitizeInitDataCallback sanitizeInitData;
ExtractKeyIDsCallback extractKeyIDs;
};
void registerInitDataType(const AtomString& initDataType, InitDataTypeCallbacks&&);
static const AtomString& cencName();
static const AtomString& keyidsName();
static const AtomString& webmName();
static Optional<Vector<std::unique_ptr<ISOProtectionSystemSpecificHeaderBox>>> extractPsshBoxesFromCenc(const SharedBuffer&);
static Optional<Vector<Ref<SharedBuffer>>> extractKeyIDsCenc(const SharedBuffer&);
static RefPtr<SharedBuffer> sanitizeCenc(const SharedBuffer&);
private:
InitDataRegistry();
~InitDataRegistry();
HashMap<AtomString, InitDataTypeCallbacks> m_types;
};
}
#endif // ENABLE(ENCRYPTED_MEDIA)