--- a/src/eric7/WebBrowser/FeaturePermissions/FeaturePermissionManager.py Wed Jul 13 11:16:20 2022 +0200 +++ b/src/eric7/WebBrowser/FeaturePermissions/FeaturePermissionManager.py Wed Jul 13 14:55:47 2022 +0200 @@ -19,17 +19,18 @@ """ Class implementing the feature permission manager object. """ + SettingsKeyFormat = "WebBrowser/FeaturePermissions/{0}" - + def __init__(self, parent=None): """ Constructor - + @param parent reference to the parent object @type QObject """ super().__init__(parent) - + self.__featurePermissions = { QWebEnginePage.Feature.Geolocation: { QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], @@ -52,80 +53,92 @@ QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], }, QWebEnginePage.Feature.DesktopVideoCapture: { - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: - [], - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: - [], + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], }, QWebEnginePage.Feature.DesktopAudioVideoCapture: { - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: - [], - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: - [], + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], }, QWebEnginePage.Feature.Notifications: { QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: [], QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: [], - } + }, } - + self.__featurePermissionsKeys = { - (QWebEnginePage.Feature.Geolocation, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): - "GeolocationGranted", - (QWebEnginePage.Feature.Geolocation, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): - "GeolocationDenied", - (QWebEnginePage.Feature.MediaAudioCapture, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): - "MediaAudioCaptureGranted", - (QWebEnginePage.Feature.MediaAudioCapture, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): - "MediaAudioCaptureDenied", - (QWebEnginePage.Feature.MediaVideoCapture, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): - "MediaVideoCaptureGranted", - (QWebEnginePage.Feature.MediaVideoCapture, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): - "MediaVideoCaptureDenied", - (QWebEnginePage.Feature.MediaAudioVideoCapture, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): - "MediaAudioVideoCaptureGranted", - (QWebEnginePage.Feature.MediaAudioVideoCapture, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): - "MediaAudioVideoCaptureDenied", - (QWebEnginePage.Feature.MouseLock, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): - "MouseLockGranted", - (QWebEnginePage.Feature.MouseLock, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): - "MouseLockDenied", - (QWebEnginePage.Feature.DesktopVideoCapture, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): - "DesktopVideoCaptureGranted", - (QWebEnginePage.Feature.DesktopVideoCapture, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): - "DesktopVideoCaptureDenied", - (QWebEnginePage.Feature.DesktopAudioVideoCapture, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): - "DesktopAudioVideoCaptureGranted", - (QWebEnginePage.Feature.DesktopAudioVideoCapture, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): - "DesktopAudioVideoCaptureDenied", - (QWebEnginePage.Feature.Notifications, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser): - "NotificationsGranted", - (QWebEnginePage.Feature.Notifications, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser): - "NotificationsDenied", + ( + QWebEnginePage.Feature.Geolocation, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ): "GeolocationGranted", + ( + QWebEnginePage.Feature.Geolocation, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ): "GeolocationDenied", + ( + QWebEnginePage.Feature.MediaAudioCapture, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ): "MediaAudioCaptureGranted", + ( + QWebEnginePage.Feature.MediaAudioCapture, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ): "MediaAudioCaptureDenied", + ( + QWebEnginePage.Feature.MediaVideoCapture, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ): "MediaVideoCaptureGranted", + ( + QWebEnginePage.Feature.MediaVideoCapture, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ): "MediaVideoCaptureDenied", + ( + QWebEnginePage.Feature.MediaAudioVideoCapture, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ): "MediaAudioVideoCaptureGranted", + ( + QWebEnginePage.Feature.MediaAudioVideoCapture, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ): "MediaAudioVideoCaptureDenied", + ( + QWebEnginePage.Feature.MouseLock, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ): "MouseLockGranted", + ( + QWebEnginePage.Feature.MouseLock, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ): "MouseLockDenied", + ( + QWebEnginePage.Feature.DesktopVideoCapture, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ): "DesktopVideoCaptureGranted", + ( + QWebEnginePage.Feature.DesktopVideoCapture, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ): "DesktopVideoCaptureDenied", + ( + QWebEnginePage.Feature.DesktopAudioVideoCapture, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ): "DesktopAudioVideoCaptureGranted", + ( + QWebEnginePage.Feature.DesktopAudioVideoCapture, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ): "DesktopAudioVideoCaptureDenied", + ( + QWebEnginePage.Feature.Notifications, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ): "NotificationsGranted", + ( + QWebEnginePage.Feature.Notifications, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ): "NotificationsDenied", } - + self.__loaded = False def requestFeaturePermission(self, page, origin, feature): """ Public method to request a feature permission. - + @param page reference to the requesting web page @type QWebEnginePage @param origin security origin requesting the feature @@ -135,26 +148,27 @@ """ if origin is None or origin.isEmpty(): return - + if not self.__loaded: self.__loadSettings() - + host = origin.host() - + if feature in self.__featurePermissions: for permission in self.__featurePermissions[feature]: if host in self.__featurePermissions[feature][permission]: page.setFeaturePermission(origin, feature, permission) return - + from .FeaturePermissionBar import FeaturePermissionBar + bar = FeaturePermissionBar(page, origin, feature, self) bar.show() - + def rememberFeaturePermission(self, host, feature, permission): """ Public method to remember a user decision for a feature permission. - + @param host host name to remember the decision for @type str @param feature feature to be remembered @@ -163,12 +177,12 @@ @type QWebEnginePage.PermissionPolicy """ if ( - feature in self.__featurePermissions and - host not in self.__featurePermissions[feature][permission] + feature in self.__featurePermissions + and host not in self.__featurePermissions[feature][permission] ): self.__featurePermissions[feature][permission].append(host) self.__saveSettings() - + def __loadSettings(self): """ Private method to load the remembered feature permissions. @@ -176,37 +190,34 @@ if self.__loaded: # no reloading allowed return - - for (feature, permission), key in ( - self.__featurePermissionsKeys.items() - ): - self.__featurePermissions[feature][permission] = ( - Globals.toList(Preferences.getSettings().value( - FeaturePermissionManager.SettingsKeyFormat.format(key), - [] - )) + + for (feature, permission), key in self.__featurePermissionsKeys.items(): + self.__featurePermissions[feature][permission] = Globals.toList( + Preferences.getSettings().value( + FeaturePermissionManager.SettingsKeyFormat.format(key), [] + ) ) - + self.__loaded = True - + def __saveSettings(self): """ Private method to save the remembered feature permissions. """ if not self.__loaded: return - + import WebBrowser.WebBrowserWindow + if WebBrowser.WebBrowserWindow.WebBrowserWindow.isPrivate(): return - - for (feature, permission), key in ( - self.__featurePermissionsKeys.items() - ): + + for (feature, permission), key in self.__featurePermissionsKeys.items(): Preferences.getSettings().setValue( FeaturePermissionManager.SettingsKeyFormat.format(key), - self.__featurePermissions[feature][permission]) - + self.__featurePermissions[feature][permission], + ) + def showFeaturePermissionsDialog(self): """ Public method to show a dialog to manage the remembered feature @@ -214,8 +225,9 @@ """ if not self.__loaded: self.__loadSettings() - + from .FeaturePermissionsDialog import FeaturePermissionsDialog + dlg = FeaturePermissionsDialog(self.__featurePermissions) if dlg.exec() == QDialog.DialogCode.Accepted: newFeaturePermissions = dlg.getData()