summaryrefslogtreecommitdiff
path: root/www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch
diff options
context:
space:
mode:
Diffstat (limited to 'www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch')
-rw-r--r--www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch b/www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch
new file mode 100644
index 000000000000..2606dc508857
--- /dev/null
+++ b/www-client/falkon/files/falkon-3.0.1-qiodevice-main-thread.patch
@@ -0,0 +1,106 @@
+From a7d2f8757919b4db63867ecbb4fb64c11d64f453 Mon Sep 17 00:00:00 2001
+From: David Rosca <nowrep@gmail.com>
+Date: Sun, 22 Jul 2018 15:17:04 +0200
+Subject: FalkonSchemeHandler: Make sure to load data on main thread
+
+QIODevice::read is called on WebEngine IO thread.
+---
+ .../network/schemehandlers/falkonschemehandler.cpp | 41 +++++++++++-----------
+ .../network/schemehandlers/falkonschemehandler.h | 2 ++
+ 2 files changed, 23 insertions(+), 20 deletions(-)
+
+diff --git a/src/lib/network/schemehandlers/falkonschemehandler.cpp b/src/lib/network/schemehandlers/falkonschemehandler.cpp
+index 5706c04..4e01897 100644
+--- a/src/lib/network/schemehandlers/falkonschemehandler.cpp
++++ b/src/lib/network/schemehandlers/falkonschemehandler.cpp
+@@ -89,8 +89,7 @@ FalkonSchemeReply::FalkonSchemeReply(QWebEngineUrlRequestJob *job, QObject *pare
+ {
+ m_pageName = m_job->requestUrl().path();
+
+- open(QIODevice::ReadOnly);
+- m_buffer.open(QIODevice::ReadWrite);
++ QTimer::singleShot(0, this, &FalkonSchemeReply::loadPage);
+ }
+
+ void FalkonSchemeReply::loadPage()
+@@ -98,38 +97,40 @@ void FalkonSchemeReply::loadPage()
+ if (m_loaded)
+ return;
+
+- QTextStream stream(&m_buffer);
+- stream.setCodec("UTF-8");
++ QString contents;
+
+ if (m_pageName == QLatin1String("about")) {
+- stream << aboutPage();
+- }
+- else if (m_pageName == QLatin1String("start")) {
+- stream << startPage();
+- }
+- else if (m_pageName == QLatin1String("speeddial")) {
+- stream << speeddialPage();
+- }
+- else if (m_pageName == QLatin1String("config")) {
+- stream << configPage();
+- }
+- else if (m_pageName == QLatin1String("restore")) {
+- stream << restorePage();
++ contents = aboutPage();
++ } else if (m_pageName == QLatin1String("start")) {
++ contents = startPage();
++ } else if (m_pageName == QLatin1String("speeddial")) {
++ contents = speeddialPage();
++ } else if (m_pageName == QLatin1String("config")) {
++ contents = configPage();
++ } else if (m_pageName == QLatin1String("restore")) {
++ contents = restorePage();
+ }
+
+- stream.flush();
+- m_buffer.reset();
++ QMutexLocker lock(&m_mutex);
++ m_buffer.setData(contents.toUtf8());
++ m_buffer.open(QIODevice::ReadOnly);
++ lock.unlock();
++
++ open(QIODevice::ReadOnly);
++ emit readyRead();
++
+ m_loaded = true;
+ }
+
+ qint64 FalkonSchemeReply::bytesAvailable() const
+ {
++ QMutexLocker lock(&m_mutex);
+ return m_buffer.bytesAvailable();
+ }
+
+ qint64 FalkonSchemeReply::readData(char *data, qint64 maxSize)
+ {
+- loadPage();
++ QMutexLocker lock(&m_mutex);
+ return m_buffer.read(data, maxSize);
+ }
+
+diff --git a/src/lib/network/schemehandlers/falkonschemehandler.h b/src/lib/network/schemehandlers/falkonschemehandler.h
+index 2c071a7..b92969d 100644
+--- a/src/lib/network/schemehandlers/falkonschemehandler.h
++++ b/src/lib/network/schemehandlers/falkonschemehandler.h
+@@ -18,6 +18,7 @@
+ #ifndef FALKONSCHEMEHANDLER_H
+ #define FALKONSCHEMEHANDLER_H
+
++#include <QMutex>
+ #include <QBuffer>
+ #include <QIODevice>
+ #include <QWebEngineUrlSchemeHandler>
+@@ -60,6 +61,7 @@ private:
+ QBuffer m_buffer;
+ QString m_pageName;
+ QWebEngineUrlRequestJob *m_job;
++ mutable QMutex m_mutex;
+ };
+
+ #endif // FALKONSCHEMEHANDLER_H
+--
+cgit v1.1