Commit 400ad000 authored by gunsch's avatar gunsch Committed by Commit bot

Adds hook for content embedders to get media::BrowserCdm*.

R=jam@chromium.org,erickung@chromium.org
BUG=444930

Review URL: https://codereview.chromium.org/894173002

Cr-Commit-Position: refs/heads/master@{#314937}
parent b04f6a3a
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "chromecast/media/cma/pipeline/media_pipeline_client.h" #include "chromecast/media/cma/pipeline/media_pipeline_client.h"
#include "chromecast/media/cma/pipeline/video_pipeline_client.h" #include "chromecast/media/cma/pipeline/video_pipeline_client.h"
#include "content/public/browser/browser_thread.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 "media/base/bind_to_current_loop.h"
#include "ui/gfx/geometry/point_f.h" #include "ui/gfx/geometry/point_f.h"
#include "ui/gfx/geometry/quad_f.h" #include "ui/gfx/geometry/quad_f.h"
...@@ -164,7 +165,32 @@ void CmaMessageFilterHost::SetCdm(int media_id, ...@@ -164,7 +165,32 @@ void CmaMessageFilterHost::SetCdm(int media_id,
if (!media_pipeline) if (!media_pipeline)
return; 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,
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);
content::RenderProcessHost* host =
content::RenderProcessHost::FromID(process_id_);
if (!host) {
LOG(ERROR) << "RenderProcessHost not alive for ID: " << process_id_;
return;
}
::media::BrowserCdm* cdm = 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( void CmaMessageFilterHost::CreateAvPipe(
......
...@@ -63,6 +63,9 @@ class CmaMessageFilterHost ...@@ -63,6 +63,9 @@ class CmaMessageFilterHost
void CreateMedia(int media_id, LoadType load_type); void CreateMedia(int media_id, LoadType load_type);
void DestroyMedia(int media_id); void DestroyMedia(int media_id);
void SetCdm(int media_id, int render_frame_id, int cdm_id); void SetCdm(int media_id, int render_frame_id, int cdm_id);
void SetCdmOnUiThread(MediaPipelineHost* media_pipeline,
int render_frame_id,
int cdm_id);
void CreateAvPipe(int media_id, TrackId track_id, size_t shared_mem_size); void CreateAvPipe(int media_id, TrackId track_id, size_t shared_mem_size);
void OnAvPipeSet(int media_id, void OnAvPipeSet(int media_id,
TrackId track_id, TrackId track_id,
......
...@@ -153,13 +153,9 @@ void MediaPipelineHost::SetVolume(TrackId track_id, float volume) { ...@@ -153,13 +153,9 @@ void MediaPipelineHost::SetVolume(TrackId track_id, float volume) {
media_pipeline_->GetAudioPipeline()->SetVolume(volume); media_pipeline_->GetAudioPipeline()->SetVolume(volume);
} }
void MediaPipelineHost::SetCdm( void MediaPipelineHost::SetCdm(::media::BrowserCdm* cdm) {
int render_process_id, int render_frame_id, int cdm_id) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
media_pipeline_->SetCdm(cdm);
// TODO(gunsch): crbug.com/444930. Find a way to get
// content::BrowserCdmManager since it is not under content/public/.
NOTIMPLEMENTED();
} }
void MediaPipelineHost::NotifyPipeWrite(TrackId track_id) { void MediaPipelineHost::NotifyPipeWrite(TrackId track_id) {
......
...@@ -24,6 +24,7 @@ class SingleThreadTaskRunner; ...@@ -24,6 +24,7 @@ class SingleThreadTaskRunner;
namespace media { namespace media {
class AudioDecoderConfig; class AudioDecoderConfig;
class BrowserCdm;
class VideoDecoderConfig; class VideoDecoderConfig;
} }
...@@ -60,7 +61,7 @@ class MediaPipelineHost { ...@@ -60,7 +61,7 @@ class MediaPipelineHost {
void SetPlaybackRate(float playback_rate); void SetPlaybackRate(float playback_rate);
void SetVolume(TrackId track_id, float playback_rate); void SetVolume(TrackId track_id, float playback_rate);
void SetCdm(int render_process_id, int render_frame_id, int cdm_id); void SetCdm(::media::BrowserCdm* cdm);
void NotifyPipeWrite(TrackId track_id); void NotifyPipeWrite(TrackId track_id);
......
...@@ -184,7 +184,8 @@ bool BrowserCdmManager::OnMessageReceived(const IPC::Message& msg) { ...@@ -184,7 +184,8 @@ bool BrowserCdmManager::OnMessageReceived(const IPC::Message& msg) {
return handled; return handled;
} }
media::BrowserCdm* BrowserCdmManager::GetCdm(int render_frame_id, int cdm_id) { media::BrowserCdm* BrowserCdmManager::GetCdm(int render_frame_id,
int cdm_id) const {
DCHECK(task_runner_->RunsTasksOnCurrentThread()); DCHECK(task_runner_->RunsTasksOnCurrentThread());
return cdm_map_.get(GetId(render_frame_id, cdm_id)); return cdm_map_.get(GetId(render_frame_id, cdm_id));
} }
......
...@@ -50,7 +50,7 @@ class CONTENT_EXPORT BrowserCdmManager : public BrowserMessageFilter { ...@@ -50,7 +50,7 @@ class CONTENT_EXPORT BrowserCdmManager : public BrowserMessageFilter {
const IPC::Message& message) override; const IPC::Message& message) override;
bool OnMessageReceived(const IPC::Message& message) override; bool OnMessageReceived(const IPC::Message& message) override;
media::BrowserCdm* GetCdm(int render_frame_id, int cdm_id); media::BrowserCdm* GetCdm(int render_frame_id, int cdm_id) const;
// Notifies that the render frame has been deleted so that all CDMs belongs // Notifies that the render frame has been deleted so that all CDMs belongs
// to this render frame needs to be destroyed as well. This is needed because // to this render frame needs to be destroyed as well. This is needed because
......
...@@ -970,6 +970,14 @@ void RenderProcessHostImpl::SendUpdateValueState(unsigned int target, ...@@ -970,6 +970,14 @@ void RenderProcessHostImpl::SendUpdateValueState(unsigned int target,
} }
} }
#if defined(ENABLE_BROWSER_CDMS)
media::BrowserCdm* RenderProcessHostImpl::GetBrowserCdm(int render_frame_id,
int cdm_id) const {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
return browser_cdm_manager_->GetCdm(render_frame_id, cdm_id);
}
#endif
void RenderProcessHostImpl::AddRoute( void RenderProcessHostImpl::AddRoute(
int32 routing_id, int32 routing_id,
IPC::Listener* listener) { IPC::Listener* listener) {
......
...@@ -148,6 +148,10 @@ class CONTENT_EXPORT RenderProcessHostImpl ...@@ -148,6 +148,10 @@ class CONTENT_EXPORT RenderProcessHostImpl
void OnRemoveSubscription(unsigned int target) override; void OnRemoveSubscription(unsigned int target) override;
void SendUpdateValueState( void SendUpdateValueState(
unsigned int target, const gpu::ValueState& state) override; unsigned int target, const gpu::ValueState& state) override;
#if defined(ENABLE_BROWSER_CDMS)
media::BrowserCdm* GetBrowserCdm(int render_frame_id,
int cdm_id) const override;
#endif
// IPC::Sender via RenderProcessHost. // IPC::Sender via RenderProcessHost.
bool Send(IPC::Message* msg) override; bool Send(IPC::Message* msg) override;
......
...@@ -30,6 +30,7 @@ union ValueState; ...@@ -30,6 +30,7 @@ union ValueState;
namespace media { namespace media {
class AudioOutputController; class AudioOutputController;
class BrowserCdm;
} }
namespace content { namespace content {
...@@ -269,6 +270,13 @@ class CONTENT_EXPORT RenderProcessHost : public IPC::Sender, ...@@ -269,6 +270,13 @@ class CONTENT_EXPORT RenderProcessHost : public IPC::Sender,
virtual void GetAudioOutputControllers( virtual void GetAudioOutputControllers(
const GetAudioOutputControllersCallback& callback) const = 0; const GetAudioOutputControllersCallback& callback) const = 0;
#if defined(ENABLE_BROWSER_CDMS)
// Returns the ::media::BrowserCdm instance associated with |render_frame_id|
// and |cdm_id|, or nullptr if not found.
virtual media::BrowserCdm* GetBrowserCdm(int render_frame_id,
int cdm_id) const = 0;
#endif
// Static management functions ----------------------------------------------- // Static management functions -----------------------------------------------
// Flag to run the renderer in process. This is primarily // Flag to run the renderer in process. This is primarily
......
...@@ -245,6 +245,13 @@ void MockRenderProcessHost::SendUpdateValueState( ...@@ -245,6 +245,13 @@ void MockRenderProcessHost::SendUpdateValueState(
unsigned int target, const gpu::ValueState& state) { unsigned int target, const gpu::ValueState& state) {
} }
#if defined(ENABLE_BROWSER_CDMS)
media::BrowserCdm* MockRenderProcessHost::GetBrowserCdm(int render_frame_id,
int cdm_id) const {
return nullptr;
}
#endif
void MockRenderProcessHost::FilterURL(bool empty_allowed, GURL* url) { void MockRenderProcessHost::FilterURL(bool empty_allowed, GURL* url) {
RenderProcessHostImpl::FilterURL(this, empty_allowed, url); RenderProcessHostImpl::FilterURL(this, empty_allowed, url);
} }
......
...@@ -87,6 +87,10 @@ class MockRenderProcessHost : public RenderProcessHost { ...@@ -87,6 +87,10 @@ class MockRenderProcessHost : public RenderProcessHost {
void OnRemoveSubscription(unsigned int target) override; void OnRemoveSubscription(unsigned int target) override;
void SendUpdateValueState( void SendUpdateValueState(
unsigned int target, const gpu::ValueState& state) override; unsigned int target, const gpu::ValueState& state) override;
#if defined(ENABLE_BROWSER_CDMS)
media::BrowserCdm* GetBrowserCdm(int render_frame_id,
int cdm_id) const override;
#endif
// IPC::Sender via RenderProcessHost. // IPC::Sender via RenderProcessHost.
bool Send(IPC::Message* msg) override; bool Send(IPC::Message* msg) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment