File indexing completed on 2024-05-26 05:00:55
0001 /* ============================================================ 0002 * Falkon - Qt web browser 0003 * Copyright (C) 2013-2015 David Rosca <nowrep@gmail.com> 0004 * 0005 * This program is free software: you can redistribute it and/or modify 0006 * it under the terms of the GNU General Public License as published by 0007 * the Free Software Foundation, either version 3 of the License, or 0008 * (at your option) any later version. 0009 * 0010 * This program is distributed in the hope that it will be useful, 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 * GNU General Public License for more details. 0014 * 0015 * You should have received a copy of the GNU General Public License 0016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0017 * ============================================================ */ 0018 #include "html5permissionsmanager.h" 0019 #include "html5permissionsnotification.h" 0020 #include "settings.h" 0021 #include "webview.h" 0022 0023 #include <QtWebEngineWidgetsVersion> 0024 0025 0026 HTML5PermissionsManager::HTML5PermissionsManager(QObject* parent) 0027 : QObject(parent) 0028 { 0029 loadSettings(); 0030 } 0031 0032 void HTML5PermissionsManager::requestPermissions(WebPage* page, const QUrl &origin, const QWebEnginePage::Feature &feature) 0033 { 0034 if (!page) { 0035 return; 0036 } 0037 0038 if (!m_granted.contains(feature) || !m_denied.contains(feature)) { 0039 qWarning() << "HTML5PermissionsManager: Unknown feature" << feature; 0040 return; 0041 } 0042 0043 // Permission granted 0044 if (m_granted.value(feature).contains(origin.toString())) { 0045 page->setFeaturePermission(origin, feature, QWebEnginePage::PermissionGrantedByUser); 0046 return; 0047 } 0048 0049 // Permission denied 0050 if (m_denied.value(feature).contains(origin.toString())) { 0051 page->setFeaturePermission(origin, feature, QWebEnginePage::PermissionDeniedByUser); 0052 return; 0053 } 0054 0055 // Ask user for permission 0056 auto* notif = new HTML5PermissionsNotification(origin, page, feature); 0057 page->view()->addNotification(notif); 0058 } 0059 0060 void HTML5PermissionsManager::rememberPermissions(const QUrl &origin, const QWebEnginePage::Feature &feature, 0061 const QWebEnginePage::PermissionPolicy &policy) 0062 { 0063 if (origin.isEmpty()) { 0064 return; 0065 } 0066 0067 if (policy == QWebEnginePage::PermissionGrantedByUser) { 0068 m_granted[feature].append(origin.toString()); 0069 } 0070 else { 0071 m_denied[feature].append(origin.toString()); 0072 } 0073 0074 saveSettings(); 0075 } 0076 0077 void HTML5PermissionsManager::loadSettings() 0078 { 0079 Settings settings; 0080 settings.beginGroup(QSL("HTML5Notifications")); 0081 0082 m_granted[QWebEnginePage::Notifications] = settings.value(QSL("NotificationsGranted"), QStringList()).toStringList(); 0083 m_denied[QWebEnginePage::Notifications] = settings.value(QSL("NotificationsDenied"), QStringList()).toStringList(); 0084 0085 m_granted[QWebEnginePage::Geolocation] = settings.value(QSL("GeolocationGranted"), QStringList()).toStringList(); 0086 m_denied[QWebEnginePage::Geolocation] = settings.value(QSL("GeolocationDenied"), QStringList()).toStringList(); 0087 0088 m_granted[QWebEnginePage::MediaAudioCapture] = settings.value(QSL("MediaAudioCaptureGranted"), QStringList()).toStringList(); 0089 m_denied[QWebEnginePage::MediaAudioCapture] = settings.value(QSL("MediaAudioCaptureDenied"), QStringList()).toStringList(); 0090 0091 m_granted[QWebEnginePage::MediaVideoCapture] = settings.value(QSL("MediaVideoCaptureGranted"), QStringList()).toStringList(); 0092 m_denied[QWebEnginePage::MediaVideoCapture] = settings.value(QSL("MediaVideoCaptureDenied"), QStringList()).toStringList(); 0093 0094 m_granted[QWebEnginePage::MediaAudioVideoCapture] = settings.value(QSL("MediaAudioVideoCaptureGranted"), QStringList()).toStringList(); 0095 m_denied[QWebEnginePage::MediaAudioVideoCapture] = settings.value(QSL("MediaAudioVideoCaptureDenied"), QStringList()).toStringList(); 0096 0097 m_granted[QWebEnginePage::MouseLock] = settings.value(QSL("MouseLockGranted"), QStringList()).toStringList(); 0098 m_denied[QWebEnginePage::MouseLock] = settings.value(QSL("MouseLockDenied"), QStringList()).toStringList(); 0099 0100 m_granted[QWebEnginePage::DesktopVideoCapture] = settings.value(QSL("DesktopVideoCaptureGranted"), QStringList()).toStringList(); 0101 m_denied[QWebEnginePage::DesktopVideoCapture] = settings.value(QSL("DesktopVideoCaptureDenied"), QStringList()).toStringList(); 0102 0103 m_granted[QWebEnginePage::DesktopAudioVideoCapture] = settings.value(QSL("DesktopAudioVideoCaptureGranted"), QStringList()).toStringList(); 0104 m_denied[QWebEnginePage::DesktopAudioVideoCapture] = settings.value(QSL("DesktopAudioVideoCaptureDenied"), QStringList()).toStringList(); 0105 0106 settings.endGroup(); 0107 } 0108 0109 void HTML5PermissionsManager::saveSettings() 0110 { 0111 Settings settings; 0112 settings.beginGroup(QSL("HTML5Notifications")); 0113 0114 settings.setValue(QSL("NotificationsGranted"), m_granted[QWebEnginePage::Notifications]); 0115 settings.setValue(QSL("NotificationsDenied"), m_denied[QWebEnginePage::Notifications]); 0116 0117 settings.setValue(QSL("GeolocationGranted"), m_granted[QWebEnginePage::Geolocation]); 0118 settings.setValue(QSL("GeolocationDenied"), m_denied[QWebEnginePage::Geolocation]); 0119 0120 settings.setValue(QSL("MediaAudioCaptureGranted"), m_granted[QWebEnginePage::MediaAudioCapture]); 0121 settings.setValue(QSL("MediaAudioCaptureDenied"), m_denied[QWebEnginePage::MediaAudioCapture]); 0122 0123 settings.setValue(QSL("MediaVideoCaptureGranted"), m_granted[QWebEnginePage::MediaVideoCapture]); 0124 settings.setValue(QSL("MediaVideoCaptureDenied"), m_denied[QWebEnginePage::MediaVideoCapture]); 0125 0126 settings.setValue(QSL("MediaAudioVideoCaptureGranted"), m_granted[QWebEnginePage::MediaAudioVideoCapture]); 0127 settings.setValue(QSL("MediaAudioVideoCaptureDenied"), m_denied[QWebEnginePage::MediaAudioVideoCapture]); 0128 0129 settings.setValue(QSL("MouseLockGranted"), m_granted[QWebEnginePage::MouseLock]); 0130 settings.setValue(QSL("MouseLockDenied"), m_denied[QWebEnginePage::MouseLock]); 0131 0132 settings.setValue(QSL("DesktopVideoCaptureGranted"), m_granted[QWebEnginePage::DesktopVideoCapture]); 0133 settings.setValue(QSL("DesktopVideoCaptureDenied"), m_denied[QWebEnginePage::DesktopVideoCapture]); 0134 0135 settings.setValue(QSL("DesktopAudioVideoCaptureGranted"), m_granted[QWebEnginePage::DesktopAudioVideoCapture]); 0136 settings.setValue(QSL("DesktopAudioVideoCaptureDenied"), m_denied[QWebEnginePage::DesktopAudioVideoCapture]); 0137 0138 settings.endGroup(); 0139 }