summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzabolcs David <davidsz@inf.u-szeged.hu>2015-11-06 05:33:47 -0800
committerJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-11-12 10:46:55 +0000
commit6677ddec16488f21c5f730f4a4005c66d11d81e1 (patch)
tree048c51f6dfa789d6c06b04b1c9603b89596d608d
parentc61fa3df0fc3373de79a633da8f9b42d41523b55 (diff)
Fix resetting attributes in top level WebEngineSettings
Store default values in separate containers and remove related FIXMEs from WebEngineSettings. Add API test case in order to demonstrate the bug. Change-Id: If9d98265cab0f41b543fe690d534879b65f2b577 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
-rw-r--r--src/core/web_engine_settings.cpp118
-rw-r--r--src/core/web_engine_settings.h4
-rw-r--r--tests/auto/widgets/qwebenginesettings/qwebenginesettings.pro2
-rw-r--r--tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp63
-rw-r--r--tests/auto/widgets/widgets.pro1
5 files changed, 140 insertions, 48 deletions
diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp
index 19558980b..ff67ed6a6 100644
--- a/src/core/web_engine_settings.cpp
+++ b/src/core/web_engine_settings.cpp
@@ -46,6 +46,10 @@
namespace QtWebEngineCore {
+QHash<WebEngineSettings::Attribute, bool> WebEngineSettings::m_defaultAttributes;
+QHash<WebEngineSettings::FontFamily, QString> WebEngineSettings::m_defaultFontFamilies;
+QHash<WebEngineSettings::FontSize, int> WebEngineSettings::m_defaultFontSizes;
+
static const int batchTimerTimeout = 0;
class BatchTimer : public QTimer {
@@ -132,9 +136,12 @@ bool WebEngineSettings::testAttribute(WebEngineSettings::Attribute attr) const
void WebEngineSettings::resetAttribute(WebEngineSettings::Attribute attr)
{
- if (!parentSettings) // FIXME: Set initial defaults.
- return;
- m_attributes.remove(attr);
+ if (!parentSettings) {
+ Q_ASSERT(m_defaultAttributes.contains(attr));
+ m_attributes.insert(attr, m_defaultAttributes.value(attr));
+ } else {
+ m_attributes.remove(attr);
+ }
scheduleApplyRecursively();
}
@@ -155,9 +162,12 @@ QString WebEngineSettings::fontFamily(WebEngineSettings::FontFamily which)
void WebEngineSettings::resetFontFamily(WebEngineSettings::FontFamily which)
{
- if (!parentSettings) // FIXME: Set initial defaults.
- return;
- m_fontFamilies.remove(which);
+ if (!parentSettings) {
+ Q_ASSERT(m_defaultFontFamilies.contains(which));
+ m_fontFamilies.insert(which, m_defaultFontFamilies.value(which));
+ } else {
+ m_fontFamilies.remove(which);
+ }
scheduleApplyRecursively();
}
@@ -178,9 +188,12 @@ int WebEngineSettings::fontSize(WebEngineSettings::FontSize type) const
void WebEngineSettings::resetFontSize(WebEngineSettings::FontSize type)
{
- if (!parentSettings) // FIXME: Set initial defaults.
- return;
- m_fontSizes.remove(type);
+ if (!parentSettings) {
+ Q_ASSERT(m_defaultFontSizes.contains(type));
+ m_fontSizes.insert(type, m_defaultFontSizes.value(type));
+ } else {
+ m_fontSizes.remove(type);
+ }
scheduleApplyRecursively();
}
@@ -199,45 +212,54 @@ QString WebEngineSettings::defaultTextEncoding() const
void WebEngineSettings::initDefaults(bool offTheRecord)
{
- // Initialize the default settings.
- m_attributes.insert(AutoLoadImages, true);
- m_attributes.insert(JavascriptEnabled, true);
- m_attributes.insert(JavascriptCanOpenWindows, true);
- m_attributes.insert(JavascriptCanAccessClipboard, false);
- m_attributes.insert(LinksIncludedInFocusChain, true);
- m_attributes.insert(LocalStorageEnabled, !offTheRecord);
- m_attributes.insert(LocalContentCanAccessRemoteUrls, false);
- m_attributes.insert(XSSAuditingEnabled, false);
- m_attributes.insert(SpatialNavigationEnabled, false);
- m_attributes.insert(LocalContentCanAccessFileUrls, true);
- m_attributes.insert(HyperlinkAuditingEnabled, false);
- m_attributes.insert(ScrollAnimatorEnabled, false);
- m_attributes.insert(ErrorPageEnabled, true);
- m_attributes.insert(PluginsEnabled, false);
- m_attributes.insert(FullScreenSupportEnabled, false);
-
- // Default fonts
- QFont defaultFont;
- defaultFont.setStyleHint(QFont::Serif);
- m_fontFamilies.insert(StandardFont, defaultFont.defaultFamily());
- m_fontFamilies.insert(SerifFont, defaultFont.defaultFamily());
-
- defaultFont.setStyleHint(QFont::Fantasy);
- m_fontFamilies.insert(FantasyFont, defaultFont.defaultFamily());
-
- defaultFont.setStyleHint(QFont::Cursive);
- m_fontFamilies.insert(CursiveFont, defaultFont.defaultFamily());
-
- defaultFont.setStyleHint(QFont::SansSerif);
- m_fontFamilies.insert(SansSerifFont, defaultFont.defaultFamily());
-
- defaultFont.setStyleHint(QFont::Monospace);
- m_fontFamilies.insert(FixedFont, defaultFont.defaultFamily());
-
- m_fontSizes.insert(MinimumFontSize, 0);
- m_fontSizes.insert(MinimumLogicalFontSize, 6);
- m_fontSizes.insert(DefaultFixedFontSize, 13);
- m_fontSizes.insert(DefaultFontSize, 16);
+ if (m_defaultAttributes.isEmpty()) {
+ // Initialize the default settings.
+ m_defaultAttributes.insert(AutoLoadImages, true);
+ m_defaultAttributes.insert(JavascriptEnabled, true);
+ m_defaultAttributes.insert(JavascriptCanOpenWindows, true);
+ m_defaultAttributes.insert(JavascriptCanAccessClipboard, false);
+ m_defaultAttributes.insert(LinksIncludedInFocusChain, true);
+ m_defaultAttributes.insert(LocalStorageEnabled, !offTheRecord);
+ m_defaultAttributes.insert(LocalContentCanAccessRemoteUrls, false);
+ m_defaultAttributes.insert(XSSAuditingEnabled, false);
+ m_defaultAttributes.insert(SpatialNavigationEnabled, false);
+ m_defaultAttributes.insert(LocalContentCanAccessFileUrls, true);
+ m_defaultAttributes.insert(HyperlinkAuditingEnabled, false);
+ m_defaultAttributes.insert(ScrollAnimatorEnabled, false);
+ m_defaultAttributes.insert(ErrorPageEnabled, true);
+ m_defaultAttributes.insert(PluginsEnabled, false);
+ m_defaultAttributes.insert(FullScreenSupportEnabled, false);
+ }
+ m_attributes = m_defaultAttributes;
+
+ if (m_defaultFontFamilies.isEmpty()) {
+ // Default fonts
+ QFont defaultFont;
+ defaultFont.setStyleHint(QFont::Serif);
+ m_defaultFontFamilies.insert(StandardFont, defaultFont.defaultFamily());
+ m_defaultFontFamilies.insert(SerifFont, defaultFont.defaultFamily());
+
+ defaultFont.setStyleHint(QFont::Fantasy);
+ m_defaultFontFamilies.insert(FantasyFont, defaultFont.defaultFamily());
+
+ defaultFont.setStyleHint(QFont::Cursive);
+ m_defaultFontFamilies.insert(CursiveFont, defaultFont.defaultFamily());
+
+ defaultFont.setStyleHint(QFont::SansSerif);
+ m_defaultFontFamilies.insert(SansSerifFont, defaultFont.defaultFamily());
+
+ defaultFont.setStyleHint(QFont::Monospace);
+ m_defaultFontFamilies.insert(FixedFont, defaultFont.defaultFamily());
+ }
+ m_fontFamilies = m_defaultFontFamilies;
+
+ if (m_defaultFontSizes.isEmpty()) {
+ m_defaultFontSizes.insert(MinimumFontSize, 0);
+ m_defaultFontSizes.insert(MinimumLogicalFontSize, 6);
+ m_defaultFontSizes.insert(DefaultFixedFontSize, 13);
+ m_defaultFontSizes.insert(DefaultFontSize, 16);
+ }
+ m_fontSizes = m_defaultFontSizes;
m_defaultEncoding = QStringLiteral("ISO-8859-1");
}
diff --git a/src/core/web_engine_settings.h b/src/core/web_engine_settings.h
index 29ef079b7..3d3d734d0 100644
--- a/src/core/web_engine_settings.h
+++ b/src/core/web_engine_settings.h
@@ -136,6 +136,10 @@ private:
WebEngineSettings *parentSettings;
QSet<WebEngineSettings *> childSettings;
+ static QHash<Attribute, bool> m_defaultAttributes;
+ static QHash<FontFamily, QString> m_defaultFontFamilies;
+ static QHash<FontSize, int> m_defaultFontSizes;
+
friend class BatchTimer;
friend class WebContentsAdapter;
};
diff --git a/tests/auto/widgets/qwebenginesettings/qwebenginesettings.pro b/tests/auto/widgets/qwebenginesettings/qwebenginesettings.pro
new file mode 100644
index 000000000..70786e70f
--- /dev/null
+++ b/tests/auto/widgets/qwebenginesettings/qwebenginesettings.pro
@@ -0,0 +1,2 @@
+include(../tests.pri)
+QT *= core-private gui-private
diff --git a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp
new file mode 100644
index 000000000..0f6a6062e
--- /dev/null
+++ b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp
@@ -0,0 +1,63 @@
+/*
+ Copyright (C) 2015 The Qt Company Ltd.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <QtTest/QtTest>
+
+#include <qwebengineprofile.h>
+#include <qwebenginesettings.h>
+
+class tst_QWebEngineSettings: public QObject {
+ Q_OBJECT
+
+private Q_SLOTS:
+ void resetAttributes();
+};
+
+void tst_QWebEngineSettings::resetAttributes()
+{
+ QWebEngineProfile profile;
+ QWebEngineSettings *settings = profile.settings();
+
+ // Attribute
+ bool defaultValue = settings->testAttribute(QWebEngineSettings::FullScreenSupportEnabled);
+ settings->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, !defaultValue);
+ QCOMPARE(!defaultValue, settings->testAttribute(QWebEngineSettings::FullScreenSupportEnabled));
+ settings->resetAttribute(QWebEngineSettings::FullScreenSupportEnabled);
+ QCOMPARE(defaultValue, settings->testAttribute(QWebEngineSettings::FullScreenSupportEnabled));
+
+ // Font family
+ QString defaultFamily = settings->fontFamily(QWebEngineSettings::StandardFont);
+ QString newFontFamily("PugDog");
+ settings->setFontFamily(QWebEngineSettings::StandardFont, newFontFamily);
+ QCOMPARE(newFontFamily, settings->fontFamily(QWebEngineSettings::StandardFont));
+ settings->resetFontFamily(QWebEngineSettings::StandardFont);
+ QCOMPARE(defaultFamily, settings->fontFamily(QWebEngineSettings::StandardFont));
+
+ // Font size
+ int defaultSize = settings->fontSize(QWebEngineSettings::MinimumFontSize);
+ int newSize = defaultSize + 10;
+ settings->setFontSize(QWebEngineSettings::MinimumFontSize, newSize);
+ QCOMPARE(newSize, settings->fontSize(QWebEngineSettings::MinimumFontSize));
+ settings->resetFontSize(QWebEngineSettings::MinimumFontSize);
+ QCOMPARE(defaultSize, settings->fontSize(QWebEngineSettings::MinimumFontSize));
+}
+
+QTEST_MAIN(tst_QWebEngineSettings)
+
+#include "tst_qwebenginesettings.moc"
diff --git a/tests/auto/widgets/widgets.pro b/tests/auto/widgets/widgets.pro
index 20aeea78b..986d5bbee 100644
--- a/tests/auto/widgets/widgets.pro
+++ b/tests/auto/widgets/widgets.pro
@@ -8,6 +8,7 @@ SUBDIRS += \
qwebengineinspector \
qwebengineprofile \
qwebenginescript \
+ qwebenginesettings \
qwebengineview
qtHaveModule(positioning) {