--- a/src/eric7/WebBrowser/WebBrowserView.py Fri Sep 23 13:43:06 2022 +0200 +++ b/src/eric7/WebBrowser/WebBrowserView.py Sat Sep 24 13:38:40 2022 +0200 @@ -185,6 +185,11 @@ self.__page.safeBrowsingBad.connect(self.safeBrowsingBad) self.__page.printPageRequested.connect(self.__printPage) self.__page.quotaRequested.connect(self.__quotaRequested) + with contextlib.suppress(AttributeError): + # Qt 6.4+ + self.__page.fileSystemAccessRequested.connect( + self.__fileSystemAccessRequested + ) # The registerProtocolHandlerRequested signal is handled in # WebBrowserPage. self.__page.selectClientCertificate.connect(self.__selectClientCertificate) @@ -2372,3 +2377,63 @@ clientCertificateSelection.selectNone() else: clientCertificateSelection.select(certificate) + + ########################################################################### + ## Methods below implement slots for Qt 6.4+ + ########################################################################### + + @pyqtSlot("QWebEngineFileSystemAccessRequest") + def __fileSystemAccessRequested(self, accessRequest): + """ + Private slot to handle file system access requests of the web page. + + @param accessRequest reference to the file system access request object + @type QWebEngineFileSystemAccessRequest + """ + from PyQt6.QtWebEngineCore import QWebEngineFileSystemAccessRequest + + acceptRequest = Preferences.getWebBrowser("AcceptFileSystemAccessRequest") + # map yes/no/ask from (0, 1, 2) + if acceptRequest == 0: + # always yes + ok = True + elif acceptRequest == 1: + # always no + ok = False + else: + # ask user + if ( + accessRequest.accessFlags() + == QWebEngineFileSystemAccessRequest.AccessFlag.Read + ): + msgTemplate = self.tr( + "<p>Grant the web site at <b>{0}</b> <b>Read</b> access" + " to '{0}'?</p>" + ) + elif ( + accessRequest.accessFlags() + == QWebEngineFileSystemAccessRequest.AccessFlag.Write + ): + msgTemplate = self.tr( + "<p>Grant the web site at <b>{0}</b> <b>Write</b> access" + " to '{0}'?</p>" + ) + else: + msgTemplate = self.tr( + "<p>Grant the web site at <b>{0}</b> <b>Read and Write</b> access" + " to '{0}'?</p>" + ) + + ok = EricMessageBox.yesNo( + self, + self.tr("File System Access Request"), + msgTemplate.format( + accessRequest.origin().host(), + accessRequest.filePath().toLocalFile(), + ), + ) + + if ok: + accessRequest.accept() + else: + accessRequest.reject()