mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-21 10:15:12 +03:00
- chromium security upgrade - patch qtwebengine with most recent 5.15 commit - bump module version to 5.15.8
397 lines
14 KiB
Diff
397 lines
14 KiB
Diff
From f0120e41bba4ae68ba842546ea519b7b37939eb7 Mon Sep 17 00:00:00 2001
|
|
From: Michal Klocek <michal.klocek@qt.io>
|
|
Date: Wed, 18 Jan 2023 16:35:25 +0100
|
|
Subject: [PATCH] Move out GetInProcessGpuShareGroup form content browser
|
|
client
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Keeping the GetInProcessGpuShareGroup in content browser client
|
|
creates dependency from gpu_child_thread to content browser,
|
|
however gn build tree asserts when content/public/gpu depends on
|
|
content/public/browser as it breaks intended components dependency.
|
|
|
|
This worked so far as required headers in content browser client
|
|
got generated on time despite of missing dependency.
|
|
|
|
Fix the dependency tree and move the problematic function into
|
|
the content gpu client.
|
|
|
|
This change moves only code around.
|
|
|
|
Change-Id: Iedcbc8c3c7d1754d1937e6b2c2a470c0e489a597
|
|
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
|
---
|
|
src/core/compositor/content_gpu_client_qt.cpp | 135 +++++++++++++++++-
|
|
src/core/compositor/content_gpu_client_qt.h | 6 +
|
|
src/core/content_browser_client_qt.cpp | 105 --------------
|
|
src/core/content_browser_client_qt.h | 10 --
|
|
4 files changed, 137 insertions(+), 119 deletions(-)
|
|
|
|
diff --git a/src/core/compositor/content_gpu_client_qt.cpp b/src/core/compositor/content_gpu_client_qt.cpp
|
|
index f934979a0..8d7d5bce5 100644
|
|
--- a/src/core/compositor/content_gpu_client_qt.cpp
|
|
+++ b/src/core/compositor/content_gpu_client_qt.cpp
|
|
@@ -38,22 +38,149 @@
|
|
****************************************************************************/
|
|
|
|
#include "content_gpu_client_qt.h"
|
|
-
|
|
#include "web_engine_context.h"
|
|
+#include "ui/gl/gl_share_group.h"
|
|
+#include "ui/gl/gl_context.h"
|
|
+#include "ui/gl/gl_implementation.h"
|
|
+#include "ui/gl/gpu_timing.h"
|
|
+
|
|
+#if QT_CONFIG(opengl)
|
|
+#include <QOpenGLContext>
|
|
+#include <QOpenGLExtraFunctions>
|
|
+#endif
|
|
+
|
|
+#include <QGuiApplication>
|
|
+#include <qpa/qplatformnativeinterface.h>
|
|
+
|
|
+QT_BEGIN_NAMESPACE
|
|
+Q_GUI_EXPORT QOpenGLContext *qt_gl_global_share_context();
|
|
+QT_END_NAMESPACE
|
|
|
|
namespace QtWebEngineCore {
|
|
|
|
-ContentGpuClientQt::ContentGpuClientQt()
|
|
+class QtShareGLContext : public gl::GLContext
|
|
{
|
|
-}
|
|
+public:
|
|
+ QtShareGLContext(QOpenGLContext *qtContext) : gl::GLContext(0), m_handle(0)
|
|
+ {
|
|
+ QString platform = qApp->platformName().toLower();
|
|
+ QPlatformNativeInterface *pni = QGuiApplication::platformNativeInterface();
|
|
+ if (platform == QLatin1String("xcb") || platform == QLatin1String("offscreen")) {
|
|
+ if (gl::GetGLImplementation() == gl::kGLImplementationEGLGLES2)
|
|
+ m_handle =
|
|
+ pni->nativeResourceForContext(QByteArrayLiteral("eglcontext"), qtContext);
|
|
+ else
|
|
+ m_handle =
|
|
+ pni->nativeResourceForContext(QByteArrayLiteral("glxcontext"), qtContext);
|
|
+ } else if (platform == QLatin1String("cocoa"))
|
|
+ m_handle = pni->nativeResourceForContext(QByteArrayLiteral("cglcontextobj"), qtContext);
|
|
+ else if (platform == QLatin1String("qnx"))
|
|
+ m_handle = pni->nativeResourceForContext(QByteArrayLiteral("eglcontext"), qtContext);
|
|
+ else if (platform == QLatin1String("eglfs") || platform == QLatin1String("wayland")
|
|
+ || platform == QLatin1String("wayland-egl"))
|
|
+ m_handle = pni->nativeResourceForContext(QByteArrayLiteral("eglcontext"), qtContext);
|
|
+ else if (platform == QLatin1String("windows")) {
|
|
+ if (gl::GetGLImplementation() == gl::kGLImplementationEGLGLES2)
|
|
+ m_handle =
|
|
+ pni->nativeResourceForContext(QByteArrayLiteral("eglContext"), qtContext);
|
|
+ else
|
|
+ m_handle = pni->nativeResourceForContext(QByteArrayLiteral("renderingcontext"),
|
|
+ qtContext);
|
|
+ } else {
|
|
+ qFatal("%s platform not yet supported", platform.toLatin1().constData());
|
|
+ // Add missing platforms once they work.
|
|
+ Q_UNREACHABLE();
|
|
+ }
|
|
+ }
|
|
+
|
|
+ void *GetHandle() override { return m_handle; }
|
|
+ unsigned int CheckStickyGraphicsResetStatusImpl() override
|
|
+ {
|
|
+#if QT_CONFIG(opengl)
|
|
+ if (QOpenGLContext *context = qt_gl_global_share_context()) {
|
|
+ if (context->format().testOption(QSurfaceFormat::ResetNotification))
|
|
+ return context->extraFunctions()->glGetGraphicsResetStatus();
|
|
+ }
|
|
+#endif
|
|
+ return 0 /*GL_NO_ERROR*/;
|
|
+ }
|
|
+
|
|
+ // We don't care about the rest, this context shouldn't be used except for its handle.
|
|
+ bool Initialize(gl::GLSurface *, const gl::GLContextAttribs &) override
|
|
+ {
|
|
+ Q_UNREACHABLE();
|
|
+ return false;
|
|
+ }
|
|
+ bool MakeCurrentImpl(gl::GLSurface *) override
|
|
+ {
|
|
+ Q_UNREACHABLE();
|
|
+ return false;
|
|
+ }
|
|
+ void ReleaseCurrent(gl::GLSurface *) override
|
|
+ {
|
|
+ Q_UNREACHABLE();
|
|
+ }
|
|
+ bool IsCurrent(gl::GLSurface *) override
|
|
+ {
|
|
+ Q_UNREACHABLE();
|
|
+ return false;
|
|
+ }
|
|
+ scoped_refptr<gl::GPUTimingClient> CreateGPUTimingClient() override
|
|
+ {
|
|
+ return nullptr;
|
|
+ }
|
|
+ const gfx::ExtensionSet &GetExtensions() override
|
|
+ {
|
|
+ static const gfx::ExtensionSet s_emptySet;
|
|
+ return s_emptySet;
|
|
+ }
|
|
+ void ResetExtensions() override { }
|
|
+
|
|
+private:
|
|
+ void *m_handle;
|
|
+};
|
|
|
|
-ContentGpuClientQt::~ContentGpuClientQt()
|
|
+class ShareGroupQtQuick : public gl::GLShareGroup
|
|
{
|
|
+public:
|
|
+ gl::GLContext *GetContext() override { return m_shareContextQtQuick.get(); }
|
|
+ void AboutToAddFirstContext() override;
|
|
+
|
|
+private:
|
|
+ scoped_refptr<QtShareGLContext> m_shareContextQtQuick;
|
|
+};
|
|
+
|
|
+void ShareGroupQtQuick::AboutToAddFirstContext()
|
|
+{
|
|
+#if QT_CONFIG(opengl)
|
|
+ // This currently has to be setup by ::main in all applications using QQuickWebEngineView
|
|
+ // with de legated rendering.
|
|
+ QOpenGLContext *shareContext = qt_gl_global_share_context();
|
|
+ if (!shareContext) {
|
|
+ qFatal("QWebEngine: OpenGL resource sharing is not set up in QtQuick. Please make sure "
|
|
+ "to"
|
|
+ "call QtWebEngine::initialize() in your main() function before QCoreApplication "
|
|
+ "is "
|
|
+ "created.");
|
|
+ }
|
|
+ m_shareContextQtQuick = new QtShareGLContext(shareContext);
|
|
+#endif
|
|
}
|
|
|
|
+ContentGpuClientQt::ContentGpuClientQt() { }
|
|
+
|
|
+ContentGpuClientQt::~ContentGpuClientQt() { }
|
|
+
|
|
gpu::SyncPointManager *ContentGpuClientQt::GetSyncPointManager()
|
|
{
|
|
return WebEngineContext::syncPointManager();
|
|
}
|
|
|
|
+gl::GLShareGroup *ContentGpuClientQt::GetInProcessGpuShareGroup()
|
|
+{
|
|
+ if (!m_shareGroupQtQuick.get())
|
|
+ m_shareGroupQtQuick = new ShareGroupQtQuick;
|
|
+ return m_shareGroupQtQuick.get();
|
|
+}
|
|
+
|
|
} // namespace
|
|
diff --git a/src/core/compositor/content_gpu_client_qt.h b/src/core/compositor/content_gpu_client_qt.h
|
|
index d7ad43881..5288c65bd 100644
|
|
--- a/src/core/compositor/content_gpu_client_qt.h
|
|
+++ b/src/core/compositor/content_gpu_client_qt.h
|
|
@@ -43,6 +43,8 @@
|
|
|
|
namespace QtWebEngineCore {
|
|
|
|
+class ShareGroupQtQuick;
|
|
+
|
|
class ContentGpuClientQt : public content::ContentGpuClient {
|
|
public:
|
|
explicit ContentGpuClientQt();
|
|
@@ -50,6 +52,10 @@ public:
|
|
|
|
// content::ContentGpuClient implementation.
|
|
gpu::SyncPointManager *GetSyncPointManager() override;
|
|
+ gl::GLShareGroup *GetInProcessGpuShareGroup() override;
|
|
+
|
|
+private:
|
|
+ scoped_refptr<ShareGroupQtQuick> m_shareGroupQtQuick;
|
|
};
|
|
|
|
}
|
|
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
|
|
index f3eccb921..0a444a277 100644
|
|
--- a/src/core/content_browser_client_qt.cpp
|
|
+++ b/src/core/content_browser_client_qt.cpp
|
|
@@ -80,7 +80,6 @@
|
|
#include "ui/base/ui_base_switches.h"
|
|
#include "ui/gl/gl_context.h"
|
|
#include "ui/gl/gl_implementation.h"
|
|
-#include "ui/gl/gl_share_group.h"
|
|
#include "ui/gl/gpu_timing.h"
|
|
#include "url/url_util_qt.h"
|
|
|
|
@@ -118,11 +117,6 @@
|
|
#include "api/qwebenginecookiestore.h"
|
|
#include "api/qwebenginecookiestore_p.h"
|
|
|
|
-#if QT_CONFIG(opengl)
|
|
-#include <QOpenGLContext>
|
|
-#include <QOpenGLExtraFunctions>
|
|
-#endif
|
|
-
|
|
#if QT_CONFIG(webengine_geolocation)
|
|
#include "base/memory/ptr_util.h"
|
|
#include "location_provider_qt.h"
|
|
@@ -179,11 +173,6 @@
|
|
|
|
#include <QGuiApplication>
|
|
#include <QStandardPaths>
|
|
-#include <qpa/qplatformnativeinterface.h>
|
|
-
|
|
-QT_BEGIN_NAMESPACE
|
|
-Q_GUI_EXPORT QOpenGLContext *qt_gl_global_share_context();
|
|
-QT_END_NAMESPACE
|
|
|
|
// Implement IsHandledProtocol as declared in //url/url_util_qt.h.
|
|
namespace url {
|
|
@@ -231,93 +220,6 @@ void MaybeAddThrottle(
|
|
throttles->push_back(std::move(maybe_throttle));
|
|
}
|
|
|
|
-class QtShareGLContext : public gl::GLContext {
|
|
-public:
|
|
- QtShareGLContext(QOpenGLContext *qtContext)
|
|
- : gl::GLContext(0)
|
|
- , m_handle(0)
|
|
- {
|
|
- QString platform = qApp->platformName().toLower();
|
|
- QPlatformNativeInterface *pni = QGuiApplication::platformNativeInterface();
|
|
- if (platform == QLatin1String("xcb") || platform == QLatin1String("offscreen")) {
|
|
- if (gl::GetGLImplementation() == gl::kGLImplementationEGLGLES2)
|
|
- m_handle = pni->nativeResourceForContext(QByteArrayLiteral("eglcontext"), qtContext);
|
|
- else
|
|
- m_handle = pni->nativeResourceForContext(QByteArrayLiteral("glxcontext"), qtContext);
|
|
- } else if (platform == QLatin1String("cocoa"))
|
|
- m_handle = pni->nativeResourceForContext(QByteArrayLiteral("cglcontextobj"), qtContext);
|
|
- else if (platform == QLatin1String("qnx"))
|
|
- m_handle = pni->nativeResourceForContext(QByteArrayLiteral("eglcontext"), qtContext);
|
|
- else if (platform == QLatin1String("eglfs") || platform == QLatin1String("wayland")
|
|
- || platform == QLatin1String("wayland-egl"))
|
|
- m_handle = pni->nativeResourceForContext(QByteArrayLiteral("eglcontext"), qtContext);
|
|
- else if (platform == QLatin1String("windows")) {
|
|
- if (gl::GetGLImplementation() == gl::kGLImplementationEGLGLES2)
|
|
- m_handle = pni->nativeResourceForContext(QByteArrayLiteral("eglContext"), qtContext);
|
|
- else
|
|
- m_handle = pni->nativeResourceForContext(QByteArrayLiteral("renderingcontext"), qtContext);
|
|
- } else {
|
|
- qFatal("%s platform not yet supported", platform.toLatin1().constData());
|
|
- // Add missing platforms once they work.
|
|
- Q_UNREACHABLE();
|
|
- }
|
|
- }
|
|
-
|
|
- void* GetHandle() override { return m_handle; }
|
|
- unsigned int CheckStickyGraphicsResetStatusImpl() override
|
|
- {
|
|
-#if QT_CONFIG(opengl)
|
|
- if (QOpenGLContext *context = qt_gl_global_share_context()) {
|
|
- if (context->format().testOption(QSurfaceFormat::ResetNotification))
|
|
- return context->extraFunctions()->glGetGraphicsResetStatus();
|
|
- }
|
|
-#endif
|
|
- return 0 /*GL_NO_ERROR*/;
|
|
- }
|
|
-
|
|
- // We don't care about the rest, this context shouldn't be used except for its handle.
|
|
- bool Initialize(gl::GLSurface *, const gl::GLContextAttribs &) override { Q_UNREACHABLE(); return false; }
|
|
- bool MakeCurrentImpl(gl::GLSurface *) override { Q_UNREACHABLE(); return false; }
|
|
- void ReleaseCurrent(gl::GLSurface *) override { Q_UNREACHABLE(); }
|
|
- bool IsCurrent(gl::GLSurface *) override { Q_UNREACHABLE(); return false; }
|
|
- scoped_refptr<gl::GPUTimingClient> CreateGPUTimingClient() override
|
|
- {
|
|
- return nullptr;
|
|
- }
|
|
- const gfx::ExtensionSet& GetExtensions() override
|
|
- {
|
|
- static const gfx::ExtensionSet s_emptySet;
|
|
- return s_emptySet;
|
|
- }
|
|
- void ResetExtensions() override
|
|
- {
|
|
- }
|
|
-
|
|
-private:
|
|
- void *m_handle;
|
|
-};
|
|
-
|
|
-class ShareGroupQtQuick : public gl::GLShareGroup {
|
|
-public:
|
|
- gl::GLContext* GetContext() override { return m_shareContextQtQuick.get(); }
|
|
- void AboutToAddFirstContext() override;
|
|
-
|
|
-private:
|
|
- scoped_refptr<QtShareGLContext> m_shareContextQtQuick;
|
|
-};
|
|
-
|
|
-void ShareGroupQtQuick::AboutToAddFirstContext()
|
|
-{
|
|
-#if QT_CONFIG(opengl)
|
|
- // This currently has to be setup by ::main in all applications using QQuickWebEngineView with delegated rendering.
|
|
- QOpenGLContext *shareContext = qt_gl_global_share_context();
|
|
- if (!shareContext) {
|
|
- qFatal("QWebEngine: OpenGL resource sharing is not set up in QtQuick. Please make sure to call QtWebEngine::initialize() in your main() function before QCoreApplication is created.");
|
|
- }
|
|
- m_shareContextQtQuick = new QtShareGLContext(shareContext);
|
|
-#endif
|
|
-}
|
|
-
|
|
ContentBrowserClientQt::ContentBrowserClientQt()
|
|
{
|
|
}
|
|
@@ -364,13 +266,6 @@ void ContentBrowserClientQt::RenderProcessWillLaunch(content::RenderProcessHost
|
|
renderer_configuration->SetInitialConfiguration(is_incognito_process);
|
|
}
|
|
|
|
-gl::GLShareGroup *ContentBrowserClientQt::GetInProcessGpuShareGroup()
|
|
-{
|
|
- if (!m_shareGroupQtQuick.get())
|
|
- m_shareGroupQtQuick = new ShareGroupQtQuick;
|
|
- return m_shareGroupQtQuick.get();
|
|
-}
|
|
-
|
|
content::MediaObserver *ContentBrowserClientQt::GetMediaObserver()
|
|
{
|
|
return MediaCaptureDevicesDispatcher::GetInstance();
|
|
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h
|
|
index 7c8aa3ac9..06e2e9a20 100644
|
|
--- a/src/core/content_browser_client_qt.h
|
|
+++ b/src/core/content_browser_client_qt.h
|
|
@@ -60,14 +60,8 @@ struct MainFunctionParams;
|
|
struct Referrer;
|
|
}
|
|
|
|
-namespace gl {
|
|
-class GLShareGroup;
|
|
-}
|
|
-
|
|
namespace QtWebEngineCore {
|
|
|
|
-class ShareGroupQtQuick;
|
|
-
|
|
class ContentBrowserClientQt : public content::ContentBrowserClient
|
|
{
|
|
public:
|
|
@@ -75,7 +69,6 @@ public:
|
|
~ContentBrowserClientQt();
|
|
std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(const content::MainFunctionParams&) override;
|
|
void RenderProcessWillLaunch(content::RenderProcessHost *host) override;
|
|
- gl::GLShareGroup* GetInProcessGpuShareGroup() override;
|
|
content::MediaObserver* GetMediaObserver() override;
|
|
scoped_refptr<content::QuotaPermissionContext> CreateQuotaPermissionContext() override;
|
|
void OverrideWebkitPrefs(content::RenderViewHost *render_view_host,
|
|
@@ -266,9 +259,6 @@ public:
|
|
|
|
std::string GetUserAgent() override { return getUserAgent(); }
|
|
std::string GetProduct() override;
|
|
-
|
|
-private:
|
|
- scoped_refptr<ShareGroupQtQuick> m_shareGroupQtQuick;
|
|
};
|
|
|
|
} // namespace QtWebEngineCore
|
|
--
|
|
2.39.1
|
|
|