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( |