1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_
6#define CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_
7
8#include <map>
9
10#include "base/basictypes.h"
11#include "media/base/cdm_promise.h"
12#include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h"
13
14namespace content {
15
16// Used to convert a WebContentDecryptionModuleResult into a CdmPromise so that
17// it can be passed through Chromium. When CdmPromise::resolve(T) is called,
18// OnResolve(T) will be called and will call the appropriate complete...()
19// method on WebContentDecryptionModuleResult. If CdmPromise::reject() is called
20// instead, WebContentDecryptionModuleResult::completeWithError() is called.
21// If constructed with a |uma_name| (which must be the name of a
22// CdmPromiseResult UMA), CdmResultPromise will report the promise result
23// (success or rejection code).
24template <typename T>
25class CdmResultPromise : public media::CdmPromiseTemplate<T> {
26 public:
27  explicit CdmResultPromise(
28      const blink::WebContentDecryptionModuleResult& result);
29  CdmResultPromise(const blink::WebContentDecryptionModuleResult& result,
30                   const std::string& uma_name);
31  virtual ~CdmResultPromise();
32
33 protected:
34  // OnResolve() is virtual as it may need special handling in derived classes.
35  virtual void OnResolve(const T& result);
36  void OnReject(media::MediaKeys::Exception exception_code,
37                uint32 system_code,
38                const std::string& error_message);
39
40  blink::WebContentDecryptionModuleResult web_cdm_result_;
41
42 private:
43  DISALLOW_COPY_AND_ASSIGN(CdmResultPromise);
44};
45
46// Specialization for no parameter to resolve().
47template <>
48class CdmResultPromise<void> : public media::CdmPromiseTemplate<void> {
49 public:
50  explicit CdmResultPromise(
51      const blink::WebContentDecryptionModuleResult& result);
52  CdmResultPromise(const blink::WebContentDecryptionModuleResult& result,
53                   const std::string& uma_name);
54  virtual ~CdmResultPromise();
55
56 protected:
57  virtual void OnResolve();
58  void OnReject(media::MediaKeys::Exception exception_code,
59                uint32 system_code,
60                const std::string& error_message);
61
62  blink::WebContentDecryptionModuleResult web_cdm_result_;
63
64 private:
65  DISALLOW_COPY_AND_ASSIGN(CdmResultPromise);
66};
67
68typedef CdmResultPromise<void> SimpleCdmResultPromise;
69
70}  // namespace content
71
72#endif  // CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_
73