Chromium Code Reviews| Index: content/renderer/media/crypto/ppapi_decryptor.cc |
| diff --git a/content/renderer/media/crypto/ppapi_decryptor.cc b/content/renderer/media/crypto/ppapi_decryptor.cc |
| index dd07aaacc6950763e245b8727db91ddfc11278df..ed1e1116af8695729f95031dab3a796cf72b10c8 100644 |
| --- a/content/renderer/media/crypto/ppapi_decryptor.cc |
| +++ b/content/renderer/media/crypto/ppapi_decryptor.cc |
| @@ -55,6 +55,36 @@ class SessionUpdatedPromise : public media::SimpleCdmPromise { |
| base::Closure additional_resolve_cb_; |
| }; |
| +// This class is needed so that resolving an SessionLoaded() promise triggers |
|
ddorwin
2014/08/08 23:36:22
nit: s/an/a/
jrummell
2014/08/11 18:59:02
Done.
|
| +// playback of the stream. It intercepts the resolve() call to invoke an |
| +// additional callback. |
|
ddorwin
2014/08/08 23:36:23
Note that this is only needed until KeysChange is
jrummell
2014/08/11 18:59:02
Done.
|
| +class SessionLoadedPromise : public media::NewSessionCdmPromise { |
| + public: |
| + SessionLoadedPromise(scoped_ptr<media::NewSessionCdmPromise> caller_promise, |
| + base::Closure additional_resolve_cb) |
| + : caller_promise_(caller_promise.Pass()), |
| + additional_resolve_cb_(additional_resolve_cb) {} |
| + |
| + virtual void resolve(const std::string& web_session_id) OVERRIDE { |
| + DCHECK(is_pending_); |
| + is_pending_ = false; |
|
ddorwin
2014/08/08 23:36:22
This is one problem with inheriting implementation
jrummell
2014/08/11 18:59:02
Acknowledged.
|
| + additional_resolve_cb_.Run(); |
| + caller_promise_->resolve(web_session_id); |
| + } |
| + |
| + virtual void reject(media::MediaKeys::Exception exception_code, |
| + uint32 system_code, |
| + const std::string& error_message) OVERRIDE { |
| + DCHECK(is_pending_); |
| + is_pending_ = false; |
| + caller_promise_->reject(exception_code, system_code, error_message); |
| + } |
| + |
| + protected: |
| + scoped_ptr<media::NewSessionCdmPromise> caller_promise_; |
| + base::Closure additional_resolve_cb_; |
| +}; |
| + |
| scoped_ptr<PpapiDecryptor> PpapiDecryptor::Create( |
| const std::string& key_system, |
| const GURL& security_origin, |
| @@ -147,7 +177,14 @@ void PpapiDecryptor::LoadSession( |
| return; |
| } |
| - CdmDelegate()->LoadSession(web_session_id, promise.Pass()); |
| + scoped_ptr<SessionLoadedPromise> session_loaded_promise( |
| + new SessionLoadedPromise(promise.Pass(), |
| + base::Bind(&PpapiDecryptor::ResumePlayback, |
| + weak_ptr_factory_.GetWeakPtr()))); |
| + |
| + CdmDelegate()->LoadSession( |
| + web_session_id, |
| + session_loaded_promise.PassAs<media::NewSessionCdmPromise>()); |
| } |
| void PpapiDecryptor::UpdateSession( |