Chromium Code Reviews| 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, ...) \ |
|
qinmin
2015/09/16 18:09:40
nit: maybe RUN_ON_UI_THREAD is more appropriate si
|
| + 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), |