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 @@ import json, sys, os
from urllib import unquote from urllib import unquote
from cssutils import parseStyle 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 PyQt4.QtWebKit import QWebPage, QWebView
from calibre.constants import iswindows from calibre.constants import iswindows
@ -109,6 +110,7 @@ class Page(QWebPage): # {{{
self.bridge_value = None self.bridge_value = None
nam = self.networkAccessManager() nam = self.networkAccessManager()
nam.setNetworkAccessible(nam.NotAccessible) nam.setNetworkAccessible(nam.NotAccessible)
self.longjs_counter = 0
def javaScriptConsoleMessage(self, msg, lineno, msgid): def javaScriptConsoleMessage(self, msg, lineno, msgid):
self.log(u'JS:', unicode(msg)) self.log(u'JS:', unicode(msg))
@ -116,8 +118,14 @@ class Page(QWebPage): # {{{
def javaScriptAlert(self, frame, msg): def javaScriptAlert(self, frame, msg):
self.log(unicode(msg)) self.log(unicode(msg))
@pyqtSlot(result=bool)
def shouldInterruptJavaScript(self): 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): def _pass_json_value_getter(self):
val = json.dumps(self.bridge_value) val = json.dumps(self.bridge_value)
@ -130,6 +138,7 @@ class Page(QWebPage): # {{{
fset=_pass_json_value_setter) fset=_pass_json_value_setter)
def load_js(self): def load_js(self):
self.longjs_counter = 0
if self.js is None: if self.js is None:
from calibre.utils.resources import compiled_coffeescript from calibre.utils.resources import compiled_coffeescript
self.js = compiled_coffeescript('ebooks.oeb.display.utils') self.js = compiled_coffeescript('ebooks.oeb.display.utils')

View File

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

View File

@ -13,7 +13,7 @@ from threading import current_thread
from PyQt4.Qt import (QObject, QNetworkAccessManager, QNetworkDiskCache, from PyQt4.Qt import (QObject, QNetworkAccessManager, QNetworkDiskCache,
QNetworkProxy, QNetworkProxyFactory, QEventLoop, QUrl, pyqtSignal, 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 PyQt4.QtWebKit import QWebPage, QWebSettings, QWebView, QWebElement
from calibre import USER_AGENT, prints, get_proxies, get_proxy_info from calibre import USER_AGENT, prints, get_proxies, get_proxy_info
@ -83,6 +83,7 @@ class WebPage(QWebPage): # {{{
result.append(value) result.append(value)
return ok return ok
@pyqtSlot(result=bool)
def shouldInterruptJavaScript(self): def shouldInterruptJavaScript(self):
if self.view() is not None: if self.view() is not None:
return QWebPage.shouldInterruptJavaScript(self) return QWebPage.shouldInterruptJavaScript(self)