summaryrefslogtreecommitdiffstats
path: root/src/core/permission_manager_qt.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-01 14:51:46 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-01 14:51:46 +0100
commitd782265b08e28ccb6cb83e32b449386b7883848c (patch)
treeab7ac80d26434366c0fd4cc4fb5302cc8e2c6cf6 /src/core/permission_manager_qt.cpp
parent3bff0bae7e0c660fc25c5c46dedaf9cb89563a58 (diff)
parent435586eedf983ab9b81291cb8cdfcce28822a0c4 (diff)
Merge remote-tracking branch 'origin/5.12' into 5.13
Diffstat (limited to 'src/core/permission_manager_qt.cpp')
-rw-r--r--src/core/permission_manager_qt.cpp49
1 files changed, 41 insertions, 8 deletions
diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp
index b6d055e27..cf3041e7a 100644
--- a/src/core/permission_manager_qt.cpp
+++ b/src/core/permission_manager_qt.cpp
@@ -48,6 +48,7 @@
#include "type_conversion.h"
#include "web_contents_delegate_qt.h"
+#include "web_engine_settings.h"
namespace QtWebEngineCore {
@@ -69,8 +70,11 @@ ProfileAdapter::PermissionType toQt(content::PermissionType type)
case content::PermissionType::BACKGROUND_SYNC:
case content::PermissionType::SENSORS:
case content::PermissionType::ACCESSIBILITY_EVENTS:
+ break;
case content::PermissionType::CLIPBOARD_READ:
+ return ProfileAdapter::ClipboardRead;
case content::PermissionType::CLIPBOARD_WRITE:
+ return ProfileAdapter::ClipboardWrite;
case content::PermissionType::PAYMENT_HANDLER:
case content::PermissionType::BACKGROUND_FETCH:
case content::PermissionType::NUM:
@@ -154,19 +158,28 @@ int PermissionManagerQt::RequestPermission(content::PermissionType permission,
bool /*user_gesture*/,
const base::Callback<void(blink::mojom::PermissionStatus)>& callback)
{
- int request_id = ++m_requestIdCount;
+ WebContentsDelegateQt *contentsDelegate = static_cast<WebContentsDelegateQt *>(
+ content::WebContents::FromRenderFrameHost(frameHost)->GetDelegate());
+ Q_ASSERT(contentsDelegate);
+
ProfileAdapter::PermissionType permissionType = toQt(permission);
if (permissionType == ProfileAdapter::UnsupportedPermission) {
callback.Run(blink::mojom::PermissionStatus::DENIED);
return content::PermissionController::kNoPendingOperation;
+ } else if (permissionType == ProfileAdapter::ClipboardRead) {
+ WebEngineSettings *settings = contentsDelegate->webEngineSettings();
+ if (settings->testAttribute(WebEngineSettings::JavascriptCanAccessClipboard)
+ && settings->testAttribute(WebEngineSettings::JavascriptCanPaste))
+ callback.Run(blink::mojom::PermissionStatus::GRANTED);
+ else
+ callback.Run(blink::mojom::PermissionStatus::DENIED);
+ return content::PermissionController::kNoPendingOperation;
}
// Audio and video-capture should not come this way currently
Q_ASSERT(permissionType != ProfileAdapter::AudioCapturePermission
&& permissionType != ProfileAdapter::VideoCapturePermission);
- content::WebContents *webContents = frameHost->GetRenderViewHost()->GetDelegate()->GetAsWebContents();
- WebContentsDelegateQt* contentsDelegate = static_cast<WebContentsDelegateQt*>(webContents->GetDelegate());
- Q_ASSERT(contentsDelegate);
+ int request_id = ++m_requestIdCount;
RequestOrSubscription request = {
permissionType,
toQt(requesting_origin),
@@ -184,6 +197,10 @@ int PermissionManagerQt::RequestPermissions(const std::vector<content::Permissio
bool /*user_gesture*/,
const base::Callback<void(const std::vector<blink::mojom::PermissionStatus>&)>& callback)
{
+ WebContentsDelegateQt *contentsDelegate = static_cast<WebContentsDelegateQt *>(
+ content::WebContents::FromRenderFrameHost(frameHost)->GetDelegate());
+ Q_ASSERT(contentsDelegate);
+
bool answerable = true;
std::vector<blink::mojom::PermissionStatus> result;
result.reserve(permissions.size());
@@ -191,7 +208,14 @@ int PermissionManagerQt::RequestPermissions(const std::vector<content::Permissio
const ProfileAdapter::PermissionType permissionType = toQt(permission);
if (permissionType == ProfileAdapter::UnsupportedPermission)
result.push_back(blink::mojom::PermissionStatus::DENIED);
- else {
+ else if (permissionType == ProfileAdapter::ClipboardRead) {
+ WebEngineSettings *settings = contentsDelegate->webEngineSettings();
+ if (settings->testAttribute(WebEngineSettings::JavascriptCanAccessClipboard)
+ && settings->testAttribute(WebEngineSettings::JavascriptCanPaste))
+ result.push_back(blink::mojom::PermissionStatus::GRANTED);
+ else
+ result.push_back(blink::mojom::PermissionStatus::DENIED);
+ } else {
answerable = false;
break;
}
@@ -202,9 +226,6 @@ int PermissionManagerQt::RequestPermissions(const std::vector<content::Permissio
}
int request_id = ++m_requestIdCount;
- content::WebContents *webContents = frameHost->GetRenderViewHost()->GetDelegate()->GetAsWebContents();
- WebContentsDelegateQt* contentsDelegate = static_cast<WebContentsDelegateQt*>(webContents->GetDelegate());
- Q_ASSERT(contentsDelegate);
MultiRequest request = {
permissions,
toQt(requesting_origin),
@@ -241,6 +262,18 @@ blink::mojom::PermissionStatus PermissionManagerQt::GetPermissionStatusForFrame(
content::RenderFrameHost *render_frame_host,
const GURL &requesting_origin)
{
+ if (permission == content::PermissionType::CLIPBOARD_READ ||
+ permission == content::PermissionType::CLIPBOARD_WRITE) {
+ WebContentsDelegateQt *delegate = static_cast<WebContentsDelegateQt *>(
+ content::WebContents::FromRenderFrameHost(render_frame_host)->GetDelegate());
+ if (!delegate->webEngineSettings()->testAttribute(WebEngineSettings::JavascriptCanAccessClipboard))
+ return blink::mojom::PermissionStatus::DENIED;
+ if (permission == content::PermissionType::CLIPBOARD_READ &&
+ !delegate->webEngineSettings()->testAttribute(WebEngineSettings::JavascriptCanPaste))
+ return blink::mojom::PermissionStatus::DENIED;
+ return blink::mojom::PermissionStatus::GRANTED;
+ }
+
return GetPermissionStatus(
permission,
requesting_origin,