diff options
Diffstat (limited to 'media/base/cdm_promise.cc')
-rw-r--r-- | media/base/cdm_promise.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/media/base/cdm_promise.cc b/media/base/cdm_promise.cc new file mode 100644 index 0000000..ec5e913 --- /dev/null +++ b/media/base/cdm_promise.cc @@ -0,0 +1,74 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/base/cdm_promise.h" + +#include "base/bind.h" +#include "base/logging.h" + +namespace media { + +CdmPromise::CdmPromise() : is_pending_(true) { +} + +CdmPromise::CdmPromise(PromiseRejectedCB reject_cb) + : reject_cb_(reject_cb), is_pending_(true) { + DCHECK(!reject_cb_.is_null()); +} + +CdmPromise::~CdmPromise() { + DCHECK(!is_pending_); +} + +void CdmPromise::reject(MediaKeys::Exception exception_code, + uint32 system_code, + const std::string& error_message) { + DCHECK(is_pending_); + is_pending_ = false; + reject_cb_.Run(exception_code, system_code, error_message); +} + +template <typename T> +CdmPromiseTemplate<T>::CdmPromiseTemplate( + base::Callback<void(const T&)> resolve_cb, + PromiseRejectedCB reject_cb) + : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { + DCHECK(!resolve_cb_.is_null()); +} + +template <typename T> +CdmPromiseTemplate<T>::~CdmPromiseTemplate() { + DCHECK(!is_pending_); +} + +template <typename T> +void CdmPromiseTemplate<T>::resolve(const T& result) { + DCHECK(is_pending_); + is_pending_ = false; + resolve_cb_.Run(result); +} + +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() { +} + +CdmPromiseTemplate<void>::~CdmPromiseTemplate() { + DCHECK(!is_pending_); +} + +void CdmPromiseTemplate<void>::resolve() { + DCHECK(is_pending_); + is_pending_ = false; + resolve_cb_.Run(); +} + +// Explicit template instantiation for the Promises needed. +template class MEDIA_EXPORT CdmPromiseTemplate<std::string>; + +} // namespace media |