diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index d2eb076d6291deb6abcebe6bda7f7d8ef4784fbd..a4a8bbe2344413d3f16ffe28fd5308f9828a562b 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -357,6 +357,9 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient) if (!d->webContents) d->webContents.reset(createBlankWebContents(adapterClient)); + // This might replace any adapter that has been initialized with this WebEngineSettings. + adapterClient->webEngineSettings()->setWebContentsAdapter(this); + content::RendererPreferences* rendererPrefs = d->webContents->GetMutableRendererPrefs(); rendererPrefs->use_custom_colors = true; // Qt returns a flash time (the whole cycle) in ms, chromium expects just the interval in seconds diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp index 4d0e727e38c6b5b2d72b25f57ad79243e071c7db..507866e565708fec3d3645cb9042d527467a92ff 100644 --- a/src/core/web_engine_settings.cpp +++ b/src/core/web_engine_settings.cpp @@ -82,14 +82,6 @@ WebEngineSettings::WebEngineSettings(WebEngineSettingsDelegate *delegate) Q_ASSERT(delegate); } -WebEngineSettings::WebEngineSettings(WebEngineSettingsDelegate *delegate, WebContentsAdapter *adapter) - : m_adapter(adapter) - , m_delegate(delegate) - , m_batchTimer(new BatchTimer(this)) -{ - Q_ASSERT(delegate); -} - WebEngineSettings::~WebEngineSettings() { } @@ -252,8 +244,8 @@ void WebEngineSettings::doApply() // FIXME: batch sequential calls to apply? applySettingsToWebPreferences(webPreferences.data()); - if (m_adapter) - m_adapter->updateWebPreferences(*webPreferences.data()); + Q_ASSERT(m_adapter); + m_adapter->updateWebPreferences(*webPreferences.data()); } void WebEngineSettings::applySettingsToWebPreferences(WebPreferences *prefs) diff --git a/src/core/web_engine_settings.h b/src/core/web_engine_settings.h index 5e19c242d8c2499c234c892d6cb6963350ee5b6e..a1c41c187dac6639c403ff71b2af5fac8484fd7b 100644 --- a/src/core/web_engine_settings.h +++ b/src/core/web_engine_settings.h @@ -99,7 +99,6 @@ public: }; WebEngineSettings(WebEngineSettingsDelegate*); - WebEngineSettings(WebEngineSettingsDelegate *,WebContentsAdapter *); virtual ~WebEngineSettings(); void overrideWebPreferences(WebPreferences *prefs); @@ -125,6 +124,7 @@ public: private: void doApply(); void applySettingsToWebPreferences(WebPreferences *); + void setWebContentsAdapter(WebContentsAdapter *adapter) { m_adapter = adapter; } WebContentsAdapter* m_adapter; WebEngineSettingsDelegate* m_delegate; @@ -136,6 +136,7 @@ private: QScopedPointer<BatchTimer> m_batchTimer; friend class BatchTimer; + friend class WebContentsAdapter; }; #endif // WEB_ENGINE_SETTINGS_H diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 71099e547ea391210c1435afa92bbd8b05a826aa..4cf35f8c401a3d21b5a6de6fa47122de1a9355e7 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -168,7 +168,7 @@ void CallbackDirectory::CallbackSharedDataPointer::doDeref() QWebEnginePagePrivate::QWebEnginePagePrivate() : adapter(new WebContentsAdapter) , history(new QWebEngineHistory(new QWebEngineHistoryPrivate(this))) - , settings(new QWebEngineSettings(new QWebEngineSettingsPrivate(adapter.data()))) + , settings(new QWebEngineSettings) , view(0) { memset(actions, 0, sizeof(actions)); diff --git a/src/webenginewidgets/api/qwebenginesettings.cpp b/src/webenginewidgets/api/qwebenginesettings.cpp index 52cc59a80d27e68f0002671e1920c7bd9fa63338..b2a57952f6178422df7d46f311402a66624e9e0b 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(); } diff --git a/src/webenginewidgets/api/qwebenginesettings.h b/src/webenginewidgets/api/qwebenginesettings.h index bbb0cf899458c668af9a902a079e2e5e86967c8c..c8af3a1b10cb00bed21c572be5738581d2e2df35 100644 --- a/src/webenginewidgets/api/qwebenginesettings.h +++ b/src/webenginewidgets/api/qwebenginesettings.h @@ -87,7 +87,6 @@ private: friend class QWebEngineSettingsPrivate; QWebEngineSettings(); - QWebEngineSettings(QWebEngineSettingsPrivate *); ~QWebEngineSettings(); QWebEngineSettingsPrivate *d; diff --git a/src/webenginewidgets/api/qwebenginesettings_p.h b/src/webenginewidgets/api/qwebenginesettings_p.h index 96fa9e27ba918a63e85efa9fec33407e913a8262..dda39a37d6f96a8c7cdd461d2048921bf14bdf61 100644 --- a/src/webenginewidgets/api/qwebenginesettings_p.h +++ b/src/webenginewidgets/api/qwebenginesettings_p.h @@ -52,7 +52,6 @@ class QWebEngineSettingsPrivate : public WebEngineSettingsDelegate { public: QWebEngineSettingsPrivate(); - QWebEngineSettingsPrivate(WebContentsAdapter *adapter); void initDefaults(); void apply() Q_DECL_OVERRIDE;