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/core/web_contents_adapter.cpp | 3 +++ src/core/web_engine_settings.cpp | 12 ++---------- src/core/web_engine_settings.h | 3 ++- 3 files changed, 7 insertions(+), 11 deletions(-) (limited to 'src/core') diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index d2eb076d6..a4a8bbe23 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 4d0e727e3..507866e56 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 5e19c242d..a1c41c187 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 m_batchTimer; friend class BatchTimer; + friend class WebContentsAdapter; }; #endif // WEB_ENGINE_SETTINGS_H -- cgit v1.2.3