WebBrowser/WebBrowserView.py

changeset 6662
0002926e71d3
parent 6656
273a2130adbe
child 6692
c104c120e043
--- a/WebBrowser/WebBrowserView.py	Fri Jan 18 19:45:25 2019 +0100
+++ b/WebBrowser/WebBrowserView.py	Sat Jan 19 14:31:48 2019 +0100
@@ -21,7 +21,7 @@
     QByteArray, QIODevice, QDataStream
 from PyQt5.QtGui import QDesktopServices, QClipboard, QIcon, \
     QContextMenuEvent, QPixmap
-from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication
+from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication, QDialog
 from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage, \
     QWebEngineDownloadItem
 
@@ -162,6 +162,12 @@
         except AttributeError:
             # pre Qt 5.11
             pass
+        try:
+            self.__page.selectClientCertificate.connect(
+                self.__selectClientCertificate)
+        except AttributeError:
+            # pre Qt 5.12
+            pass
     
     def __setRwhvqt(self):
         """
@@ -2289,3 +2295,35 @@
                 request.accept()
             else:
                 request.reject()
+    
+    ###########################################################################
+    ## Methods below implement slots for Qt 5.12+
+    ###########################################################################
+    
+    if qVersionTuple() >= (5, 12, 0):
+        @pyqtSlot("QWebEngineClientCertificateSelection")
+        def __selectClientCertificate(self, clientCertificateSelection):
+            """
+            Private slot to handle the client certificate selection request.
+            
+            @param clientCertificateSelection list of client SSL certificates
+                found in system's client certificate store
+            @type QWebEngineClientCertificateSelection
+            """
+            certificates = clientCertificateSelection.certificates()
+            if len(certificates) == 0:
+                clientCertificateSelection.selectNone()
+            elif len(certificates) == 1:
+                clientCertificateSelection.select(certificates[0])
+            else:
+                certificate = None
+                from E5Network.E5SslCertificateSelectionDialog import \
+                    E5SslCertificateSelectionDialog
+                dlg = E5SslCertificateSelectionDialog(certificates, self)
+                if dlg.exec_() == QDialog.Accepted:
+                    certificate = dlg.getSelectedCertificate()
+                
+                if certificate is None:
+                    clientCertificateSelection.selectNone()
+                else:
+                    clientCertificateSelection.select(certificate)

eric ide

mercurial