| Index: media/base/cdm_promise.cc
|
| diff --git a/media/base/cdm_promise.cc b/media/base/cdm_promise.cc
|
| index ec5e913dbb8aae93c90aa30a24835aaa1a3cc3e8..e57d4f49f0780f4fc80a57279d0f195c496f3134 100644
|
| --- a/media/base/cdm_promise.cc
|
| +++ b/media/base/cdm_promise.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/logging.h"
|
| +#include "base/metrics/histogram.h"
|
|
|
| namespace media {
|
|
|
| @@ -17,15 +18,48 @@ CdmPromise::CdmPromise(PromiseRejectedCB reject_cb)
|
| DCHECK(!reject_cb_.is_null());
|
| }
|
|
|
| +CdmPromise::CdmPromise(PromiseRejectedCB reject_cb, const std::string& uma_name)
|
| + : reject_cb_(reject_cb), is_pending_(true), uma_name_(uma_name) {
|
| + DCHECK(!reject_cb_.is_null());
|
| +}
|
| +
|
| CdmPromise::~CdmPromise() {
|
| DCHECK(!is_pending_);
|
| }
|
|
|
| +static CdmPromise::ResultCodeForUMA ConvertExceptionToUMAResult(
|
| + MediaKeys::Exception exception_code) {
|
| + switch (exception_code) {
|
| + case MediaKeys::NOT_SUPPORTED_ERROR:
|
| + return CdmPromise::NOT_SUPPORTED_ERROR;
|
| + case MediaKeys::INVALID_STATE_ERROR:
|
| + return CdmPromise::INVALID_STATE_ERROR;
|
| + case MediaKeys::INVALID_ACCESS_ERROR:
|
| + return CdmPromise::INVALID_ACCESS_ERROR;
|
| + case MediaKeys::QUOTA_EXCEEDED_ERROR:
|
| + return CdmPromise::QUOTA_EXCEEDED_ERROR;
|
| + case MediaKeys::UNKNOWN_ERROR:
|
| + return CdmPromise::UNKNOWN_ERROR;
|
| + case MediaKeys::CLIENT_ERROR:
|
| + return CdmPromise::CLIENT_ERROR;
|
| + case MediaKeys::OUTPUT_ERROR:
|
| + return CdmPromise::OUTPUT_ERROR;
|
| + }
|
| + NOTREACHED();
|
| + return CdmPromise::UNKNOWN_ERROR;
|
| +}
|
| +
|
| void CdmPromise::reject(MediaKeys::Exception exception_code,
|
| uint32 system_code,
|
| const std::string& error_message) {
|
| DCHECK(is_pending_);
|
| is_pending_ = false;
|
| + if (!uma_name_.empty()) {
|
| + ResultCodeForUMA result_code = ConvertExceptionToUMAResult(exception_code);
|
| + base::LinearHistogram::FactoryGet(
|
| + uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
|
| + base::HistogramBase::kUmaTargetedHistogramFlag)->Add(result_code);
|
| + }
|
| reject_cb_.Run(exception_code, system_code, error_message);
|
| }
|
|
|
| @@ -38,6 +72,15 @@ CdmPromiseTemplate<T>::CdmPromiseTemplate(
|
| }
|
|
|
| template <typename T>
|
| +CdmPromiseTemplate<T>::CdmPromiseTemplate(
|
| + base::Callback<void(const T&)> resolve_cb,
|
| + PromiseRejectedCB reject_cb,
|
| + const std::string& uma_name)
|
| + : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
|
| + DCHECK(!resolve_cb_.is_null());
|
| +}
|
| +
|
| +template <typename T>
|
| CdmPromiseTemplate<T>::~CdmPromiseTemplate() {
|
| DCHECK(!is_pending_);
|
| }
|
| @@ -46,6 +89,11 @@ template <typename T>
|
| void CdmPromiseTemplate<T>::resolve(const T& result) {
|
| DCHECK(is_pending_);
|
| is_pending_ = false;
|
| + if (!uma_name_.empty()) {
|
| + base::LinearHistogram::FactoryGet(
|
| + uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
|
| + base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
|
| + }
|
| resolve_cb_.Run(result);
|
| }
|
|
|
| @@ -55,6 +103,14 @@ CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
|
| DCHECK(!resolve_cb_.is_null());
|
| }
|
|
|
| +CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
|
| + PromiseRejectedCB reject_cb,
|
| + const std::string& uma_name)
|
| + : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
|
| + DCHECK(!resolve_cb_.is_null());
|
| + DCHECK(!uma_name_.empty());
|
| +}
|
| +
|
| CdmPromiseTemplate<void>::CdmPromiseTemplate() {
|
| }
|
|
|
| @@ -65,6 +121,11 @@ CdmPromiseTemplate<void>::~CdmPromiseTemplate() {
|
| void CdmPromiseTemplate<void>::resolve() {
|
| DCHECK(is_pending_);
|
| is_pending_ = false;
|
| + if (!uma_name_.empty()) {
|
| + base::LinearHistogram::FactoryGet(
|
| + uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
|
| + base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
|
| + }
|
| resolve_cb_.Run();
|
| }
|
|
|
|
|