src/eric7/WebBrowser/WebBrowserView.py

branch
eric7
changeset 10847
b3f04b83fc84
parent 10806
2f6df822e3b9
child 10851
5c47172bb240
--- a/src/eric7/WebBrowser/WebBrowserView.py	Sun Jul 14 18:15:30 2024 +0200
+++ b/src/eric7/WebBrowser/WebBrowserView.py	Mon Jul 15 16:38:58 2024 +0200
@@ -44,7 +44,11 @@
     QPrinter,
     QPrintPreviewDialog,
 )
-from PyQt6.QtWebEngineCore import QWebEngineDownloadRequest, QWebEnginePage
+from PyQt6.QtWebEngineCore import (
+    QWebEngineDownloadRequest,
+    QWebEnginePage,
+    QWebEngineWebAuthUxRequest,
+)
 from PyQt6.QtWebEngineWidgets import QWebEngineView
 from PyQt6.QtWidgets import QApplication, QDialog, QMenu, QStyle
 
@@ -170,6 +174,7 @@
         self.__preview = QPixmap()
         self.__currentPrinter = None
         self.__printPreviewLoop = None
+        self.__webAuthDialog = None
 
         self.__currentZoom = 100
         self.__zoomLevels = WebBrowserView.ZoomLevels[:]
@@ -229,6 +234,11 @@
             self.__page.fileSystemAccessRequested.connect(
                 self.__fileSystemAccessRequested
             )
+        with contextlib.suppress(AttributeError):
+            # Qt 6.7+
+            self.__page.webAuthUxRequested.connect(
+                self.__webAuthUxRequested
+            )
         # The registerProtocolHandlerRequested signal is handled in
         # WebBrowserPage.
         self.__page.selectClientCertificate.connect(self.__selectClientCertificate)
@@ -2664,3 +2674,54 @@
                 accessRequest.accept()
             else:
                 accessRequest.reject()
+
+    ###########################################################################
+    ## Methods below implement slots for Qt 6.7+
+    ###########################################################################
+
+    with contextlib.suppress(TypeError):
+
+        @pyqtSlot("QWebEngineWebAuthUxRequest*")
+        def __webAuthUxRequested(self, authUxRequest):
+            """
+            Private slot to handle WebAuth requests.
+
+            @param authUxRequest reference to the WebAuth request object
+            @type QWebEngineWebAuthUxRequest
+            """
+            from .WebBrowserWebAuthDialog import WebBrowserWebAuthDialog
+
+            if self.__webAuthDialog is not None:
+                del self.__webAuthDialog
+                self.__webAuthDialog = None
+
+            self.__webAuthDialog = WebBrowserWebAuthDialog(authUxRequest, self.__mw)
+            self.__webAuthDialog.setModal(False)
+            self.__webAuthDialog.setWindowFlags(
+                self.__webAuthDialog.windowFlags()
+                & Qt.WindowType.WindowContextHelpButtonHint
+            )
+
+            authUxRequest.stateChanged.connect(self.__webAuthUxRequestStateChanged)
+            self.__webAuthDialog.show()
+
+    with contextlib.suppress(TypeError):
+
+        @pyqtSlot("QWebEngineWebAuthUxRequest.WebAuthUxState")
+        def __webAuthUxRequestStateChanged(self, state):
+            """
+            Private slot to handle a change of state of the current WebAuth request.
+
+            @param state new state
+            @type QWebEngineWebAuthUxRequest.WebAuthUxState
+            """
+            if state in (
+                QWebEngineWebAuthUxRequest.WebAuthUxState.Cancelled,
+                QWebEngineWebAuthUxRequest.WebAuthUxState.Completed,
+            ):
+                self.__webAuthDialog.hide()
+                del self.__webAuthDialog
+                self.__webAuthDialog = None
+            else:
+                self.__webAuthDialog.updateDialog()
+                self.__webAuthDialog.show()

eric ide

mercurial