Return more descriptive error codes on license generation failure
[ Merge from http://go/wvgerrit/14745 ] License generation errors previously would result in code -2916 being returned though the mediaDrm API. More descriptive error codes are now being returned from -2850 to -2836 b/13976775 Change-Id: I613ad650ab0a072ce9d8029e2af52b72dc617236
This commit is contained in:
@@ -163,36 +163,34 @@ bool CdmLicense::Init(const std::string& token, CryptoSession* session,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CdmLicense::PrepareKeyRequest(const InitializationData& init_data,
|
||||
const CdmLicenseType license_type,
|
||||
const CdmAppParameterMap& app_parameters,
|
||||
const CdmSessionId& session_id,
|
||||
CdmKeyMessage* signed_request,
|
||||
std::string* server_url) {
|
||||
CdmResponseType CdmLicense::PrepareKeyRequest(
|
||||
const InitializationData& init_data, const CdmLicenseType license_type,
|
||||
const CdmAppParameterMap& app_parameters, const CdmSessionId& session_id,
|
||||
CdmKeyMessage* signed_request, std::string* server_url) {
|
||||
if (!initialized_) {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: not initialized");
|
||||
return false;
|
||||
return LICENSE_PARSER_NOT_INITIALIZED_4;
|
||||
}
|
||||
if (!init_data.is_supported()) {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: unsupported init data type (%s)",
|
||||
init_data.type().c_str());
|
||||
return false;
|
||||
return INVALID_PARAMETERS_LIC_3;
|
||||
}
|
||||
if (init_data.IsEmpty() && stored_init_data_.empty()) {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: empty init data provided");
|
||||
return false;
|
||||
return INVALID_PARAMETERS_LIC_4;
|
||||
}
|
||||
if (session_id.empty()) {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: empty session id provided");
|
||||
return false;
|
||||
return INVALID_PARAMETERS_LIC_5;
|
||||
}
|
||||
if (!signed_request) {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: no signed request provided");
|
||||
return false;
|
||||
return INVALID_PARAMETERS_LIC_6;
|
||||
}
|
||||
if (!server_url) {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: no server url provided");
|
||||
return false;
|
||||
return INVALID_PARAMETERS_LIC_7;
|
||||
}
|
||||
|
||||
std::string service_certificate;
|
||||
@@ -200,7 +198,9 @@ bool CdmLicense::PrepareKeyRequest(const InitializationData& init_data,
|
||||
if (privacy_mode_enabled) {
|
||||
if (!GetServiceCertificate(session_id, &service_certificate)) {
|
||||
stored_init_data_ = init_data.data();
|
||||
return PrepareServiceCertificateRequest(signed_request, server_url);
|
||||
return PrepareServiceCertificateRequest(signed_request, server_url)
|
||||
? KEY_MESSAGE
|
||||
: LICENSE_REQUEST_SERVICE_CERTIFICATE_GENERATION_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@ bool CdmLicense::PrepareKeyRequest(const InitializationData& init_data,
|
||||
CdmResponseType status =
|
||||
PrepareClientId(privacy_mode_enabled, service_certificate, app_parameters,
|
||||
&license_request);
|
||||
if (NO_ERROR != status) return false;
|
||||
if (NO_ERROR != status) return status;
|
||||
|
||||
// Content Identification may be a cenc_id, a webm_id or a license_id
|
||||
LicenseRequest_ContentIdentification* content_id =
|
||||
@@ -227,11 +227,11 @@ bool CdmLicense::PrepareKeyRequest(const InitializationData& init_data,
|
||||
cenc_content_id->add_pssh(stored_init_data_);
|
||||
} else {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: ISO-CENC init data not available");
|
||||
return false;
|
||||
return CENC_INIT_DATA_UNAVAILABLE;
|
||||
}
|
||||
|
||||
if (!PrepareContentId(license_type, request_id, cenc_content_id)) {
|
||||
return false;
|
||||
return PREPARE_CENC_CONTENT_ID_FAILED;
|
||||
}
|
||||
} else if (init_data.is_webm()) {
|
||||
LicenseRequest_ContentIdentification_WebM* webm_content_id =
|
||||
@@ -243,16 +243,16 @@ bool CdmLicense::PrepareKeyRequest(const InitializationData& init_data,
|
||||
webm_content_id->set_header(stored_init_data_);
|
||||
} else {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: WebM init data not available");
|
||||
return false;
|
||||
return WEBM_INIT_DATA_UNAVAILABLE;
|
||||
}
|
||||
|
||||
if (!PrepareContentId(license_type, request_id, webm_content_id)) {
|
||||
return false;
|
||||
return PREPARE_WEBM_CONTENT_ID_FAILED;
|
||||
}
|
||||
} else {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: no support for init data type (%s)",
|
||||
init_data.type().c_str());
|
||||
return false;
|
||||
return UNSUPPORTED_INIT_DATA_FORMAT;
|
||||
}
|
||||
|
||||
license_request.set_type(LicenseRequest::NEW);
|
||||
@@ -263,7 +263,7 @@ bool CdmLicense::PrepareKeyRequest(const InitializationData& init_data,
|
||||
// of the license response.
|
||||
uint32_t nonce;
|
||||
if (!session_->GenerateNonce(&nonce)) {
|
||||
return false;
|
||||
return LICENSE_REQUEST_NONCE_GENERATION_ERROR;
|
||||
}
|
||||
license_request.set_key_control_nonce(nonce);
|
||||
LOGD("PrepareKeyRequest: nonce=%u", nonce);
|
||||
@@ -281,13 +281,13 @@ bool CdmLicense::PrepareKeyRequest(const InitializationData& init_data,
|
||||
if (!session_->PrepareRequest(serialized_license_req, false,
|
||||
&license_request_signature)) {
|
||||
signed_request->clear();
|
||||
return false;
|
||||
return LICENSE_REQUEST_SIGNING_ERROR;
|
||||
}
|
||||
|
||||
if (license_request_signature.empty()) {
|
||||
LOGE("CdmLicense::PrepareKeyRequest: License request signature empty");
|
||||
signed_request->clear();
|
||||
return false;
|
||||
return EMPTY_LICENSE_REQUEST;
|
||||
}
|
||||
|
||||
// Put serialize license request and signature together
|
||||
@@ -299,7 +299,7 @@ bool CdmLicense::PrepareKeyRequest(const InitializationData& init_data,
|
||||
signed_message.SerializeToString(signed_request);
|
||||
|
||||
*server_url = server_url_;
|
||||
return true;
|
||||
return KEY_MESSAGE;
|
||||
}
|
||||
|
||||
CdmResponseType CdmLicense::PrepareKeyUpdateRequest(
|
||||
@@ -334,7 +334,7 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest(
|
||||
if (!GetServiceCertificate(session_id, &service_certificate)) {
|
||||
return PrepareServiceCertificateRequest(signed_request, server_url)
|
||||
? KEY_MESSAGE
|
||||
: SERVICE_CERTIFICATE_REQUEST_GENERATE_ERROR;
|
||||
: LICENSE_RENEWAL_SERVICE_CERTIFICATE_GENERATION_ERROR;
|
||||
}
|
||||
}
|
||||
CdmResponseType status =
|
||||
@@ -385,7 +385,7 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest(
|
||||
// of the license response.
|
||||
uint32_t nonce;
|
||||
if (!session_->GenerateNonce(&nonce)) {
|
||||
return GENERATE_NONCE_ERROR;
|
||||
return LICENSE_RENEWAL_NONCE_GENERATION_ERROR;
|
||||
}
|
||||
license_request.set_key_control_nonce(nonce);
|
||||
LOGD("PrepareKeyUpdateRequest: nonce=%u", nonce);
|
||||
@@ -399,13 +399,13 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest(
|
||||
std::string license_request_signature;
|
||||
if (!session_->PrepareRenewalRequest(serialized_license_req,
|
||||
&license_request_signature))
|
||||
return RENEWAL_REQUEST_ERROR;
|
||||
return LICENSE_RENEWAL_SIGNING_ERROR;
|
||||
|
||||
if (license_request_signature.empty()) {
|
||||
LOGE(
|
||||
"CdmLicense::PrepareKeyUpdateRequest: empty license request"
|
||||
" signature");
|
||||
return EMPTY_LICENSE_REQUEST;
|
||||
return EMPTY_LICENSE_RENEWAL;
|
||||
}
|
||||
|
||||
// Put serialize license request and signature together
|
||||
@@ -1064,7 +1064,7 @@ bool CdmLicense::GetServiceCertificate(const CdmSessionId& session_id,
|
||||
&signed_service_certificate) ||
|
||||
signed_service_certificate.empty() ||
|
||||
NO_ERROR != VerifyAndExtractSignedServiceCertificate(
|
||||
signed_service_certificate, service_certificate)) {
|
||||
signed_service_certificate, service_certificate)) {
|
||||
*service_certificate = service_certificate_;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user