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 |