chromium/third_party/blink/renderer/platform/media/cdm_result_promise.h

// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_MEDIA_CDM_RESULT_PROMISE_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MEDIA_CDM_RESULT_PROMISE_H_

#include <stdint.h>

#include "base/metrics/histogram_functions.h"
#include "base/time/time.h"
#include "third_party/blink/public/platform/web_content_decryption_module_result.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/renderer/platform/media/cdm_result_promise_helper.h"
#include "third_party/blink/renderer/platform/platform_export.h"

namespace blink {

const char kTimeToResolveUmaPrefix[] =;
const char kTimeToRejectUmaPrefix[] =;

// Used to convert a WebContentDecryptionModuleResult into a CdmPromiseTemplate
// so that it can be passed through Chromium. When resolve(T) is called, the
// appropriate complete...() method on WebContentDecryptionModuleResult will be
// invoked. If reject() is called instead,
// WebContentDecryptionModuleResult::completeWithError() is called.
// If constructed with a |uma_name|, CdmResultPromise will report the promise
// result (success or rejection code) to UMA.
template <typename... T>
class PLATFORM_EXPORT CdmResultPromise
    : public media::CdmPromiseTemplate<T...> {};

template <typename... T>
CdmResultPromise<T...>::CdmResultPromise(
    const WebContentDecryptionModuleResult& result,
    const std::string& key_system_uma_prefix,
    const std::string& uma_name)
    :{}

template <typename... T>
CdmResultPromise<T...>::~CdmResultPromise() {}

// "inline" is needed to prevent multiple definition error.

template <>
inline void CdmResultPromise<>::resolve() {}

template <>
inline void CdmResultPromise<media::CdmKeyInformation::KeyStatus>::resolve(
    const media::CdmKeyInformation::KeyStatus& key_status) {}

template <typename... T>
void CdmResultPromise<T...>::reject(media::CdmPromise::Exception exception_code,
                                    uint32_t system_code,
                                    const std::string& error_message) {}

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_MEDIA_CDM_RESULT_PROMISE_H_