diff --git a/dom/media/gmp/GMPDecryptorParent.cpp b/dom/media/gmp/GMPDecryptorParent.cpp index d9e25d952f05..aa286c7b0398 100644 --- a/dom/media/gmp/GMPDecryptorParent.cpp +++ b/dom/media/gmp/GMPDecryptorParent.cpp @@ -245,6 +245,7 @@ GMPExToNsresult(GMPDOMException aDomException) { case kGMPAbortError: return NS_ERROR_DOM_ABORT_ERR; case kGMPQuotaExceededError: return NS_ERROR_DOM_QUOTA_EXCEEDED_ERR; case kGMPTimeoutError: return NS_ERROR_DOM_TIMEOUT_ERR; + case kGMPTypeError: return NS_ERROR_DOM_TYPE_ERR; default: return NS_ERROR_DOM_UNKNOWN_ERR; } } diff --git a/dom/media/gmp/GMPMessageUtils.h b/dom/media/gmp/GMPMessageUtils.h index ad4e90313256..13f6127f3a22 100644 --- a/dom/media/gmp/GMPMessageUtils.h +++ b/dom/media/gmp/GMPMessageUtils.h @@ -34,6 +34,7 @@ struct GMPDomExceptionValidator { case kGMPAbortError: case kGMPQuotaExceededError: case kGMPTimeoutError: + case kGMPTypeError: return true; default: return false; diff --git a/dom/media/gmp/gmp-api/gmp-decryption.h b/dom/media/gmp/gmp-api/gmp-decryption.h index f8e2b9928ead..046a05759eb5 100644 --- a/dom/media/gmp/gmp-api/gmp-decryption.h +++ b/dom/media/gmp/gmp-api/gmp-decryption.h @@ -79,7 +79,8 @@ enum GMPDOMException { kGMPSecurityError = 18, kGMPAbortError = 20, kGMPQuotaExceededError = 22, - kGMPTimeoutError = 23 + kGMPTimeoutError = 23, + kGMPTypeError = 52 }; enum GMPSessionMessageType { diff --git a/dom/media/gmp/widevine-adapter/WidevineDecryptor.cpp b/dom/media/gmp/widevine-adapter/WidevineDecryptor.cpp index b9220b8d50fe..1c43ba43a987 100644 --- a/dom/media/gmp/widevine-adapter/WidevineDecryptor.cpp +++ b/dom/media/gmp/widevine-adapter/WidevineDecryptor.cpp @@ -321,7 +321,12 @@ ToGMPDOMException(cdm::Error aError) switch (aError) { case kNotSupportedError: return kGMPNotSupportedError; case kInvalidStateError: return kGMPInvalidStateError; - case kInvalidAccessError: return kGMPInvalidAccessError; + case kInvalidAccessError: + // Note: Chrome converts kInvalidAccessError to TypeError, since the + // Chromium CDM API doesn't have a type error enum value. The EME spec + // requires TypeError in some places, so we do the same conversion. + // See bug 1313202. + return kGMPTypeError; case kQuotaExceededError: return kGMPQuotaExceededError; case kUnknownError: return kGMPInvalidModificationError; // Note: Unique placeholder. case kClientError: return kGMPAbortError; // Note: Unique placeholder.