diff options
author | Michael BrĂ¼ning <michael.bruning@qt.io> | 2018-10-12 17:09:59 +0200 |
---|---|---|
committer | Michael BrĂ¼ning <michael.bruning@qt.io> | 2018-10-12 17:12:04 +0200 |
commit | f5251f5027da4885afb6e24a5846cac7e8d38ce2 (patch) | |
tree | ed2f120c7ec55fef0edb7198c6397c1d6633f195 /src | |
parent | 9cf451002ea5412791bb2cf68420ddbe1666905e (diff) | |
parent | 5f3190f575bd33f67a3bbd8936fa364cf651cd6f (diff) |
Merge remote-tracking branch 'origin/5.12' into dev
Change-Id: Ibe3dd8e26407c93a265e9f87a20bfbee036fea66
Diffstat (limited to 'src')
25 files changed, 145 insertions, 123 deletions
diff --git a/src/3rdparty b/src/3rdparty -Subproject 0ba5e6626ae4aff6f32140b810e7650a1018107 +Subproject 3f8994c671d1cfc674ab64e118304b897a84762 diff --git a/src/core/core_common.pri b/src/core/core_common.pri index ce0eecce2..5f9f3c4f6 100644 --- a/src/core/core_common.pri +++ b/src/core/core_common.pri @@ -10,3 +10,6 @@ qtConfig(webengine-webchannel): QT += webchannel # LTO does not work for Chromium at the moment, so disable it completely for core. CONFIG -= ltcg + +# Chromium requires C++14 +CONFIG += c++14 diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp index e1ff2f56c..84fde7ca2 100644 --- a/src/core/delegated_frame_node.cpp +++ b/src/core/delegated_frame_node.cpp @@ -183,12 +183,10 @@ public: virtual ~DelegatedNodeTreeHandler(){} - virtual void setupRenderPassNode(QSGTexture *, const QRect &, QSGNode *) = 0; + virtual void setupRenderPassNode(QSGTexture *, const QRect &, const QRectF &, QSGNode *) = 0; virtual void setupTextureContentNode(QSGTexture *, const QRect &, const QRectF &, - QSGTextureNode::TextureCoordinatesTransformMode, + QSGImageNode::TextureCoordinatesTransformMode, QSGNode *) = 0; - virtual void setupTiledContentNode(QSGTexture *, const QRect &, const QRectF &, - QSGNode *) = 0; virtual void setupSolidColorNode(const QRect &, const QColor &, QSGNode *) = 0; #ifndef QT_NO_OPENGL @@ -215,27 +213,31 @@ public: { } - void setupRenderPassNode(QSGTexture *layer, const QRect &rect, QSGNode *) override + void setupRenderPassNode(QSGTexture *layer, const QRect &rect, const QRectF &sourceRect, QSGNode *) override { Q_ASSERT(layer); Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end()); QSGInternalImageNode *imageNode = static_cast<QSGInternalImageNode*>(*m_nodeIterator++); imageNode->setTargetRect(rect); imageNode->setInnerTargetRect(rect); + imageNode->setSubSourceRect(layer->convertToNormalizedSourceRect(sourceRect)); imageNode->setTexture(layer); imageNode->update(); } void setupTextureContentNode(QSGTexture *texture, const QRect &rect, const QRectF &sourceRect, - QSGTextureNode::TextureCoordinatesTransformMode texCoordTransForm, + QSGImageNode::TextureCoordinatesTransformMode texCoordTransForm, QSGNode *) override { Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end()); - QSGTextureNode *textureNode = static_cast<QSGTextureNode*>(*m_nodeIterator++); + QSGImageNode *textureNode = static_cast<QSGImageNode*>(*m_nodeIterator++); if (textureNode->texture() != texture) { + // Chromium sometimes uses textures that doesn't completely fit + // in which case the geometry needs to be recalculated even if + // rect and src-rect matches. + if (textureNode->texture()->textureSize() != texture->textureSize()) + textureNode->markDirty(QSGImageNode::DirtyGeometry); textureNode->setTexture(texture); - // @TODO: This is a workaround for funky rendering, figure out why this is needed. - textureNode->markDirty(QSGTextureNode::DirtyGeometry); } if (textureNode->textureCoordinatesTransform() != texCoordTransForm) textureNode->setTextureCoordinatesTransform(texCoordTransForm); @@ -246,23 +248,6 @@ public: if (textureNode->filtering() != texture->filtering()) textureNode->setFiltering(texture->filtering()); } - void setupTiledContentNode(QSGTexture *texture, const QRect &rect, const QRectF &sourceRect, - QSGNode *) override - { - Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end()); - QSGTextureNode *textureNode = static_cast<QSGTextureNode*>(*m_nodeIterator++); - if (textureNode->texture() != texture) { - textureNode->setTexture(texture); - // @TODO: This is a workaround for funky rendering, figure out why this is needed. - textureNode->markDirty(QSGTextureNode::DirtyGeometry); - } - if (textureNode->rect() != rect) - textureNode->setRect(rect); - if (textureNode->sourceRect() != sourceRect) - textureNode->setSourceRect(sourceRect); - if (textureNode->filtering() != texture->filtering()) - textureNode->setFiltering(texture->filtering()); - } void setupSolidColorNode(const QRect &rect, const QColor &color, QSGNode *) override { Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end()); @@ -314,14 +299,15 @@ public: { } - void setupRenderPassNode(QSGTexture *layer, const QRect &rect, + void setupRenderPassNode(QSGTexture *layer, const QRect &rect, const QRectF &sourceRect, QSGNode *layerChain) override { Q_ASSERT(layer); // Only QSGInternalImageNode currently supports QSGLayer textures. - QSGInternalImageNode *imageNode = m_apiDelegate->createImageNode(); + QSGInternalImageNode *imageNode = m_apiDelegate->createInternalImageNode(); imageNode->setTargetRect(rect); imageNode->setInnerTargetRect(rect); + imageNode->setSubSourceRect(layer->convertToNormalizedSourceRect(sourceRect)); imageNode->setTexture(layer); imageNode->update(); @@ -330,10 +316,10 @@ public: } void setupTextureContentNode(QSGTexture *texture, const QRect &rect, const QRectF &sourceRect, - QSGTextureNode::TextureCoordinatesTransformMode texCoordTransForm, + QSGImageNode::TextureCoordinatesTransformMode texCoordTransForm, QSGNode *layerChain) override { - QSGTextureNode *textureNode = m_apiDelegate->createTextureNode(); + QSGImageNode *textureNode = m_apiDelegate->createImageNode(); textureNode->setTextureCoordinatesTransform(texCoordTransForm); textureNode->setRect(rect); textureNode->setSourceRect(sourceRect); @@ -344,19 +330,6 @@ public: m_sceneGraphNodes->append(textureNode); } - void setupTiledContentNode(QSGTexture *texture, const QRect &rect, const QRectF &sourceRect, - QSGNode *layerChain) override - { - QSGTextureNode *textureNode = m_apiDelegate->createTextureNode(); - textureNode->setRect(rect); - textureNode->setSourceRect(sourceRect); - textureNode->setFiltering(texture->filtering()); - textureNode->setTexture(texture); - - layerChain->appendChildNode(textureNode); - m_sceneGraphNodes->append(textureNode); - } - void setupSolidColorNode(const QRect &rect, const QColor &color, QSGNode *layerChain) override { @@ -1101,13 +1074,14 @@ void DelegatedFrameNode::handleQuad( const viz::RenderPassDrawQuad *renderPassQuad = viz::RenderPassDrawQuad::MaterialCast(quad); if (!renderPassQuad->mask_texture_size.IsEmpty()) { ResourceHolder *resource = findAndHoldResource(renderPassQuad->mask_resource_id(), resourceCandidates); - Q_UNUSED(resource); // FIXME + Q_UNUSED(resource); // FIXME: QTBUG-67652 } - QSGTexture *layer = + QSGLayer *layer = findRenderPassLayer(renderPassQuad->render_pass_id, m_sgObjects.renderPassLayers).data(); if (layer) - nodeHandler->setupRenderPassNode(layer, toQt(quad->rect), currentLayerChain); + nodeHandler->setupRenderPassNode(layer, toQt(quad->rect), toQt(renderPassQuad->tex_coord_rect), currentLayerChain); + break; } case viz::DrawQuad::TEXTURE_CONTENT: { @@ -1124,7 +1098,7 @@ void DelegatedFrameNode::handleQuad( nodeHandler->setupTextureContentNode( texture, toQt(quad->rect), toQt(uv_rect), - tquad->y_flipped ? QSGTextureNode::MirrorVertically : QSGTextureNode::NoTransform, + tquad->y_flipped ? QSGImageNode::MirrorVertically : QSGImageNode::NoTransform, currentLayerChain); break; } @@ -1164,10 +1138,10 @@ void DelegatedFrameNode::handleQuad( case viz::DrawQuad::TILED_CONTENT: { const viz::TileDrawQuad *tquad = viz::TileDrawQuad::MaterialCast(quad); ResourceHolder *resource = findAndHoldResource(tquad->resource_id(), resourceCandidates); - nodeHandler->setupTiledContentNode( + nodeHandler->setupTextureContentNode( initAndHoldTexture(resource, quad->ShouldDrawWithBlending(), apiDelegate), toQt(quad->rect), toQt(tquad->tex_coord_rect), - currentLayerChain); + QSGImageNode::NoTransform, currentLayerChain); break; #ifndef QT_NO_OPENGL } diff --git a/src/core/net/network_delegate_qt.cpp b/src/core/net/network_delegate_qt.cpp index 88ab1238a..ccc8cc0e5 100644 --- a/src/core/net/network_delegate_qt.cpp +++ b/src/core/net/network_delegate_qt.cpp @@ -281,13 +281,12 @@ void NetworkDelegateQt::OnCompleted(net::URLRequest */*request*/, bool /*started bool NetworkDelegateQt::OnCanSetCookie(const net::URLRequest& request, const net::CanonicalCookie & /*cookie*/, - net::CookieOptions*, - bool /*allowed_from_caller*/) + net::CookieOptions*) { return canSetCookies(request.site_for_cookies(), request.url(), std::string()); } -bool NetworkDelegateQt::OnCanGetCookies(const net::URLRequest& request, const net::CookieList&, bool /*allowed_from_caller*/) +bool NetworkDelegateQt::OnCanGetCookies(const net::URLRequest& request, const net::CookieList&) { return canGetCookies(request.site_for_cookies(), request.url()); } diff --git a/src/core/net/network_delegate_qt.h b/src/core/net/network_delegate_qt.h index ac89b1284..e4ff196aa 100644 --- a/src/core/net/network_delegate_qt.h +++ b/src/core/net/network_delegate_qt.h @@ -62,7 +62,7 @@ public: // net::NetworkDelegate implementation int OnBeforeURLRequest(net::URLRequest* request, net::CompletionOnceCallback callback, GURL* new_url) override; void OnURLRequestDestroyed(net::URLRequest* request) override; - bool OnCanSetCookie(const net::URLRequest& request, const net::CanonicalCookie& cookie, net::CookieOptions* options, bool allowed_from_caller) override; + bool OnCanSetCookie(const net::URLRequest& request, const net::CanonicalCookie& cookie, net::CookieOptions* options) override; int OnBeforeStartTransaction(net::URLRequest *request, const net::CompletionOnceCallback callback, net::HttpRequestHeaders *headers) override; void OnBeforeSendHeaders(net::URLRequest* request, const net::ProxyInfo& proxy_info, const net::ProxyRetryInfoMap& proxy_retry_info, net::HttpRequestHeaders* headers) override; @@ -75,7 +75,7 @@ public: void OnCompleted(net::URLRequest *request, bool started, int net_error) override; void OnPACScriptError(int, const base::string16&) override; net::NetworkDelegate::AuthRequiredResponse OnAuthRequired(net::URLRequest*, const net::AuthChallengeInfo&, AuthCallback, net::AuthCredentials*) override; - bool OnCanGetCookies(const net::URLRequest&, const net::CookieList&, bool allowed_from_caller) override; + bool OnCanGetCookies(const net::URLRequest&, const net::CookieList&) override; bool OnCanAccessFile(const net::URLRequest&, const base::FilePath&, const base::FilePath&) const override; bool OnCanEnablePrivacyMode(const GURL&, const GURL&) const override; bool OnAreExperimentalCookieFeaturesEnabled() const override; diff --git a/src/core/ozone/gl_context_qt.cpp b/src/core/ozone/gl_context_qt.cpp index ad78b7d2b..1850380a2 100644 --- a/src/core/ozone/gl_context_qt.cpp +++ b/src/core/ozone/gl_context_qt.cpp @@ -112,7 +112,7 @@ void* GLContextHelper::getEGLConfig() return resourceForContext(resource); } -void* GLContextHelper::getXConfig() +void* GLContextHelper::getGlXConfig() { return resourceForContext(QByteArrayLiteral("glxconfig")); } diff --git a/src/core/ozone/gl_context_qt.h b/src/core/ozone/gl_context_qt.h index cecceabc9..59ee567aa 100644 --- a/src/core/ozone/gl_context_qt.h +++ b/src/core/ozone/gl_context_qt.h @@ -58,7 +58,7 @@ public: static bool initializeContext(gl::GLContext* context, gl::GLSurface* surface, gl::GLContextAttribs attribs); static void* getEGLConfig(); - static void* getXConfig(); + static void* getGlXConfig(); static void* getEGLDisplay(); static void* getXDisplay(); static void* getNativeDisplay(); diff --git a/src/core/ozone/gl_surface_glx_qt.cpp b/src/core/ozone/gl_surface_glx_qt.cpp index 32b85ff77..eebefa59b 100644 --- a/src/core/ozone/gl_surface_glx_qt.cpp +++ b/src/core/ozone/gl_surface_glx_qt.cpp @@ -124,9 +124,9 @@ bool GLSurfaceGLXQt::InitializeOneOff() return false; } - g_config = GLContextHelper::getXConfig(); + g_config = GLContextHelper::getGlXConfig(); if (!g_config) { - LOG(ERROR) << "GLContextHelper::getXConfig() failed."; + LOG(ERROR) << "GLContextHelper::getGlxConfig() failed."; return false; } diff --git a/src/core/ozone/surface_factory_qt.cpp b/src/core/ozone/surface_factory_qt.cpp index d2b2aab8a..9570852c9 100644 --- a/src/core/ozone/surface_factory_qt.cpp +++ b/src/core/ozone/surface_factory_qt.cpp @@ -39,8 +39,8 @@ #include "surface_factory_qt.h" #include "qtwebenginecoreglobal_p.h" +#include "gl_context_qt.h" #include "gl_ozone_egl_qt.h" - #if QT_CONFIG(webengine_system_x11) #include "gl_ozone_glx_qt.h" #endif @@ -57,32 +57,29 @@ namespace QtWebEngineCore { SurfaceFactoryQt::SurfaceFactoryQt() { - // Fixme: make better platform switch handling - QString platform = qApp->platformName(); - if (platform == QLatin1String("xcb")) { - m_impls.push_back(gl::kGLImplementationDesktopGL); + Q_ASSERT(qApp); +#if QT_CONFIG(webengine_system_x11) + if (GLContextHelper::getGlXConfig()) { + m_impl = gl::kGLImplementationDesktopGL; + m_ozone.reset(new ui::GLOzoneGLXQt()); + } else +#endif + if (GLContextHelper::getEGLConfig()) { + m_impl = gl::kGLImplementationEGLGLES2; + m_ozone.reset(new ui::GLOzoneEGLQt()); } else { - m_impls.push_back(gl::kGLImplementationEGLGLES2); + qFatal("No suitable graphics backend found\n"); } } std::vector<gl::GLImplementation> SurfaceFactoryQt::GetAllowedGLImplementations() { - return m_impls; + return { m_impl }; } ui::GLOzone* SurfaceFactoryQt::GetGLOzone(gl::GLImplementation implementation) { - - QString platform = qApp->platformName(); - if (platform == QLatin1String("xcb")) { -#if QT_CONFIG(webengine_system_x11) - return new ui::GLOzoneGLXQt(); -#endif - return nullptr; - } else { - return new ui::GLOzoneEGLQt(); - } + return m_ozone.get(); } } // namespace QtWebEngineCore diff --git a/src/core/ozone/surface_factory_qt.h b/src/core/ozone/surface_factory_qt.h index 0ac2eca68..dee41d948 100644 --- a/src/core/ozone/surface_factory_qt.h +++ b/src/core/ozone/surface_factory_qt.h @@ -53,7 +53,8 @@ public: std::vector<gl::GLImplementation> GetAllowedGLImplementations() override; ui::GLOzone* GetGLOzone(gl::GLImplementation implementation) override; private: - std::vector<gl::GLImplementation> m_impls; + gl::GLImplementation m_impl; + std::unique_ptr<ui::GLOzone> m_ozone; }; } // namespace QtWebEngineCore diff --git a/src/core/qtwebengine_resources.gni b/src/core/qtwebengine_resources.gni index 0e3652c1d..6e8c3c6eb 100644 --- a/src/core/qtwebengine_resources.gni +++ b/src/core/qtwebengine_resources.gni @@ -21,6 +21,7 @@ repack("qtwebengine_repack_resources") { "$root_gen_dir/chrome/task_scheduler_internals_resources.pak", "$root_gen_dir/components/components_resources.pak", "$root_gen_dir/content/content_resources.pak", + "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak", "$root_gen_dir/net/net_resources.pak", "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak", "$root_gen_dir/ui/resources/webui_resources.pak", @@ -32,6 +33,7 @@ repack("qtwebengine_repack_resources") { "//chrome/browser/resources:task_scheduler_internals_resources", "//components/resources:components_resources_grit", "//content:resources_grit", + "//mojo/public/js:resources", "//net:net_resources_grit", "//third_party/blink/public:resources_grit", "//ui/resources:webui_resources_grd_grit", diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni index 6c1172d63..ea18dad97 100644 --- a/src/core/qtwebengine_sources.gni +++ b/src/core/qtwebengine_sources.gni @@ -7,6 +7,9 @@ import("//printing/buildflags/buildflags.gni") source_set("qtwebengine_spellcheck_sources") { include_dirs = core_include_dirs + configs += [ + "//third_party/boringssl:external_config", + ] sources = [ "//chrome/browser/spellchecker/spell_check_host_chrome_impl.cc", "//chrome/browser/spellchecker/spell_check_host_chrome_impl.h", @@ -22,7 +25,6 @@ source_set("qtwebengine_spellcheck_sources") { deps = [ "//components/spellcheck/browser", "//components/spellcheck/renderer", - "//third_party/boringssl", "//third_party/blink/public:blink", "//third_party/hunspell", ] @@ -34,11 +36,9 @@ source_set("qtwebengine_spellcheck_sources") { } source_set("qtwebengine_sources") { - include_dirs = [ - "//skia/config", - "//third_party/boringssl/src/include", - "//third_party/skia/include/core", - "//third_party/skia/include/gpu" + configs += [ + "//skia:skia_config", + "//third_party/boringssl:external_config", ] deps = [ "//chrome/common:buildflags", diff --git a/src/core/render_widget_host_view_qt_delegate.h b/src/core/render_widget_host_view_qt_delegate.h index 72f54dcb6..8936ce63e 100644 --- a/src/core/render_widget_host_view_qt_delegate.h +++ b/src/core/render_widget_host_view_qt_delegate.h @@ -67,7 +67,6 @@ class QInputMethodEvent; class QSGInternalImageNode; class QSGImageNode; -typedef QSGImageNode QSGTextureNode; QT_END_NAMESPACE @@ -106,8 +105,8 @@ public: virtual QWindow* window() const = 0; virtual QSGTexture *createTextureFromImage(const QImage &) = 0; virtual QSGLayer *createLayer() = 0; - virtual QSGInternalImageNode *createImageNode() = 0; - virtual QSGTextureNode *createTextureNode() = 0; + virtual QSGInternalImageNode *createInternalImageNode() = 0; + virtual QSGImageNode *createImageNode() = 0; virtual QSGRectangleNode *createRectangleNode() = 0; virtual void update() = 0; virtual void updateCursor(const QCursor &) = 0; diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 7cd7d485b..6fbdbec61 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -96,7 +96,6 @@ #include "net/webui_controller_factory_qt.h" #include "type_conversion.h" #include "ozone/gl_context_qt.h" -#include "ozone/surface_factory_qt.h" #include "web_engine_library_info.h" #include <QFileInfo> @@ -436,14 +435,12 @@ WebEngineContext::WebEngineContext() appendToFeatureSwitch(parsedCommandLine, switches::kDisableFeatures, features::kMojoVideoCapture.name); if (useEmbeddedSwitches) { + // embedded switches are based on the switches for Android, see content/browser/android/content_startup_flags.cc appendToFeatureSwitch(parsedCommandLine, switches::kEnableFeatures, features::kOverlayScrollbar.name); if (!parsedCommandLine->HasSwitch(switches::kDisablePinch)) parsedCommandLine->AppendSwitch(switches::kEnablePinch); parsedCommandLine->AppendSwitch(switches::kEnableViewport); parsedCommandLine->AppendSwitch(switches::kMainFrameResizesAreOrientationChanges); - parsedCommandLine->AppendSwitch(switches::kDisableAcceleratedVideoDecode); - parsedCommandLine->AppendSwitch(switches::kDisableGpuShaderDiskCache); - parsedCommandLine->AppendSwitch(switches::kDisable2dCanvasAntialiasing); parsedCommandLine->AppendSwitch(cc::switches::kDisableCompositedAntialiasing); } base::FeatureList::InitializeInstance( diff --git a/src/core/web_engine_context.h b/src/core/web_engine_context.h index e9e7c44a7..ce71984d4 100644 --- a/src/core/web_engine_context.h +++ b/src/core/web_engine_context.h @@ -67,7 +67,6 @@ namespace QtWebEngineCore { class ProfileAdapter; class ContentMainDelegateQt; class DevToolsServerQt; -class SurfaceFactoryQt; bool usingSoftwareDynamicGL(); diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp index 3d539f8b2..baece82f3 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp @@ -177,13 +177,13 @@ QSGLayer *RenderWidgetHostViewQtDelegateQuick::createLayer() return renderContext->sceneGraphContext()->createLayer(renderContext); } -QSGInternalImageNode *RenderWidgetHostViewQtDelegateQuick::createImageNode() +QSGInternalImageNode *RenderWidgetHostViewQtDelegateQuick::createInternalImageNode() { QSGRenderContext *renderContext = QQuickWindowPrivate::get(QQuickItem::window())->context; return renderContext->sceneGraphContext()->createInternalImageNode(); } -QSGTextureNode *RenderWidgetHostViewQtDelegateQuick::createTextureNode() +QSGImageNode *RenderWidgetHostViewQtDelegateQuick::createImageNode() { return QQuickItem::window()->createImageNode(); } diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.h b/src/webengine/render_widget_host_view_qt_delegate_quick.h index a5101d070..74cddf476 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h @@ -66,8 +66,8 @@ public: QWindow* window() const override; QSGTexture *createTextureFromImage(const QImage &) override; QSGLayer *createLayer() override; - QSGInternalImageNode *createImageNode() override; - QSGTextureNode *createTextureNode() override; + QSGInternalImageNode *createInternalImageNode() override; + QSGImageNode *createImageNode() override; QSGRectangleNode *createRectangleNode() override; void update() override; void updateCursor(const QCursor &) override; diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp index 7b7d32d67..dd37ff6fa 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp +++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp @@ -111,14 +111,14 @@ QSGLayer *RenderWidgetHostViewQtDelegateQuickWindow::createLayer() return m_realDelegate->createLayer(); } -QSGInternalImageNode *RenderWidgetHostViewQtDelegateQuickWindow::createImageNode() +QSGInternalImageNode *RenderWidgetHostViewQtDelegateQuickWindow::createInternalImageNode() { - return m_realDelegate->createImageNode(); + return m_realDelegate->createInternalImageNode(); } -QSGTextureNode *RenderWidgetHostViewQtDelegateQuickWindow::createTextureNode() +QSGImageNode *RenderWidgetHostViewQtDelegateQuickWindow::createImageNode() { - return m_realDelegate->createTextureNode(); + return m_realDelegate->createImageNode(); } QSGRectangleNode *RenderWidgetHostViewQtDelegateQuickWindow::createRectangleNode() diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h index be4033728..6a1be8b7f 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h @@ -69,8 +69,8 @@ public: QWindow* window() const override; QSGTexture *createTextureFromImage(const QImage &) override; QSGLayer *createLayer() override; - QSGInternalImageNode *createImageNode() override; - QSGTextureNode *createTextureNode() override; + QSGInternalImageNode *createInternalImageNode() override; + QSGImageNode *createImageNode() override; QSGRectangleNode *createRectangleNode() override; void update() override; void updateCursor(const QCursor &) override; diff --git a/src/webenginewidgets/api/qwebengineclientcertificateselection.cpp b/src/webenginewidgets/api/qwebengineclientcertificateselection.cpp index 8b5f49d6b..8d3c8d223 100644 --- a/src/webenginewidgets/api/qwebengineclientcertificateselection.cpp +++ b/src/webenginewidgets/api/qwebengineclientcertificateselection.cpp @@ -51,10 +51,14 @@ QT_BEGIN_NAMESPACE \since 5.12 \inmodule QtWebEngineWidgets - Provides access to the certificates to choose from, and a method for selecting one. + When a web site requests an SSL client certificate, and one or more certificates + are found in the system's client certificate store, this class provides access to + the certificates to choose from, as well as a method for selecting one. The selection is asynchronous. If no certificate is selected and no copy of the object is kept alive, loading will continue without a certificate. + + \sa QWebEnginePage::selectClientCertificate() */ /*! \internal diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 187565a76..fbb7c1f9e 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -902,7 +902,7 @@ QWebEnginePage::~QWebEnginePage() Q_D(QWebEnginePage); setDevToolsPage(nullptr); d->adapter->stopFinding(); - QWebEngineViewPrivate::bind(nullptr, this, true); + QWebEngineViewPrivate::removePageFromView(this); } QWebEngineHistory *QWebEnginePage::history() const diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index aa51e5b0e..e6f9fcb49 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -55,33 +55,77 @@ QT_BEGIN_NAMESPACE -void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page, bool pageBeingDeleted) +void QWebEngineViewPrivate::notify(QWebEngineView *view, QWebEnginePage *oldPage, QWebEnginePage *newPage) +{ + Q_ASSERT(view); + + auto oldUrl = oldPage ? oldPage->url() : QUrl(); + auto newUrl = newPage ? newPage->url() : QUrl(); + if (oldUrl != newUrl) + Q_EMIT view->urlChanged(newUrl); + + auto oldTitle = oldPage ? oldPage->title() : QString(); + auto newTitle = newPage ? newPage->title() : QString(); + if (oldTitle != newTitle) + Q_EMIT view->titleChanged(newTitle); + + auto oldIcon = oldPage ? oldPage->iconUrl() : QUrl(); + auto newIcon = newPage ? newPage->iconUrl() : QUrl(); + if (oldIcon != newIcon) { + Q_EMIT view->iconUrlChanged(newIcon); + Q_EMIT view->iconChanged(newPage ? newPage->icon() : QIcon()); + } + + if ((oldPage && oldPage->hasSelection()) || (newPage && newPage->hasSelection())) + Q_EMIT view->selectionChanged(); +} + +QWebEnginePage* QWebEngineViewPrivate::removeViewFromPage(QWebEngineView *view) +{ + Q_ASSERT(view); + QWebEnginePage *oldPage = view->d_func()->page; + + if (oldPage) { + oldPage->disconnect(view); + oldPage->d_func()->view = nullptr; + if (oldPage->parent() != view) + oldPage->d_func()->adapter->reattachRWHV(); + } + return oldPage; +} + +void QWebEngineViewPrivate::removePageFromView(QWebEnginePage *page) +{ + Q_ASSERT(page); + if (QWebEngineView *oldView = page->d_func()->view) { + page->disconnect(oldView); + page->d_func()->view = nullptr; + oldView->d_func()->page = nullptr; + notify(oldView, page, nullptr); + } +} + +void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) { if (view && page == view->d_func()->page) return; if (page) { // Un-bind page from its current view. - if (QWebEngineView *oldView = page->d_func()->view) { - page->disconnect(oldView); - oldView->d_func()->page = nullptr; - } + removePageFromView(page); page->d_func()->view = view; - if (!pageBeingDeleted) - page->d_func()->adapter->reattachRWHV(); + page->d_func()->adapter->reattachRWHV(); } if (view) { // Un-bind view from its current page. - if (QWebEnginePage *oldPage = view->d_func()->page) { - oldPage->disconnect(view); - oldPage->d_func()->view = nullptr; - if (oldPage->parent() == view) - delete oldPage; - else - oldPage->d_func()->adapter->reattachRWHV(); - } + QWebEnginePage *oldPage = removeViewFromPage(view); + view->d_func()->page = page; + notify(view, oldPage, page); + + if (oldPage && oldPage->parent() == view) + delete oldPage; } if (view && page) { @@ -149,7 +193,7 @@ QWebEngineView::QWebEngineView(QWidget *parent) QWebEngineView::~QWebEngineView() { - QWebEngineViewPrivate::bind(this, nullptr); + QWebEngineViewPrivate::removeViewFromPage(this); } QWebEnginePage* QWebEngineView::page() const diff --git a/src/webenginewidgets/api/qwebengineview_p.h b/src/webenginewidgets/api/qwebengineview_p.h index bfb44bec5..1845bfb60 100644 --- a/src/webenginewidgets/api/qwebengineview_p.h +++ b/src/webenginewidgets/api/qwebengineview_p.h @@ -65,7 +65,10 @@ public: Q_DECLARE_PUBLIC(QWebEngineView) QWebEngineView *q_ptr; - static void bind(QWebEngineView *view, QWebEnginePage *page, bool pageBeingDeleted = false); + static void notify(QWebEngineView *view, QWebEnginePage *oldPage, QWebEnginePage *newPage); + static QWebEnginePage* removeViewFromPage(QWebEngineView *view); + static void removePageFromView(QWebEnginePage *page); + static void bind(QWebEngineView *view, QWebEnginePage *page); QWebEngineViewPrivate(); diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp index d7bcd0ae3..13c65f1ec 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp @@ -310,13 +310,13 @@ QSGLayer *RenderWidgetHostViewQtDelegateWidget::createLayer() return renderContext->sceneGraphContext()->createLayer(renderContext); } -QSGInternalImageNode *RenderWidgetHostViewQtDelegateWidget::createImageNode() +QSGInternalImageNode *RenderWidgetHostViewQtDelegateWidget::createInternalImageNode() { QSGRenderContext *renderContext = QQuickWindowPrivate::get(quickWindow())->context; return renderContext->sceneGraphContext()->createInternalImageNode(); } -QSGTextureNode *RenderWidgetHostViewQtDelegateWidget::createTextureNode() +QSGImageNode *RenderWidgetHostViewQtDelegateWidget::createImageNode() { return quickWindow()->createImageNode(); } diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h index 42b454bc5..4dc47dfdd 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h @@ -73,8 +73,8 @@ public: QWindow* window() const override; QSGTexture *createTextureFromImage(const QImage &) override; QSGLayer *createLayer() override; - QSGInternalImageNode *createImageNode() override; - QSGTextureNode *createTextureNode() override; + QSGInternalImageNode *createInternalImageNode() override; + QSGImageNode *createImageNode() override; QSGRectangleNode *createRectangleNode() override; void update() override; void updateCursor(const QCursor &) override; |