From 2694ec6605891271ed99f69a03b3929178655963 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 14 Aug 2014 17:45:07 +0200 Subject: Fix a crash in WebEngineSettings when opening a new window A new window means that the QWebEnginePage gets its WebContentsAdapter swapped and that the pointer in WebEngineSettings must be updated. Do the WebContentsAdapter-to-WebEngineSettings binding in WebContentsAdapter::initialize to cover both cases. This also refactors the way that QWebEngineSettings is created by removing the need to pass a QWebEngineSettingsPrivate instance to be adopted, and also move the global settings construction logic in the singleton accessor instead of relying on the fact that it uses a different contructor. Change-Id: I6f8a2ed1407a4b25f9898526db9432721c354ddf Reviewed-by: Andras Becsi Reviewed-by: Allan Sandfeld Jensen --- src/webenginewidgets/api/qwebenginesettings.cpp | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'src/webenginewidgets/api/qwebenginesettings.cpp') diff --git a/src/webenginewidgets/api/qwebenginesettings.cpp b/src/webenginewidgets/api/qwebenginesettings.cpp index 52cc59a80..b2a57952f 100644 --- a/src/webenginewidgets/api/qwebenginesettings.cpp +++ b/src/webenginewidgets/api/qwebenginesettings.cpp @@ -84,15 +84,11 @@ QWebEngineSettingsPrivate::QWebEngineSettingsPrivate() { } -QWebEngineSettingsPrivate::QWebEngineSettingsPrivate(WebContentsAdapter *adapter) - : coreSettings(new WebEngineSettings(this, adapter)) -{ -} - void QWebEngineSettingsPrivate::apply() { coreSettings->scheduleApply(); QWebEngineSettingsPrivate *globals = QWebEngineSettings::globalSettings()->d; + Q_ASSERT((this == globals) != (allSettings->contains(this))); if (this == globals) { Q_FOREACH (QWebEngineSettingsPrivate *settings, *allSettings) settings->coreSettings->scheduleApply(); @@ -111,8 +107,12 @@ WebEngineSettings *QWebEngineSettingsPrivate::fallbackSettings() const { QWebEngineSettings *QWebEngineSettings::globalSettings() { static QWebEngineSettings* globalSettings = 0; - if (!globalSettings) + if (!globalSettings) { globalSettings = new QWebEngineSettings; + // globalSettings shouldn't be in that list. + allSettings->removeAll(globalSettings->d); + globalSettings->d->initDefaults(); + } return globalSettings; } @@ -162,14 +162,6 @@ void QWebEngineSettings::resetFontSize(QWebEngineSettings::FontSize type) QWebEngineSettings::QWebEngineSettings() : d(new QWebEngineSettingsPrivate) { - d->initDefaults(); -} - - -QWebEngineSettings::QWebEngineSettings(QWebEngineSettingsPrivate *p) - : d(p) -{ - Q_ASSERT(d); allSettings->append(d); d->coreSettings->scheduleApply(); } -- cgit v1.2.3