--- a/src/eric7/WebBrowser/FeaturePermissions/FeaturePermissionBar.py Wed Jul 13 11:16:20 2022 +0200 +++ b/src/eric7/WebBrowser/FeaturePermissions/FeaturePermissionBar.py Wed Jul 13 14:55:47 2022 +0200 @@ -22,12 +22,13 @@ """ Class implementing the feature permission bar widget. """ + DefaultHeight = 30 - + def __init__(self, page, origin, feature, manager): """ Constructor - + @param page reference to the web page @type QWebView @param origin security origin requesting the feature @@ -38,51 +39,54 @@ @type FeaturePermissionManager """ super().__init__(parent=page.view()) - + self.__origin = QUrl(origin) self.__feature = feature self.__page = page self.__manager = manager - + self.__permissionFeatureTexts = { - QWebEnginePage.Feature.Geolocation: - self.tr("{0} wants to use your position."), - QWebEnginePage.Feature.MediaAudioCapture: - self.tr("{0} wants to use your microphone."), - QWebEnginePage.Feature.MediaVideoCapture: - self.tr("{0} wants to use your camera."), - QWebEnginePage.Feature.MediaAudioVideoCapture: - self.tr("{0} wants to use your microphone and camera."), - QWebEnginePage.Feature.MouseLock: - self.tr("{0} wants to lock your mouse."), - QWebEnginePage.Feature.DesktopVideoCapture: - self.tr("{0} wants to capture video of your screen."), - QWebEnginePage.Feature.DesktopAudioVideoCapture: - self.tr("{0} wants to capture audio and video of your" - " screen."), + QWebEnginePage.Feature.Geolocation: self.tr( + "{0} wants to use your position." + ), + QWebEnginePage.Feature.MediaAudioCapture: self.tr( + "{0} wants to use your microphone." + ), + QWebEnginePage.Feature.MediaVideoCapture: self.tr( + "{0} wants to use your camera." + ), + QWebEnginePage.Feature.MediaAudioVideoCapture: self.tr( + "{0} wants to use your microphone and camera." + ), + QWebEnginePage.Feature.MouseLock: self.tr("{0} wants to lock your mouse."), + QWebEnginePage.Feature.DesktopVideoCapture: self.tr( + "{0} wants to capture video of your screen." + ), + QWebEnginePage.Feature.DesktopAudioVideoCapture: self.tr( + "{0} wants to capture audio and video of your" " screen." + ), } with contextlib.suppress(AttributeError): # this was re-added in Qt 5.13.0 self.__permissionFeatureTexts[ - QWebEnginePage.Feature.Notifications] = self.tr( - "{0} wants to use desktop notifications.") - + QWebEnginePage.Feature.Notifications + ] = self.tr("{0} wants to use desktop notifications.") + self.__permissionFeatureIconNames = { QWebEnginePage.Feature.Geolocation: "geolocation", QWebEnginePage.Feature.MediaAudioCapture: "audiocapture", QWebEnginePage.Feature.MediaVideoCapture: "camera", QWebEnginePage.Feature.MediaAudioVideoCapture: "audio-video", QWebEnginePage.Feature.MouseLock: "mouse", - QWebEnginePage.Feature.DesktopVideoCapture: - "desktopVideoCapture", - QWebEnginePage.Feature.DesktopAudioVideoCapture: - "desktopAudioVideoCapture", + QWebEnginePage.Feature.DesktopVideoCapture: "desktopVideoCapture", + QWebEnginePage.Feature.DesktopAudioVideoCapture: "desktopAudioVideoCapture", } with contextlib.suppress(AttributeError): # this was re-added in Qt 5.13.0 self.__permissionFeatureIconNames[ - QWebEnginePage.Feature.Notifications] = "notification" - + QWebEnginePage.Feature.Notifications + ] = "notification" + self.setAutoFillBackground(True) self.__layout = QHBoxLayout() self.setLayout(self.__layout) @@ -96,8 +100,7 @@ self.__rememberButton.setCheckable(True) self.__allowButton = QPushButton(self.tr("Allow"), self) self.__denyButton = QPushButton(self.tr("Deny"), self) - self.__discardButton = QPushButton(UI.PixmapCache.getIcon("close"), - "", self) + self.__discardButton = QPushButton(UI.PixmapCache.getIcon("close"), "", self) self.__allowButton.clicked.connect(self.__permissionGranted) self.__denyButton.clicked.connect(self.__permissionDenied) self.__discardButton.clicked.connect(self.__permissionUnknown) @@ -105,25 +108,32 @@ self.__layout.addWidget(self.__allowButton) self.__layout.addWidget(self.__denyButton) self.__layout.addWidget(self.__discardButton) - + with contextlib.suppress(KeyError): - self.__iconLabel.setPixmap(UI.PixmapCache.getPixmap( - self.__permissionFeatureIconNames[self.__feature])) - + self.__iconLabel.setPixmap( + UI.PixmapCache.getPixmap( + self.__permissionFeatureIconNames[self.__feature] + ) + ) + try: self.__messageLabel.setText( self.__permissionFeatureTexts[self.__feature].format( - self.__origin.host())) + self.__origin.host() + ) + ) except KeyError: self.__messageLabel.setText( self.tr("{0} wants to use an unknown feature.").format( - self.__origin.host())) - + self.__origin.host() + ) + ) + self.__page.loadStarted.connect(self.hide) - + self.resize(self.__page.view().width(), self.height()) self.startAnimation() - + @pyqtSlot() def hide(self): """ @@ -131,52 +141,62 @@ """ self.__page.loadStarted.disconnect(self.hide) super().hide() - + def __permissionDenied(self): """ Private slot handling the user pressing the deny button. """ if self.__page is None or self.__manager is None: return - + self.__page.setFeaturePermission( - self.__origin, self.__feature, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser) - + self.__origin, + self.__feature, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ) + if self.__rememberButton.isChecked(): self.__manager.rememberFeaturePermission( - self.__page.url().host(), self.__feature, - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser) - + self.__page.url().host(), + self.__feature, + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser, + ) + self.hide() - + def __permissionGranted(self): """ Private slot handling the user pressing the allow button. """ if self.__page is None or self.__manager is None: return - + self.__page.setFeaturePermission( - self.__origin, self.__feature, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser) - + self.__origin, + self.__feature, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ) + if self.__rememberButton.isChecked(): self.__manager.rememberFeaturePermission( - self.__page.url().host(), self.__feature, - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser) - + self.__page.url().host(), + self.__feature, + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser, + ) + self.hide() - + def __permissionUnknown(self): """ Private slot handling the user closing the dialog without. """ if self.__page is None or self.__manager is None: return - + self.__page.setFeaturePermission( - self.__origin, self.__feature, - QWebEnginePage.PermissionPolicy.PermissionUnknown) - + self.__origin, + self.__feature, + QWebEnginePage.PermissionPolicy.PermissionUnknown, + ) + self.hide()