--- a/WebBrowser/WebBrowserView.py Sat Apr 02 19:44:09 2016 +0200 +++ b/WebBrowser/WebBrowserView.py Sun Apr 03 16:22:18 2016 +0200 @@ -14,26 +14,19 @@ except NameError: pass -from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject, QT_TRANSLATE_NOOP, \ - QUrl, QBuffer, QIODevice, QFileInfo, Qt, QTimer, QEvent, \ - QRect, QFile, QPoint, QByteArray, qVersion -from PyQt5.QtGui import QDesktopServices, QClipboard, QMouseEvent, QColor, \ - QPalette, QIcon, QContextMenuEvent, QPixmap -from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication, QInputDialog, \ - QLineEdit, QLabel, QToolTip, QFrame, QDialog -from PyQt5.QtPrintSupport import QPrinter, QPrintDialog -from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest, QHostInfo +from PyQt5.QtCore import pyqtSignal, QUrl, QFileInfo, Qt, QTimer, QEvent, \ + QPoint +from PyQt5.QtGui import QDesktopServices, QClipboard, QIcon, \ + QContextMenuEvent, QPixmap +from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage -from E5Gui import E5MessageBox, E5FileDialog +from E5Gui import E5MessageBox -import WebBrowser from .WebBrowserPage import WebBrowserPage from .Tools.WebIconLoader import WebIconLoader -from .Tools import WebBrowserTools, Scripts - -from .Network.LoadRequest import LoadRequest, LoadRequestOperations +from .Tools import Scripts from . import WebInspector from .Tools.WebBrowserTools import readAllFileContents, pixmapToDataUrl @@ -102,12 +95,8 @@ self.__currentZoom = 100 self.__zoomLevels = WebBrowserView.ZoomLevels[:] -## self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) -## self.linkClicked.connect(self.setSource) -## self.iconUrlChanged.connect(self.__iconUrlChanged) self.urlChanged.connect(self.__urlChanged) -## self.statusBarMessage.connect(self.__statusBarMessage) self.page().linkHovered.connect(self.__linkHovered) self.loadStarted.connect(self.__loadStarted) @@ -115,11 +104,6 @@ self.loadFinished.connect(self.__loadFinished) self.renderProcessTerminated.connect(self.__renderProcessTerminated) -## self.page().setForwardUnsupportedContent(True) -## self.page().unsupportedContent.connect(self.__unsupportedContent) - -## self.page().databaseQuotaExceeded.connect(self.__databaseQuotaExceeded) - self.__mw.openSearchManager().currentEngineChanged.connect( self.__currentEngineChanged) @@ -157,59 +141,13 @@ Public method to load a web site. @param url URL to be loaded - @type QUrl or LoadRequest + @type QUrl """ -## if isinstance(urlOrRequest, QUrl): super(WebBrowserView, self).load(url) if not self.__firstLoad: self.__firstLoad = True WebInspector.pushView(self) -## elif isinstance(urlOrRequest, LoadRequest): -## reqUrl = urlOrRequest.url() -## if reqUrl.isEmpty(): -## return -## -## if reqUrl.scheme() == "javascript": -## script = reqUrl.toString()[11:] -## # check if the javascript script is percent encode -## # i.e. it contains '%' characters -## if '%' in script: -## script = QUrl.fromPercentEncoding( -## QByteArray(script.encode("utf-8"))) -## self.page().runJavaScript(script) -## return -## -## if self.__isUrlValid(reqUrl): -## self.loadRequest(urlOrRequest) -## return -## -## # ensure proper loading of hosts without a '.' -## if not reqUrl.isEmpty() and \ -## reqUrl.scheme() and \ -## not WebBrowserTools.containsSpace(reqUrl.path()) and \ -## '.' not in reqUrl.path(): -## u = QUrl("http://" + reqUrl.path()) -## if u.isValid(): -## info = QHostInfo.fromName(u.path()) -## if info.error() == QHostInfo.NoError: -## req = LoadRequest(urlOrRequest) -## req.setUrl(u) -## self.loadRequest(req) -## return -## -## def loadRequest(self, req): -## """ -## Public method to load a page via a load request object. -## -## @param req loaf request object -## @type LoadRequest -## """ -## if req.Operation == LoadRequestOperations.GetOperation: -## self.load(req.url()) -## else: -## self.page().runJavaScript( -## Scripts.sendPostData(req.url(), req.data())) def setSource(self, name, newTab=False): """ @@ -1425,14 +1363,6 @@ from .Tools import WebIconProvider return WebIconProvider.instance().iconForUrl(self.url()) -## def __statusBarMessage(self, text): -## """ -## Private slot to handle the statusBarMessage signal. -## -## @param text text to be shown in the status bar (string) -## """ -## self.__mw.statusBar().showMessage(text) -## def __linkHovered(self, link): """ Private slot to handle the linkHovered signal. @@ -1554,6 +1484,7 @@ """ return self.__preview + # TODO: Qt 5.7: Save ## def saveAs(self): ## """ ## Public method to save the current page to a file. @@ -1564,151 +1495,6 @@ ## ## self.__mw.downloadManager().download(url, True, mainWindow=self.__mw) -## def __unsupportedContent(self, reply, requestFilename=None, -## download=False): -## """ -## Private slot to handle the unsupportedContent signal. -## -## @param reply reference to the reply object (QNetworkReply) -## @keyparam requestFilename indicating to ask for a filename -## (boolean or None). If it is None, the behavior is determined -## by a configuration option. -## @keyparam download flag indicating a download operation (boolean) -## """ -## if reply is None: -## return -## -## replyUrl = reply.url() -## -## if replyUrl.scheme() == "abp": -## return -## -## if reply.error() == QNetworkReply.NoError: -## if reply.header(QNetworkRequest.ContentTypeHeader): -## self.__mw.downloadManager().handleUnsupportedContent( -## reply, webPage=self.page(), mainWindow=self.__mw) -## return -## -## replyUrl = reply.url() -## if replyUrl.isEmpty(): -## return -## -## notFoundFrame = self.page().mainFrame() -## if notFoundFrame is None: -## return -## -## if reply.header(QNetworkRequest.ContentTypeHeader): -## data = reply.readAll() -## if contentSniff(data): -## notFoundFrame.setHtml(str(data, encoding="utf-8"), replyUrl) -## return -## -## urlString = bytes(replyUrl.toEncoded()).decode() -## title = self.tr("Error loading page: {0}").format(urlString) -## htmlFile = QFile(":/html/notFoundPage.html") -## htmlFile.open(QFile.ReadOnly) -## html = htmlFile.readAll() -## pixmap = qApp.style()\ -## .standardIcon(QStyle.SP_MessageBoxWarning).pixmap(48, 48) -## imageBuffer = QBuffer() -## imageBuffer.open(QIODevice.ReadWrite) -## if pixmap.save(imageBuffer, "PNG"): -## html = html.replace("@IMAGE@", imageBuffer.buffer().toBase64()) -## pixmap = qApp.style()\ -## .standardIcon(QStyle.SP_MessageBoxWarning).pixmap(16, 16) -## imageBuffer = QBuffer() -## imageBuffer.open(QIODevice.ReadWrite) -## if pixmap.save(imageBuffer, "PNG"): -## html = html.replace("@FAVICON@", imageBuffer.buffer().toBase64()) -## html = html.replace("@TITLE@", title.encode("utf8")) -## html = html.replace("@H1@", reply.errorString().encode("utf8")) -## html = html.replace( -## "@H2@", self.tr("When connecting to: {0}.") -## .format(urlString).encode("utf8")) -## html = html.replace( -## "@LI-1@", -## self.tr("Check the address for errors such as " -## "<b>ww</b>.example.org instead of " -## "<b>www</b>.example.org").encode("utf8")) -## html = html.replace( -## "@LI-2@", -## self.tr("If the address is correct, try checking the network " -## "connection.").encode("utf8")) -## html = html.replace( -## "@LI-3@", -## self.tr( -## "If your computer or network is protected by a firewall " -## "or proxy, make sure that the browser is permitted to " -## "access the network.").encode("utf8")) -## html = html.replace( -## "@LI-4@", -## self.tr("If your cache policy is set to offline browsing," -## "only pages in the local cache are available.") -## .encode("utf8")) -## html = html.replace( -## "@BUTTON@", self.tr("Try Again").encode("utf8")) -## notFoundFrame.setHtml(bytes(html).decode("utf8"), replyUrl) -## self.__mw.historyManager().removeHistoryEntry(replyUrl, self.title()) -## self.loadFinished.emit(False) -## - -## def __databaseQuotaExceeded(self, frame, databaseName): -## """ -## Private slot to handle the case, where the database quota is exceeded. -## -## @param frame reference to the frame (QWebFrame) -## @param databaseName name of the web database (string) -## """ -## securityOrigin = frame.securityOrigin() -## if securityOrigin.databaseQuota() > 0 and \ -## securityOrigin.databaseUsage() == 0: -## # cope with a strange behavior of Qt 4.6, if a database is -## # accessed for the first time -## return -## -## res = E5MessageBox.yesNo( -## self, -## self.tr("Web Database Quota"), -## self.tr( -## """<p>The database quota of <strong>{0}</strong> has""" -## """ been exceeded while accessing database <strong>{1}""" -## """</strong>.</p><p>Shall it be changed?</p>""") -## .format(self.__dataString(securityOrigin.databaseQuota()), -## databaseName), -## yesDefault=True) -## if res: -## newQuota, ok = QInputDialog.getInt( -## self, -## self.tr("New Web Database Quota"), -## self.tr( -## "Enter the new quota in MB (current = {0}, used = {1}; " -## "step size = 5 MB):" -## .format( -## self.__dataString(securityOrigin.databaseQuota()), -## self.__dataString(securityOrigin.databaseUsage()))), -## securityOrigin.databaseQuota() // (1024 * 1024), -## 0, 2147483647, 5) -## if ok: -## securityOrigin.setDatabaseQuota(newQuota * 1024 * 1024) -## -## def __dataString(self, size): -## """ -## Private method to generate a formatted data string. -## -## @param size size to be formatted (integer) -## @return formatted data string (string) -## """ -## unit = "" -## if size < 1024: -## unit = self.tr("bytes") -## elif size < 1024 * 1024: -## size /= 1024 -## unit = self.tr("kB") -## else: -## size /= 1024 * 1024 -## unit = self.tr("MB") -## return "{0:.1f} {1}".format(size, unit) - ########################################################################### ## Miscellaneous methods below ########################################################################### @@ -1814,31 +1600,3 @@ Private slot to reload all speed dials. """ self.page().runJavaScript("reloadAll();") - -##def contentSniff(data): -## """ -## Module function to do some content sniffing to check, if the data is HTML. -## -## @param data data block to sniff at (string) -## @return flag indicating HTML content (boolean) -## """ -## if data.contains("<!doctype") or \ -## data.contains("<script") or \ -## data.contains("<html") or \ -## data.contains("<!--") or \ -## data.contains("<head") or \ -## data.contains("<iframe") or \ -## data.contains("<h1") or \ -## data.contains("<div") or \ -## data.contains("<font") or \ -## data.contains("<table") or \ -## data.contains("<a") or \ -## data.contains("<style") or \ -## data.contains("<title") or \ -## data.contains("<b") or \ -## data.contains("<body") or \ -## data.contains("<br") or \ -## data.contains("<p"): -## return True -## -## return False