summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-01-24 14:14:45 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-01-24 14:15:38 +0100
commitaf0b242fc5d3f78c3c176bd94c9cdf57252a9dcd (patch)
tree206194c656cfc8195bda39017abe7580433a84b4 /src/core
parentbe0fb77baf98f773928b4ff9d08a13c83f189564 (diff)
parenta9b6c561b0f97ab691b92b791213b22f8cb35b4a (diff)
Merge remote-tracking branch 'origin/5.12' into dev
Diffstat (limited to 'src/core')
-rw-r--r--src/core/compositor/delegated_frame_node.cpp6
-rw-r--r--src/core/web_engine_context.cpp34
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