src/eric7/WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py

branch
eric7
changeset 11105
ec86fc991d28
parent 11102
ceabb30155b8
equal deleted inserted replaced
11104:683af9c45c5b 11105:ec86fc991d28
9 9
10 import contextlib 10 import contextlib
11 11
12 from PyQt6.QtCore import Qt, pyqtSlot 12 from PyQt6.QtCore import Qt, pyqtSlot
13 from PyQt6.QtWidgets import QAbstractItemView, QDialog, QTreeWidget, QTreeWidgetItem 13 from PyQt6.QtWidgets import QAbstractItemView, QDialog, QTreeWidget, QTreeWidgetItem
14
14 try: 15 try:
15 # Qt 6.8+ 16 # Qt 6.8+
16 from PyQt6.QtWebEngineCore import QWebEnginePermission 17 from PyQt6.QtWebEngineCore import QWebEnginePermission
17 except ImportError: 18 except ImportError:
18 # Qt <6.8 19 # Qt <6.8
176 177
177 if QtUtilities.qVersionTuple() >= (6, 8, 0): 178 if QtUtilities.qVersionTuple() >= (6, 8, 0):
178 # Qt 6.8+ 179 # Qt 6.8+
179 self.clipboardList = QTreeWidget() 180 self.clipboardList = QTreeWidget()
180 self.clipboardList.setAlternatingRowColors(True) 181 self.clipboardList.setAlternatingRowColors(True)
181 self.clipboardList.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) 182 self.clipboardList.setSelectionMode(
183 QAbstractItemView.SelectionMode.ExtendedSelection
184 )
182 self.clipboardList.setRootIsDecorated(False) 185 self.clipboardList.setRootIsDecorated(False)
183 self.clipboardList.setItemsExpandable(False) 186 self.clipboardList.setItemsExpandable(False)
184 self.clipboardList.setAllColumnsShowFocus(True) 187 self.clipboardList.setAllColumnsShowFocus(True)
185 self.clipboardList.setObjectName("camList") 188 self.clipboardList.setObjectName("camList")
186 self.clipboardList.setSortingEnabled(True) 189 self.clipboardList.setSortingEnabled(True)
187 self.clipboardList.headerItem().setText(0, self.tr("Host")) 190 self.clipboardList.headerItem().setText(0, self.tr("Host"))
188 self.clipboardList.headerItem().setText(1, self.tr("Permission")) 191 self.clipboardList.headerItem().setText(1, self.tr("Permission"))
189 self.tabWidget.addTab( 192 self.tabWidget.addTab(
190 self.clipboardList, EricPixmapCache.getIcon("clipboard"), self.tr("Clipboard") 193 self.clipboardList,
194 EricPixmapCache.getIcon("clipboard"),
195 self.tr("Clipboard"),
191 ) 196 )
192 197
193 self.localFontsList = QTreeWidget() 198 self.localFontsList = QTreeWidget()
194 self.localFontsList.setAlternatingRowColors(True) 199 self.localFontsList.setAlternatingRowColors(True)
195 self.localFontsList.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) 200 self.localFontsList.setSelectionMode(
201 QAbstractItemView.SelectionMode.ExtendedSelection
202 )
196 self.localFontsList.setRootIsDecorated(False) 203 self.localFontsList.setRootIsDecorated(False)
197 self.localFontsList.setItemsExpandable(False) 204 self.localFontsList.setItemsExpandable(False)
198 self.localFontsList.setAllColumnsShowFocus(True) 205 self.localFontsList.setAllColumnsShowFocus(True)
199 self.localFontsList.setObjectName("camList") 206 self.localFontsList.setObjectName("camList")
200 self.localFontsList.setSortingEnabled(True) 207 self.localFontsList.setSortingEnabled(True)
201 self.localFontsList.headerItem().setText(0, self.tr("Host")) 208 self.localFontsList.headerItem().setText(0, self.tr("Host"))
202 self.localFontsList.headerItem().setText(1, self.tr("Permission")) 209 self.localFontsList.headerItem().setText(1, self.tr("Permission"))
203 self.tabWidget.addTab( 210 self.tabWidget.addTab(
204 self.localFontsList, EricPixmapCache.getIcon("font"), self.tr("Local Fonts") 211 self.localFontsList,
212 EricPixmapCache.getIcon("font"),
213 self.tr("Local Fonts"),
205 ) 214 )
206 215
207 self.setTabOrder(self.tabWidget, self.notifList) 216 self.setTabOrder(self.tabWidget, self.notifList)
208 self.setTabOrder(self.notifList, self.geoList) 217 self.setTabOrder(self.notifList, self.geoList)
209 self.setTabOrder(self.geoList, self.micList) 218 self.setTabOrder(self.geoList, self.micList)
221 self.setTabOrder(self.deskAudVidList, self.removeButton) 230 self.setTabOrder(self.deskAudVidList, self.removeButton)
222 self.setTabOrder(self.removeButton, self.removeAllButton) 231 self.setTabOrder(self.removeButton, self.removeAllButton)
223 232
224 if QtUtilities.qVersionTuple() >= (6, 8, 0): 233 if QtUtilities.qVersionTuple() >= (6, 8, 0):
225 # Qt 6.8+ 234 # Qt 6.8+
226 self.__permissionStrings = { 235 self.__initializePermissionsList_qt68(featurePermissions)
227 QWebEnginePermission.State.Granted: self.tr("Allow"),
228 QWebEnginePermission.State.Denied: self.tr("Deny"),
229 QWebEnginePermission.State.Ask: self.tr("Always Ask"),
230 QWebEnginePermission.State.Invalid: self.tr("Invalid"),
231 }
232
233 self.__permissionsLists = {
234 QWebEnginePermission.PermissionType.Geolocation: self.geoList,
235 QWebEnginePermission.PermissionType.MediaAudioCapture: self.micList,
236 QWebEnginePermission.PermissionType.MediaVideoCapture: self.camList,
237 QWebEnginePermission.PermissionType.MediaAudioVideoCapture: self.micCamList,
238 QWebEnginePermission.PermissionType.MouseLock: self.mouseLockList,
239 QWebEnginePermission.PermissionType.DesktopVideoCapture: self.deskVidList,
240 QWebEnginePermission.PermissionType.DesktopAudioVideoCapture: self.deskAudVidList,
241 QWebEnginePermission.PermissionType.Notifications: self.notifList,
242 QWebEnginePermission.PermissionType.ClipboardReadWrite: self.clipboardList,
243 QWebEnginePermission.PermissionType.LocalFontsAccess: self.localFontsList,
244 }
245
246 for permission in featurePermissions:
247 with contextlib.suppress(KeyError):
248 permissionsList = self.__permissionsLists[permission.permissionType()]
249 itm = QTreeWidgetItem(
250 permissionsList, [
251 permission.origin().toString(),
252 self.__permissionStrings[permission.state()],
253 ]
254 )
255 itm.setData(0, Qt.ItemDataRole.UserRole, permission)
256 else: 236 else:
257 # Qt <6.8 237 # Qt <6.8
258 self.__permissionStrings = { 238 self.__initializePermissionsList_qt67(featurePermissions)
259 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: self.tr("Allow"),
260 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: self.tr("Deny"),
261 }
262
263 self.__permissionsLists = {
264 QWebEnginePage.Feature.Geolocation: self.geoList,
265 QWebEnginePage.Feature.MediaAudioCapture: self.micList,
266 QWebEnginePage.Feature.MediaVideoCapture: self.camList,
267 QWebEnginePage.Feature.MediaAudioVideoCapture: self.micCamList,
268 QWebEnginePage.Feature.MouseLock: self.mouseLockList,
269 QWebEnginePage.Feature.DesktopVideoCapture: self.deskVidList,
270 QWebEnginePage.Feature.DesktopAudioVideoCapture: self.deskAudVidList,
271 QWebEnginePage.Feature.Notifications: self.notifList,
272 }
273
274 for feature, permissionsList in self.__permissionsLists.items():
275 for permission in featurePermissions[feature]:
276 for host in featurePermissions[feature][permission]:
277 itm = QTreeWidgetItem(
278 permissionsList, [host, self.__permissionStrings[permission]]
279 )
280 itm.setData(0, Qt.ItemDataRole.UserRole, permission)
281 239
282 self.__removedPermissions = [] 240 self.__removedPermissions = []
283 self.__previousCurrent = -1 241 self.__previousCurrent = -1
284 self.tabWidget.currentChanged.connect(self.__currentTabChanged) 242 self.tabWidget.currentChanged.connect(self.__currentTabChanged)
285 self.tabWidget.setCurrentIndex(0) 243 self.tabWidget.setCurrentIndex(0)
244
245 def __initializePermissionsList_qt68(self, permissions):
246 """
247 Private method to initialize the permission lists for Qt 6.8+.
248
249 @param permissions list of permission objects
250 @type list of QWebEnginePermission
251 """
252 self.__permissionStrings = {
253 QWebEnginePermission.State.Granted: self.tr("Allow"),
254 QWebEnginePermission.State.Denied: self.tr("Deny"),
255 QWebEnginePermission.State.Ask: self.tr("Always Ask"),
256 QWebEnginePermission.State.Invalid: self.tr("Invalid"),
257 }
258
259 self.__permissionsLists = {
260 QWebEnginePermission.PermissionType.Geolocation: self.geoList,
261 QWebEnginePermission.PermissionType.MediaAudioCapture: self.micList,
262 QWebEnginePermission.PermissionType.MediaVideoCapture: self.camList,
263 QWebEnginePermission.PermissionType.MediaAudioVideoCapture: self.micCamList,
264 QWebEnginePermission.PermissionType.MouseLock: self.mouseLockList,
265 QWebEnginePermission.PermissionType.DesktopVideoCapture: self.deskVidList,
266 QWebEnginePermission.PermissionType.DesktopAudioVideoCapture: (
267 self.deskAudVidList
268 ),
269 QWebEnginePermission.PermissionType.Notifications: self.notifList,
270 QWebEnginePermission.PermissionType.ClipboardReadWrite: self.clipboardList,
271 QWebEnginePermission.PermissionType.LocalFontsAccess: self.localFontsList,
272 }
273
274 for permission in permissions:
275 with contextlib.suppress(KeyError):
276 permissionsList = self.__permissionsLists[permission.permissionType()]
277 itm = QTreeWidgetItem(
278 permissionsList,
279 [
280 permission.origin().toString(),
281 self.__permissionStrings[permission.state()],
282 ],
283 )
284 itm.setData(0, Qt.ItemDataRole.UserRole, permission)
285 for permissionsList in self.__permissionsLists.values():
286 permissionsList.resizeColumnToContents(0)
287
288 def __initializePermissionsList_qt67(self, permissions):
289 """
290 Private method to initialize the permission lists for Qt <6.8.
291
292 @param permissions dictionary with remembered feature permissions
293 @type dict of dict of list
294 """
295 self.__permissionStrings = {
296 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: self.tr("Allow"),
297 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: self.tr("Deny"),
298 }
299
300 self.__permissionsLists = {
301 QWebEnginePage.Feature.Geolocation: self.geoList,
302 QWebEnginePage.Feature.MediaAudioCapture: self.micList,
303 QWebEnginePage.Feature.MediaVideoCapture: self.camList,
304 QWebEnginePage.Feature.MediaAudioVideoCapture: self.micCamList,
305 QWebEnginePage.Feature.MouseLock: self.mouseLockList,
306 QWebEnginePage.Feature.DesktopVideoCapture: self.deskVidList,
307 QWebEnginePage.Feature.DesktopAudioVideoCapture: self.deskAudVidList,
308 QWebEnginePage.Feature.Notifications: self.notifList,
309 }
310
311 for feature, permissionsList in self.__permissionsLists.items():
312 for permission in permissions[feature]:
313 for host in permissions[feature][permission]:
314 itm = QTreeWidgetItem(
315 permissionsList,
316 [host, self.__permissionStrings[permission]],
317 )
318 itm.setData(0, Qt.ItemDataRole.UserRole, permission)
319 permissionsList.resizeColumnToContents(0)
286 320
287 @pyqtSlot(int) 321 @pyqtSlot(int)
288 def __currentTabChanged(self, index): 322 def __currentTabChanged(self, index):
289 """ 323 """
290 Private slot handling changes of the selected tab. 324 Private slot handling changes of the selected tab.

eric ide

mercurial