Index: chromecast/browser/media/cma_message_filter_host.cc |
diff --git a/chromecast/browser/media/cma_message_filter_host.cc b/chromecast/browser/media/cma_message_filter_host.cc |
index ae80db13e7a814a76714e020ab2cc36a98f6d570..08242a00cc704350c5ffa305ae3b5b5949d74575 100644 |
--- a/chromecast/browser/media/cma_message_filter_host.cc |
+++ b/chromecast/browser/media/cma_message_filter_host.cc |
@@ -17,6 +17,7 @@ |
#include "chromecast/media/cma/pipeline/media_pipeline_client.h" |
#include "chromecast/media/cma/pipeline/video_pipeline_client.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/render_process_host.h" |
#include "media/base/bind_to_current_loop.h" |
#include "ui/gfx/geometry/point_f.h" |
#include "ui/gfx/geometry/quad_f.h" |
@@ -50,11 +51,13 @@ void UpdateVideoSurfaceHost(int surface_id, const gfx::QuadF& quad) { |
} // namespace |
-CmaMessageFilterHost::CmaMessageFilterHost(int render_process_id) |
+CmaMessageFilterHost::CmaMessageFilterHost( |
+ content::RenderProcessHost* render_process_host) |
: content::BrowserMessageFilter(CastMediaMsgStart), |
- process_id_(render_process_id), |
+ render_process_host_(render_process_host), |
task_runner_(CmaMessageLoop::GetMessageLoopProxy()), |
weak_factory_(this) { |
+ DCHECK(render_process_host); |
weak_this_ = weak_factory_.GetWeakPtr(); |
} |
@@ -164,7 +167,29 @@ void CmaMessageFilterHost::SetCdm(int media_id, |
if (!media_pipeline) |
return; |
- FORWARD_CALL(media_pipeline, SetCdm, process_id_, render_frame_id, cdm_id); |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::UI, FROM_HERE, |
+ base::Bind(&CmaMessageFilterHost::SetCdmOnUiThread, |
+ base::Unretained(this), |
+ media_pipeline, |
+ render_frame_id, |
+ cdm_id)); |
+} |
+ |
+void CmaMessageFilterHost::SetCdmOnUiThread( |
+ MediaPipelineHost* media_pipeline, |
+ int render_frame_id, |
+ int cdm_id) { |
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
+ |
+ ::media::BrowserCdm* cdm = |
+ render_process_host_->GetBrowserCdm(render_frame_id, cdm_id); |
+ if (!cdm) { |
+ LOG(ERROR) << "Could not find BrowserCdm (" << render_frame_id << "," |
+ << cdm_id << ")"; |
+ return; |
+ } |
+ FORWARD_CALL(media_pipeline, SetCdm, cdm); |
} |
void CmaMessageFilterHost::CreateAvPipe( |