Browse Source

post-process resources only for the main resource loader

Currently, all resources (regardless of the resource loader) were
post-processed with the following steps:
* user-supplied javascript (via --run-script)
* javascript finish delay  (via --javascript-delay)
* wait for window status   (via --window-status)

These are not relevant for any loader other than pageLoader,
so skip running the above steps unless it is the main loader which
fixes #1892 and #1725
Ashish Kulkarni 10 years ago
parent
commit
e02ff7efaf

+ 1 - 0
CHANGELOG.md

@@ -16,6 +16,7 @@ v0.12.2 (unreleased)
 * **#1808**: fix [sitepage] and [sitepages] not working without HTML headers/footers
 * **#1808**: fix [sitepage] and [sitepages] not working without HTML headers/footers
 * **#1825**: fix handling of non-ASCII characters in command-line arguments
 * **#1825**: fix handling of non-ASCII characters in command-line arguments
 * **#1863**: **[qt]** blank page or crash with low DPI on Windows
 * **#1863**: **[qt]** blank page or crash with low DPI on Windows
+* **#1892**: --window-status causes endless loop with --header-html
 * **#1906**: fix wrong comparison when parsing list parameters
 * **#1906**: fix wrong comparison when parsing list parameters
 * **#1944**: **[breaking change]** fix the reflection subsystem to fix the non-functional API
 * **#1944**: **[breaking change]** fix the reflection subsystem to fix the non-functional API
 * **#1949**: fix generation of tarball in the posix-local build
 * **#1949**: fix generation of tarball in the posix-local build

+ 1 - 1
include/wkhtmltox/multipageloader.hh

@@ -45,7 +45,7 @@ class DLL_LOCAL MultiPageLoaderPrivate;
 class DLL_LOCAL MultiPageLoader: public QObject {
 class DLL_LOCAL MultiPageLoader: public QObject {
 	Q_OBJECT
 	Q_OBJECT
 public:
 public:
-	MultiPageLoader(settings::LoadGlobal & s);
+	MultiPageLoader(settings::LoadGlobal & s, bool mainLoader = false);
 	~MultiPageLoader();
 	~MultiPageLoader();
 	LoaderObject * addResource(const QString & url, const settings::LoadPage & settings, const QString * data=NULL);
 	LoaderObject * addResource(const QString & url, const settings::LoadPage & settings, const QString * data=NULL);
 	LoaderObject * addResource(const QUrl & url, const settings::LoadPage & settings);
 	LoaderObject * addResource(const QUrl & url, const settings::LoadPage & settings);

+ 7 - 1
src/lib/multipageloader.cc

@@ -252,6 +252,11 @@ void ResourceObject::loadFinished(bool ok) {
 			warning(QString("Failed loading page ") + url.toString() + " (ignored)");
 			warning(QString("Failed loading page ") + url.toString() + " (ignored)");
 	}
 	}
 
 
+	if (!multiPageLoader.isMainLoader) {
+		loadDone();
+		return;
+	}
+
 	// Evaluate extra user supplied javascript
 	// Evaluate extra user supplied javascript
 	foreach (const QString & str, settings.runScript)
 	foreach (const QString & str, settings.runScript)
 		webPage.mainFrame()->evaluateJavaScript(str);
 		webPage.mainFrame()->evaluateJavaScript(str);
@@ -568,8 +573,9 @@ void MultiPageLoaderPrivate::fail() {
   \brief Construct a multipage loader object, load settings read from the supplied settings
   \brief Construct a multipage loader object, load settings read from the supplied settings
   \param s The settings to be used while loading pages
   \param s The settings to be used while loading pages
 */
 */
-MultiPageLoader::MultiPageLoader(settings::LoadGlobal & s):
+MultiPageLoader::MultiPageLoader(settings::LoadGlobal & s, bool mainLoader):
 	d(new MultiPageLoaderPrivate(s, *this)) {
 	d(new MultiPageLoaderPrivate(s, *this)) {
+	d->isMainLoader = mainLoader;
 }
 }
 
 
 MultiPageLoader::~MultiPageLoader() {
 MultiPageLoader::~MultiPageLoader() {

+ 1 - 1
src/lib/multipageloader.hh

@@ -48,7 +48,7 @@ class DLL_LOCAL MultiPageLoaderPrivate;
 class DLL_LOCAL MultiPageLoader: public QObject {
 class DLL_LOCAL MultiPageLoader: public QObject {
 	Q_OBJECT
 	Q_OBJECT
 public:
 public:
-	MultiPageLoader(settings::LoadGlobal & s);
+	MultiPageLoader(settings::LoadGlobal & s, bool mainLoader = false);
 	~MultiPageLoader();
 	~MultiPageLoader();
 	LoaderObject * addResource(const QString & url, const settings::LoadPage & settings, const QString * data=NULL);
 	LoaderObject * addResource(const QString & url, const settings::LoadPage & settings, const QString * data=NULL);
 	LoaderObject * addResource(const QUrl & url, const settings::LoadPage & settings);
 	LoaderObject * addResource(const QUrl & url, const settings::LoadPage & settings);

+ 1 - 0
src/lib/multipageloader_p.hh

@@ -120,6 +120,7 @@ public:
 
 
 	int loading;
 	int loading;
 	int progressSum;
 	int progressSum;
+	bool isMainLoader;
 	bool loadStartedEmitted;
 	bool loadStartedEmitted;
 	bool hasError;
 	bool hasError;
 	bool finishedEmitted;
 	bool finishedEmitted;

+ 1 - 1
src/lib/pdfconverter.cc

@@ -76,7 +76,7 @@ bool DLL_LOCAL looksLikeHtmlAndNotAUrl(QString str) {
 }
 }
 
 
 PdfConverterPrivate::PdfConverterPrivate(PdfGlobal & s, PdfConverter & o) :
 PdfConverterPrivate::PdfConverterPrivate(PdfGlobal & s, PdfConverter & o) :
-	settings(s), pageLoader(s.load),
+	settings(s), pageLoader(s.load, true),
 	out(o), printer(0), painter(0)
 	out(o), printer(0), painter(0)
 #ifdef __EXTENSIVE_WKHTMLTOPDF_QT_HACK__
 #ifdef __EXTENSIVE_WKHTMLTOPDF_QT_HACK__
     , webPrinter(0), measuringHFLoader(s.load), hfLoader(s.load), tocLoader1(s.load), tocLoader2(s.load)
     , webPrinter(0), measuringHFLoader(s.load), hfLoader(s.load), tocLoader1(s.load), tocLoader2(s.load)