Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Unified Diff: media/blink/key_system_config_selector.cc

Issue 2349813002: EME: Update MediaKeySystemConfiguration defaults; require non-empty capabilities (Closed)
Patch Set: fix Android compile Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/blink/key_system_config_selector.cc
diff --git a/media/blink/key_system_config_selector.cc b/media/blink/key_system_config_selector.cc
index ec36f2e7c1b671da1465899ee15d10094064c402..bbd7c312b891dede94244a183f94c32d68202ab5 100644
--- a/media/blink/key_system_config_selector.cc
+++ b/media/blink/key_system_config_selector.cc
@@ -129,6 +129,23 @@ static EmeConfigRule GetPersistentStateConfigRule(
return EmeConfigRule::PERSISTENCE_REQUIRED;
}
+static bool IsPersistentSessionType(
+ blink::WebEncryptedMediaSessionType sessionType) {
+ switch (sessionType) {
+ case blink::WebEncryptedMediaSessionType::Temporary:
+ return false;
+ case blink::WebEncryptedMediaSessionType::PersistentLicense:
+ return true;
+ case blink::WebEncryptedMediaSessionType::PersistentReleaseMessage:
+ return true;
+ case blink::WebEncryptedMediaSessionType::Unknown:
+ break;
+ }
+
+ NOTREACHED();
+ return false;
+}
+
} // namespace
struct KeySystemConfigSelector::SelectionRequest {
@@ -434,20 +451,27 @@ KeySystemConfigSelector::GetSupportedConfiguration(
const blink::WebMediaKeySystemConfiguration& candidate,
ConfigState* config_state,
blink::WebMediaKeySystemConfiguration* accumulated_configuration) {
- // From https://w3c.github.io/encrypted-media/#get-supported-configuration
- // 1. Let accumulated configuration be empty. (Done by caller.)
- // 2. If the initDataTypes member is present in candidate configuration, run
- // the following steps:
- if (candidate.hasInitDataTypes) {
- // 2.1. Let supported types be empty.
+ // From
+ // http://w3c.github.io/encrypted-media/#get-supported-configuration-and-consent
+ // 1. Let accumulated configuration be a new MediaKeySystemConfiguration
+ // dictionary. (Done by caller.)
+ // 2. Set the label member of accumulated configuration to equal the label
+ // member of candidate configuration.
+ accumulated_configuration->label = candidate.label;
+
+ // 3. If the initDataTypes member of candidate configuration is non-empty,
+ // run the following steps:
+ if (!candidate.initDataTypes.isEmpty()) {
+ // 3.1. Let supported types be an empty sequence of DOMStrings.
std::vector<blink::WebEncryptedMediaInitDataType> supported_types;
- // 2.2. For each value in candidate configuration's initDataTypes member:
+ // 3.2. For each value in candidate configuration's initDataTypes member:
for (size_t i = 0; i < candidate.initDataTypes.size(); i++) {
- // 2.2.1. Let initDataType be the value.
+ // 3.2.1. Let initDataType be the value.
blink::WebEncryptedMediaInitDataType init_data_type =
candidate.initDataTypes[i];
- // 2.2.2. If the implementation supports generating requests based on
+
+ // 3.2.2. If the implementation supports generating requests based on
// initDataType, add initDataType to supported types. String
// comparison is case-sensitive. The empty string is never
// supported.
@@ -457,31 +481,49 @@ KeySystemConfigSelector::GetSupportedConfiguration(
}
}
- // 2.3. If supported types is empty, return null.
+ // 3.3. If supported types is empty, return null.
if (supported_types.empty()) {
DVLOG(2) << "Rejecting requested configuration because "
<< "no initDataType values were supported.";
return CONFIGURATION_NOT_SUPPORTED;
}
- // 2.4. Add supported types to accumulated configuration.
+ // 3.4. Set the initDataTypes member of accumulated configuration to
+ // supported types.
accumulated_configuration->initDataTypes = supported_types;
}
- // 3. Follow the steps for the value of candidate configuration's
- // distinctiveIdentifier member from the following list:
- // - "required": If the implementation does not support a persistent
- // Distinctive Identifier in combination with accumulated
- // configuration, return null.
- // - "optional": Continue.
- // - "not-allowed": If the implementation requires a Distinctive
- // Identifier in combination with accumulated configuration, return
- // null.
+ // 4. Let distinctive identifier requirement be the value of candidate
+ // configuration's distinctiveIdentifier member.
+ EmeFeatureRequirement distinctive_identifier =
+ candidate.distinctiveIdentifier;
+
+ // 5. If distinctive identifier requirement is "optional" and Distinctive
+ // Identifiers are not allowed according to restrictions, set distinctive
+ // identifier requirement to "not-allowed".
+ EmeFeatureSupport distinctive_identifier_support =
+ key_systems_->GetDistinctiveIdentifierSupport(key_system);
+ if (distinctive_identifier == EmeFeatureRequirement::Optional) {
+ if (distinctive_identifier_support == EmeFeatureSupport::INVALID ||
+ distinctive_identifier_support == EmeFeatureSupport::NOT_SUPPORTED) {
+ distinctive_identifier = EmeFeatureRequirement::NotAllowed;
+ }
+ }
+
+ // 6. Follow the steps for distinctive identifier requirement from the
+ // following list:
+ // - "required": If the implementation does not support use of
+ // Distinctive Identifier(s) in combination with accumulated
+ // configuration and restrictions, return NotSupported.
+ // - "optional": Continue with the following steps.
+ // - "not-allowed": If the implementation requires use Distinctive
+ // Identifier(s) or Distinctive Permanent Identifier(s) in
+ // combination with accumulated configuration and restrictions,
+ // return NotSupported.
// We also reject OPTIONAL when distinctive identifiers are ALWAYS_ENABLED and
- // permission has already been denied. This would happen anyway at step 11.
+ // permission has already been denied. This would happen anyway later.
EmeConfigRule di_rule = GetDistinctiveIdentifierConfigRule(
- key_systems_->GetDistinctiveIdentifierSupport(key_system),
- candidate.distinctiveIdentifier);
+ distinctive_identifier_support, distinctive_identifier);
if (!config_state->IsRuleSupported(di_rule)) {
DVLOG(2) << "Rejecting requested configuration because "
<< "the distinctiveIdentifier requirement was not supported.";
@@ -489,21 +531,37 @@ KeySystemConfigSelector::GetSupportedConfiguration(
}
config_state->AddRule(di_rule);
- // 4. Add the value of the candidate configuration's distinctiveIdentifier
- // member to accumulated configuration.
- accumulated_configuration->distinctiveIdentifier =
- candidate.distinctiveIdentifier;
+ // 7. Set the distinctiveIdentifier member of accumulated configuration to
+ // equal distinctive identifier requirement.
+ accumulated_configuration->distinctiveIdentifier = distinctive_identifier;
+
+ // 8. Let persistent state requirement be equal to the value of candidate
+ // configuration's persistentState member.
+ EmeFeatureRequirement persistent_state = candidate.persistentState;
+
+ // 9. If persistent state requirement is "optional" and persisting state is
+ // not allowed according to restrictions, set persistent state requirement
+ // to "not-allowed".
+ EmeFeatureSupport persistent_state_support =
+ key_systems_->GetPersistentStateSupport(key_system);
+ if (persistent_state == EmeFeatureRequirement::Optional) {
+ if (persistent_state_support == EmeFeatureSupport::INVALID ||
+ persistent_state_support == EmeFeatureSupport::NOT_SUPPORTED) {
+ persistent_state = EmeFeatureRequirement::NotAllowed;
+ }
+ }
- // 5. Follow the steps for the value of candidate configuration's
- // persistentState member from the following list:
- // - "required": If the implementation does not support persisting state
- // in combination with accumulated configuration, return null.
- // - "optional": Continue.
- // - "not-allowed": If the implementation requires persisting state in
- // combination with accumulated configuration, return null.
- EmeConfigRule ps_rule = GetPersistentStateConfigRule(
- key_systems_->GetPersistentStateSupport(key_system),
- candidate.persistentState);
+ // 10. Follow the steps for persistent state requirement from the following
+ // list:
+ // - "required": If the implementation does not support persisting
+ // state in combination with accumulated configuration and
+ // restrictions, return NotSupported.
+ // - "optional": Continue with the following steps.
+ // - "not-allowed": If the implementation requires persisting state in
+ // combination with accumulated configuration and restrictions,
+ // return NotSupported.
+ EmeConfigRule ps_rule =
+ GetPersistentStateConfigRule(persistent_state_support, persistent_state);
if (!config_state->IsRuleSupported(ps_rule)) {
DVLOG(2) << "Rejecting requested configuration because "
<< "the persistentState requirement was not supported.";
@@ -511,37 +569,38 @@ KeySystemConfigSelector::GetSupportedConfiguration(
}
config_state->AddRule(ps_rule);
- // 6. Add the value of the candidate configuration's persistentState
- // member to accumulated configuration.
- accumulated_configuration->persistentState = candidate.persistentState;
-
- // 7. Follow the steps for the first matching condition from the following
- // list:
- // - If the sessionTypes member is present in candidate configuration,
- // let session types be candidate configuration's sessionTypes member.
- // - Otherwise, let session types be [ "temporary" ].
- blink::WebVector<blink::WebEncryptedMediaSessionType> session_types;
- if (candidate.hasSessionTypes) {
- session_types = candidate.sessionTypes;
- } else {
- std::vector<blink::WebEncryptedMediaSessionType> temporary(1);
- temporary[0] = blink::WebEncryptedMediaSessionType::Temporary;
- session_types = temporary;
- }
+ // 11. Set the persistentState member of accumulated configuration to equal
+ // the value of persistent state requirement.
+ accumulated_configuration->persistentState = persistent_state;
- // 8. For each value in session types:
+ // 12. Follow the steps for the first matching condition from the following
+ // list:
+ // - If the sessionTypes member is present in candidate configuration,
+ // let session types be candidate configuration's sessionTypes member.
+ // - Otherwise, let session types be [ "temporary" ].
+ // (Done in MediaKeySystemAccessInitializer.)
+ blink::WebVector<blink::WebEncryptedMediaSessionType> session_types =
+ candidate.sessionTypes;
+
+ // 13. For each value in session types:
for (size_t i = 0; i < session_types.size(); i++) {
- // 8.1. Let session type be the value.
+ // 13.1. Let session type be the value.
blink::WebEncryptedMediaSessionType session_type = session_types[i];
- // 8.2. If the implementation does not support session type in combination
- // with accumulated configuration, return null.
- // 8.3. If session type is "persistent-license" or
- // "persistent-release-message", follow the steps for accumulated
- // configuration's persistentState value from the following list:
- // - "required": Continue.
- // - "optional": Change accumulated configuration's persistentState
- // value to "required".
- // - "not-allowed": Return null.
+
+ // 13.2. If accumulated configuration's persistentState value is
+ // "not-allowed" and the Is persistent session type? algorithm
+ // returns true for session type return NotSupported.
+ if (accumulated_configuration->persistentState ==
+ EmeFeatureRequirement::NotAllowed &&
+ IsPersistentSessionType(session_type)) {
+ DVLOG(2) << "Rejecting requested configuration because persistent "
+ "sessions are not allowed.";
+ return CONFIGURATION_NOT_SUPPORTED;
+ }
+
+ // 13.3. If the implementation does not support session type in combination
+ // with accumulated configuration and restrictions for other reasons,
+ // return NotSupported.
EmeConfigRule session_type_rule = EmeConfigRule::NOT_SUPPORTED;
switch (session_type) {
case blink::WebEncryptedMediaSessionType::Unknown:
@@ -561,65 +620,94 @@ KeySystemConfigSelector::GetSupportedConfiguration(
key_system));
break;
}
+
if (!config_state->IsRuleSupported(session_type_rule)) {
DVLOG(2) << "Rejecting requested configuration because "
<< "a required session type was not supported.";
return CONFIGURATION_NOT_SUPPORTED;
}
config_state->AddRule(session_type_rule);
+
+ // 13.4. If accumulated configuration's persistentState value is "optional"
+ // and the result of running the Is persistent session type?
+ // algorithm on session type is true, change accumulated
+ // configuration's persistentState value to "required".
+ if (accumulated_configuration->persistentState ==
+ EmeFeatureRequirement::Optional &&
+ IsPersistentSessionType(session_type)) {
+ accumulated_configuration->persistentState =
+ EmeFeatureRequirement::Required;
+ }
}
- // 9. Add session types to accumulated configuration.
+ // 14. Set the sessionTypes member of accumulated configuration to
+ // session types.
accumulated_configuration->sessionTypes = session_types;
- // 10. If the videoCapabilities member is present in candidate configuration:
- if (candidate.hasVideoCapabilities) {
- // 10.1. Let video capabilities be the result of executing the Get Supported
- // Capabilities for Media Type algorithm on Video, candidate
- // configuration's videoCapabilities member, and accumulated
- // configuration.
- // 10.2. If video capabilities is null, return null.
- std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities;
+ // 15. If the videoCapabilities and audioCapabilities members in candidate
+ // configuration are both empty, return NotSupported.
+ // TODO(jrummell): Enforce this once the deprecation warning is removed.
+ // See http://crbug.com/616233.
+
+ // 16. If the videoCapabilities member in candidate configuration is
+ // non-empty:
+ std::vector<blink::WebMediaKeySystemMediaCapability> video_capabilities;
+ if (!candidate.videoCapabilities.isEmpty()) {
+ // 16.1. Let video capabilities be the result of executing the Get
+ // Supported Capabilities for Audio/Video Type algorithm on Video,
+ // candidate configuration's videoCapabilities member, accumulated
+ // configuration, and restrictions.
+ // 16.2. If video capabilities is null, return NotSupported.
if (!GetSupportedCapabilities(key_system, EmeMediaType::VIDEO,
candidate.videoCapabilities, config_state,
&video_capabilities)) {
return CONFIGURATION_NOT_SUPPORTED;
}
- // 10.3. Add video capabilities to accumulated configuration.
- accumulated_configuration->hasVideoCapabilities = true;
+ // 16.3. Set the videoCapabilities member of accumulated configuration
+ // to video capabilities.
+ accumulated_configuration->videoCapabilities = video_capabilities;
+ } else {
+ // Otherwise set the videoCapabilities member of accumulated configuration
+ // to an empty sequence.
accumulated_configuration->videoCapabilities = video_capabilities;
}
- // 11. If the audioCapabilities member is present in candidate configuration:
- if (candidate.hasAudioCapabilities) {
- // 11.1. Let audio capabilities be the result of executing the Get Supported
- // Capabilities for Media Type algorithm on Audio, candidate
- // configuration's audioCapabilities member, and accumulated
- // configuration.
- // 11.2. If audio capabilities is null, return null.
- std::vector<blink::WebMediaKeySystemMediaCapability> audio_capabilities;
+ // 17. If the audioCapabilities member in candidate configuration is
+ // non-empty:
+ std::vector<blink::WebMediaKeySystemMediaCapability> audio_capabilities;
+ if (!candidate.audioCapabilities.isEmpty()) {
+ // 17.1. Let audio capabilities be the result of executing the Get
+ // Supported Capabilities for Audio/Video Type algorithm on Audio,
+ // candidate configuration's audioCapabilities member, accumulated
+ // configuration, and restrictions.
+ // 17.2. If audio capabilities is null, return NotSupported.
if (!GetSupportedCapabilities(key_system, EmeMediaType::AUDIO,
candidate.audioCapabilities, config_state,
&audio_capabilities)) {
return CONFIGURATION_NOT_SUPPORTED;
}
- // 11.3. Add audio capabilities to accumulated configuration.
- accumulated_configuration->hasAudioCapabilities = true;
+ // 17.3. Set the audioCapabilities member of accumulated configuration
+ // to audio capabilities.
+ accumulated_configuration->audioCapabilities = audio_capabilities;
+ } else {
+ // Otherwise set the audioCapabilities member of accumulated configuration
+ // to an empty sequence.
accumulated_configuration->audioCapabilities = audio_capabilities;
}
- // 12. If accumulated configuration's distinctiveIdentifier value is
- // "optional", follow the steps for the first matching condition from the
- // following list:
- // - If the implementation requires a Distinctive Identifier for any of
- // the combinations in accumulated configuration, change accumulated
- // configuration's distinctiveIdentifier value to "required".
- // - Otherwise, change accumulated configuration's distinctiveIdentifier
- // value to "not-allowed".
+ // 18. If accumulated configuration's distinctiveIdentifier value is
+ // "optional", follow the steps for the first matching condition
+ // from the following list:
+ // - If the implementation requires use Distinctive Identifier(s) or
+ // Distinctive Permanent Identifier(s) for any of the combinations
+ // in accumulated configuration, change accumulated configuration's
+ // distinctiveIdentifier value to "required".
+ // - Otherwise, change accumulated configuration's
+ // distinctiveIdentifier value to "not-allowed".
if (accumulated_configuration->distinctiveIdentifier ==
- blink::WebMediaKeySystemConfiguration::Requirement::Optional) {
+ EmeFeatureRequirement::Optional) {
EmeConfigRule not_allowed_rule = GetDistinctiveIdentifierConfigRule(
key_systems_->GetDistinctiveIdentifierSupport(key_system),
EmeFeatureRequirement::NotAllowed);
@@ -637,29 +725,29 @@ KeySystemConfigSelector::GetSupportedConfiguration(
}
if (not_allowed_supported) {
accumulated_configuration->distinctiveIdentifier =
- blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed;
+ EmeFeatureRequirement::NotAllowed;
config_state->AddRule(not_allowed_rule);
} else if (required_supported) {
accumulated_configuration->distinctiveIdentifier =
- blink::WebMediaKeySystemConfiguration::Requirement::Required;
+ EmeFeatureRequirement::Required;
config_state->AddRule(required_rule);
} else {
- // We should not have passed step 3.
+ // We should not have passed step 6.
NOTREACHED();
return CONFIGURATION_NOT_SUPPORTED;
}
}
- // 13. If accumulated configuration's persistentState value is "optional",
+ // 19. If accumulated configuration's persistentState value is "optional",
// follow the steps for the first matching condition from the following
// list:
// - If the implementation requires persisting state for any of the
// combinations in accumulated configuration, change accumulated
// configuration's persistentState value to "required".
- // - Otherwise, change accumulated configuration's persistentState value
- // to "not-allowed".
+ // - Otherwise, change accumulated configuration's persistentState
+ // value to "not-allowed".
if (accumulated_configuration->persistentState ==
- blink::WebMediaKeySystemConfiguration::Requirement::Optional) {
+ EmeFeatureRequirement::Optional) {
EmeConfigRule not_allowed_rule = GetPersistentStateConfigRule(
key_systems_->GetPersistentStateSupport(key_system),
EmeFeatureRequirement::NotAllowed);
@@ -676,11 +764,11 @@ KeySystemConfigSelector::GetSupportedConfiguration(
bool required_supported = config_state->IsRuleSupported(required_rule);
if (not_allowed_supported) {
accumulated_configuration->persistentState =
- blink::WebMediaKeySystemConfiguration::Requirement::NotAllowed;
+ EmeFeatureRequirement::NotAllowed;
config_state->AddRule(not_allowed_rule);
} else if (required_supported) {
accumulated_configuration->persistentState =
- blink::WebMediaKeySystemConfiguration::Requirement::Required;
+ EmeFeatureRequirement::Required;
config_state->AddRule(required_rule);
} else {
// We should not have passed step 5.
@@ -689,25 +777,44 @@ KeySystemConfigSelector::GetSupportedConfiguration(
}
}
- // 14. If implementation in the configuration specified by the combination of
+ // 20. If implementation in the configuration specified by the combination of
// the values in accumulated configuration is not supported or not allowed
- // in the origin, return null.
- // 15. If accumulated configuration's distinctiveIdentifier value is
- // "required", [prompt the user for consent].
+ // in the origin, return NotSupported.
+ // TODO(jrummell): can we check that the CDM can't be loaded by the origin?
+
+ // 21. If accumulated configuration's distinctiveIdentifier value is
+ // "required" and the Distinctive Identifier(s) associated with
+ // accumulated configuration are not unique per origin and profile
+ // and clearable:
+ // 21.1. Update restrictions to reflect that all configurations described
+ // by accumulated configuration do not have user consent.
+ // 21.2. Return ConsentDenied and restrictions.
+ // (Not required as data is unique per origin and clearable.)
+
+ // 22. Let consent status and updated restrictions be the result of running
+ // the Get Consent Status algorithm on accumulated configuration,
+ // restrictions and origin and follow the steps for the value of consent
+ // status from the following list:
+ // - "ConsentDenied": Return ConsentDenied and updated restrictions.
+ // - "InformUser": Inform the user that accumulated configuration is
+ // in use in the origin including, specifically, the information
+ // that Distinctive Identifier(s) and/or Distinctive Permanent
+ // Identifier(s) as appropriate will be used if the
+ // distinctiveIdentifier member of accumulated configuration is
+ // "required". Continue to the next step.
+ // - "Allowed": Continue to the next step.
+ // Accumulated configuration's distinctiveIdentifier should be "required" or
+ // "notallowed"" due to step 18. If it is "required", prompt the user for
+ // consent unless it has already been granted.
if (accumulated_configuration->distinctiveIdentifier ==
- blink::WebMediaKeySystemConfiguration::Requirement::Required) {
+ EmeFeatureRequirement::Required) {
// The caller is responsible for resolving what to do if permission is
// required but has been denied (it should treat it as NOT_SUPPORTED).
if (!config_state->IsPermissionGranted())
return CONFIGURATION_REQUIRES_PERMISSION;
}
- // 16. If the label member is present in candidate configuration, add the
- // value of the candidate configuration's label member to accumulated
- // configuration.
- accumulated_configuration->label = candidate.label;
-
- // 17. Return accumulated configuration.
+ // 23. Return accumulated configuration.
return CONFIGURATION_SUPPORTED;
}
@@ -720,12 +827,12 @@ void KeySystemConfigSelector::SelectConfig(
base::Callback<void(const blink::WebMediaKeySystemConfiguration&,
const CdmConfig&)> succeeded_cb,
base::Callback<void(const blink::WebString&)> not_supported_cb) {
- // Continued from requestMediaKeySystemAccess(), step 7, from
+ // Continued from requestMediaKeySystemAccess(), step 6, from
// https://w3c.github.io/encrypted-media/#requestmediakeysystemaccess
//
- // 7.1. If keySystem is not one of the Key Systems supported by the user
- // agent, reject promise with with a new DOMException whose name is
- // NotSupportedError. String comparison is case-sensitive.
+ // 6.1 If keySystem is not one of the Key Systems supported by the user
+ // agent, reject promise with a NotSupportedError. String comparison
+ // is case-sensitive.
if (!base::IsStringASCII(key_system)) {
not_supported_cb.Run("Only ASCII keySystems are supported");
return;
@@ -738,7 +845,7 @@ void KeySystemConfigSelector::SelectConfig(
return;
}
- // 7.2-7.4. Implemented by OnSelectConfig().
+ // 6.2-6.4. Implemented by OnSelectConfig().
// TODO(sandersd): This should be async, ideally not on the main thread.
std::unique_ptr<SelectionRequest> request(new SelectionRequest());
request->key_system = key_system_ascii;
@@ -752,19 +859,19 @@ void KeySystemConfigSelector::SelectConfig(
void KeySystemConfigSelector::SelectConfigInternal(
std::unique_ptr<SelectionRequest> request) {
- // Continued from requestMediaKeySystemAccess(), step 7.1, from
+ // Continued from requestMediaKeySystemAccess(), step 6, from
// https://w3c.github.io/encrypted-media/#requestmediakeysystemaccess
//
- // 7.2. Let implementation be the implementation of keySystem.
+ // 6.2. Let implementation be the implementation of keySystem.
// (|key_systems_| fills this role.)
- // 7.3. For each value in supportedConfigurations:
+ // 6.3. For each value in supportedConfigurations:
for (size_t i = 0; i < request->candidate_configurations.size(); i++) {
- // 7.3.1. Let candidate configuration be the value.
- // 7.3.2. Let supported configuration be the result of executing the Get
+ // 6.3.1. Let candidate configuration be the value.
+ // 6.3.2. Let supported configuration be the result of executing the Get
// Supported Configuration algorithm on implementation, candidate
// configuration, and origin.
- // 7.3.3. If supported configuration is not null, [initialize and return a
- // new MediaKeySystemAccess object.]
+ // 6.3.3. If supported configuration is not NotSupported, [initialize
+ // and return a new MediaKeySystemAccess object.]
ConfigState config_state(request->was_permission_requested,
request->is_permission_granted);
DCHECK(config_state.IsRuleSupported(
@@ -799,10 +906,10 @@ void KeySystemConfigSelector::SelectConfigInternal(
case CONFIGURATION_SUPPORTED:
cdm_config.allow_distinctive_identifier =
(accumulated_configuration.distinctiveIdentifier ==
- blink::WebMediaKeySystemConfiguration::Requirement::Required);
+ EmeFeatureRequirement::Required);
cdm_config.allow_persistent_state =
(accumulated_configuration.persistentState ==
- blink::WebMediaKeySystemConfiguration::Requirement::Required);
+ EmeFeatureRequirement::Required);
cdm_config.use_hw_secure_codecs =
config_state.AreHwSecureCodecsRequired();
request->succeeded_cb.Run(accumulated_configuration, cdm_config);
@@ -810,8 +917,7 @@ void KeySystemConfigSelector::SelectConfigInternal(
}
}
- // 7.4. Reject promise with a new DOMException whose name is
- // NotSupportedError.
+ // 6.4. Reject promise with a NotSupportedError.
request->not_supported_cb.Run(
"None of the requested configurations were supported.");
}
« no previous file with comments | « chrome/browser/media/encrypted_media_browsertest.cc ('k') | media/blink/key_system_config_selector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698