--- 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()