diff options
author | Liang Qi <liang.qi@qt.io> | 2019-01-25 06:34:33 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2019-01-25 06:34:33 +0000 |
commit | 5e66cbc85a350616070a318f917cb181313c4afa (patch) | |
tree | 03ac82c1afd89cb7eb5d6f4033e9ad2f7a0c7b29 | |
parent | eb2076b5e3ac9cdbe05342da60a18760440b52c7 (diff) | |
parent | af0b242fc5d3f78c3c176bd94c9cdf57252a9dcd (diff) |
Merge "Merge remote-tracking branch 'origin/5.12' into dev" into refs/staging/dev
-rw-r--r-- | src/core/compositor/delegated_frame_node.cpp | 6 | ||||
-rw-r--r-- | src/core/web_engine_context.cpp | 34 |
2 files changed, 31 insertions, 9 deletions
diff --git a/src/core/compositor/delegated_frame_node.cpp b/src/core/compositor/delegated_frame_node.cpp index 571d02773..49e3577de 100644 --- a/src/core/compositor/delegated_frame_node.cpp +++ b/src/core/compositor/delegated_frame_node.cpp @@ -108,6 +108,12 @@ #define GL_LINE_LOOP 0x0002 #endif +#ifndef QT_NO_OPENGL +QT_BEGIN_NAMESPACE +Q_GUI_EXPORT QOpenGLContext *qt_gl_global_share_context(); +QT_END_NAMESPACE +#endif + namespace QtWebEngineCore { #ifndef QT_NO_OPENGL class MailboxTexture : public QSGTexture, protected QOpenGLFunctions { diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index e988fa23c..1ad18b3ea 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -59,6 +59,7 @@ #include "content/public/browser/browser_main_runner.h" #include "content/public/browser/plugin_service.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_process_host.h" #include "content/public/common/content_features.h" #include "content/public/common/content_paths.h" #include "content/public/common/content_switches.h" @@ -183,8 +184,12 @@ bool WebEngineContext::m_destroyed = false; void WebEngineContext::destroyProfileAdapter() { - if (m_defaultProfileAdapter) - qWarning("PostMainMessageLoopRun is done, but global profile still exists !"); + if (content::RenderProcessHost::run_renderer_in_process()) { + Q_ASSERT(m_profileAdapters.count() == 1); + // this might be default profile + m_defaultProfileAdapter.release(); + delete m_profileAdapters.first(); + } } void WebEngineContext::addProfileAdapter(ProfileAdapter *profileAdapter) @@ -200,6 +205,11 @@ void WebEngineContext::addProfileAdapter(ProfileAdapter *profileAdapter) } } } + + if (content::RenderProcessHost::run_renderer_in_process() && + !m_profileAdapters.isEmpty()) { + qFatal("Single mode supports only single profile."); + } m_profileAdapters.append(profileAdapter); } @@ -229,21 +239,27 @@ void WebEngineContext::destroy() #endif // Delete the global object and thus custom profiles - m_defaultProfileAdapter.reset(); - m_globalQObject.reset(); - while (m_profileAdapters.count()) - delete m_profileAdapters.first(); + // In case of single process ~RenderProcessHostImpl (there is only one instance) + // is called expliclty by BrowserMainLoop::ShutdownThreadsAndCleanUp and requires browser context. + // therefore delete browser context on PostMainMessageLoopRun. + if (!content::RenderProcessHost::run_renderer_in_process()) { + m_defaultProfileAdapter.reset(); + m_globalQObject.reset(); + while (m_profileAdapters.count()) + delete m_profileAdapters.first(); + } else { + m_globalQObject.reset(); + } // Handle any events posted by browser-context shutdown. + // This should deliver all nessesery calls of DeleteSoon from PostTask while (delegate->DoWork()) { } GLContextHelper::destroy(); m_devtoolsServer.reset(); m_runLoop->AfterRun(); - // Fixme: Force to destroy RenderProcessHostImpl by destroying BrowserMainRunner. - // RenderProcessHostImpl should be destroyed before WebEngineContext since - // default BrowserContext might be used by the RenderprocessHostImpl's destructor. + // Destroy the main runner, this stops main message loop m_browserRunner.reset(); // Destroying content-runner will force Chromium at_exit calls to run, and |