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) { |
} |