From 65909d55417c78e88308644dea30a65fae2d9c4a Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 15 Feb 2019 11:30:19 +0100 Subject: Remove hack with passing WebContentsAdapterClient as NativeView MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead delay creating our render view just a little bit further in WebContentImpl::OpenWindow until it calls delegate->WebContentsCreated() Change-Id: Idd911d208bbfe419a2567220933eccb2ba726347 Reviewed-by: Jüri Valdmann --- src/core/web_contents_view_qt.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'src/core/web_contents_view_qt.cpp') diff --git a/src/core/web_contents_view_qt.cpp b/src/core/web_contents_view_qt.cpp index 550a98a52..7177a8713 100644 --- a/src/core/web_contents_view_qt.cpp +++ b/src/core/web_contents_view_qt.cpp @@ -62,7 +62,19 @@ namespace QtWebEngineCore { -void WebContentsViewQt::initialize(WebContentsAdapterClient* client) +void WebContentsViewQt::setFactoryClient(WebContentsAdapterClient* client) +{ + if (m_factoryClient) + return; + m_factoryClient = client; + + // Check if a RWHV was created before the pre-initialization. + if (auto view = static_cast(m_webContents->GetRenderWidgetHostView())) { + view->setDelegate(m_factoryClient->CreateRenderWidgetHostViewQtDelegate(view)); + } +} + +void WebContentsViewQt::setClient(WebContentsAdapterClient* client) { m_client = client; m_factoryClient = client; @@ -78,10 +90,11 @@ content::RenderWidgetHostViewBase* WebContentsViewQt::CreateViewForWidget(conten { RenderWidgetHostViewQt *view = new RenderWidgetHostViewQt(render_widget_host); - Q_ASSERT(m_factoryClient); - view->setDelegate(m_factoryClient->CreateRenderWidgetHostViewQtDelegate(view)); - if (m_client) - view->setAdapterClient(m_client); + if (m_factoryClient) { + view->setDelegate(m_factoryClient->CreateRenderWidgetHostViewQtDelegate(view)); + if (m_client) + view->setAdapterClient(m_client); + } return view; } @@ -99,15 +112,11 @@ content::RenderWidgetHostViewBase* WebContentsViewQt::CreateViewForChildWidget(c void WebContentsViewQt::CreateView(const gfx::Size& initial_size, gfx::NativeView context) { - // This is passed through content::WebContents::CreateParams::context either as the native view's client - // directly or, in the case of a page-created new window, the client of the creating window's native view. - m_factoryClient = reinterpret_cast(context); } gfx::NativeView WebContentsViewQt::GetNativeView() const { - // Hack to provide the client to WebContentsImpl::CreateNewWindow. - return reinterpret_cast(m_client); + return nullptr; } void WebContentsViewQt::GetContainerBounds(gfx::Rect* out) const -- cgit v1.2.3