Chromium Code Reviews| Index: media/base/cdm_promise.h |
| diff --git a/media/base/cdm_promise.h b/media/base/cdm_promise.h |
| index 8e6703d0c7dd63c7074f272725781c73d0804d98..6ba3a24ba0d56d4056a6e24b09007a85c4e97b75 100644 |
| --- a/media/base/cdm_promise.h |
| +++ b/media/base/cdm_promise.h |
| @@ -22,30 +22,12 @@ namespace media { |
| // This is only the base class, as parameter to resolve() varies. |
| class MEDIA_EXPORT CdmPromise { |
| public: |
| - // A superset of media::MediaKeys::Exception for UMA reporting. |
| - enum ResultCodeForUMA { |
| - SUCCESS, |
| - NOT_SUPPORTED_ERROR, |
| - INVALID_STATE_ERROR, |
| - INVALID_ACCESS_ERROR, |
| - QUOTA_EXCEEDED_ERROR, |
| - UNKNOWN_ERROR, |
| - CLIENT_ERROR, |
| - OUTPUT_ERROR, |
| - 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)> |
| - PromiseRejectedCB; |
| - |
| virtual ~CdmPromise(); |
| // Used to indicate that the operation failed. |exception_code| must be |
| @@ -54,56 +36,29 @@ class MEDIA_EXPORT CdmPromise { |
| // codes are not supported by the Key System. |error_message| is optional. |
| virtual void reject(MediaKeys::Exception exception_code, |
| uint32 system_code, |
| - const std::string& error_message); |
| + const std::string& error_message) = 0; |
| - ResolveParameterType GetResolveParameterType() const { |
| - return parameter_type_; |
| - } |
| + virtual ResolveParameterType GetResolveParameterType() const = 0; |
|
xhwang
2014/09/29 18:32:59
Since this is an interface, it'd be nice to provid
jrummell
2014/09/29 22:08:39
Done.
|
| protected: |
| - explicit CdmPromise(ResolveParameterType parameter_type); |
| - CdmPromise(ResolveParameterType parameter_type, PromiseRejectedCB reject_cb); |
| - |
| - // If constructed with a |uma_name| (which must be the name of a |
| - // CdmPromiseResult UMA), CdmPromise will report the promise result (success |
| - // or rejection code). |
| - CdmPromise(ResolveParameterType parameter_type, |
| - PromiseRejectedCB reject_cb, |
| - const std::string& uma_name); |
| - |
| - // Called by all resolve()/reject() methods to report the UMA result if |
| - // applicable, and update |is_pending_|. |
| - void ReportResultToUMA(ResultCodeForUMA result); |
| - |
| - const ResolveParameterType parameter_type_; |
| - PromiseRejectedCB reject_cb_; |
| - |
| - // Keep track of whether the promise hasn't been resolved or rejected yet. |
| - bool is_pending_; |
| - |
| - // UMA name to report result to. |
| - std::string uma_name_; |
| + CdmPromise(); |
|
xhwang
2014/09/29 18:32:59
nit: Since this class is an interface, nobody can
jrummell
2014/09/29 22:08:39
Done.
|
| + private: |
| DISALLOW_COPY_AND_ASSIGN(CdmPromise); |
| }; |
| template <typename T> |
| class MEDIA_EXPORT CdmPromiseTemplate : public CdmPromise { |
|
xhwang
2014/09/29 18:32:58
Comment about why we need this. Also, mention that
jrummell
2014/09/29 22:08:39
Done.
|
| public: |
| - CdmPromiseTemplate(base::Callback<void(const T&)> resolve_cb, |
| - PromiseRejectedCB rejected_cb); |
| - CdmPromiseTemplate(base::Callback<void(const T&)> resolve_cb, |
| - PromiseRejectedCB rejected_cb, |
| - const std::string& uma_name); |
| + virtual ~CdmPromiseTemplate(); |
| + |
| virtual void resolve(const T& result); |
|
ddorwin
2014/09/26 22:40:00
It doesn't appear that CdmPromiseTemplate<foo> is
xhwang
2014/09/29 18:32:59
+1
Also you can put reject(...) = 0 here so it's
jrummell
2014/09/29 22:08:39
Done.
jrummell
2014/09/29 22:08:39
True. But then we'd have to clone CdmPromiseTraits
|
| + virtual ResolveParameterType GetResolveParameterType() const OVERRIDE; |
|
xhwang
2014/09/29 18:32:59
// CdmPromise implementation.
jrummell
2014/09/29 22:08:39
Done.
|
| protected: |
| - // Allow subclasses to completely override the implementation. |
| CdmPromiseTemplate(); |
|
xhwang
2014/09/29 18:32:59
ditto about protected ctor since this class is als
jrummell
2014/09/29 22:08:39
Done.
|
| private: |
| - base::Callback<void(const T&)> resolve_cb_; |
| - |
| DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate); |
| }; |
| @@ -111,21 +66,66 @@ class MEDIA_EXPORT CdmPromiseTemplate : public CdmPromise { |
| template <> |
| class MEDIA_EXPORT CdmPromiseTemplate<void> : public CdmPromise { |
| public: |
| - CdmPromiseTemplate(base::Callback<void(void)> resolve_cb, |
| - PromiseRejectedCB rejected_cb); |
| - CdmPromiseTemplate(base::Callback<void(void)> resolve_cb, |
| - PromiseRejectedCB rejected_cb, |
| - const std::string& uma_name); |
| + virtual ~CdmPromiseTemplate(); |
| + |
| virtual void resolve(); |
|
xhwang
2014/09/29 18:32:59
ditto, pure virtual.
jrummell
2014/09/29 22:08:39
Done.
|
| + virtual ResolveParameterType GetResolveParameterType() const OVERRIDE; |
| protected: |
| - // Allow subclasses to completely override the implementation. |
| CdmPromiseTemplate(); |
| private: |
| + DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate); |
| +}; |
| + |
| +typedef base::Callback<void(MediaKeys::Exception exception_code, |
| + uint32 system_code, |
| + const std::string& error_message)> |
| + PromiseRejectedCB; |
| + |
| +template <typename T> |
| +class MEDIA_EXPORT CdmCallbackPromise : public CdmPromiseTemplate<T> { |
|
xhwang
2014/09/29 18:32:59
Does it make sense to put CdmCallbackPromise in it
jrummell
2014/09/29 22:08:39
Done.
|
| + public: |
| + CdmCallbackPromise(base::Callback<void(const T&)> resolve_cb, |
| + PromiseRejectedCB reject_cb); |
| + virtual ~CdmCallbackPromise(); |
| + |
| + virtual void resolve(const T& result) OVERRIDE; |
|
xhwang
2014/09/29 18:32:59
// CdmPromiseTemplate<T> implementation.
jrummell
2014/09/29 22:08:39
Done.
|
| + virtual void reject(MediaKeys::Exception exception_code, |
| + uint32 system_code, |
| + const std::string& error_message) OVERRIDE; |
| + |
| + private: |
| + base::Callback<void(const T&)> resolve_cb_; |
| + PromiseRejectedCB reject_cb_; |
| + |
| + // Keep track of whether the promise hasn't been resolved or rejected yet. |
| + bool is_pending_; |
|
ddorwin
2014/09/26 22:40:00
Is there a reason that is_pending_ can't be a memb
jrummell
2014/09/29 22:08:39
It seems strange to have it defined on the base cl
|
| + |
| + DISALLOW_COPY_AND_ASSIGN(CdmCallbackPromise); |
| +}; |
| + |
| +// Specialization for no parameter to resolve(). |
| +template <> |
| +class MEDIA_EXPORT CdmCallbackPromise<void> : public CdmPromiseTemplate<void> { |
| + public: |
| + CdmCallbackPromise(base::Callback<void(void)> resolve_cb, |
| + PromiseRejectedCB reject_cb); |
| + virtual ~CdmCallbackPromise(); |
| + |
| + virtual void resolve() OVERRIDE; |
|
xhwang
2014/09/29 18:32:59
// CdmPromiseTemplate<void> implementation.
jrummell
2014/09/29 22:08:39
Done.
|
| + virtual void reject(MediaKeys::Exception exception_code, |
| + uint32 system_code, |
| + const std::string& error_message) OVERRIDE; |
| + |
| + private: |
| base::Callback<void(void)> resolve_cb_; |
| + PromiseRejectedCB reject_cb_; |
| - DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate); |
| + // Keep track of whether the promise hasn't been resolved or rejected yet. |
| + bool is_pending_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(CdmCallbackPromise); |
| }; |
| } // namespace media |