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

Unified Diff: media/base/cdm_promise.h

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, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/pepper/content_decryptor_delegate.cc ('k') | media/base/cdm_promise.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/cdm_promise.h
diff --git a/media/base/cdm_promise.h b/media/base/cdm_promise.h
index 14f79f852d149a4a80471e823c873508ec10d8fc..33ec042510c841baa7d6715dff94440d57032642 100644
--- a/media/base/cdm_promise.h
+++ b/media/base/cdm_promise.h
@@ -35,6 +35,12 @@ class MEDIA_EXPORT CdmPromise {
NUM_RESULT_CODES
};
+ enum ResolveParameterType {
+ VOID_TYPE,
+ STRING_TYPE,
+ KEY_IDS_VECTOR_TYPE
+ };
+
typedef base::Callback<void(MediaKeys::Exception exception_code,
uint32 system_code,
const std::string& error_message)>
@@ -50,6 +56,8 @@ class MEDIA_EXPORT CdmPromise {
uint32 system_code,
const std::string& error_message);
+ virtual ResolveParameterType GetResolveParameterType() const = 0;
+
protected:
CdmPromise();
CdmPromise(PromiseRejectedCB reject_cb);
@@ -70,47 +78,67 @@ class MEDIA_EXPORT CdmPromise {
DISALLOW_COPY_AND_ASSIGN(CdmPromise);
};
-template <typename T>
-class MEDIA_EXPORT CdmPromiseTemplate : public CdmPromise {
+// Specialization for no parameter to resolve().
+template <>
+class MEDIA_EXPORT CdmPromiseTemplate<void> : public CdmPromise {
public:
- CdmPromiseTemplate(base::Callback<void(const T&)> resolve_cb,
+ CdmPromiseTemplate(base::Callback<void(void)> resolve_cb,
PromiseRejectedCB rejected_cb);
- CdmPromiseTemplate(base::Callback<void(const T&)> resolve_cb,
+ CdmPromiseTemplate(base::Callback<void(void)> resolve_cb,
PromiseRejectedCB rejected_cb,
const std::string& uma_name);
virtual ~CdmPromiseTemplate();
- virtual void resolve(const T& result);
+ virtual void resolve();
+ virtual ResolveParameterType GetResolveParameterType() const OVERRIDE;
protected:
// Allow subclasses to completely override the implementation.
- // TODO(jrummell): Remove when derived class SessionLoadedPromise
- // (in ppapi_decryptor.cc) is no longer needed.
CdmPromiseTemplate();
private:
- base::Callback<void(const T&)> resolve_cb_;
+ base::Callback<void(void)> resolve_cb_;
DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate);
};
-// Specialization for no parameter to resolve().
template <>
-class MEDIA_EXPORT CdmPromiseTemplate<void> : public CdmPromise {
+class MEDIA_EXPORT CdmPromiseTemplate<std::string> : public CdmPromise {
public:
- CdmPromiseTemplate(base::Callback<void(void)> resolve_cb,
+ CdmPromiseTemplate(base::Callback<void(const std::string&)> resolve_cb,
PromiseRejectedCB rejected_cb);
- CdmPromiseTemplate(base::Callback<void(void)> resolve_cb,
+ CdmPromiseTemplate(base::Callback<void(const std::string&)> resolve_cb,
PromiseRejectedCB rejected_cb,
const std::string& uma_name);
virtual ~CdmPromiseTemplate();
- virtual void resolve();
+ virtual void resolve(const std::string& result);
+ virtual ResolveParameterType GetResolveParameterType() const OVERRIDE;
protected:
// Allow subclasses to completely override the implementation.
+ // TODO(jrummell): Remove when derived class SessionLoadedPromise
+ // (in ppapi_decryptor.cc) is no longer needed.
CdmPromiseTemplate();
private:
- base::Callback<void(void)> resolve_cb_;
+ base::Callback<void(const std::string&)> resolve_cb_;
+
+ DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate);
+};
+
+template <>
+class MEDIA_EXPORT CdmPromiseTemplate<KeyIdsVector> : public CdmPromise {
+ public:
+ CdmPromiseTemplate(base::Callback<void(const KeyIdsVector&)> resolve_cb,
+ PromiseRejectedCB rejected_cb);
+ CdmPromiseTemplate(base::Callback<void(const KeyIdsVector&)> resolve_cb,
+ PromiseRejectedCB rejected_cb,
+ const std::string& uma_name);
+ virtual ~CdmPromiseTemplate();
+ virtual void resolve(const KeyIdsVector& result);
+ virtual ResolveParameterType GetResolveParameterType() const OVERRIDE;
+
+ private:
+ base::Callback<void(const KeyIdsVector&)> resolve_cb_;
DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate);
};
« no previous file with comments | « content/renderer/pepper/content_decryptor_delegate.cc ('k') | media/base/cdm_promise.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698