Fix other use of shouldInterruptJavascript().

This commit is contained in:
Kovid Goyal 2013-03-14 13:20:40 +05:30
parent 0d7d575f29
commit 72cd8c5478
3 changed files with 14 additions and 4 deletions

View file

@ -11,7 +11,8 @@
from urllib import unquote
from cssutils import parseStyle
from PyQt4.Qt import (pyqtProperty, QString, QEventLoop, Qt, QSize, QTimer)
from PyQt4.Qt import (pyqtProperty, QString, QEventLoop, Qt, QSize, QTimer,
pyqtSlot)
from PyQt4.QtWebKit import QWebPage, QWebView
from calibre.constants import iswindows
@ -109,6 +110,7 @@ def __init__(self, log):
self.bridge_value = None
nam = self.networkAccessManager()
nam.setNetworkAccessible(nam.NotAccessible)
self.longjs_counter = 0
def javaScriptConsoleMessage(self, msg, lineno, msgid):
self.log(u'JS:', unicode(msg))
@ -116,8 +118,14 @@ def javaScriptConsoleMessage(self, msg, lineno, msgid):
def javaScriptAlert(self, frame, msg):
self.log(unicode(msg))
@pyqtSlot(result=bool)
def shouldInterruptJavaScript(self):
return False
if self.longjs_counter < 5:
self.log('Long running javascript, letting it proceed')
self.longjs_counter += 1
return False
self.log.warn('Long running javascript, aborting it')
return True
def _pass_json_value_getter(self):
val = json.dumps(self.bridge_value)
@ -130,6 +138,7 @@ def _pass_json_value_setter(self, value):
fset=_pass_json_value_setter)
def load_js(self):
self.longjs_counter = 0
if self.js is None:
from calibre.utils.resources import compiled_coffeescript
self.js = compiled_coffeescript('ebooks.oeb.display.utils')

View file

@ -92,7 +92,7 @@ def javaScriptAlert(self, frame, msg):
@pyqtSlot(result=bool)
def shouldInterruptJavaScript(self):
if self.longjs_counter < 5:
if self.longjs_counter < 10:
self.log('Long running javascript, letting it proceed')
self.longjs_counter += 1
return False

View file

@ -13,7 +13,7 @@
from PyQt4.Qt import (QObject, QNetworkAccessManager, QNetworkDiskCache,
QNetworkProxy, QNetworkProxyFactory, QEventLoop, QUrl, pyqtSignal,
QDialog, QVBoxLayout, QSize, QNetworkCookieJar, Qt)
QDialog, QVBoxLayout, QSize, QNetworkCookieJar, Qt, pyqtSlot)
from PyQt4.QtWebKit import QWebPage, QWebSettings, QWebView, QWebElement
from calibre import USER_AGENT, prints, get_proxies, get_proxy_info
@ -83,6 +83,7 @@ def javaScriptPrompt(self, frame, msg, default_value, *args):
result.append(value)
return ok
@pyqtSlot(result=bool)
def shouldInterruptJavaScript(self):
if self.view() is not None:
return QWebPage.shouldInterruptJavaScript(self)