| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MEDIA_BASE_CDM_PROMISE_H_ | 5 #ifndef MEDIA_BASE_CDM_PROMISE_H_ |
| 6 #define MEDIA_BASE_CDM_PROMISE_H_ | 6 #define MEDIA_BASE_CDM_PROMISE_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 NOT_SUPPORTED_ERROR, | 28 NOT_SUPPORTED_ERROR, |
| 29 INVALID_STATE_ERROR, | 29 INVALID_STATE_ERROR, |
| 30 INVALID_ACCESS_ERROR, | 30 INVALID_ACCESS_ERROR, |
| 31 QUOTA_EXCEEDED_ERROR, | 31 QUOTA_EXCEEDED_ERROR, |
| 32 UNKNOWN_ERROR, | 32 UNKNOWN_ERROR, |
| 33 CLIENT_ERROR, | 33 CLIENT_ERROR, |
| 34 OUTPUT_ERROR, | 34 OUTPUT_ERROR, |
| 35 NUM_RESULT_CODES | 35 NUM_RESULT_CODES |
| 36 }; | 36 }; |
| 37 | 37 |
| 38 enum ResolveParameterType { |
| 39 VOID_TYPE, |
| 40 STRING_TYPE, |
| 41 KEY_IDS_VECTOR_TYPE |
| 42 }; |
| 43 |
| 38 typedef base::Callback<void(MediaKeys::Exception exception_code, | 44 typedef base::Callback<void(MediaKeys::Exception exception_code, |
| 39 uint32 system_code, | 45 uint32 system_code, |
| 40 const std::string& error_message)> | 46 const std::string& error_message)> |
| 41 PromiseRejectedCB; | 47 PromiseRejectedCB; |
| 42 | 48 |
| 43 virtual ~CdmPromise(); | 49 virtual ~CdmPromise(); |
| 44 | 50 |
| 45 // Used to indicate that the operation failed. |exception_code| must be | 51 // Used to indicate that the operation failed. |exception_code| must be |
| 46 // specified. |system_code| is a Key System-specific value for the error | 52 // specified. |system_code| is a Key System-specific value for the error |
| 47 // that occurred, or 0 if there is no associated status code or such status | 53 // that occurred, or 0 if there is no associated status code or such status |
| 48 // codes are not supported by the Key System. |error_message| is optional. | 54 // codes are not supported by the Key System. |error_message| is optional. |
| 49 virtual void reject(MediaKeys::Exception exception_code, | 55 virtual void reject(MediaKeys::Exception exception_code, |
| 50 uint32 system_code, | 56 uint32 system_code, |
| 51 const std::string& error_message); | 57 const std::string& error_message); |
| 52 | 58 |
| 59 virtual ResolveParameterType GetResolveParameterType() const = 0; |
| 60 |
| 53 protected: | 61 protected: |
| 54 CdmPromise(); | 62 CdmPromise(); |
| 55 CdmPromise(PromiseRejectedCB reject_cb); | 63 CdmPromise(PromiseRejectedCB reject_cb); |
| 56 | 64 |
| 57 // If constructed with a |uma_name| (which must be the name of a | 65 // If constructed with a |uma_name| (which must be the name of a |
| 58 // CdmPromiseResult UMA), CdmPromise will report the promise result (success | 66 // CdmPromiseResult UMA), CdmPromise will report the promise result (success |
| 59 // or rejection code). | 67 // or rejection code). |
| 60 CdmPromise(PromiseRejectedCB reject_cb, const std::string& uma_name); | 68 CdmPromise(PromiseRejectedCB reject_cb, const std::string& uma_name); |
| 61 | 69 |
| 62 PromiseRejectedCB reject_cb_; | 70 PromiseRejectedCB reject_cb_; |
| 63 | 71 |
| 64 // Keep track of whether the promise hasn't been resolved or rejected yet. | 72 // Keep track of whether the promise hasn't been resolved or rejected yet. |
| 65 bool is_pending_; | 73 bool is_pending_; |
| 66 | 74 |
| 67 // UMA to report result to. | 75 // UMA to report result to. |
| 68 std::string uma_name_; | 76 std::string uma_name_; |
| 69 | 77 |
| 70 DISALLOW_COPY_AND_ASSIGN(CdmPromise); | 78 DISALLOW_COPY_AND_ASSIGN(CdmPromise); |
| 71 }; | 79 }; |
| 72 | 80 |
| 73 template <typename T> | |
| 74 class MEDIA_EXPORT CdmPromiseTemplate : public CdmPromise { | |
| 75 public: | |
| 76 CdmPromiseTemplate(base::Callback<void(const T&)> resolve_cb, | |
| 77 PromiseRejectedCB rejected_cb); | |
| 78 CdmPromiseTemplate(base::Callback<void(const T&)> resolve_cb, | |
| 79 PromiseRejectedCB rejected_cb, | |
| 80 const std::string& uma_name); | |
| 81 virtual ~CdmPromiseTemplate(); | |
| 82 virtual void resolve(const T& result); | |
| 83 | |
| 84 protected: | |
| 85 // Allow subclasses to completely override the implementation. | |
| 86 // TODO(jrummell): Remove when derived class SessionLoadedPromise | |
| 87 // (in ppapi_decryptor.cc) is no longer needed. | |
| 88 CdmPromiseTemplate(); | |
| 89 | |
| 90 private: | |
| 91 base::Callback<void(const T&)> resolve_cb_; | |
| 92 | |
| 93 DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate); | |
| 94 }; | |
| 95 | |
| 96 // Specialization for no parameter to resolve(). | 81 // Specialization for no parameter to resolve(). |
| 97 template <> | 82 template <> |
| 98 class MEDIA_EXPORT CdmPromiseTemplate<void> : public CdmPromise { | 83 class MEDIA_EXPORT CdmPromiseTemplate<void> : public CdmPromise { |
| 99 public: | 84 public: |
| 100 CdmPromiseTemplate(base::Callback<void(void)> resolve_cb, | 85 CdmPromiseTemplate(base::Callback<void(void)> resolve_cb, |
| 101 PromiseRejectedCB rejected_cb); | 86 PromiseRejectedCB rejected_cb); |
| 102 CdmPromiseTemplate(base::Callback<void(void)> resolve_cb, | 87 CdmPromiseTemplate(base::Callback<void(void)> resolve_cb, |
| 103 PromiseRejectedCB rejected_cb, | 88 PromiseRejectedCB rejected_cb, |
| 104 const std::string& uma_name); | 89 const std::string& uma_name); |
| 105 virtual ~CdmPromiseTemplate(); | 90 virtual ~CdmPromiseTemplate(); |
| 106 virtual void resolve(); | 91 virtual void resolve(); |
| 92 virtual ResolveParameterType GetResolveParameterType() const OVERRIDE; |
| 107 | 93 |
| 108 protected: | 94 protected: |
| 109 // Allow subclasses to completely override the implementation. | 95 // Allow subclasses to completely override the implementation. |
| 110 CdmPromiseTemplate(); | 96 CdmPromiseTemplate(); |
| 111 | 97 |
| 112 private: | 98 private: |
| 113 base::Callback<void(void)> resolve_cb_; | 99 base::Callback<void(void)> resolve_cb_; |
| 114 | 100 |
| 115 DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate); | 101 DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate); |
| 116 }; | 102 }; |
| 103 |
| 104 template <> |
| 105 class MEDIA_EXPORT CdmPromiseTemplate<std::string> : public CdmPromise { |
| 106 public: |
| 107 CdmPromiseTemplate(base::Callback<void(const std::string&)> resolve_cb, |
| 108 PromiseRejectedCB rejected_cb); |
| 109 CdmPromiseTemplate(base::Callback<void(const std::string&)> resolve_cb, |
| 110 PromiseRejectedCB rejected_cb, |
| 111 const std::string& uma_name); |
| 112 virtual ~CdmPromiseTemplate(); |
| 113 virtual void resolve(const std::string& result); |
| 114 virtual ResolveParameterType GetResolveParameterType() const OVERRIDE; |
| 115 |
| 116 protected: |
| 117 // Allow subclasses to completely override the implementation. |
| 118 // TODO(jrummell): Remove when derived class SessionLoadedPromise |
| 119 // (in ppapi_decryptor.cc) is no longer needed. |
| 120 CdmPromiseTemplate(); |
| 121 |
| 122 private: |
| 123 base::Callback<void(const std::string&)> resolve_cb_; |
| 124 |
| 125 DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate); |
| 126 }; |
| 127 |
| 128 template <> |
| 129 class MEDIA_EXPORT CdmPromiseTemplate<KeyIdsVector> : public CdmPromise { |
| 130 public: |
| 131 CdmPromiseTemplate(base::Callback<void(const KeyIdsVector&)> resolve_cb, |
| 132 PromiseRejectedCB rejected_cb); |
| 133 CdmPromiseTemplate(base::Callback<void(const KeyIdsVector&)> resolve_cb, |
| 134 PromiseRejectedCB rejected_cb, |
| 135 const std::string& uma_name); |
| 136 virtual ~CdmPromiseTemplate(); |
| 137 virtual void resolve(const KeyIdsVector& result); |
| 138 virtual ResolveParameterType GetResolveParameterType() const OVERRIDE; |
| 139 |
| 140 private: |
| 141 base::Callback<void(const KeyIdsVector&)> resolve_cb_; |
| 142 |
| 143 DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate); |
| 144 }; |
| 117 | 145 |
| 118 } // namespace media | 146 } // namespace media |
| 119 | 147 |
| 120 #endif // MEDIA_BASE_CDM_PROMISE_H_ | 148 #endif // MEDIA_BASE_CDM_PROMISE_H_ |
| OLD | NEW |