From c042d864673f45c50966c8e301e0e6231b91dd3a Mon Sep 17 00:00:00 2001 From: David Rosca Date: Wed, 30 Sep 2015 11:01:10 +0200 Subject: [PATCH] WebPage: Add timeout to execJavaScript --- src/lib/webengine/webpage.cpp | 19 +++++++++++++------ src/lib/webengine/webpage.h | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/lib/webengine/webpage.cpp b/src/lib/webengine/webpage.cpp index b321a3785..344748c40 100644 --- a/src/lib/webengine/webpage.cpp +++ b/src/lib/webengine/webpage.cpp @@ -107,15 +107,22 @@ WebView *WebPage::view() const return static_cast(QWebEnginePage::view()); } -QVariant WebPage::execJavaScript(const QString &scriptSource) +QVariant WebPage::execJavaScript(const QString &scriptSource, int timeout) { - QEventLoop loop; + QPointer loop = new QEventLoop; QVariant result; - runJavaScript(scriptSource, [&loop, &result](const QVariant &res) { - result = res; - loop.exit(); + QTimer::singleShot(timeout, loop, &QEventLoop::quit); + + runJavaScript(scriptSource, [loop, &result](const QVariant &res) { + if (loop && loop->isRunning()) { + result = res; + loop->quit(); + } }); - loop.exec(); + + loop->exec(); + delete loop; + return result; } diff --git a/src/lib/webengine/webpage.h b/src/lib/webengine/webpage.h index b02cf9473..abefe2d06 100644 --- a/src/lib/webengine/webpage.h +++ b/src/lib/webengine/webpage.h @@ -50,7 +50,7 @@ public: WebView *view() const; - QVariant execJavaScript(const QString &scriptSource); + QVariant execJavaScript(const QString &scriptSource, int timeout = 500); WebHitTestResult hitTestContent(const QPoint &pos) const;