| OLD | NEW |
| 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 #ifndef CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_ |
| 6 #define CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_ | 6 #define CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "media/base/cdm_promise.h" | 11 #include "media/base/cdm_promise.h" |
| 12 #include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h" | 12 #include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h" |
| 13 | 13 |
| 14 namespace content { | 14 namespace content { |
| 15 | 15 |
| 16 // Used to convert a WebContentDecryptionModuleResult into a CdmPromise so that | 16 // Used to convert a WebContentDecryptionModuleResult into a CdmPromiseTemplate |
| 17 // it can be passed through Chromium. When CdmPromise::resolve(T) is called, | 17 // so that it can be passed through Chromium. When resolve(T) is called, the |
| 18 // OnResolve(T) will be called and will call the appropriate complete...() | 18 // appropriate complete...() method on WebContentDecryptionModuleResult will be |
| 19 // method on WebContentDecryptionModuleResult. If CdmPromise::reject() is called | 19 // invoked. If reject() is called instead, |
| 20 // instead, WebContentDecryptionModuleResult::completeWithError() is called. | 20 // WebContentDecryptionModuleResult::completeWithError() is called. |
| 21 // If constructed with a |uma_name| (which must be the name of a | 21 // If constructed with a |uma_name|, CdmResultPromise will report the promise |
| 22 // CdmPromiseResult UMA), CdmResultPromise will report the promise result | 22 // result (success or rejection code) to UMA. |
| 23 // (success or rejection code). | 23 template <typename... T> |
| 24 template <typename T> | 24 class CdmResultPromise : public media::CdmPromiseTemplate<T...> { |
| 25 class CdmResultPromise : public media::CdmPromiseTemplate<T> { | |
| 26 public: | 25 public: |
| 27 explicit CdmResultPromise( | |
| 28 const blink::WebContentDecryptionModuleResult& result); | |
| 29 CdmResultPromise(const blink::WebContentDecryptionModuleResult& result, | 26 CdmResultPromise(const blink::WebContentDecryptionModuleResult& result, |
| 30 const std::string& uma_name); | 27 const std::string& uma_name); |
| 31 virtual ~CdmResultPromise(); | 28 virtual ~CdmResultPromise(); |
| 32 | 29 |
| 33 protected: | 30 // CdmPromiseTemplate<T> implementation. |
| 34 // OnResolve() is virtual as it may need special handling in derived classes. | 31 virtual void resolve(const T&... result) override; |
| 35 virtual void OnResolve(const T& result); | 32 virtual void reject(media::MediaKeys::Exception exception_code, |
| 36 void OnReject(media::MediaKeys::Exception exception_code, | 33 uint32 system_code, |
| 37 uint32 system_code, | 34 const std::string& error_message) override; |
| 38 const std::string& error_message); | 35 |
| 36 private: |
| 37 using media::CdmPromiseTemplate<T...>::MarkPromiseSettled; |
| 39 | 38 |
| 40 blink::WebContentDecryptionModuleResult web_cdm_result_; | 39 blink::WebContentDecryptionModuleResult web_cdm_result_; |
| 41 | 40 |
| 42 private: | 41 // UMA name to report result to. |
| 42 std::string uma_name_; |
| 43 |
| 43 DISALLOW_COPY_AND_ASSIGN(CdmResultPromise); | 44 DISALLOW_COPY_AND_ASSIGN(CdmResultPromise); |
| 44 }; | 45 }; |
| 45 | 46 |
| 46 // Specialization for no parameter to resolve(). | 47 typedef base::Callback<blink::WebContentDecryptionModuleResult::SessionStatus( |
| 47 template <> | 48 const std::string& web_session_id)> SessionInitializedCB; |
| 48 class CdmResultPromise<void> : public media::CdmPromiseTemplate<void> { | 49 |
| 50 // Special class for resolving a new session promise. Resolving a new session |
| 51 // promise returns the session ID (as a string), but the blink promise needs |
| 52 // to get passed a SessionStatus. This class converts the session id to a |
| 53 // SessionStatus by calling |new_session_created_cb|. |
| 54 class NewSessionCdmResultPromise |
| 55 : public media::CdmPromiseTemplate<std::string> { |
| 49 public: | 56 public: |
| 50 explicit CdmResultPromise( | 57 NewSessionCdmResultPromise( |
| 51 const blink::WebContentDecryptionModuleResult& result); | 58 const blink::WebContentDecryptionModuleResult& result, |
| 52 CdmResultPromise(const blink::WebContentDecryptionModuleResult& result, | 59 const std::string& uma_name, |
| 53 const std::string& uma_name); | 60 const SessionInitializedCB& new_session_created_cb); |
| 54 virtual ~CdmResultPromise(); | 61 virtual ~NewSessionCdmResultPromise(); |
| 55 | 62 |
| 56 protected: | 63 // CdmPromiseTemplate<T> implementation. |
| 57 virtual void OnResolve(); | 64 virtual void resolve(const std::string& web_session_id) override; |
| 58 void OnReject(media::MediaKeys::Exception exception_code, | 65 virtual void reject(media::MediaKeys::Exception exception_code, |
| 59 uint32 system_code, | 66 uint32 system_code, |
| 60 const std::string& error_message); | 67 const std::string& error_message) override; |
| 61 | 68 |
| 69 private: |
| 62 blink::WebContentDecryptionModuleResult web_cdm_result_; | 70 blink::WebContentDecryptionModuleResult web_cdm_result_; |
| 63 | 71 |
| 64 private: | 72 // UMA name to report result to. |
| 65 DISALLOW_COPY_AND_ASSIGN(CdmResultPromise); | 73 std::string uma_name_; |
| 74 |
| 75 // Called on resolve() to convert the session ID into a SessionStatus to |
| 76 // be reported to blink. |
| 77 SessionInitializedCB new_session_created_cb_; |
| 78 |
| 79 DISALLOW_COPY_AND_ASSIGN(NewSessionCdmResultPromise); |
| 66 }; | 80 }; |
| 67 | 81 |
| 68 typedef CdmResultPromise<void> SimpleCdmResultPromise; | |
| 69 | |
| 70 } // namespace content | 82 } // namespace content |
| 71 | 83 |
| 72 #endif // CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_ | 84 #endif // CONTENT_RENDERER_MEDIA_CDM_RESULT_PROMISE_H_ |
| OLD | NEW |