1 // 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 
8 #include <string>
9 #include <vector>
10 
11 #include "base/containers/flat_set.h"
12 #include "media/base/key_system_properties.h"
13 
14 namespace cdm {
15 
16 // Implementation of KeySystemProperties for Widevine key system.
17 class WidevineKeySystemProperties : public media::KeySystemProperties {
18  public:
19   // 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 
31   WidevineKeySystemProperties(
32       media::SupportedCodecs codecs,
33       base::flat_set<media::EncryptionScheme> encryption_schemes,
34       media::SupportedCodecs hw_secure_codecs,
35       base::flat_set<media::EncryptionScheme> hw_secure_encryption_schemes,
36       Robustness max_audio_robustness,
37       Robustness max_video_robustness,
38       media::EmeSessionTypeSupport persistent_license_support,
39       media::EmeSessionTypeSupport persistent_release_message_support,
40       media::EmeFeatureSupport persistent_state_support,
41       media::EmeFeatureSupport distinctive_identifier_support);
42   ~WidevineKeySystemProperties() override;
43 
44   std::string GetKeySystemName() const override;
45   bool IsSupportedInitDataType(
46       media::EmeInitDataType init_data_type) const override;
47   media::EmeConfigRule GetEncryptionSchemeConfigRule(
48       media::EncryptionScheme encryption_scheme) const override;
49   media::SupportedCodecs GetSupportedCodecs() const override;
50   media::SupportedCodecs GetSupportedHwSecureCodecs() const override;
51   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 GetPersistentUsageRecordSessionSupport()
57       const override;
58   media::EmeFeatureSupport GetPersistentStateSupport() const override;
59   media::EmeFeatureSupport GetDistinctiveIdentifierSupport() const override;
60 
61  private:
62   const media::SupportedCodecs codecs_;
63   const base::flat_set<media::EncryptionScheme> encryption_schemes_;
64   const media::SupportedCodecs hw_secure_codecs_;
65   const base::flat_set<media::EncryptionScheme> hw_secure_encryption_schemes_;
66   const Robustness max_audio_robustness_;
67   const Robustness max_video_robustness_;
68   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_
77