| Index: content/browser/renderer_host/media/media_stream_ui_proxy.cc
|
| diff --git a/content/browser/renderer_host/media/media_stream_ui_proxy.cc b/content/browser/renderer_host/media/media_stream_ui_proxy.cc
|
| index 837577ae98713a8aaf7f4f8d6fa6f286a05e20a2..cf374efb352dfb3f545db50f2ab9cc25d769f683 100644
|
| --- a/content/browser/renderer_host/media/media_stream_ui_proxy.cc
|
| +++ b/content/browser/renderer_host/media/media_stream_ui_proxy.cc
|
| @@ -20,6 +20,10 @@ class MediaStreamUIProxy::Core {
|
| ~Core();
|
|
|
| void RequestAccess(const MediaStreamRequest& request);
|
| + bool CheckAccess(const GURL& security_origin,
|
| + MediaStreamType type,
|
| + int process_id,
|
| + int frame_id);
|
| void OnStarted(gfx::NativeViewId* window_id);
|
|
|
| private:
|
| @@ -27,6 +31,8 @@ class MediaStreamUIProxy::Core {
|
| content::MediaStreamRequestResult result,
|
| scoped_ptr<MediaStreamUI> stream_ui);
|
| void ProcessStopRequestFromUI();
|
| + RenderFrameHostDelegate* GetRenderFrameHostDelegate(int render_process_id,
|
| + int render_frame_id);
|
|
|
| base::WeakPtr<MediaStreamUIProxy> proxy_;
|
| scoped_ptr<MediaStreamUI> ui_;
|
| @@ -55,14 +61,8 @@ void MediaStreamUIProxy::Core::RequestAccess(
|
| const MediaStreamRequest& request) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
|
|
| - RenderFrameHostDelegate* render_delegate;
|
| - if (test_render_delegate_) {
|
| - render_delegate = test_render_delegate_;
|
| - } else {
|
| - RenderFrameHostImpl* const host = RenderFrameHostImpl::FromID(
|
| - request.render_process_id, request.render_frame_id);
|
| - render_delegate = host ? host->delegate() : NULL;
|
| - }
|
| + RenderFrameHostDelegate* render_delegate = GetRenderFrameHostDelegate(
|
| + request.render_process_id, request.render_frame_id);
|
|
|
| // Tab may have gone away, or has no delegate from which to request access.
|
| if (!render_delegate) {
|
| @@ -78,6 +78,20 @@ void MediaStreamUIProxy::Core::RequestAccess(
|
| weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| +bool MediaStreamUIProxy::Core::CheckAccess(const GURL& security_origin,
|
| + MediaStreamType type,
|
| + int render_process_id,
|
| + int render_frame_id) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| +
|
| + RenderFrameHostDelegate* render_delegate =
|
| + GetRenderFrameHostDelegate(render_process_id, render_frame_id);
|
| + if (!render_delegate)
|
| + return false;
|
| +
|
| + return render_delegate->CheckMediaAccessPermission(security_origin, type);
|
| +}
|
| +
|
| void MediaStreamUIProxy::Core::OnStarted(gfx::NativeViewId* window_id) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| if (ui_) {
|
| @@ -107,6 +121,16 @@ void MediaStreamUIProxy::Core::ProcessStopRequestFromUI() {
|
| base::Bind(&MediaStreamUIProxy::ProcessStopRequestFromUI, proxy_));
|
| }
|
|
|
| +RenderFrameHostDelegate* MediaStreamUIProxy::Core::GetRenderFrameHostDelegate(
|
| + int render_process_id,
|
| + int render_frame_id) {
|
| + if (test_render_delegate_)
|
| + return test_render_delegate_;
|
| + RenderFrameHostImpl* host =
|
| + RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
|
| + return host ? host->delegate() : NULL;
|
| +}
|
| +
|
| // static
|
| scoped_ptr<MediaStreamUIProxy> MediaStreamUIProxy::Create() {
|
| return scoped_ptr<MediaStreamUIProxy>(new MediaStreamUIProxy(NULL));
|
| @@ -141,6 +165,28 @@ void MediaStreamUIProxy::RequestAccess(
|
| base::Bind(&Core::RequestAccess, base::Unretained(core_.get()), request));
|
| }
|
|
|
| +void MediaStreamUIProxy::CheckAccess(
|
| + const GURL& security_origin,
|
| + MediaStreamType type,
|
| + int render_process_id,
|
| + int render_frame_id,
|
| + const base::Callback<void(bool)>& callback) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| +
|
| + BrowserThread::PostTaskAndReplyWithResult(
|
| + BrowserThread::UI,
|
| + FROM_HERE,
|
| + base::Bind(&Core::CheckAccess,
|
| + base::Unretained(core_.get()),
|
| + security_origin,
|
| + type,
|
| + render_process_id,
|
| + render_frame_id),
|
| + base::Bind(&MediaStreamUIProxy::OnCheckedAccess,
|
| + weak_factory_.GetWeakPtr(),
|
| + callback));
|
| +}
|
| +
|
| void MediaStreamUIProxy::OnStarted(const base::Closure& stop_callback,
|
| const WindowIdCallback& window_id_callback) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| @@ -160,13 +206,6 @@ void MediaStreamUIProxy::OnStarted(const base::Closure& stop_callback,
|
| base::Owned(window_id)));
|
| }
|
|
|
| -void MediaStreamUIProxy::OnWindowId(const WindowIdCallback& window_id_callback,
|
| - gfx::NativeViewId* window_id) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| - if (!window_id_callback.is_null())
|
| - window_id_callback.Run(*window_id);
|
| -}
|
| -
|
| void MediaStreamUIProxy::ProcessAccessRequestResponse(
|
| const MediaStreamDevices& devices,
|
| content::MediaStreamRequestResult result) {
|
| @@ -187,6 +226,21 @@ void MediaStreamUIProxy::ProcessStopRequestFromUI() {
|
| cb.Run();
|
| }
|
|
|
| +void MediaStreamUIProxy::OnWindowId(const WindowIdCallback& window_id_callback,
|
| + gfx::NativeViewId* window_id) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + if (!window_id_callback.is_null())
|
| + window_id_callback.Run(*window_id);
|
| +}
|
| +
|
| +void MediaStreamUIProxy::OnCheckedAccess(
|
| + const base::Callback<void(bool)>& callback,
|
| + bool have_access) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + if (!callback.is_null())
|
| + callback.Run(have_access);
|
| +}
|
| +
|
| FakeMediaStreamUIProxy::FakeMediaStreamUIProxy()
|
| : MediaStreamUIProxy(NULL) {
|
| }
|
|
|