// Copyright 2022 The Chromium Embedded Framework Authors. Portions 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 "libcef/browser/alloy/alloy_permission_manager.h" #include "base/callback.h" #include "content/public/browser/permission_controller.h" #include "content/public/browser/render_frame_host.h" #include "third_party/blink/public/common/permissions/permission_utils.h" namespace { bool IsAllowed(blink::PermissionType permission) { return permission == blink::PermissionType::WINDOW_PLACEMENT; } blink::mojom::PermissionStatus GetPermissionStatusFromType( blink::PermissionType permission) { return IsAllowed(permission) ? blink::mojom::PermissionStatus::GRANTED : blink::mojom::PermissionStatus::DENIED; } } // namespace void AlloyPermissionManager::RequestPermission( blink::PermissionType permission, content::RenderFrameHost* render_frame_host, const GURL& requesting_origin, bool user_gesture, base::OnceCallback callback) { if (render_frame_host->IsNestedWithinFencedFrame()) { std::move(callback).Run(blink::mojom::PermissionStatus::DENIED); return; } std::move(callback).Run(GetPermissionStatusFromType(permission)); } void AlloyPermissionManager::RequestPermissions( const std::vector& permissions, content::RenderFrameHost* render_frame_host, const GURL& requesting_origin, bool user_gesture, base::OnceCallback&)> callback) { if (render_frame_host->IsNestedWithinFencedFrame()) { std::move(callback).Run(std::vector( permissions.size(), blink::mojom::PermissionStatus::DENIED)); return; } std::vector result; for (const auto& permission : permissions) { result.push_back(GetPermissionStatusFromType(permission)); } std::move(callback).Run(result); } void AlloyPermissionManager::RequestPermissionsFromCurrentDocument( const std::vector& permissions, content::RenderFrameHost* render_frame_host, bool user_gesture, base::OnceCallback&)> callback) { if (render_frame_host->IsNestedWithinFencedFrame()) { std::move(callback).Run(std::vector( permissions.size(), blink::mojom::PermissionStatus::DENIED)); return; } std::vector result; for (const auto& permission : permissions) { result.push_back(GetPermissionStatusFromType(permission)); } std::move(callback).Run(result); } blink::mojom::PermissionStatus AlloyPermissionManager::GetPermissionStatus( blink::PermissionType permission, const GURL& requesting_origin, const GURL& embedding_origin) { return GetPermissionStatusFromType(permission); } blink::mojom::PermissionStatus AlloyPermissionManager::GetPermissionStatusForCurrentDocument( blink::PermissionType permission, content::RenderFrameHost* render_frame_host) { if (render_frame_host->IsNestedWithinFencedFrame()) return blink::mojom::PermissionStatus::DENIED; return GetPermissionStatusFromType(permission); } blink::mojom::PermissionStatus AlloyPermissionManager::GetPermissionStatusForWorker( blink::PermissionType permission, content::RenderProcessHost* render_process_host, const GURL& worker_origin) { return GetPermissionStatusFromType(permission); } void AlloyPermissionManager::ResetPermission(blink::PermissionType permission, const GURL& requesting_origin, const GURL& embedding_origin) {} AlloyPermissionManager::SubscriptionId AlloyPermissionManager::SubscribePermissionStatusChange( blink::PermissionType permission, content::RenderProcessHost* render_process_host, content::RenderFrameHost* render_frame_host, const GURL& requesting_origin, base::RepeatingCallback callback) { return SubscriptionId(); } void AlloyPermissionManager::UnsubscribePermissionStatusChange( SubscriptionId subscription_id) {}