qt5-webengine: update to 5.15.4.
This commit is contained in:
parent
628ca3e775
commit
17919588cf
4 changed files with 522 additions and 130 deletions
372
srcpkgs/qt5-webengine/patches/0120-QTBUG-91773.patch
Normal file
372
srcpkgs/qt5-webengine/patches/0120-QTBUG-91773.patch
Normal file
|
@ -0,0 +1,372 @@
|
||||||
|
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
|
||||||
|
index 5597c69f9..2cd48907b 100644
|
||||||
|
--- a/src/core/web_contents_adapter.cpp
|
||||||
|
+++ b/src/core/web_contents_adapter.cpp
|
||||||
|
@@ -716,8 +716,7 @@ void WebContentsAdapter::load(const QWebEngineHttpRequest &request)
|
||||||
|
m_adapterClient->loadFinished(false, request.url(), false,
|
||||||
|
net::ERR_DISALLOWED_URL_SCHEME,
|
||||||
|
QCoreApplication::translate("WebContentsAdapter",
|
||||||
|
- "HTTP-POST data can only be sent over HTTP(S) protocol"),
|
||||||
|
- false);
|
||||||
|
+ "HTTP-POST data can only be sent over HTTP(S) protocol"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
params.post_data = network::ResourceRequestBody::CreateFromBytes(
|
||||||
|
@@ -773,7 +772,7 @@ void WebContentsAdapter::setContent(const QByteArray &data, const QString &mimeT
|
||||||
|
|
||||||
|
GURL dataUrlToLoad(urlString);
|
||||||
|
if (dataUrlToLoad.spec().size() > url::kMaxURLChars) {
|
||||||
|
- m_adapterClient->loadFinished(false, baseUrl, false, net::ERR_ABORTED, QString(), false);
|
||||||
|
+ m_adapterClient->loadFinished(false, baseUrl, false, net::ERR_ABORTED, QString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
content::NavigationController::LoadURLParams params((dataUrlToLoad));
|
||||||
|
@@ -1995,6 +1994,7 @@ void WebContentsAdapter::discard()
|
||||||
|
if (m_webContents->IsLoading()) {
|
||||||
|
m_webContentsDelegate->didFailLoad(m_webContentsDelegate->url(webContents()), net::Error::ERR_ABORTED,
|
||||||
|
QStringLiteral("Discarded"));
|
||||||
|
+ m_webContentsDelegate->DidStopLoading();
|
||||||
|
}
|
||||||
|
|
||||||
|
content::WebContents::CreateParams createParams(m_profileAdapter->profile());
|
||||||
|
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
|
||||||
|
index 267266d81..afc43806a 100644
|
||||||
|
--- a/src/core/web_contents_adapter_client.h
|
||||||
|
+++ b/src/core/web_contents_adapter_client.h
|
||||||
|
@@ -466,8 +466,7 @@ public:
|
||||||
|
virtual void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) = 0;
|
||||||
|
virtual void loadCommitted() = 0;
|
||||||
|
virtual void loadVisuallyCommitted() = 0;
|
||||||
|
- virtual void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode,
|
||||||
|
- const QString &errorDescription, bool triggersErrorPage) = 0;
|
||||||
|
+ virtual void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) = 0;
|
||||||
|
virtual void focusContainer() = 0;
|
||||||
|
virtual void unhandledKeyEvent(QKeyEvent *event) = 0;
|
||||||
|
virtual QSharedPointer<WebContentsAdapter>
|
||||||
|
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
|
||||||
|
index 1e92a46f8..f0e4130e8 100644
|
||||||
|
--- a/src/core/web_contents_delegate_qt.cpp
|
||||||
|
+++ b/src/core/web_contents_delegate_qt.cpp
|
||||||
|
@@ -259,14 +259,12 @@ void WebContentsDelegateQt::CloseContents(content::WebContents *source)
|
||||||
|
|
||||||
|
void WebContentsDelegateQt::LoadProgressChanged(double progress)
|
||||||
|
{
|
||||||
|
- QUrl current_url(m_viewClient->webContentsAdapter()->getNavigationEntryOriginalUrl(m_viewClient->webContentsAdapter()->currentNavigationEntryIndex()));
|
||||||
|
- int p = qMin(qRound(progress * 100), 100);
|
||||||
|
-
|
||||||
|
- if (!m_loadingErrorFrameList.isEmpty() || !m_loadProgressMap.contains(current_url) || m_loadProgressMap[current_url] == 100 || p == 100)
|
||||||
|
+ if (!m_loadingErrorFrameList.isEmpty() || !m_loadingInfo.isLoading()) // suppress signals that aren't between loadStarted and loadFinished
|
||||||
|
return;
|
||||||
|
|
||||||
|
- if (p > m_loadProgressMap[current_url]) { // ensure strict monotonic increase
|
||||||
|
- m_loadProgressMap[current_url] = p;
|
||||||
|
+ int p = qMin(qRound(progress * 100), 100);
|
||||||
|
+ if (p > m_loadingInfo.progress) { // ensure strict monotonic increase
|
||||||
|
+ m_loadingInfo.progress = p;
|
||||||
|
m_viewClient->loadProgressChanged(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -339,35 +337,21 @@ void WebContentsDelegateQt::RenderViewHostChanged(content::RenderViewHost *, con
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-void WebContentsDelegateQt::EmitLoadStarted(const QUrl &url, bool isErrorPage)
|
||||||
|
+void WebContentsDelegateQt::emitLoadStarted(bool isErrorPage)
|
||||||
|
{
|
||||||
|
- m_isDocumentEmpty = true;
|
||||||
|
- m_viewClient->loadStarted(url, isErrorPage);
|
||||||
|
- m_viewClient->updateNavigationActions();
|
||||||
|
-
|
||||||
|
- if ((url.hasFragment() || m_lastLoadedUrl.hasFragment())
|
||||||
|
- && url.adjusted(QUrl::RemoveFragment) == m_lastLoadedUrl.adjusted(QUrl::RemoveFragment)
|
||||||
|
- && !m_isNavigationCommitted) {
|
||||||
|
- m_loadProgressMap.insert(url, 100);
|
||||||
|
- m_lastLoadedUrl = url;
|
||||||
|
- m_viewClient->loadProgressChanged(100);
|
||||||
|
+ // only report first ever load start or separate one for error page only
|
||||||
|
+ if (!isErrorPage && m_loadingInfo.isLoading()) // already running
|
||||||
|
return;
|
||||||
|
- }
|
||||||
|
|
||||||
|
- if (!m_loadProgressMap.isEmpty()) {
|
||||||
|
- QMap<QUrl, int>::iterator it = m_loadProgressMap.begin();
|
||||||
|
- while (it != m_loadProgressMap.end()) {
|
||||||
|
- if (it.value() == 100) {
|
||||||
|
- it = m_loadProgressMap.erase(it);
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- ++it;
|
||||||
|
- }
|
||||||
|
+ m_isDocumentEmpty = true; // reset to default which may only be overridden on actual resource load complete
|
||||||
|
+ if (!isErrorPage) {
|
||||||
|
+ m_loadingInfo.progress = 0;
|
||||||
|
+ m_viewClient->loadStarted(m_loadingInfo.url, false);
|
||||||
|
+ m_viewClient->updateNavigationActions();
|
||||||
|
+ m_viewClient->loadProgressChanged(0);
|
||||||
|
+ } else {
|
||||||
|
+ m_viewClient->loadStarted(toQt(GURL(content::kUnreachableWebDataURL)), true);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- m_lastLoadedUrl = url;
|
||||||
|
- m_loadProgressMap.insert(url, 0);
|
||||||
|
- m_viewClient->loadProgressChanged(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebContentsDelegateQt::DidStartNavigation(content::NavigationHandle *navigation_handle)
|
||||||
|
@@ -375,34 +359,41 @@ void WebContentsDelegateQt::DidStartNavigation(content::NavigationHandle *naviga
|
||||||
|
if (!webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled))
|
||||||
|
navigation_handle->SetSilentlyIgnoreErrors();
|
||||||
|
|
||||||
|
- if (!navigation_handle->IsInMainFrame())
|
||||||
|
+ if (!navigation_handle->IsInMainFrame() || !web_contents()->IsLoadingToDifferentDocument())
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
m_loadingErrorFrameList.clear();
|
||||||
|
m_faviconManager->resetCandidates();
|
||||||
|
- EmitLoadStarted(toQt(navigation_handle->GetURL()));
|
||||||
|
+
|
||||||
|
+ m_loadingInfo.url = toQt(navigation_handle->GetURL());
|
||||||
|
+ // IsErrorPage is only set after navigation commit, so check it otherwise: error page shouldn't have navigation entry
|
||||||
|
+ bool isErrorPage = m_loadingInfo.triggersErrorPage && !navigation_handle->GetNavigationEntry();
|
||||||
|
+ emitLoadStarted(isErrorPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void WebContentsDelegateQt::EmitLoadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription, bool triggersErrorPage)
|
||||||
|
+void WebContentsDelegateQt::emitLoadFinished(bool isErrorPage)
|
||||||
|
{
|
||||||
|
- Q_ASSERT(!isErrorPage || webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled));
|
||||||
|
- Q_ASSERT((triggersErrorPage && webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled)) || !triggersErrorPage);
|
||||||
|
-
|
||||||
|
- // When error page enabled we don't need to send the error page load finished signal
|
||||||
|
- if (m_loadProgressMap[url] == 100)
|
||||||
|
+ if (!m_loadingInfo.isLoading()) // not currently running
|
||||||
|
return;
|
||||||
|
|
||||||
|
- m_lastLoadedUrl = url;
|
||||||
|
- m_loadProgressMap[url] = 100;
|
||||||
|
- m_isNavigationCommitted = false;
|
||||||
|
- m_viewClient->loadProgressChanged(100);
|
||||||
|
+ Q_ASSERT(!isErrorPage || webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled));
|
||||||
|
+ Q_ASSERT((m_loadingInfo.triggersErrorPage && webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled)) || !m_loadingInfo.triggersErrorPage);
|
||||||
|
+
|
||||||
|
+ if (!isErrorPage) {
|
||||||
|
+ if (m_loadingInfo.progress < 100) {
|
||||||
|
+ m_loadingInfo.progress = 100;
|
||||||
|
+ m_viewClient->loadProgressChanged(100);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- m_viewClient->loadFinished(success, url, isErrorPage, errorCode, errorDescription, triggersErrorPage);
|
||||||
|
- m_viewClient->updateNavigationActions();
|
||||||
|
+ m_viewClient->loadFinished(m_loadingInfo.success, m_loadingInfo.url, false, m_loadingInfo.errorCode, m_loadingInfo.errorDescription);
|
||||||
|
+ m_viewClient->updateNavigationActions();
|
||||||
|
+ } else {
|
||||||
|
+ m_viewClient->loadFinished(false, toQt(GURL(content::kUnreachableWebDataURL)), true, 0, QString());
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
-void WebContentsDelegateQt::EmitLoadCommitted()
|
||||||
|
+void WebContentsDelegateQt::emitLoadCommitted()
|
||||||
|
{
|
||||||
|
m_findTextHelper->handleLoadCommitted();
|
||||||
|
m_viewClient->loadCommitted();
|
||||||
|
@@ -422,8 +413,7 @@ void WebContentsDelegateQt::DidFinishNavigation(content::NavigationHandle *navig
|
||||||
|
profileAdapter->visitedLinksManager()->addUrl(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
- m_isNavigationCommitted = true;
|
||||||
|
- EmitLoadCommitted();
|
||||||
|
+ emitLoadCommitted();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Success is reported by DidFinishLoad, but DidFailLoad is now dead code and needs to be handled below
|
||||||
|
@@ -440,11 +430,11 @@ void WebContentsDelegateQt::DidFinishNavigation(content::NavigationHandle *navig
|
||||||
|
// Now report we are starting to load an error-page.
|
||||||
|
m_loadingErrorFrameList.append(navigation_handle->GetRenderFrameHost()->GetRoutingID());
|
||||||
|
m_faviconManager->resetCandidates();
|
||||||
|
- EmitLoadStarted(toQt(GURL(content::kUnreachableWebDataURL)), true);
|
||||||
|
+ emitLoadStarted(true);
|
||||||
|
|
||||||
|
// If it is already committed we will not see another DidFinishNavigation call or a DidFinishLoad call.
|
||||||
|
if (navigation_handle->HasCommitted())
|
||||||
|
- EmitLoadCommitted();
|
||||||
|
+ emitLoadCommitted();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -486,6 +476,9 @@ void WebContentsDelegateQt::DidStopLoading()
|
||||||
|
|
||||||
|
if (m_loadingState == LoadingState::Loading)
|
||||||
|
setLoadingState(LoadingState::Loaded);
|
||||||
|
+
|
||||||
|
+ emitLoadFinished();
|
||||||
|
+ m_loadingInfo.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebContentsDelegateQt::didFailLoad(const QUrl &url, int errorCode, const QString &errorDescription)
|
||||||
|
@@ -495,7 +488,11 @@ void WebContentsDelegateQt::didFailLoad(const QUrl &url, int errorCode, const QS
|
||||||
|
// Delay notifying failure until the error-page is done loading.
|
||||||
|
// Error-pages are not loaded on failures due to abort.
|
||||||
|
bool aborted = (errorCode == -3 /* ERR_ABORTED*/ );
|
||||||
|
- EmitLoadFinished(false /* success */ , url, false /* isErrorPage */, errorCode, errorDescription, errorPageEnabled && !aborted);
|
||||||
|
+ m_loadingInfo.success = false;
|
||||||
|
+ m_loadingInfo.url = url;
|
||||||
|
+ m_loadingInfo.errorCode = errorCode;
|
||||||
|
+ m_loadingInfo.errorDescription = errorDescription;
|
||||||
|
+ m_loadingInfo.triggersErrorPage = errorPageEnabled && !aborted;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebContentsDelegateQt::DidFailLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url, int error_code)
|
||||||
|
@@ -511,8 +508,7 @@ void WebContentsDelegateQt::DidFailLoad(content::RenderFrameHost* render_frame_h
|
||||||
|
Q_ASSERT(error_code == -3 /* ERR_ABORTED */);
|
||||||
|
m_loadingErrorFrameList.removeOne(render_frame_host->GetRoutingID());
|
||||||
|
m_viewClient->iconChanged(QUrl());
|
||||||
|
-
|
||||||
|
- EmitLoadFinished(false /* success */, toQt(validated_url), true /* isErrorPage */);
|
||||||
|
+ emitLoadFinished(/* isErrorPage = */true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Qt6: Consider getting rid of the error_description (Chromium already has)
|
||||||
|
@@ -532,7 +528,7 @@ void WebContentsDelegateQt::DidFinishLoad(content::RenderFrameHost* render_frame
|
||||||
|
// Trigger LoadFinished signal for main frame's error page only.
|
||||||
|
if (!render_frame_host->GetParent()) {
|
||||||
|
m_viewClient->iconChanged(QUrl());
|
||||||
|
- EmitLoadFinished(true /* success */, toQt(validated_url), true /* isErrorPage */);
|
||||||
|
+ emitLoadFinished(/* isErrorPage = */true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
@@ -550,7 +546,11 @@ void WebContentsDelegateQt::DidFinishLoad(content::RenderFrameHost* render_frame
|
||||||
|
int http_statuscode = entry ? entry->GetHttpStatusCode() : 0;
|
||||||
|
bool errorPageEnabled = webEngineSettings()->testAttribute(WebEngineSettings::ErrorPageEnabled);
|
||||||
|
bool triggersErrorPage = errorPageEnabled && (http_statuscode >= 400) && m_isDocumentEmpty;
|
||||||
|
- EmitLoadFinished(http_statuscode < 400, toQt(validated_url), false /* isErrorPage */, http_statuscode, QString(), triggersErrorPage);
|
||||||
|
+
|
||||||
|
+ m_loadingInfo.success = http_statuscode < 400;
|
||||||
|
+ m_loadingInfo.url = toQt(validated_url);
|
||||||
|
+ m_loadingInfo.errorCode = http_statuscode;
|
||||||
|
+ m_loadingInfo.triggersErrorPage = triggersErrorPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebContentsDelegateQt::DidUpdateFaviconURL(content::RenderFrameHost *render_frame_host, const std::vector<blink::mojom::FaviconURLPtr> &candidates)
|
||||||
|
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
|
||||||
|
index 5a3dff6e9..7149f6bff 100644
|
||||||
|
--- a/src/core/web_contents_delegate_qt.h
|
||||||
|
+++ b/src/core/web_contents_delegate_qt.h
|
||||||
|
@@ -216,9 +216,9 @@ private:
|
||||||
|
WindowOpenDisposition disposition, const gfx::Rect &initial_pos,
|
||||||
|
const QUrl &url,
|
||||||
|
bool user_gesture);
|
||||||
|
- void EmitLoadStarted(const QUrl &url, bool isErrorPage = false);
|
||||||
|
- void EmitLoadFinished(bool success, const QUrl &url, bool isErrorPage = false, int errorCode = 0, const QString &errorDescription = QString(), bool triggersErrorPage = false);
|
||||||
|
- void EmitLoadCommitted();
|
||||||
|
+ void emitLoadStarted(bool isErrorPage = false);
|
||||||
|
+ void emitLoadFinished(bool isErrorPage = false);
|
||||||
|
+ void emitLoadCommitted();
|
||||||
|
|
||||||
|
LoadingState determineLoadingState(content::WebContents *contents);
|
||||||
|
void setLoadingState(LoadingState state);
|
||||||
|
@@ -242,9 +242,17 @@ private:
|
||||||
|
int m_desktopStreamCount = 0;
|
||||||
|
mutable bool m_pendingUrlUpdate = false;
|
||||||
|
|
||||||
|
- QMap<QUrl, int> m_loadProgressMap;
|
||||||
|
- QUrl m_lastLoadedUrl;
|
||||||
|
- bool m_isNavigationCommitted = false;
|
||||||
|
+ struct LoadingInfo {
|
||||||
|
+ bool success = false;
|
||||||
|
+ int progress = -1;
|
||||||
|
+ bool isLoading() const { return progress >= 0; }
|
||||||
|
+ QUrl url;
|
||||||
|
+ int errorCode = 0;
|
||||||
|
+ QString errorDescription;
|
||||||
|
+ bool triggersErrorPage = false;
|
||||||
|
+ void clear() { *this = LoadingInfo(); }
|
||||||
|
+ } m_loadingInfo;
|
||||||
|
+
|
||||||
|
bool m_isDocumentEmpty = true;
|
||||||
|
base::WeakPtrFactory<WebContentsDelegateQt> m_weakPtrFactory { this };
|
||||||
|
};
|
||||||
|
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
|
||||||
|
index 6ab1c97cb..1de7f1c7f 100644
|
||||||
|
--- a/src/webengine/api/qquickwebengineview.cpp
|
||||||
|
+++ b/src/webengine/api/qquickwebengineview.cpp
|
||||||
|
@@ -496,11 +496,9 @@ Q_STATIC_ASSERT(static_cast<int>(WebEngineError::NoErrorDomain) == static_cast<i
|
||||||
|
Q_STATIC_ASSERT(static_cast<int>(WebEngineError::CertificateErrorDomain) == static_cast<int>(QQuickWebEngineView::CertificateErrorDomain));
|
||||||
|
Q_STATIC_ASSERT(static_cast<int>(WebEngineError::DnsErrorDomain) == static_cast<int>(QQuickWebEngineView::DnsErrorDomain));
|
||||||
|
|
||||||
|
-void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode,
|
||||||
|
- const QString &errorDescription, bool triggersErrorPage)
|
||||||
|
+void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription)
|
||||||
|
{
|
||||||
|
Q_Q(QQuickWebEngineView);
|
||||||
|
- Q_UNUSED(triggersErrorPage);
|
||||||
|
|
||||||
|
if (isErrorPage) {
|
||||||
|
#if QT_CONFIG(webengine_testsupport)
|
||||||
|
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
|
||||||
|
index ebe55c345..ec535298b 100644
|
||||||
|
--- a/src/webengine/api/qquickwebengineview_p_p.h
|
||||||
|
+++ b/src/webengine/api/qquickwebengineview_p_p.h
|
||||||
|
@@ -116,8 +116,7 @@ public:
|
||||||
|
void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) override;
|
||||||
|
void loadCommitted() override;
|
||||||
|
void loadVisuallyCommitted() override;
|
||||||
|
- void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode,
|
||||||
|
- const QString &errorDescription, bool triggersErrorPage) override;
|
||||||
|
+ void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) override;
|
||||||
|
void focusContainer() override;
|
||||||
|
void unhandledKeyEvent(QKeyEvent *event) override;
|
||||||
|
QSharedPointer<QtWebEngineCore::WebContentsAdapter>
|
||||||
|
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
|
||||||
|
index e08afed44..b32c15039 100644
|
||||||
|
--- a/src/webenginewidgets/api/qwebenginepage.cpp
|
||||||
|
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
|
||||||
|
@@ -282,28 +282,20 @@ void QWebEnginePagePrivate::loadStarted(const QUrl &provisionalUrl, bool isError
|
||||||
|
QTimer::singleShot(0, q, &QWebEnginePage::loadStarted);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void QWebEnginePagePrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode,
|
||||||
|
- const QString &errorDescription, bool triggersErrorPage)
|
||||||
|
+void QWebEnginePagePrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription)
|
||||||
|
{
|
||||||
|
Q_Q(QWebEnginePage);
|
||||||
|
Q_UNUSED(url);
|
||||||
|
Q_UNUSED(errorCode);
|
||||||
|
Q_UNUSED(errorDescription);
|
||||||
|
|
||||||
|
- if (isErrorPage) {
|
||||||
|
- QTimer::singleShot(0, q, [q](){
|
||||||
|
- emit q->loadFinished(false);
|
||||||
|
- });
|
||||||
|
+ if (isErrorPage)
|
||||||
|
return;
|
||||||
|
- }
|
||||||
|
|
||||||
|
isLoading = false;
|
||||||
|
- Q_ASSERT((success && !triggersErrorPage) || !success);
|
||||||
|
- if (!triggersErrorPage) {
|
||||||
|
- QTimer::singleShot(0, q, [q, success](){
|
||||||
|
- emit q->loadFinished(success);
|
||||||
|
- });
|
||||||
|
- }
|
||||||
|
+ QTimer::singleShot(0, q, [q, success](){
|
||||||
|
+ emit q->loadFinished(success);
|
||||||
|
+ });
|
||||||
|
}
|
||||||
|
|
||||||
|
void QWebEnginePagePrivate::didPrintPageToPdf(const QString &filePath, bool success)
|
||||||
|
diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h
|
||||||
|
index 82ce99503..ae3ab5d25 100644
|
||||||
|
--- a/src/webenginewidgets/api/qwebenginepage_p.h
|
||||||
|
+++ b/src/webenginewidgets/api/qwebenginepage_p.h
|
||||||
|
@@ -107,8 +107,7 @@ public:
|
||||||
|
void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) override;
|
||||||
|
void loadCommitted() override { }
|
||||||
|
void loadVisuallyCommitted() override { }
|
||||||
|
- void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode,
|
||||||
|
- const QString &errorDescription, bool triggersErrorPage) override;
|
||||||
|
+ void loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) override;
|
||||||
|
void focusContainer() override;
|
||||||
|
void unhandledKeyEvent(QKeyEvent *event) override;
|
||||||
|
QSharedPointer<QtWebEngineCore::WebContentsAdapter>
|
144
srcpkgs/qt5-webengine/patches/0121-glibc-2.33.patch
Normal file
144
srcpkgs/qt5-webengine/patches/0121-glibc-2.33.patch
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
# Patch made by Kevin Kofler <Kevin@tigcc.ticalc.org>
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1904652
|
||||||
|
|
||||||
|
diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
|
||||||
|
--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc 2020-11-07 02:22:36.000000000 +0100
|
||||||
|
+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc 2021-01-20 02:14:53.066223906 +0100
|
||||||
|
@@ -257,6 +257,18 @@
|
||||||
|
return RestrictKillTarget(current_pid, sysno);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if defined(__NR_newfstatat)
|
||||||
|
+ if (sysno == __NR_newfstatat) {
|
||||||
|
+ return RewriteFstatatSIGSYS();
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#if defined(__NR_fstatat64)
|
||||||
|
+ if (sysno == __NR_fstatat64) {
|
||||||
|
+ return RewriteFstatatSIGSYS();
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
if (SyscallSets::IsFileSystem(sysno) ||
|
||||||
|
SyscallSets::IsCurrentDirectory(sysno)) {
|
||||||
|
return Error(fs_denied_errno);
|
||||||
|
diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
|
||||||
|
--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc 2020-11-07 02:22:36.000000000 +0100
|
||||||
|
+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc 2021-01-22 19:02:55.651668257 +0100
|
||||||
|
@@ -6,6 +6,8 @@
|
||||||
|
|
||||||
|
#include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h"
|
||||||
|
|
||||||
|
+#include <errno.h>
|
||||||
|
+#include <fcntl.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
@@ -355,6 +357,35 @@
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
+intptr_t SIGSYSFstatatHandler(const struct arch_seccomp_data& args,
|
||||||
|
+ void* aux) {
|
||||||
|
+ switch (args.nr) {
|
||||||
|
+#if defined(__NR_newfstatat)
|
||||||
|
+ case __NR_newfstatat:
|
||||||
|
+#endif
|
||||||
|
+#if defined(__NR_fstatat64)
|
||||||
|
+ case __NR_fstatat64:
|
||||||
|
+#endif
|
||||||
|
+#if defined(__NR_newfstatat) || defined(__NR_fstatat64)
|
||||||
|
+ if (*reinterpret_cast<const char *>(args.args[1]) == '\0'
|
||||||
|
+ && args.args[3] == static_cast<uint64_t>(AT_EMPTY_PATH)) {
|
||||||
|
+ return sandbox::sys_fstat64(static_cast<int>(args.args[0]),
|
||||||
|
+ reinterpret_cast<struct stat64 *>(args.args[2]));
|
||||||
|
+ } else {
|
||||||
|
+ errno = EACCES;
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ CrashSIGSYS_Handler(args, aux);
|
||||||
|
+
|
||||||
|
+ // Should never be reached.
|
||||||
|
+ RAW_CHECK(false);
|
||||||
|
+ return -ENOSYS;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
bpf_dsl::ResultExpr CrashSIGSYS() {
|
||||||
|
return bpf_dsl::Trap(CrashSIGSYS_Handler, NULL);
|
||||||
|
}
|
||||||
|
@@ -387,6 +418,10 @@
|
||||||
|
return bpf_dsl::Trap(SIGSYSSchedHandler, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
+bpf_dsl::ResultExpr RewriteFstatatSIGSYS() {
|
||||||
|
+ return bpf_dsl::Trap(SIGSYSFstatatHandler, NULL);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void AllocateCrashKeys() {
|
||||||
|
#if !defined(OS_NACL_NONSFI)
|
||||||
|
if (seccomp_crash_key)
|
||||||
|
diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
|
||||||
|
--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h 2020-11-07 02:22:36.000000000 +0100
|
||||||
|
+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h 2021-01-20 02:11:04.583714199 +0100
|
||||||
|
@@ -62,6 +62,10 @@
|
||||||
|
// sched_setparam(), sched_setscheduler()
|
||||||
|
SANDBOX_EXPORT intptr_t SIGSYSSchedHandler(const arch_seccomp_data& args,
|
||||||
|
void* aux);
|
||||||
|
+// If the fstatat syscall is actually a disguised fstat, calls the regular fstat
|
||||||
|
+// syscall, otherwise, crashes in the same way as CrashSIGSYS_Handler.
|
||||||
|
+SANDBOX_EXPORT intptr_t SIGSYSFstatatHandler(const struct arch_seccomp_data& args,
|
||||||
|
+ void* aux);
|
||||||
|
|
||||||
|
// Variants of the above functions for use with bpf_dsl.
|
||||||
|
SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYS();
|
||||||
|
@@ -72,6 +76,7 @@
|
||||||
|
SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYSFutex();
|
||||||
|
SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYSPtrace();
|
||||||
|
SANDBOX_EXPORT bpf_dsl::ResultExpr RewriteSchedSIGSYS();
|
||||||
|
+SANDBOX_EXPORT bpf_dsl::ResultExpr RewriteFstatatSIGSYS();
|
||||||
|
|
||||||
|
// Allocates a crash key so that Seccomp information can be recorded.
|
||||||
|
void AllocateCrashKeys();
|
||||||
|
diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc
|
||||||
|
--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc 2020-11-07 02:22:36.000000000 +0100
|
||||||
|
+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc 2021-01-20 02:41:12.033133269 +0100
|
||||||
|
@@ -261,4 +261,13 @@
|
||||||
|
|
||||||
|
#endif // defined(MEMORY_SANITIZER)
|
||||||
|
|
||||||
|
+SANDBOX_EXPORT int sys_fstat64(int fd, struct stat64 *buf)
|
||||||
|
+{
|
||||||
|
+#if defined(__NR_fstat64)
|
||||||
|
+ return syscall(__NR_fstat64, fd, buf);
|
||||||
|
+#else
|
||||||
|
+ return syscall(__NR_fstat, fd, buf);
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
} // namespace sandbox
|
||||||
|
diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h
|
||||||
|
--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h 2020-11-07 02:22:36.000000000 +0100
|
||||||
|
+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h 2021-01-20 02:40:26.499827829 +0100
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
struct rlimit64;
|
||||||
|
struct cap_hdr;
|
||||||
|
struct cap_data;
|
||||||
|
+struct stat64;
|
||||||
|
|
||||||
|
namespace sandbox {
|
||||||
|
|
||||||
|
@@ -84,6 +85,9 @@
|
||||||
|
const struct sigaction* act,
|
||||||
|
struct sigaction* oldact);
|
||||||
|
|
||||||
|
+// Recent glibc rewrites fstat to fstatat.
|
||||||
|
+SANDBOX_EXPORT int sys_fstat64(int fd, struct stat64 *buf);
|
||||||
|
+
|
||||||
|
} // namespace sandbox
|
||||||
|
|
||||||
|
#endif // SANDBOX_LINUX_SERVICES_SYSCALL_WRAPPERS_H_
|
|
@ -1,124 +0,0 @@
|
||||||
From 199ea00a9eea13315a652c62778738629185b059 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
|
||||||
Date: Wed, 10 Mar 2021 17:14:27 +0100
|
|
||||||
Subject: [PATCH] Fix normalization of app locales
|
|
||||||
|
|
||||||
Use the internal Chromium routine to get the app locale Chromium
|
|
||||||
expects.
|
|
||||||
|
|
||||||
Fixes: QTBUG-91715
|
|
||||||
Change-Id: I5042eb066cb6879ad69628959912f2841867b4e8
|
|
||||||
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
|
|
||||||
index e13ecd8..c2c78ff 100644
|
|
||||||
--- a/src/core/content_browser_client_qt.cpp
|
|
||||||
+++ b/src/core/content_browser_client_qt.cpp
|
|
||||||
@@ -471,7 +471,12 @@
|
|
||||||
|
|
||||||
std::string ContentBrowserClientQt::GetApplicationLocale()
|
|
||||||
{
|
|
||||||
- return WebEngineLibraryInfo::getApplicationLocale();
|
|
||||||
+ std::string bcp47Name = QLocale().bcp47Name().toStdString();
|
|
||||||
+ if (m_cachedQtLocale != bcp47Name) {
|
|
||||||
+ m_cachedQtLocale = bcp47Name;
|
|
||||||
+ m_appLocale = WebEngineLibraryInfo::getApplicationLocale();
|
|
||||||
+ }
|
|
||||||
+ return m_appLocale;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string ContentBrowserClientQt::GetAcceptLangs(content::BrowserContext *context)
|
|
||||||
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h
|
|
||||||
index 7c8aa3a..1ccd292 100644
|
|
||||||
--- a/src/core/content_browser_client_qt.h
|
|
||||||
+++ b/src/core/content_browser_client_qt.h
|
|
||||||
@@ -269,6 +269,8 @@
|
|
||||||
|
|
||||||
private:
|
|
||||||
scoped_refptr<ShareGroupQtQuick> m_shareGroupQtQuick;
|
|
||||||
+ std::string m_appLocale;
|
|
||||||
+ std::string m_cachedQtLocale;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace QtWebEngineCore
|
|
||||||
diff --git a/src/core/web_engine_library_info.cpp b/src/core/web_engine_library_info.cpp
|
|
||||||
index 2ad5b75..09a4141 100644
|
|
||||||
--- a/src/core/web_engine_library_info.cpp
|
|
||||||
+++ b/src/core/web_engine_library_info.cpp
|
|
||||||
@@ -46,6 +46,7 @@
|
|
||||||
#include "components/spellcheck/spellcheck_buildflags.h"
|
|
||||||
#include "content/public/common/content_paths.h"
|
|
||||||
#include "sandbox/policy/switches.h"
|
|
||||||
+#include "ui/base/l10n/l10n_util.h"
|
|
||||||
#include "ui/base/ui_base_paths.h"
|
|
||||||
#include "ui/base/ui_base_switches.h"
|
|
||||||
|
|
||||||
@@ -353,18 +354,15 @@
|
|
||||||
std::string WebEngineLibraryInfo::getApplicationLocale()
|
|
||||||
{
|
|
||||||
base::CommandLine *parsedCommandLine = base::CommandLine::ForCurrentProcess();
|
|
||||||
- if (!parsedCommandLine->HasSwitch(switches::kLang)) {
|
|
||||||
+ if (parsedCommandLine->HasSwitch(switches::kLang)) {
|
|
||||||
+ return parsedCommandLine->GetSwitchValueASCII(switches::kLang);
|
|
||||||
+ } else {
|
|
||||||
const QString &locale = QLocale().bcp47Name();
|
|
||||||
-
|
|
||||||
- // QLocale::bcp47Name returns "en" for American English locale. Chromium requires the "US" suffix
|
|
||||||
- // to clarify the dialect and ignores the shorter version.
|
|
||||||
- if (locale == "en")
|
|
||||||
- return "en-US";
|
|
||||||
-
|
|
||||||
- return locale.toStdString();
|
|
||||||
+ std::string resolvedLocale;
|
|
||||||
+ if (l10n_util::CheckAndResolveLocale(locale.toStdString(), &resolvedLocale))
|
|
||||||
+ return resolvedLocale;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- return parsedCommandLine->GetSwitchValueASCII(switches::kLang);
|
|
||||||
+ return "en-US";
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
|
||||||
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
|
|
||||||
index 0219863..bf2c28a 100644
|
|
||||||
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
|
|
||||||
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
|
|
||||||
@@ -123,6 +123,7 @@
|
|
||||||
void doNotBreakLayout();
|
|
||||||
|
|
||||||
void changeLocale();
|
|
||||||
+ void mixLangLocale();
|
|
||||||
void inputMethodsTextFormat_data();
|
|
||||||
void inputMethodsTextFormat();
|
|
||||||
void keyboardEvents();
|
|
||||||
@@ -1210,6 +1211,29 @@
|
|
||||||
QCOMPARE(errorLines.first().toUtf8(), QByteArrayLiteral("Die Website ist nicht erreichbar"));
|
|
||||||
}
|
|
||||||
|
|
||||||
+void tst_QWebEngineView::mixLangLocale()
|
|
||||||
+{
|
|
||||||
+ for (QString locale : { "en_DK", "de_CH", "eu_ES" }) {
|
|
||||||
+ QLocale::setDefault(locale);
|
|
||||||
+ QWebEngineView view;
|
|
||||||
+ QSignalSpy loadSpy(&view, &QWebEngineView::loadFinished);
|
|
||||||
+
|
|
||||||
+ bool terminated = false;
|
|
||||||
+ auto sc = connect(view.page(), &QWebEnginePage::renderProcessTerminated, [&] () { terminated = true; });
|
|
||||||
+
|
|
||||||
+ view.load(QUrl("qrc:///resources/dummy.html"));
|
|
||||||
+ QTRY_VERIFY(terminated || loadSpy.count() == 1);
|
|
||||||
+
|
|
||||||
+ QVERIFY2(!terminated,
|
|
||||||
+ qPrintable(QString("Locale [%1] terminated: %2, loaded: %3").arg(locale).arg(terminated).arg(loadSpy.count())));
|
|
||||||
+ QVERIFY(loadSpy.first().first().toBool());
|
|
||||||
+
|
|
||||||
+ QString content = toPlainTextSync(view.page());
|
|
||||||
+ QVERIFY2(!content.isEmpty() && content.contains("test content"), qPrintable(content));
|
|
||||||
+ }
|
|
||||||
+ QLocale::setDefault(QLocale("en"));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void tst_QWebEngineView::inputMethodsTextFormat_data()
|
|
||||||
{
|
|
||||||
QTest::addColumn<QString>("string");
|
|
|
@ -1,9 +1,9 @@
|
||||||
# Template file for 'qt5-webengine'
|
# Template file for 'qt5-webengine'
|
||||||
pkgname=qt5-webengine
|
pkgname=qt5-webengine
|
||||||
version=5.15.3
|
version=5.15.4
|
||||||
revision=2
|
revision=1
|
||||||
_commit=a059e7404a6db799f4da0ad696e65ae9c854b4b0
|
_commit=0d4ca9cfb0d6e538172005e1c4b0b3a021b1c18c
|
||||||
_chromium_commit=d9d9e606cb34b1b4ac0f44de132b1eb10763f1f6
|
_chromium_commit=3f594ea1afb8b18c864715a796ef21099d432a13
|
||||||
archs="x86_64* i686* armv[67]* ppc64* aarch64*"
|
archs="x86_64* i686* armv[67]* ppc64* aarch64*"
|
||||||
wrksrc="qtwebengine-${_commit}"
|
wrksrc="qtwebengine-${_commit}"
|
||||||
build_style=qmake
|
build_style=qmake
|
||||||
|
@ -31,8 +31,8 @@ license="GPL-3.0-or-later, LGPL-3.0-or-later"
|
||||||
homepage="https://qt.io/"
|
homepage="https://qt.io/"
|
||||||
distfiles="https://github.com/qt/qtwebengine/archive/${_commit}.tar.gz
|
distfiles="https://github.com/qt/qtwebengine/archive/${_commit}.tar.gz
|
||||||
https://github.com/qt/qtwebengine-chromium/archive/${_chromium_commit}.tar.gz"
|
https://github.com/qt/qtwebengine-chromium/archive/${_chromium_commit}.tar.gz"
|
||||||
checksum="8e86257d25a641939d50c14de2049b384c371fcb70a60a289dc5426be0423b40
|
checksum="cea995e14c599c0c46b53b9938fd16f2360b639bf77e88a28ea26f518bb7b578
|
||||||
ee97e569529a60729e3c6b7317011fd2cc40600079e90c4afa2e5ea9edcd58ef"
|
fa0cab27cc32284f5af227a3dabde05ed6755f06641db6a6ca1c66848b10f715"
|
||||||
patch_args="-Np1"
|
patch_args="-Np1"
|
||||||
|
|
||||||
no_generic_pkgconfig_link=yes
|
no_generic_pkgconfig_link=yes
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue