| Index: chrome/renderer/media/chrome_key_systems.cc
|
| diff --git a/chrome/renderer/media/chrome_key_systems.cc b/chrome/renderer/media/chrome_key_systems.cc
|
| index 31a41993c640780a338ef036d1b6a50860a867b0..094da8d86e9ab90ccdbae3d8543a0bad74638332 100644
|
| --- a/chrome/renderer/media/chrome_key_systems.cc
|
| +++ b/chrome/renderer/media/chrome_key_systems.cc
|
| @@ -18,7 +18,6 @@
|
| #include "components/cdm/renderer/widevine_key_system_properties.h"
|
| #include "content/public/renderer/render_thread.h"
|
| #include "media/base/eme_constants.h"
|
| -#include "media/base/key_system_info.h"
|
| #include "media/base/key_system_properties.h"
|
|
|
| #include "media/media_features.h"
|
| @@ -36,11 +35,13 @@
|
| #include "base/version.h"
|
| #endif
|
|
|
| -using media::KeySystemInfo;
|
| using media::KeySystemProperties;
|
| using media::SupportedCodecs;
|
|
|
| #if defined(ENABLE_PEPPER_CDMS)
|
| +static const char kExternalClearKeyPepperType[] =
|
| + "application/x-ppapi-clearkey-cdm";
|
| +
|
| static bool IsPepperCdmAvailable(
|
| const std::string& pepper_type,
|
| std::vector<base::string16>* additional_param_names,
|
| @@ -56,9 +57,79 @@ static bool IsPepperCdmAvailable(
|
| return is_available;
|
| }
|
|
|
| +// KeySystemProperties implementation for external Clear Key systems.
|
| +class ExternalClearKeyProperties : public KeySystemProperties {
|
| + public:
|
| + explicit ExternalClearKeyProperties(const std::string& key_system_name)
|
| + : key_system_name_(key_system_name) {}
|
| +
|
| + std::string GetKeySystemName() const override { return key_system_name_; }
|
| + bool IsSupportedInitDataType(
|
| + media::EmeInitDataType init_data_type) const override {
|
| + switch (init_data_type) {
|
| + case media::EmeInitDataType::WEBM:
|
| + case media::EmeInitDataType::KEYIDS:
|
| + return true;
|
| +
|
| + case media::EmeInitDataType::CENC:
|
| +#if defined(USE_PROPRIETARY_CODECS)
|
| + return true;
|
| +#else
|
| + return false;
|
| +#endif // defined(USE_PROPRIETARY_CODECS)
|
| +
|
| + case media::EmeInitDataType::UNKNOWN:
|
| + return false;
|
| + }
|
| + NOTREACHED();
|
| + return false;
|
| + }
|
| +
|
| + SupportedCodecs GetSupportedCodecs() const override {
|
| +#if defined(USE_PROPRIETARY_CODECS)
|
| + return media::EME_CODEC_MP4_ALL | media::EME_CODEC_WEBM_ALL;
|
| +#else
|
| + return media::EME_CODEC_WEBM_ALL;
|
| +#endif
|
| + }
|
| +
|
| + media::EmeConfigRule GetRobustnessConfigRule(
|
| + media::EmeMediaType media_type,
|
| + const std::string& requested_robustness) const override {
|
| + return requested_robustness.empty() ? media::EmeConfigRule::SUPPORTED
|
| + : media::EmeConfigRule::NOT_SUPPORTED;
|
| + }
|
| +
|
| + // Persistent license sessions are faked.
|
| + media::EmeSessionTypeSupport GetPersistentLicenseSessionSupport()
|
| + const override {
|
| + return media::EmeSessionTypeSupport::SUPPORTED;
|
| + }
|
| +
|
| + media::EmeSessionTypeSupport GetPersistentReleaseMessageSessionSupport()
|
| + const override {
|
| + return media::EmeSessionTypeSupport::NOT_SUPPORTED;
|
| + }
|
| +
|
| + media::EmeFeatureSupport GetPersistentStateSupport() const override {
|
| + return media::EmeFeatureSupport::REQUESTABLE;
|
| + }
|
| +
|
| + media::EmeFeatureSupport GetDistinctiveIdentifierSupport() const override {
|
| + return media::EmeFeatureSupport::NOT_SUPPORTED;
|
| + }
|
| +
|
| + std::string GetPepperType() const override {
|
| + return kExternalClearKeyPepperType;
|
| + }
|
| +
|
| + private:
|
| + const std::string key_system_name_;
|
| +};
|
| +
|
| // External Clear Key (used for testing).
|
| static void AddExternalClearKey(
|
| - std::vector<KeySystemInfo>* concrete_key_systems) {
|
| + std::vector<std::unique_ptr<KeySystemProperties>>* concrete_key_systems) {
|
| static const char kExternalClearKeyKeySystem[] =
|
| "org.chromium.externalclearkey";
|
| static const char kExternalClearKeyDecryptOnlyKeySystem[] =
|
| @@ -69,8 +140,6 @@ static void AddExternalClearKey(
|
| "org.chromium.externalclearkey.initializefail";
|
| static const char kExternalClearKeyCrashKeySystem[] =
|
| "org.chromium.externalclearkey.crash";
|
| - static const char kExternalClearKeyPepperType[] =
|
| - "application/x-ppapi-clearkey-cdm";
|
|
|
| std::vector<base::string16> additional_param_names;
|
| std::vector<base::string16> additional_param_values;
|
| @@ -80,48 +149,26 @@ static void AddExternalClearKey(
|
| return;
|
| }
|
|
|
| - KeySystemInfo info;
|
| - info.key_system = kExternalClearKeyKeySystem;
|
| -
|
| - info.supported_init_data_types =
|
| - media::kInitDataTypeMaskWebM | media::kInitDataTypeMaskKeyIds;
|
| - info.supported_codecs = media::EME_CODEC_WEBM_ALL;
|
| -#if defined(USE_PROPRIETARY_CODECS)
|
| - info.supported_init_data_types |= media::kInitDataTypeMaskCenc;
|
| - info.supported_codecs |= media::EME_CODEC_MP4_ALL;
|
| -#endif // defined(USE_PROPRIETARY_CODECS)
|
| -
|
| - info.max_audio_robustness = media::EmeRobustness::EMPTY;
|
| - info.max_video_robustness = media::EmeRobustness::EMPTY;
|
| -
|
| - // Persistent sessions are faked.
|
| - info.persistent_license_support = media::EmeSessionTypeSupport::SUPPORTED;
|
| - info.persistent_release_message_support =
|
| - media::EmeSessionTypeSupport::NOT_SUPPORTED;
|
| - info.persistent_state_support = media::EmeFeatureSupport::REQUESTABLE;
|
| - info.distinctive_identifier_support = media::EmeFeatureSupport::NOT_SUPPORTED;
|
| -
|
| - info.pepper_type = kExternalClearKeyPepperType;
|
| -
|
| - concrete_key_systems->push_back(info);
|
| + concrete_key_systems->emplace_back(
|
| + new ExternalClearKeyProperties(kExternalClearKeyKeySystem));
|
|
|
| // Add support of decrypt-only mode in ClearKeyCdm.
|
| - info.key_system = kExternalClearKeyDecryptOnlyKeySystem;
|
| - concrete_key_systems->push_back(info);
|
| + concrete_key_systems->emplace_back(
|
| + new ExternalClearKeyProperties(kExternalClearKeyDecryptOnlyKeySystem));
|
|
|
| // A key system that triggers FileIO test in ClearKeyCdm.
|
| - info.key_system = kExternalClearKeyFileIOTestKeySystem;
|
| - concrete_key_systems->push_back(info);
|
| + concrete_key_systems->emplace_back(
|
| + new ExternalClearKeyProperties(kExternalClearKeyFileIOTestKeySystem));
|
|
|
| // A key system that Chrome thinks is supported by ClearKeyCdm, but actually
|
| // will be refused by ClearKeyCdm. This is to test the CDM initialization
|
| // failure case.
|
| - info.key_system = kExternalClearKeyInitializeFailKeySystem;
|
| - concrete_key_systems->push_back(info);
|
| + concrete_key_systems->emplace_back(
|
| + new ExternalClearKeyProperties(kExternalClearKeyInitializeFailKeySystem));
|
|
|
| // A key system that triggers a crash in ClearKeyCdm.
|
| - info.key_system = kExternalClearKeyCrashKeySystem;
|
| - concrete_key_systems->push_back(info);
|
| + concrete_key_systems->emplace_back(
|
| + new ExternalClearKeyProperties(kExternalClearKeyCrashKeySystem));
|
| }
|
|
|
| #if defined(WIDEVINE_CDM_AVAILABLE)
|
| @@ -226,18 +273,15 @@ static void AddPepperBasedWidevine(
|
| #endif // defined(WIDEVINE_CDM_AVAILABLE)
|
| #endif // defined(ENABLE_PEPPER_CDMS)
|
|
|
| -void AddChromeKeySystemsInfo(std::vector<KeySystemInfo>* key_systems_info) {
|
| -#if defined(ENABLE_PEPPER_CDMS)
|
| - AddExternalClearKey(key_systems_info);
|
| -#endif
|
| -}
|
| -
|
| void AddChromeKeySystems(
|
| std::vector<std::unique_ptr<KeySystemProperties>>* key_systems_properties) {
|
| #if defined(ENABLE_PEPPER_CDMS)
|
| + AddExternalClearKey(key_systems_properties);
|
| +
|
| #if defined(WIDEVINE_CDM_AVAILABLE)
|
| AddPepperBasedWidevine(key_systems_properties);
|
| #endif // defined(WIDEVINE_CDM_AVAILABLE)
|
| +
|
| #endif // defined(ENABLE_PEPPER_CDMS)
|
|
|
| #if defined(OS_ANDROID)
|
|
|