Chromium Code Reviews| Index: content/renderer/media/media_permission_dispatcher_impl.cc |
| diff --git a/content/renderer/media/media_permission_dispatcher_impl.cc b/content/renderer/media/media_permission_dispatcher_impl.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b1ed6c4bc0ca6aba30e1cae80f450eff2c6b5832 |
| --- /dev/null |
| +++ b/content/renderer/media/media_permission_dispatcher_impl.cc |
| @@ -0,0 +1,99 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/renderer/media/media_permission_dispatcher_impl.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/logging.h" |
| +#include "base/thread_task_runner_handle.h" |
| +#include "content/public/common/service_registry.h" |
| +#include "content/public/renderer/render_frame.h" |
| +#include "content/renderer/media/media_permission_dispatcher_proxy.h" |
| +#include "third_party/WebKit/public/web/WebUserGestureIndicator.h" |
| +#include "url/gurl.h" |
| + |
| +namespace { |
| + |
| +using Type = media::MediaPermission::Type; |
| + |
| +content::PermissionName MediaPermissionTypeToPermissionName(Type type) { |
| + switch (type) { |
| + case Type::PROTECTED_MEDIA_IDENTIFIER: |
| + return content::PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER; |
| + case Type::AUDIO_CAPTURE: |
| + return content::PERMISSION_NAME_AUDIO_CAPTURE; |
| + case Type::VIDEO_CAPTURE: |
| + return content::PERMISSION_NAME_VIDEO_CAPTURE; |
| + } |
| + NOTREACHED(); |
| + return content::PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER; |
| +} |
| + |
| +} // namespace |
| + |
| +namespace content { |
| + |
| +MediaPermissionDispatcherImpl::MediaPermissionDispatcherImpl( |
| + RenderFrame* render_frame) |
| + : RenderFrameObserver(render_frame), |
| + task_runner_(base::ThreadTaskRunnerHandle::Get()), |
| + weak_ptr_factory_(this) {} |
| + |
| +MediaPermissionDispatcherImpl::~MediaPermissionDispatcherImpl() { |
| + DCHECK(thread_checker().CalledOnValidThread()); |
| +} |
| + |
| +void MediaPermissionDispatcherImpl::HasPermission( |
| + Type type, |
| + const GURL& security_origin, |
| + const PermissionStatusCB& permission_status_cb) { |
| + DCHECK(thread_checker().CalledOnValidThread()); |
| + |
| + if (!permission_service_.get()) { |
| + render_frame()->GetServiceRegistry()->ConnectToRemoteService( |
| + mojo::GetProxy(&permission_service_)); |
| + } |
| + |
| + permission_service_->HasPermission( |
| + MediaPermissionTypeToPermissionName(type), security_origin.spec(), |
| + base::Bind(&MediaPermissionDispatcherImpl::OnPermissionStatus, |
| + base::Unretained(this), |
|
perkj_chrome
2015/09/23 13:25:23
not done?
guoweis_left_chromium
2015/09/23 16:27:36
Missed this. Done.
|
| + RegisterCallback(permission_status_cb))); |
| +} |
| + |
| +void MediaPermissionDispatcherImpl::RequestPermission( |
| + Type type, |
| + const GURL& security_origin, |
| + const PermissionStatusCB& permission_status_cb) { |
| + DCHECK(thread_checker().CalledOnValidThread()); |
| + |
| + if (!permission_service_.get()) { |
| + render_frame()->GetServiceRegistry()->ConnectToRemoteService( |
| + mojo::GetProxy(&permission_service_)); |
| + } |
| + |
| + permission_service_->RequestPermission( |
| + MediaPermissionTypeToPermissionName(type), security_origin.spec(), |
| + blink::WebUserGestureIndicator::isProcessingUserGesture(), |
| + base::Bind(&MediaPermissionDispatcherImpl::OnPermissionStatus, |
| + weak_ptr_factory_.GetWeakPtr(), |
| + RegisterCallback(permission_status_cb))); |
| +} |
| + |
| +scoped_ptr<media::MediaPermission> MediaPermissionDispatcherImpl::CreateProxy( |
| + scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner) { |
| + scoped_ptr<media::MediaPermission> media_permission_proxy( |
| + new MediaPermissionDispatcherProxy(task_runner_, caller_task_runner, |
| + weak_ptr_factory_.GetWeakPtr())); |
| + return media_permission_proxy.Pass(); |
| +} |
| + |
| +void MediaPermissionDispatcherImpl::OnPermissionStatus( |
| + uint32_t request_id, |
| + PermissionStatus status) { |
| + DCHECK(thread_checker().CalledOnValidThread()); |
| + DeliverResult(request_id, status == PERMISSION_STATUS_GRANTED); |
| +} |
| + |
| +} // namespace content |