summaryrefslogtreecommitdiff
path: root/dev-qt
diff options
context:
space:
mode:
authorIonen Wolkens <ionen@gentoo.org>2023-04-25 19:38:00 -0400
committerIonen Wolkens <ionen@gentoo.org>2023-04-25 23:54:30 -0400
commit9b8f2313546c9a4c1c9dd7a3fc59f77b7147d43d (patch)
tree2ad9f91a634c641f9b044142f22c847e3c39d7d7 /dev-qt
parentmedia-libs/libde265: Stabilize 1.0.11 amd64, #905100 (diff)
downloadgentoo-9b8f2313546c9a4c1c9dd7a3fc59f77b7147d43d.tar.gz
gentoo-9b8f2313546c9a4c1c9dd7a3fc59f77b7147d43d.tar.bz2
gentoo-9b8f2313546c9a4c1c9dd7a3fc59f77b7147d43d.zip
dev-qt/qtwebengine: fix qutebrowser's hinting issue (6.5 regression)
Without this, scripts that qutebrowser (or others) inject may semi-randomly fail leading to e.g. keyword hints not working, or users' greasemonkey scripts not being loaded. qutebrowser has opted to not do messy mitigations (at least for now) and a fix here makes more sense. Albeit fix was not merged upstream yet, "hopefully" will make it in 6.5.1 if doesn't miss the window. Given qtwebengine is not used for much in Gentoo beside qutebrowser so far, should be worth the revbump/rebuild. Acked-by: Jimi Huotari <chiitoo@gentoo.org> Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
Diffstat (limited to 'dev-qt')
-rw-r--r--dev-qt/qtwebengine/files/qtwebengine-6.5.0-userscripts-loading.patch112
-rw-r--r--dev-qt/qtwebengine/qtwebengine-6.5.0-r2.ebuild (renamed from dev-qt/qtwebengine/qtwebengine-6.5.0-r1.ebuild)5
2 files changed, 116 insertions, 1 deletions
diff --git a/dev-qt/qtwebengine/files/qtwebengine-6.5.0-userscripts-loading.patch b/dev-qt/qtwebengine/files/qtwebengine-6.5.0-userscripts-loading.patch
new file mode 100644
index 000000000000..6a5802829bb4
--- /dev/null
+++ b/dev-qt/qtwebengine/files/qtwebengine-6.5.0-userscripts-loading.patch
@@ -0,0 +1,112 @@
+https://github.com/qutebrowser/qutebrowser/issues/7662
+https://bugreports.qt.io/browse/QTBUG-113109
+
+https://codereview.qt-project.org/c/qt/qtwebengine/+/474114
+From: Allan Sandfeld Jensen <allan.jensen@qt.io>
+Date: Mon, 24 Apr 2023 17:33:17 +0200
+Subject: [PATCH] Fix user script management when subframes are present
+
+Only the main frames should administer scripts associated with it.
+
+Pick-to: 6.5
+Fixes: QTBUG-113109
+Change-Id: Ibda66f55ef99da632134a9de1425797262faba9b
+--- a/src/core/renderer/user_resource_controller.cpp
++++ b/src/core/renderer/user_resource_controller.cpp
+@@ -289,10 +289,11 @@
+ FrameUserScriptMap::iterator it = m_frameUserScriptMap.find(renderFrame);
+ if (it == m_frameUserScriptMap.end()) // ASSERT maybe?
+ return;
+- for (uint64_t id : std::as_const(it.value())) {
+- m_scripts.remove(id);
++ if (renderFrame->IsMainFrame()) {
++ for (uint64_t id : std::as_const(it.value()))
++ m_scripts.remove(id);
+ }
+- m_frameUserScriptMap.remove(renderFrame);
++ m_frameUserScriptMap.erase(it);
+ }
+
+ void UserResourceController::addScriptForFrame(const QtWebEngineCore::UserScriptData &script,
+@@ -304,7 +305,8 @@
+
+ if (!(*it).contains(script.scriptId))
+ (*it).append(script.scriptId);
+- m_scripts.insert(script.scriptId, script);
++ if (!frame || frame->IsMainFrame())
++ m_scripts.insert(script.scriptId, script);
+ }
+
+ void UserResourceController::removeScriptForFrame(const QtWebEngineCore::UserScriptData &script,
+@@ -315,7 +317,8 @@
+ return;
+
+ (*it).removeOne(script.scriptId);
+- m_scripts.remove(script.scriptId);
++ if (!frame || frame->IsMainFrame())
++ m_scripts.remove(script.scriptId);
+ }
+
+ void UserResourceController::clearScriptsForFrame(content::RenderFrame *frame)
+@@ -323,8 +326,10 @@
+ FrameUserScriptMap::iterator it = m_frameUserScriptMap.find(frame);
+ if (it == m_frameUserScriptMap.end())
+ return;
+- for (uint64_t id : std::as_const(it.value()))
+- m_scripts.remove(id);
++ if (!frame || frame->IsMainFrame()) {
++ for (uint64_t id : std::as_const(it.value()))
++ m_scripts.remove(id);
++ }
+
+ m_frameUserScriptMap.remove(frame);
+ }
+--- a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
++++ b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
+@@ -76,6 +76,7 @@
+ void scriptsInNestedIframes();
+ void matchQrcUrl();
+ void injectionOrder();
++ void reloadWithSubframes();
+ };
+
+ void tst_QWebEngineScript::domEditing()
+@@ -694,6 +695,38 @@
+ QTRY_COMPARE(page.log, expected);
+ }
+
++void tst_QWebEngineScript::reloadWithSubframes()
++{
++ class Page : public QWebEnginePage
++ {
++ public:
++ Page() : QWebEnginePage() {}
++ QVector<QString> log;
++
++ protected:
++ void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel, const QString &message, int,
++ const QString &) override
++ {
++ log.append(message);
++ }
++ } page;
++
++ QWebEngineScript s;
++ s.setInjectionPoint(QWebEngineScript::DocumentCreation);
++ s.setSourceCode(QStringLiteral("console.log('Hello');"));
++ page.scripts().insert(s);
++
++ page.setHtml(QStringLiteral("<body>"
++ " <h1>Test scripts working on reload </h1>"
++ " <iframe src='about://blank'>"
++ " </iframe>"
++ "</body>"));
++ QTRY_COMPARE(page.log.size(), 1);
++
++ page.triggerAction(QWebEnginePage::Reload);
++ QTRY_COMPARE(page.log.size(), 2);
++}
++
+ QTEST_MAIN(tst_QWebEngineScript)
+
+ #include "tst_qwebenginescript.moc"
diff --git a/dev-qt/qtwebengine/qtwebengine-6.5.0-r1.ebuild b/dev-qt/qtwebengine/qtwebengine-6.5.0-r2.ebuild
index f8bac25f51b1..912effe24979 100644
--- a/dev-qt/qtwebengine/qtwebengine-6.5.0-r1.ebuild
+++ b/dev-qt/qtwebengine/qtwebengine-6.5.0-r2.ebuild
@@ -87,7 +87,10 @@ DEPEND="${RDEPEND}
media-libs/libglvnd
"
-PATCHES=( "${FILESDIR}/${PN}-6.5.0-gcc-13-build.patch" )
+PATCHES=(
+ "${FILESDIR}/${PN}-6.5.0-gcc-13-build.patch"
+ "${FILESDIR}/${PN}-6.5.0-userscripts-loading.patch"
+)
python_check_deps() {
python_has_version "dev-python/html5lib[${PYTHON_USEDEP}]"