mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-04-17 20:27:23 +02:00
Popup windows will be created on the display that best matches the requested coordinates. The requested size will apply to the content area (as required by JS documentation) and window size will be reduced if necessary to fit within the target display. The requested origin will apply to the window (including frame) and will be modified if necessary so that the window is fully visible on the target display. This change does not implement popup positioning for cefclient which uses an application-created parent window. This change grants access to the getScreenDetails JS API without user prompt.
115 lines
4.3 KiB
C++
115 lines
4.3 KiB
C++
// 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<void(blink::mojom::PermissionStatus)> 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<blink::PermissionType>& permissions,
|
|
content::RenderFrameHost* render_frame_host,
|
|
const GURL& requesting_origin,
|
|
bool user_gesture,
|
|
base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)>
|
|
callback) {
|
|
if (render_frame_host->IsNestedWithinFencedFrame()) {
|
|
std::move(callback).Run(std::vector<blink::mojom::PermissionStatus>(
|
|
permissions.size(), blink::mojom::PermissionStatus::DENIED));
|
|
return;
|
|
}
|
|
std::vector<blink::mojom::PermissionStatus> result;
|
|
for (const auto& permission : permissions) {
|
|
result.push_back(GetPermissionStatusFromType(permission));
|
|
}
|
|
std::move(callback).Run(result);
|
|
}
|
|
|
|
void AlloyPermissionManager::RequestPermissionsFromCurrentDocument(
|
|
const std::vector<blink::PermissionType>& permissions,
|
|
content::RenderFrameHost* render_frame_host,
|
|
bool user_gesture,
|
|
base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)>
|
|
callback) {
|
|
if (render_frame_host->IsNestedWithinFencedFrame()) {
|
|
std::move(callback).Run(std::vector<blink::mojom::PermissionStatus>(
|
|
permissions.size(), blink::mojom::PermissionStatus::DENIED));
|
|
return;
|
|
}
|
|
std::vector<blink::mojom::PermissionStatus> 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<void(blink::mojom::PermissionStatus)> callback) {
|
|
return SubscriptionId();
|
|
}
|
|
|
|
void AlloyPermissionManager::UnsubscribePermissionStatusChange(
|
|
SubscriptionId subscription_id) {} |