// 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
+ };
+
typedef base::Callback<void(MediaKeys::Exception exception_code,
uint32 system_code,
const std::string& error_message)>
CdmPromise();
CdmPromise(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(PromiseRejectedCB reject_cb, const std::string& uma_name);
+
PromiseRejectedCB reject_cb_;
// Keep track of whether the promise hasn't been resolved or rejected yet.
bool is_pending_;
+ // UMA to report result to.
+ std::string uma_name_;
+
DISALLOW_COPY_AND_ASSIGN(CdmPromise);
};
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);
+ 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_;
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();