| Index: content/browser/media/cdm/browser_cdm_manager.cc
|
| diff --git a/content/browser/media/cdm/browser_cdm_manager.cc b/content/browser/media/cdm/browser_cdm_manager.cc
|
| index eefceba28b97d1a73cd31834fb3b34d231a554ae..54b00a756def9e48c7bde86ae23db44cdafc5f56 100644
|
| --- a/content/browser/media/cdm/browser_cdm_manager.cc
|
| +++ b/content/browser/media/cdm/browser_cdm_manager.cc
|
| @@ -26,11 +26,24 @@
|
|
|
| #if defined(OS_ANDROID)
|
| #include "content/public/common/renderer_preferences.h"
|
| +
|
| +#define POST_ON_UI_THREAD(method, ...) \
|
| + do { \
|
| + if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { \
|
| + if (manager_) \
|
| + manager_->method(__VA_ARGS__); \
|
| + } else { \
|
| + BrowserThread::PostTask( \
|
| + BrowserThread::UI, FROM_HERE, \
|
| + base::Bind(&BrowserCdmManager::method, manager_, ##__VA_ARGS__)); \
|
| + } \
|
| + } while (0)
|
| #endif
|
|
|
| namespace content {
|
|
|
| using media::BrowserCdm;
|
| +using media::BrowserCdmPtr;
|
| using media::MediaKeys;
|
|
|
| namespace {
|
| @@ -76,10 +89,15 @@ class CdmPromiseInternal : public media::CdmPromiseTemplate<T...> {
|
| uint32_t system_code,
|
| const std::string& error_message) final {
|
| MarkPromiseSettled();
|
| +#if defined(OS_ANDROID)
|
| + POST_ON_UI_THREAD(RejectPromise, render_frame_id_, cdm_id_, promise_id_,
|
| + exception, system_code, error_message);
|
| +#else
|
| if (manager_) {
|
| manager_->RejectPromise(render_frame_id_, cdm_id_, promise_id_, exception,
|
| system_code, error_message);
|
| }
|
| +#endif
|
| }
|
|
|
| private:
|
| @@ -94,17 +112,26 @@ class CdmPromiseInternal : public media::CdmPromiseTemplate<T...> {
|
| template <>
|
| void CdmPromiseInternal<>::resolve() {
|
| MarkPromiseSettled();
|
| +#if defined(OS_ANDROID)
|
| + POST_ON_UI_THREAD(ResolvePromise, render_frame_id_, cdm_id_, promise_id_);
|
| +#else
|
| if (manager_)
|
| manager_->ResolvePromise(render_frame_id_, cdm_id_, promise_id_);
|
| +#endif
|
| }
|
|
|
| template <>
|
| void CdmPromiseInternal<std::string>::resolve(const std::string& session_id) {
|
| MarkPromiseSettled();
|
| +#if defined(OS_ANDROID)
|
| + POST_ON_UI_THREAD(ResolvePromiseWithSession, render_frame_id_, cdm_id_,
|
| + promise_id_, session_id);
|
| +#else
|
| if (manager_) {
|
| manager_->ResolvePromiseWithSession(render_frame_id_, cdm_id_, promise_id_,
|
| session_id);
|
| }
|
| +#endif
|
| }
|
|
|
| typedef CdmPromiseInternal<> SimplePromise;
|
| @@ -541,7 +568,7 @@ void BrowserCdmManager::AddCdm(int render_frame_id,
|
| scoped_ptr<SimplePromise> promise(new SimplePromise(
|
| weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
|
|
|
| - scoped_ptr<BrowserCdm> cdm(media::CreateBrowserCdm(
|
| + BrowserCdmPtr cdm(media::CreateBrowserCdm(
|
| key_system, use_hw_secure_codecs,
|
| BROWSER_CDM_MANAGER_CB(OnSessionMessage),
|
| BROWSER_CDM_MANAGER_CB(OnSessionClosed),
|
|
|