// 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