blob: 482d85c265828df3a56b9f1a7a2c55fe8f12406b [file] [log] [blame]
halliwell8f42dd52016-04-29 16:06:331// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_CDM_RENDERER_WIDEVINE_KEY_SYSTEM_PROPERTIES_H_
6#define COMPONENTS_CDM_RENDERER_WIDEVINE_KEY_SYSTEM_PROPERTIES_H_
7
John Rummell6d57d9f62018-05-16 21:12:298#include <string>
9#include <vector>
10
11#include "base/containers/flat_set.h"
halliwell8f42dd52016-04-29 16:06:3312#include "media/base/key_system_properties.h"
halliwell8f42dd52016-04-29 16:06:3313
14namespace cdm {
15
16// Implementation of KeySystemProperties for Widevine key system.
17class WidevineKeySystemProperties : public media::KeySystemProperties {
18 public:
halliwell98237dc2016-06-01 02:10:5019 // Robustness values understood by the Widevine key system.
20 // Note: GetRobustnessConfigRule is dependent on the order of these.
21 enum class Robustness {
22 INVALID,
23 EMPTY,
24 SW_SECURE_CRYPTO,
25 SW_SECURE_DECODE,
26 HW_SECURE_CRYPTO,
27 HW_SECURE_DECODE,
28 HW_SECURE_ALL,
29 };
30
halliwell8f42dd52016-04-29 16:06:3331 WidevineKeySystemProperties(
Xiaohan Wang611bde762018-06-28 21:37:3432 media::SupportedCodecs codecs,
33 base::flat_set<media::EncryptionMode> encryption_schemes,
34 media::SupportedCodecs hw_secure_codecs,
35 base::flat_set<media::EncryptionMode> hw_secure_encryption_schemes,
halliwell98237dc2016-06-01 02:10:5036 Robustness max_audio_robustness,
37 Robustness max_video_robustness,
halliwell8f42dd52016-04-29 16:06:3338 media::EmeSessionTypeSupport persistent_license_support,
39 media::EmeSessionTypeSupport persistent_release_message_support,
40 media::EmeFeatureSupport persistent_state_support,
41 media::EmeFeatureSupport distinctive_identifier_support);
John Rummell6d57d9f62018-05-16 21:12:2942 ~WidevineKeySystemProperties() override;
halliwell8f42dd52016-04-29 16:06:3343
44 std::string GetKeySystemName() const override;
45 bool IsSupportedInitDataType(
46 media::EmeInitDataType init_data_type) const override;
Xiaohan Wang611bde762018-06-28 21:37:3447 media::EmeConfigRule GetEncryptionSchemeConfigRule(
John Rummell6d57d9f62018-05-16 21:12:2948 media::EncryptionMode encryption_scheme) const override;
halliwell8f42dd52016-04-29 16:06:3349 media::SupportedCodecs GetSupportedCodecs() const override;
Xiaohan Wang648b4322018-06-12 21:52:2850 media::SupportedCodecs GetSupportedHwSecureCodecs() const override;
halliwell8f42dd52016-04-29 16:06:3351 media::EmeConfigRule GetRobustnessConfigRule(
52 media::EmeMediaType media_type,
53 const std::string& requested_robustness) const override;
54 media::EmeSessionTypeSupport GetPersistentLicenseSessionSupport()
55 const override;
56 media::EmeSessionTypeSupport GetPersistentReleaseMessageSessionSupport()
57 const override;
58 media::EmeFeatureSupport GetPersistentStateSupport() const override;
59 media::EmeFeatureSupport GetDistinctiveIdentifierSupport() const override;
60
halliwell8f42dd52016-04-29 16:06:3361 private:
Xiaohan Wang611bde762018-06-28 21:37:3462 const media::SupportedCodecs codecs_;
63 const base::flat_set<media::EncryptionMode> encryption_schemes_;
64 const media::SupportedCodecs hw_secure_codecs_;
65 const base::flat_set<media::EncryptionMode> hw_secure_encryption_schemes_;
halliwell98237dc2016-06-01 02:10:5066 const Robustness max_audio_robustness_;
67 const Robustness max_video_robustness_;
halliwell8f42dd52016-04-29 16:06:3368 const media::EmeSessionTypeSupport persistent_license_support_;
69 const media::EmeSessionTypeSupport persistent_release_message_support_;
70 const media::EmeFeatureSupport persistent_state_support_;
71 const media::EmeFeatureSupport distinctive_identifier_support_;
72};
73
74} // namespace cdm
75
76#endif // COMPONENTS_CDM_RENDERER_WIDEVINE_KEY_SYSTEM_PROPERTIES_H_