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

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

Issue 515753002: Verify promise type before casting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: compiler changes #2 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
« no previous file with comments | « 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
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 is_pending_ = false; 56 is_pending_ = false;
57 if (!uma_name_.empty()) { 57 if (!uma_name_.empty()) {
58 ResultCodeForUMA result_code = ConvertExceptionToUMAResult(exception_code); 58 ResultCodeForUMA result_code = ConvertExceptionToUMAResult(exception_code);
59 base::LinearHistogram::FactoryGet( 59 base::LinearHistogram::FactoryGet(
60 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1, 60 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
61 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(result_code); 61 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(result_code);
62 } 62 }
63 reject_cb_.Run(exception_code, system_code, error_message); 63 reject_cb_.Run(exception_code, system_code, error_message);
64 } 64 }
65 65
66 template <typename T> 66 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
67 CdmPromiseTemplate<T>::CdmPromiseTemplate( 67 PromiseRejectedCB reject_cb)
68 base::Callback<void(const T&)> resolve_cb, 68 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
69 DCHECK(!resolve_cb_.is_null());
70 }
71
72 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
73 PromiseRejectedCB reject_cb,
74 const std::string& uma_name)
75 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
76 DCHECK(!resolve_cb_.is_null());
77 DCHECK(!uma_name_.empty());
78 }
79
80 CdmPromiseTemplate<void>::CdmPromiseTemplate() {
81 }
82
83 CdmPromiseTemplate<void>::~CdmPromiseTemplate() {
84 DCHECK(!is_pending_);
85 }
86
87 void CdmPromiseTemplate<void>::resolve() {
88 DCHECK(is_pending_);
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();
96 }
97
98 CdmPromise::ResolveParameterType
99 CdmPromiseTemplate<void>::GetResolveParameterType() const {
100 return VOID_TYPE;
101 }
102
103 CdmPromiseTemplate<std::string>::CdmPromiseTemplate(
104 base::Callback<void(const std::string&)> resolve_cb,
69 PromiseRejectedCB reject_cb) 105 PromiseRejectedCB reject_cb)
70 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 106 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
71 DCHECK(!resolve_cb_.is_null()); 107 DCHECK(!resolve_cb_.is_null());
72 } 108 }
73 109
74 template <typename T> 110 CdmPromiseTemplate<std::string>::CdmPromiseTemplate(
75 CdmPromiseTemplate<T>::CdmPromiseTemplate( 111 base::Callback<void(const std::string&)> resolve_cb,
76 base::Callback<void(const T&)> resolve_cb,
77 PromiseRejectedCB reject_cb, 112 PromiseRejectedCB reject_cb,
78 const std::string& uma_name) 113 const std::string& uma_name)
79 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) { 114 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
80 DCHECK(!resolve_cb_.is_null()); 115 DCHECK(!resolve_cb_.is_null());
81 } 116 }
82 117
83 template <typename T> 118 CdmPromiseTemplate<std::string>::CdmPromiseTemplate() {
84 CdmPromiseTemplate<T>::CdmPromiseTemplate() {
85 } 119 }
86 120
87 template <typename T> 121 CdmPromiseTemplate<std::string>::~CdmPromiseTemplate() {
88 CdmPromiseTemplate<T>::~CdmPromiseTemplate() {
89 DCHECK(!is_pending_); 122 DCHECK(!is_pending_);
90 } 123 }
91 124
92 template <typename T> 125 void CdmPromiseTemplate<std::string>::resolve(const std::string& result) {
93 void CdmPromiseTemplate<T>::resolve(const T& result) {
94 DCHECK(is_pending_); 126 DCHECK(is_pending_);
95 is_pending_ = false; 127 is_pending_ = false;
96 if (!uma_name_.empty()) { 128 if (!uma_name_.empty()) {
97 base::LinearHistogram::FactoryGet( 129 base::LinearHistogram::FactoryGet(
98 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1, 130 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
99 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS); 131 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
100 } 132 }
101 resolve_cb_.Run(result); 133 resolve_cb_.Run(result);
102 } 134 }
103 135
104 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb, 136 CdmPromise::ResolveParameterType
105 PromiseRejectedCB reject_cb) 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)
106 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 144 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
107 DCHECK(!resolve_cb_.is_null()); 145 DCHECK(!resolve_cb_.is_null());
108 } 146 }
109 147
110 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb, 148 CdmPromiseTemplate<KeyIdsVector>::CdmPromiseTemplate(
111 PromiseRejectedCB reject_cb, 149 base::Callback<void(const KeyIdsVector&)> resolve_cb,
112 const std::string& uma_name) 150 PromiseRejectedCB reject_cb,
151 const std::string& uma_name)
113 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) { 152 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
114 DCHECK(!resolve_cb_.is_null()); 153 DCHECK(!resolve_cb_.is_null());
115 DCHECK(!uma_name_.empty());
116 } 154 }
117 155
118 CdmPromiseTemplate<void>::CdmPromiseTemplate() { 156 CdmPromiseTemplate<KeyIdsVector>::~CdmPromiseTemplate() {
119 }
120
121 CdmPromiseTemplate<void>::~CdmPromiseTemplate() {
122 DCHECK(!is_pending_); 157 DCHECK(!is_pending_);
123 } 158 }
124 159
125 void CdmPromiseTemplate<void>::resolve() { 160 void CdmPromiseTemplate<KeyIdsVector>::resolve(const KeyIdsVector& result) {
126 DCHECK(is_pending_); 161 DCHECK(is_pending_);
127 is_pending_ = false; 162 is_pending_ = false;
128 if (!uma_name_.empty()) { 163 if (!uma_name_.empty()) {
129 base::LinearHistogram::FactoryGet( 164 base::LinearHistogram::FactoryGet(
130 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1, 165 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
131 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS); 166 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
132 } 167 }
133 resolve_cb_.Run(); 168 resolve_cb_.Run(result);
134 } 169 }
135 170
136 // Explicit template instantiation for the Promises needed. 171 CdmPromise::ResolveParameterType
137 template class MEDIA_EXPORT CdmPromiseTemplate<std::string>; 172 CdmPromiseTemplate<KeyIdsVector>::GetResolveParameterType() const {
138 template class MEDIA_EXPORT CdmPromiseTemplate<KeyIdsVector>; 173 return KEY_IDS_VECTOR_TYPE;
174 }
139 175
140 } // namespace media 176 } // namespace media
OLDNEW
« no previous file with comments | « media/base/cdm_promise.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698