Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1683)

Unified Diff: content/renderer/media/crypto/proxy_media_keys.cc

Issue 1102363005: Initialize the CDM asynchronously (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Create() changes Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/crypto/proxy_media_keys.cc
diff --git a/content/renderer/media/crypto/proxy_media_keys.cc b/content/renderer/media/crypto/proxy_media_keys.cc
index 9f121fe4482726d3f5f7f25f61966facbb95c88d..785bcf9127374f1ba36a3b2b003e10bd89c0f41c 100644
--- a/content/renderer/media/crypto/proxy_media_keys.cc
+++ b/content/renderer/media/crypto/proxy_media_keys.cc
@@ -9,6 +9,7 @@
#include "base/basictypes.h"
#include "base/logging.h"
#include "base/stl_util.h"
+#include "content/renderer/media/crypto/cdm_initialized_promise.h"
#include "content/renderer/media/crypto/renderer_cdm_manager.h"
#include "media/base/cdm_key_information.h"
#include "media/base/cdm_promise.h"
@@ -24,13 +25,25 @@ scoped_ptr<ProxyMediaKeys> ProxyMediaKeys::Create(
const media::SessionClosedCB& session_closed_cb,
const media::LegacySessionErrorCB& legacy_session_error_cb,
const media::SessionKeysChangeCB& session_keys_change_cb,
- const media::SessionExpirationUpdateCB& session_expiration_update_cb) {
+ const media::SessionExpirationUpdateCB& session_expiration_update_cb,
+ const media::CdmCreatedCB& cdm_created_cb) {
DCHECK(manager);
scoped_ptr<ProxyMediaKeys> proxy_media_keys(new ProxyMediaKeys(
manager, session_message_cb, session_closed_cb, legacy_session_error_cb,
session_keys_change_cb, session_expiration_update_cb));
- proxy_media_keys->InitializeCdm(key_system, security_origin);
- return proxy_media_keys.Pass();
+ if (!proxy_media_keys) {
ddorwin 2015/05/04 22:46:02 ditto
jrummell 2015/05/05 00:54:17 Done.
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE, base::Bind(cdm_created_cb, nullptr));
+ return;
+ }
+
+ // ProxyMediaKeys ownership passed to the promise, but keep a copy in order
+ // to call InitializeCdm().
+ ProxyMediaKeys* proxy_media_keys_copy = proxy_media_keys.get();
+ scoped_ptr<CdmInitializedPromise> promise(
+ new CdmInitializedPromise(cdm_created_cb, proxy_media_keys.Pass()));
+ proxy_media_keys_copy->InitializeCdm(key_system, security_origin,
+ promise.Pass());
}
ProxyMediaKeys::~ProxyMediaKeys() {
@@ -193,9 +206,13 @@ ProxyMediaKeys::ProxyMediaKeys(
cdm_id_ = manager->RegisterMediaKeys(this);
}
-void ProxyMediaKeys::InitializeCdm(const std::string& key_system,
- const GURL& security_origin) {
+void ProxyMediaKeys::InitializeCdm(
+ const std::string& key_system,
+ const GURL& security_origin,
+ scoped_ptr<media::SimpleCdmPromise> promise) {
+ // TODO(jrummell): |Pass promise| on. http://crbug.com/407435.
ddorwin 2015/05/04 22:46:02 This bug only refers to CdmAdapater. Did you mean
jrummell 2015/05/05 00:54:17 Done.
manager_->InitializeCdm(cdm_id_, this, key_system, security_origin);
+ promise->resolve();
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698