// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_BASE_CDM_CONTEXT_H_ #define MEDIA_BASE_CDM_CONTEXT_H_ #include <optional> #include "base/functional/callback.h" #include "base/memory/scoped_refptr.h" #include "base/unguessable_token.h" #include "build/build_config.h" #include "media/base/media_export.h" #include "media/media_buildflags.h" #if BUILDFLAG(IS_WIN) #include "media/base/win/media_foundation_cdm_proxy.h" #endif #if BUILDFLAG(IS_CHROMEOS) namespace chromeos { class ChromeOsCdmContext; } #endif namespace media { class CallbackRegistration; class Decryptor; class MediaCryptoContext; #if BUILDFLAG(IS_FUCHSIA) class FuchsiaCdmContext; #endif // An interface representing the context that a media player needs from a // content decryption module (CDM) to decrypt (and decode) encrypted buffers. // Typically this will be passed to the media player (e.g. using SetCdm()). // // Lifetime: The returned raw pointers are only guaranteed to be valid when the // CdmContext is alive, which is usually guaranteed by holding a CdmContextRef // (see below). // // Thread Model: Since this interface is used in many different contexts (e.g. // different processes or platforms), the thread model is not defined as part // of this interface. Subclasses must ensure thread safety. class MEDIA_EXPORT CdmContext { … }; // A reference holder to make sure the CdmContext is always valid as long as // |this| is alive. Typically |this| will hold a reference (directly or // indirectly) to the host, e.g. a ContentDecryptionModule. // This class must be held on the same thread where the host lives. The raw // CdmContext pointer returned by GetCdmContext() may be used on other threads // if it's supported by the CdmContext implementation. class MEDIA_EXPORT CdmContextRef { … }; } // namespace media #endif // MEDIA_BASE_CDM_CONTEXT_H_