summaryrefslogtreecommitdiffstats
path: root/media/base/cdm_promise.cc
diff options
context:
space:
mode:
authorjrummell <jrummell@chromium.org>2014-09-22 17:49:08 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-23 00:49:23 +0000
commitd2fa738da06c08fe136dedc2212e76174de94772 (patch)
tree24e71c51593446a470081f4efa4432d4c57cd177 /media/base/cdm_promise.cc
parent032174589b8ff1a6ee7a0643b9490aa9c17b4703 (diff)
downloadchromium_src-d2fa738da06c08fe136dedc2212e76174de94772.zip
chromium_src-d2fa738da06c08fe136dedc2212e76174de94772.tar.gz
chromium_src-d2fa738da06c08fe136dedc2212e76174de94772.tar.bz2
CdmPromise to use CdmPromiseTraits so specializations not needed
Due to GetResolveParameterType(), the template was specialized for all the cases used. Adding CdmPromiseTraits so that the specializations are not needed, and the type set in the constructor appropriately. BUG=358271 TEST=existing EME tests still pass Review URL: https://codereview.chromium.org/567123002 Cr-Commit-Position: refs/heads/master@{#296112}
Diffstat (limited to 'media/base/cdm_promise.cc')
-rw-r--r--media/base/cdm_promise.cc170
1 files changed, 77 insertions, 93 deletions
diff --git a/media/base/cdm_promise.cc b/media/base/cdm_promise.cc
index 74ff8bc..e10776d 100644
--- a/media/base/cdm_promise.cc
+++ b/media/base/cdm_promise.cc
@@ -10,17 +10,46 @@
namespace media {
-CdmPromise::CdmPromise() : is_pending_(true) {
-}
-
-CdmPromise::CdmPromise(PromiseRejectedCB reject_cb)
- : reject_cb_(reject_cb), is_pending_(true) {
+template <typename T>
+struct CdmPromiseTraits {};
+
+template <>
+struct CdmPromiseTraits<void> {
+ static const CdmPromise::ResolveParameterType kType = CdmPromise::VOID_TYPE;
+};
+
+template <>
+struct CdmPromiseTraits<std::string> {
+ static const CdmPromise::ResolveParameterType kType = CdmPromise::STRING_TYPE;
+};
+
+template <>
+struct CdmPromiseTraits<KeyIdsVector> {
+ static const CdmPromise::ResolveParameterType kType =
+ CdmPromise::KEY_IDS_VECTOR_TYPE;
+};
+
+CdmPromise::CdmPromise(ResolveParameterType parameter_type)
+ : parameter_type_(parameter_type), is_pending_(true) {
+}
+
+CdmPromise::CdmPromise(ResolveParameterType parameter_type,
+ PromiseRejectedCB reject_cb)
+ : parameter_type_(parameter_type),
+ reject_cb_(reject_cb),
+ is_pending_(true) {
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) {
+CdmPromise::CdmPromise(ResolveParameterType parameter_type,
+ PromiseRejectedCB reject_cb,
+ const std::string& uma_name)
+ : parameter_type_(parameter_type),
+ reject_cb_(reject_cb),
+ is_pending_(true),
+ uma_name_(uma_name) {
DCHECK(!reject_cb_.is_null());
+ DCHECK(!uma_name_.empty());
}
CdmPromise::~CdmPromise() {
@@ -52,125 +81,80 @@ static CdmPromise::ResultCodeForUMA ConvertExceptionToUMAResult(
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);
- }
+ ReportResultToUMA(ConvertExceptionToUMAResult(exception_code));
reject_cb_.Run(exception_code, system_code, error_message);
}
-CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
- PromiseRejectedCB reject_cb)
- : CdmPromise(reject_cb), resolve_cb_(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() {
-}
-
-CdmPromiseTemplate<void>::~CdmPromiseTemplate() {
- DCHECK(!is_pending_);
-}
-
-void CdmPromiseTemplate<void>::resolve() {
+void CdmPromise::ReportResultToUMA(ResultCodeForUMA 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);
+ uma_name_,
+ 1,
+ NUM_RESULT_CODES,
+ NUM_RESULT_CODES + 1,
+ base::HistogramBase::kUmaTargetedHistogramFlag)->Add(result);
}
- resolve_cb_.Run();
-}
-
-CdmPromise::ResolveParameterType
-CdmPromiseTemplate<void>::GetResolveParameterType() const {
- return VOID_TYPE;
}
-CdmPromiseTemplate<std::string>::CdmPromiseTemplate(
- base::Callback<void(const std::string&)> resolve_cb,
+template <typename T>
+CdmPromiseTemplate<T>::CdmPromiseTemplate(
+ base::Callback<void(const T&)> resolve_cb,
PromiseRejectedCB reject_cb)
- : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
+ : CdmPromise(CdmPromiseTraits<T>::kType, reject_cb),
+ resolve_cb_(resolve_cb) {
DCHECK(!resolve_cb_.is_null());
}
-CdmPromiseTemplate<std::string>::CdmPromiseTemplate(
- base::Callback<void(const std::string&)> resolve_cb,
+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) {
+ : CdmPromise(CdmPromiseTraits<T>::kType, reject_cb, uma_name),
+ resolve_cb_(resolve_cb) {
DCHECK(!resolve_cb_.is_null());
}
-CdmPromiseTemplate<std::string>::CdmPromiseTemplate() {
+template <typename T>
+CdmPromiseTemplate<T>::CdmPromiseTemplate()
+ : CdmPromise(CdmPromiseTraits<T>::kType) {
}
-CdmPromiseTemplate<std::string>::~CdmPromiseTemplate() {
- DCHECK(!is_pending_);
-}
-
-void CdmPromiseTemplate<std::string>::resolve(const std::string& 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);
- }
+template <typename T>
+void CdmPromiseTemplate<T>::resolve(const T& result) {
+ ReportResultToUMA(SUCCESS);
resolve_cb_.Run(result);
}
-CdmPromise::ResolveParameterType
-CdmPromiseTemplate<std::string>::GetResolveParameterType() const {
- return STRING_TYPE;
-}
-
-CdmPromiseTemplate<KeyIdsVector>::CdmPromiseTemplate(
- base::Callback<void(const KeyIdsVector&)> resolve_cb,
- PromiseRejectedCB reject_cb)
- : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
+CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
+ PromiseRejectedCB reject_cb)
+ : CdmPromise(CdmPromiseTraits<void>::kType, reject_cb),
+ resolve_cb_(resolve_cb) {
DCHECK(!resolve_cb_.is_null());
}
-CdmPromiseTemplate<KeyIdsVector>::CdmPromiseTemplate(
- base::Callback<void(const KeyIdsVector&)> resolve_cb,
- PromiseRejectedCB reject_cb,
- const std::string& uma_name)
- : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
+CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
+ PromiseRejectedCB reject_cb,
+ const std::string& uma_name)
+ : CdmPromise(CdmPromiseTraits<void>::kType, reject_cb, uma_name),
+ resolve_cb_(resolve_cb) {
DCHECK(!resolve_cb_.is_null());
+ DCHECK(!uma_name_.empty());
}
-CdmPromiseTemplate<KeyIdsVector>::~CdmPromiseTemplate() {
- DCHECK(!is_pending_);
+CdmPromiseTemplate<void>::CdmPromiseTemplate()
+ : CdmPromise(CdmPromiseTraits<void>::kType) {
}
-void CdmPromiseTemplate<KeyIdsVector>::resolve(const KeyIdsVector& 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);
+void CdmPromiseTemplate<void>::resolve() {
+ ReportResultToUMA(SUCCESS);
+ resolve_cb_.Run();
}
-CdmPromise::ResolveParameterType
-CdmPromiseTemplate<KeyIdsVector>::GetResolveParameterType() const {
- return KEY_IDS_VECTOR_TYPE;
-}
+// Explicit template instantiation for the Promises needed.
+template class MEDIA_EXPORT CdmPromiseTemplate<std::string>;
+template class MEDIA_EXPORT CdmPromiseTemplate<KeyIdsVector>;
} // namespace media