Chromium Code Reviews| Index: content/browser/media/media_permission_impl.cc |
| diff --git a/content/browser/media/media_permission_impl.cc b/content/browser/media/media_permission_impl.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e05740056e0ace6e0bd516c23ab90f04a999dcaf |
| --- /dev/null |
| +++ b/content/browser/media/media_permission_impl.cc |
| @@ -0,0 +1,97 @@ |
| +// Copyright 2016 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/browser/media/media_permission_impl.h" |
| + |
| +#include "content/browser/permissions/permission_service_context.h" |
| +#include "content/common/media/media_permission_dispatcher.h" |
| +#include "content/common/permission_service.mojom.h" |
| +#include "url/gurl.h" |
| + |
| +namespace content { |
| + |
| +namespace { |
| + |
| +using MojoType = media::interfaces::MediaPermission::Type; |
| +using NativeType = media::MediaPermission::Type; |
| + |
| +NativeType ConvertMediaPermissionType(MojoType type) { |
|
xhwang
2016/03/30 07:11:34
rockot: What's the new recommendation on consolida
|
| + switch (type) { |
| + case MojoType::PROTECTED_MEDIA_IDENTIFIER: |
| + return NativeType::PROTECTED_MEDIA_IDENTIFIER; |
| + case MojoType::AUDIO_CAPTURE: |
| + return NativeType::AUDIO_CAPTURE; |
| + case MojoType::VIDEO_CAPTURE: |
| + return NativeType::VIDEO_CAPTURE; |
| + } |
| + NOTREACHED(); |
| + return NativeType::PROTECTED_MEDIA_IDENTIFIER; |
| +} |
| + |
| +} // namespace |
| + |
| +// static |
| +void MediaPermissionImpl::Create( |
| + PermissionServiceContext* permission_service_context, |
| + media::interfaces::MediaPermissionRequest request) { |
| + // The created object is strongly bound to (and owned by) the pipe. |
| + new MediaPermissionImpl(permission_service_context, std::move(request)); |
| +} |
| + |
| +MediaPermissionImpl::MediaPermissionImpl( |
| + PermissionServiceContext* permission_service_context, |
| + media::interfaces::MediaPermissionRequest request) |
| + : permission_service_context_(permission_service_context), |
| + binding_(this, std::move(request)), |
| + weak_factory_(this) { |
| + DVLOG(1) << __FUNCTION__; |
| +} |
| + |
| +MediaPermissionImpl::~MediaPermissionImpl() { |
| + DVLOG(1) << __FUNCTION__; |
| +} |
| + |
| +void MediaPermissionImpl::HasPermission(MediaPermission::Type type, |
| + const mojo::String& security_origin, |
| + const HasPermissionCallback& callback) { |
| + DVLOG(3) << __FUNCTION__; |
| + GetMediaPermission()->HasPermission( |
| + ConvertMediaPermissionType(type), GURL(security_origin.get()), |
| + base::Bind(&MediaPermissionImpl::OnPermissionStatus, |
| + weak_factory_.GetWeakPtr(), callback)); |
| +} |
| + |
| +void MediaPermissionImpl::RequestPermission( |
| + MediaPermission::Type type, |
| + const mojo::String& security_origin, |
| + const RequestPermissionCallback& callback) { |
| + DVLOG(3) << __FUNCTION__; |
| + GetMediaPermission()->RequestPermission( |
| + ConvertMediaPermissionType(type), GURL(security_origin.get()), |
| + base::Bind(&MediaPermissionImpl::OnPermissionStatus, |
| + weak_factory_.GetWeakPtr(), callback)); |
| +} |
| + |
| +void MediaPermissionImpl::GetMediaPermissionService( |
| + mojom::PermissionServiceRequest request) { |
| + permission_service_context_->CreateService(std::move(request)); |
| +} |
| + |
| +media::MediaPermission* MediaPermissionImpl::GetMediaPermission() { |
| + if (!media_permission_) { |
| + media_permission_.reset(new MediaPermissionDispatcher( |
| + base::Bind(&MediaPermissionImpl::GetMediaPermissionService, |
| + weak_factory_.GetWeakPtr()))); |
| + } |
| + return media_permission_.get(); |
| +} |
| + |
| +void MediaPermissionImpl::OnPermissionStatus( |
| + const mojo::Callback<void(bool)>& callback, |
| + bool success) { |
| + DVLOG(3) << __FUNCTION__ << ": " << success; |
| + callback.Run(success); |
| +} |
| + |
| +} // namespace content |