diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/permission_manager_qt.cpp | 26 | ||||
-rw-r--r-- | src/core/permission_manager_qt.h | 11 | ||||
-rw-r--r-- | src/core/profile_adapter.cpp | 2 | ||||
-rw-r--r-- | src/core/profile_adapter.h | 8 | ||||
-rw-r--r-- | src/core/web_contents_adapter.cpp | 6 | ||||
-rw-r--r-- | src/core/web_contents_adapter.h | 2 |
6 files changed, 39 insertions, 16 deletions
diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp index 2f9543769..862a1c262 100644 --- a/src/core/permission_manager_qt.cpp +++ b/src/core/permission_manager_qt.cpp @@ -102,6 +102,18 @@ static bool canRequestPermissionFor(ProfileAdapter::PermissionType type) return false; } +static blink::mojom::PermissionStatus toBlink(ProfileAdapter::PermissionState reply) +{ + switch (reply) { + case ProfileAdapter::AskPermission: + return blink::mojom::PermissionStatus::ASK; + case ProfileAdapter::AllowedPermission: + return blink::mojom::PermissionStatus::GRANTED; + case ProfileAdapter::DeniedPermission: + return blink::mojom::PermissionStatus::DENIED; + } +} + PermissionManagerQt::PermissionManagerQt() : m_requestIdCount(0) , m_subscriberIdCount(0) @@ -112,7 +124,7 @@ PermissionManagerQt::~PermissionManagerQt() { } -void PermissionManagerQt::permissionRequestReply(const QUrl &url, ProfileAdapter::PermissionType type, bool reply) +void PermissionManagerQt::permissionRequestReply(const QUrl &url, ProfileAdapter::PermissionType type, ProfileAdapter::PermissionState reply) { // Normalize the QUrl to GURL origin form. const GURL gorigin = toGurl(url).GetOrigin(); @@ -120,9 +132,12 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &url, ProfileAdapter if (origin.isEmpty()) return; QPair<QUrl, ProfileAdapter::PermissionType> key(origin, type); - m_permissions[key] = reply; - blink::mojom::PermissionStatus status = reply ? blink::mojom::PermissionStatus::GRANTED : blink::mojom::PermissionStatus::DENIED; - { + if (reply == ProfileAdapter::AskPermission) + m_permissions.remove(key); + else + m_permissions[key] = (reply == ProfileAdapter::AllowedPermission); + blink::mojom::PermissionStatus status = toBlink(reply); + if (reply != ProfileAdapter::AskPermission) { auto it = m_requests.begin(); while (it != m_requests.end()) { if (it->origin == origin && it->type == type) { @@ -137,6 +152,9 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &url, ProfileAdapter it.second.callback.Run(status); } + if (reply == ProfileAdapter::AskPermission) + return; + auto it = m_multiRequests.begin(); while (it != m_multiRequests.end()) { if (it->origin == origin) { diff --git a/src/core/permission_manager_qt.h b/src/core/permission_manager_qt.h index 6ab071237..e046174df 100644 --- a/src/core/permission_manager_qt.h +++ b/src/core/permission_manager_qt.h @@ -54,10 +54,9 @@ class PermissionManagerQt : public content::PermissionControllerDelegate { public: PermissionManagerQt(); ~PermissionManagerQt(); - typedef ProfileAdapter::PermissionType PermissionType; - void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply); - bool checkPermission(const QUrl &origin, PermissionType type); + void permissionRequestReply(const QUrl &origin, ProfileAdapter::PermissionType type, ProfileAdapter::PermissionState reply); + bool checkPermission(const QUrl &origin, ProfileAdapter::PermissionType type); // content::PermissionManager implementation: int RequestPermission( @@ -99,10 +98,10 @@ public: void UnsubscribePermissionStatusChange(int subscription_id) override; private: - QHash<QPair<QUrl, PermissionType>, bool> m_permissions; + QHash<QPair<QUrl, ProfileAdapter::PermissionType>, bool> m_permissions; struct Request { int id; - PermissionType type; + ProfileAdapter::PermissionType type; QUrl origin; base::OnceCallback<void(blink::mojom::PermissionStatus)> callback; }; @@ -113,7 +112,7 @@ private: base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback; }; struct Subscription { - PermissionType type; + ProfileAdapter::PermissionType type; QUrl origin; base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback; }; diff --git a/src/core/profile_adapter.cpp b/src/core/profile_adapter.cpp index b87591c97..4557ad7a4 100644 --- a/src/core/profile_adapter.cpp +++ b/src/core/profile_adapter.cpp @@ -543,7 +543,7 @@ UserResourceControllerHost *ProfileAdapter::userResourceController() return m_userResourceController.data(); } -void ProfileAdapter::permissionRequestReply(const QUrl &origin, PermissionType type, bool reply) +void ProfileAdapter::permissionRequestReply(const QUrl &origin, PermissionType type, PermissionState reply) { static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->permissionRequestReply(origin, type, reply); } diff --git a/src/core/profile_adapter.h b/src/core/profile_adapter.h index 1e5a3e21f..efd56e50e 100644 --- a/src/core/profile_adapter.h +++ b/src/core/profile_adapter.h @@ -164,6 +164,12 @@ public: ClipboardWrite = 6, }; + enum PermissionState { + AskPermission = 0, + AllowedPermission = 1, + DeniedPermission = 2 + }; + HttpCacheType httpCacheType() const; void setHttpCacheType(ProfileAdapter::HttpCacheType); @@ -187,7 +193,7 @@ public: const QList<QByteArray> customUrlSchemes() const; UserResourceControllerHost *userResourceController(); - void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply); + void permissionRequestReply(const QUrl &origin, PermissionType type, PermissionState reply); bool checkPermission(const QUrl &origin, PermissionType type); QString httpAcceptLanguageWithoutQualities() const; diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index da2902dc3..ef482ef08 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -1360,13 +1360,13 @@ void WebContentsAdapter::grantMediaAccessPermission(const QUrl &securityOrigin, CHECK_INITIALIZED(); // Let the permission manager remember the reply. if (flags & WebContentsAdapterClient::MediaAudioCapture) - m_profileAdapter->permissionRequestReply(securityOrigin, ProfileAdapter::AudioCapturePermission, true); + m_profileAdapter->permissionRequestReply(securityOrigin, ProfileAdapter::AudioCapturePermission, ProfileAdapter::AllowedPermission); if (flags & WebContentsAdapterClient::MediaVideoCapture) - m_profileAdapter->permissionRequestReply(securityOrigin, ProfileAdapter::VideoCapturePermission, true); + m_profileAdapter->permissionRequestReply(securityOrigin, ProfileAdapter::VideoCapturePermission, ProfileAdapter::AllowedPermission); MediaCaptureDevicesDispatcher::GetInstance()->handleMediaAccessPermissionResponse(m_webContents.get(), securityOrigin, flags); } -void WebContentsAdapter::runFeatureRequestCallback(const QUrl &securityOrigin, ProfileAdapter::PermissionType feature, bool allowed) +void WebContentsAdapter::grantFeaturePermission(const QUrl &securityOrigin, ProfileAdapter::PermissionType feature, ProfileAdapter::PermissionState allowed) { Q_ASSERT(m_profileAdapter); m_profileAdapter->permissionRequestReply(securityOrigin, feature, allowed); diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h index 66808ce5e..d833314f2 100644 --- a/src/core/web_contents_adapter.h +++ b/src/core/web_contents_adapter.h @@ -196,7 +196,7 @@ public: void grantMediaAccessPermission(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags flags); void grantMouseLockPermission(const QUrl &securityOrigin, bool granted); void handlePendingMouseLockPermission(); - void runFeatureRequestCallback(const QUrl &securityOrigin, ProfileAdapter::PermissionType feature, bool allowed); + void grantFeaturePermission(const QUrl &securityOrigin, ProfileAdapter::PermissionType feature, ProfileAdapter::PermissionState allowed); void setBackgroundColor(const QColor &color); QAccessibleInterface *browserAccessible(); |