Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / media / base / cdm_promise.h
index ad1d196..14f79f8 100644 (file)
@@ -22,6 +22,19 @@ 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
+  };
+
   typedef base::Callback<void(MediaKeys::Exception exception_code,
                               uint32 system_code,
                               const std::string& error_message)>
@@ -41,11 +54,19 @@ class MEDIA_EXPORT CdmPromise {
   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);
 };
 
@@ -54,9 +75,18 @@ class MEDIA_EXPORT CdmPromiseTemplate : public 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_;
 
@@ -69,6 +99,9 @@ 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();