// 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 CdmPromiseTemplate::CdmPromiseTemplate( base::Callback resolve_cb, PromiseRejectedCB reject_cb) : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { DCHECK(!resolve_cb_.is_null()); } template CdmPromiseTemplate::~CdmPromiseTemplate() { DCHECK(!is_pending_); } template void CdmPromiseTemplate::resolve(const T& result) { DCHECK(is_pending_); is_pending_ = false; resolve_cb_.Run(result); } CdmPromiseTemplate::CdmPromiseTemplate(base::Callback resolve_cb, PromiseRejectedCB reject_cb) : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { DCHECK(!resolve_cb_.is_null()); } CdmPromiseTemplate::CdmPromiseTemplate() { } CdmPromiseTemplate::~CdmPromiseTemplate() { DCHECK(!is_pending_); } void CdmPromiseTemplate::resolve() { DCHECK(is_pending_); is_pending_ = false; resolve_cb_.Run(); } // Explicit template instantiation for the Promises needed. template class MEDIA_EXPORT CdmPromiseTemplate; } // namespace media