Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: media/base/cdm_promise.cc

Issue 567123002: Cleanup template in CdmPromise (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: back to promise Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« media/base/cdm_promise.h ('K') | « media/base/cdm_promise.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "media/base/cdm_promise.h" 5 #include "media/base/cdm_promise.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 10
11 namespace media { 11 namespace media {
12 12
13 template <typename T>
14 struct CdmPromiseTraits {};
15
16 template <>
17 struct CdmPromiseTraits<void> {
18 static CdmPromise::ResolveParameterType ParameterType() {
19 return CdmPromise::VOID_TYPE;
xhwang 2014/09/20 00:34:50 You can simply do: static const CdmPromise::Resol
jrummell 2014/09/22 19:21:10 Done.
20 }
21 };
22
23 template <>
24 struct CdmPromiseTraits<std::string> {
25 static CdmPromise::ResolveParameterType ParameterType() {
26 return CdmPromise::STRING_TYPE;
27 }
28 };
29
30 template <>
31 struct CdmPromiseTraits<KeyIdsVector> {
32 static CdmPromise::ResolveParameterType ParameterType() {
33 return CdmPromise::KEY_IDS_VECTOR_TYPE;
34 }
35 };
36
13 CdmPromise::CdmPromise() : is_pending_(true) { 37 CdmPromise::CdmPromise() : is_pending_(true) {
14 } 38 }
15 39
16 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb) 40 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb)
17 : reject_cb_(reject_cb), is_pending_(true) { 41 : reject_cb_(reject_cb), is_pending_(true) {
18 DCHECK(!reject_cb_.is_null()); 42 DCHECK(!reject_cb_.is_null());
19 } 43 }
20 44
21 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb, const std::string& uma_name) 45 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb, const std::string& uma_name)
22 : reject_cb_(reject_cb), is_pending_(true), uma_name_(uma_name) { 46 : reject_cb_(reject_cb), is_pending_(true), uma_name_(uma_name) {
23 DCHECK(!reject_cb_.is_null()); 47 DCHECK(!reject_cb_.is_null());
48 DCHECK(!uma_name_.empty());
24 } 49 }
25 50
26 CdmPromise::~CdmPromise() { 51 CdmPromise::~CdmPromise() {
27 DCHECK(!is_pending_); 52 DCHECK(!is_pending_);
28 } 53 }
29 54
30 static CdmPromise::ResultCodeForUMA ConvertExceptionToUMAResult( 55 static CdmPromise::ResultCodeForUMA ConvertExceptionToUMAResult(
31 MediaKeys::Exception exception_code) { 56 MediaKeys::Exception exception_code) {
32 switch (exception_code) { 57 switch (exception_code) {
33 case MediaKeys::NOT_SUPPORTED_ERROR: 58 case MediaKeys::NOT_SUPPORTED_ERROR:
(...skipping 16 matching lines...) Expand all
50 } 75 }
51 76
52 void CdmPromise::reject(MediaKeys::Exception exception_code, 77 void CdmPromise::reject(MediaKeys::Exception exception_code,
53 uint32 system_code, 78 uint32 system_code,
54 const std::string& error_message) { 79 const std::string& error_message) {
55 DCHECK(is_pending_); 80 DCHECK(is_pending_);
56 is_pending_ = false; 81 is_pending_ = false;
57 if (!uma_name_.empty()) { 82 if (!uma_name_.empty()) {
58 ResultCodeForUMA result_code = ConvertExceptionToUMAResult(exception_code); 83 ResultCodeForUMA result_code = ConvertExceptionToUMAResult(exception_code);
59 base::LinearHistogram::FactoryGet( 84 base::LinearHistogram::FactoryGet(
60 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1, 85 uma_name_,
86 1,
87 NUM_RESULT_CODES,
88 NUM_RESULT_CODES + 1,
61 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(result_code); 89 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(result_code);
62 } 90 }
63 reject_cb_.Run(exception_code, system_code, error_message); 91 reject_cb_.Run(exception_code, system_code, error_message);
64 } 92 }
65 93
94 void CdmPromise::ReportResolution() {
95 DCHECK(is_pending_);
96 is_pending_ = false;
97 if (!uma_name_.empty()) {
98 base::LinearHistogram::FactoryGet(
ddorwin 2014/09/19 20:56:46 As discussed offline, it might make sense to extra
jrummell 2014/09/22 19:21:10 Done.
99 uma_name_,
100 1,
101 NUM_RESULT_CODES,
102 NUM_RESULT_CODES + 1,
103 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
104 }
105 }
106
107 template <typename T>
108 CdmPromiseTemplate<T>::CdmPromiseTemplate(
109 base::Callback<void(const T&)> resolve_cb,
110 PromiseRejectedCB reject_cb)
111 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
112 DCHECK(!resolve_cb_.is_null());
113 }
114
115 template <typename T>
116 CdmPromiseTemplate<T>::CdmPromiseTemplate(
117 base::Callback<void(const T&)> resolve_cb,
118 PromiseRejectedCB reject_cb,
119 const std::string& uma_name)
120 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
121 DCHECK(!resolve_cb_.is_null());
122 }
123
124 template <typename T>
125 CdmPromiseTemplate<T>::CdmPromiseTemplate() {
ddorwin 2014/09/19 20:56:46 hopefully remove
jrummell 2014/09/22 19:21:10 See comment in .h file.
126 }
127
128 template <typename T>
129 CdmPromiseTemplate<T>::~CdmPromiseTemplate() {
130 DCHECK(!is_pending_);
ddorwin 2014/09/19 20:56:46 The parent's destructor is already doing this. We
jrummell 2014/09/22 19:21:10 Done.
131 }
132
133 template <typename T>
134 void CdmPromiseTemplate<T>::resolve(const T& result) {
135 ReportResolution();
136 resolve_cb_.Run(result);
137 }
138
139 template <typename T>
140 CdmPromise::ResolveParameterType
141 CdmPromiseTemplate<T>::GetResolveParameterType() const {
142 return CdmPromiseTraits<T>::ParameterType();
143 }
144
66 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb, 145 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
67 PromiseRejectedCB reject_cb) 146 PromiseRejectedCB reject_cb)
68 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 147 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
69 DCHECK(!resolve_cb_.is_null()); 148 DCHECK(!resolve_cb_.is_null());
70 } 149 }
71 150
72 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb, 151 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
73 PromiseRejectedCB reject_cb, 152 PromiseRejectedCB reject_cb,
74 const std::string& uma_name) 153 const std::string& uma_name)
75 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) { 154 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
76 DCHECK(!resolve_cb_.is_null()); 155 DCHECK(!resolve_cb_.is_null());
77 DCHECK(!uma_name_.empty()); 156 DCHECK(!uma_name_.empty());
78 } 157 }
79 158
80 CdmPromiseTemplate<void>::CdmPromiseTemplate() { 159 CdmPromiseTemplate<void>::CdmPromiseTemplate() {
81 } 160 }
82 161
83 CdmPromiseTemplate<void>::~CdmPromiseTemplate() { 162 CdmPromiseTemplate<void>::~CdmPromiseTemplate() {
84 DCHECK(!is_pending_); 163 DCHECK(!is_pending_);
85 } 164 }
86 165
87 void CdmPromiseTemplate<void>::resolve() { 166 void CdmPromiseTemplate<void>::resolve() {
88 DCHECK(is_pending_); 167 ReportResolution();
89 is_pending_ = false;
90 if (!uma_name_.empty()) {
91 base::LinearHistogram::FactoryGet(
92 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
93 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
94 }
95 resolve_cb_.Run(); 168 resolve_cb_.Run();
96 } 169 }
97 170
98 CdmPromise::ResolveParameterType 171 CdmPromise::ResolveParameterType
99 CdmPromiseTemplate<void>::GetResolveParameterType() const { 172 CdmPromiseTemplate<void>::GetResolveParameterType() const {
100 return VOID_TYPE; 173 return CdmPromiseTraits<void>::ParameterType();
101 } 174 }
102 175
103 CdmPromiseTemplate<std::string>::CdmPromiseTemplate( 176 // Explicit template instantiation for the Promises needed.
104 base::Callback<void(const std::string&)> resolve_cb, 177 template class MEDIA_EXPORT CdmPromiseTemplate<std::string>;
105 PromiseRejectedCB reject_cb) 178 template class MEDIA_EXPORT CdmPromiseTemplate<KeyIdsVector>;
106 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
107 DCHECK(!resolve_cb_.is_null());
108 }
109
110 CdmPromiseTemplate<std::string>::CdmPromiseTemplate(
111 base::Callback<void(const std::string&)> resolve_cb,
112 PromiseRejectedCB reject_cb,
113 const std::string& uma_name)
114 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
115 DCHECK(!resolve_cb_.is_null());
116 }
117
118 CdmPromiseTemplate<std::string>::CdmPromiseTemplate() {
119 }
120
121 CdmPromiseTemplate<std::string>::~CdmPromiseTemplate() {
122 DCHECK(!is_pending_);
123 }
124
125 void CdmPromiseTemplate<std::string>::resolve(const std::string& result) {
126 DCHECK(is_pending_);
127 is_pending_ = false;
128 if (!uma_name_.empty()) {
129 base::LinearHistogram::FactoryGet(
130 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
131 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
132 }
133 resolve_cb_.Run(result);
134 }
135
136 CdmPromise::ResolveParameterType
137 CdmPromiseTemplate<std::string>::GetResolveParameterType() const {
138 return STRING_TYPE;
139 }
140
141 CdmPromiseTemplate<KeyIdsVector>::CdmPromiseTemplate(
142 base::Callback<void(const KeyIdsVector&)> resolve_cb,
143 PromiseRejectedCB reject_cb)
144 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
145 DCHECK(!resolve_cb_.is_null());
146 }
147
148 CdmPromiseTemplate<KeyIdsVector>::CdmPromiseTemplate(
149 base::Callback<void(const KeyIdsVector&)> resolve_cb,
150 PromiseRejectedCB reject_cb,
151 const std::string& uma_name)
152 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
153 DCHECK(!resolve_cb_.is_null());
154 }
155
156 CdmPromiseTemplate<KeyIdsVector>::~CdmPromiseTemplate() {
157 DCHECK(!is_pending_);
158 }
159
160 void CdmPromiseTemplate<KeyIdsVector>::resolve(const KeyIdsVector& result) {
161 DCHECK(is_pending_);
162 is_pending_ = false;
163 if (!uma_name_.empty()) {
164 base::LinearHistogram::FactoryGet(
165 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
166 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
167 }
168 resolve_cb_.Run(result);
169 }
170
171 CdmPromise::ResolveParameterType
172 CdmPromiseTemplate<KeyIdsVector>::GetResolveParameterType() const {
173 return KEY_IDS_VECTOR_TYPE;
174 }
175 179
176 } // namespace media 180 } // namespace media
OLDNEW
« media/base/cdm_promise.h ('K') | « media/base/cdm_promise.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698