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), |