Falkon Develop
Cross-platform Qt-based web browser
sitesettingsmanager.h
Go to the documentation of this file.
1/* ============================================================
2 * Falkon - Qt web browser
3 * Copyright (C) 2022 Juraj Oravec <jurajoravec@mailo.com>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 * ============================================================ */
18
19#ifndef SITESETTINGS_MANAGER_H
20#define SITESETTINGS_MANAGER_H
21
22#include "qzcommon.h"
23#include <QWebEnginePage>
24#include <QWebEngineSettings>
25
26class QUrl;
27
28
29class FALKON_EXPORT SiteSettingsManager : public QObject
30{
31 Q_OBJECT
32
33public:
35 Default = 0,
36 Allow = 1,
37 Deny = 2,
38 Ask = 3,
39 };
41
42 /* Browser options */
46 };
48
50 {
51 Permission AllowCookies = Default;
52 int ZoomLevel = -1;
53 QMap<QWebEngineSettings::WebAttribute, Permission> attributes; /* Enable disable soem feature eg. Javascript, Images etc */
54 QMap<QWebEnginePage::Feature, Permission> features; /* HTML permissions */
55 QString server;
56 bool operator==(const SiteSettings &other) const {
57 for (auto it = attributes.begin(); it != attributes.end(); ++it) {
58 if (it.value() != other.attributes[it.key()]) {
59 return false;
60 }
61 }
62 for (auto it = features.begin(); it != features.end(); ++it) {
63 if (it.value() != other.features[it.key()]) {
64 return false;
65 }
66 }
67 if ((AllowCookies != other.AllowCookies)
68 || (ZoomLevel != other.ZoomLevel)
69 || (server != other.server)
70 ) {
71 return false;
72 }
73 return true;
74 }
75 };
76
77 explicit SiteSettingsManager(QObject *parent = nullptr);
79
80 void loadSettings();
81 void saveSettings();
82
83 QHash<QWebEngineSettings::WebAttribute, bool> getWebAttributes(const QUrl &url);
84
85 Permission getPermission(const QString &column, const QString &host);
86 Permission getPermission(const PageOptions option, const QString &host);
87 Permission getPermission(const QWebEnginePage::Feature feature, const QString &host);
88 Permission getPermission(const QWebEngineSettings::WebAttribute attribute, const QString &host);
89
90 Permission getPermission(const QString &column, const QUrl &url);
91 Permission getPermission(const PageOptions option, const QUrl &url);
92 Permission getPermission(const QWebEnginePage::Feature feature, const QUrl &url);
93 Permission getPermission(const QWebEngineSettings::WebAttribute attribute, const QUrl &url);
94
95 void setOption(const QString &column, const QUrl &url, const int value);
96 void setOption(const PageOptions option, const QUrl &url, const int value);
97 void setOption(const QWebEnginePage::Feature &feature, const QUrl &url, const Permission value);
98 void setOption(const QWebEngineSettings::WebAttribute &attribute, const QUrl &url, const Permission value);
99
100 Permission getDefaultPermission(const PageOptions option);
101 Permission getDefaultPermission(const QWebEnginePage::Feature feature) const;
102 Permission getDefaultPermission(const QWebEngineSettings::WebAttribute attribute) const;
103
104 QString getOptionName(const SiteSettingsManager::PageOptions option) const;
105 QString getOptionName(const QWebEnginePage::Feature feature) const;
106 QString getOptionName(const QWebEngineSettings::WebAttribute attribute) const;
107
108 QString getPermissionName(const Permission permission) const;
109
110 QString webAttributeToSqlColumn(const QWebEngineSettings::WebAttribute attribute) const;
111 QString featureToSqlColumn(const QWebEnginePage::Feature feature) const;
112 QString optionToSqlColumn(const PageOptions option) const;
113
114 QList<QWebEngineSettings::WebAttribute> getSupportedAttribute() const;
115 QList<QWebEnginePage::Feature> getSupportedFeatures() const;
116
117 SiteSettings getSiteSettings(QUrl &url);
118 void setSiteSettings(SiteSettings &siteSettings);
119 QString sqlTable();
120 Permission intToPermission(const int permission) const;
121
122private:
123 void prepareSqls();
124
125
126 QMap<QWebEnginePage::Feature, Permission> defaultFeatures;
127 SiteSettingsManager::Permission m_defaultCookies;
128
129 QString attributesSql;
130 QString everythingSql;
131 QString everythingInsertSql;
132 QString everythingUpdateSql;
133};
134
135
137
138// Hint to QVector to use std::realloc on item moving
140
141
142#endif // SITESETTINGS_MANAGER_H
Q_ENUM(PageOptions)
Q_ENUM(Permission)
int value(const QColor &c)
Definition: colors.cpp:238
#define FALKON_EXPORT
Definition: qzcommon.h:28
SiteSettingsManager::SiteSettings SiteSettings
Q_DECLARE_TYPEINFO(SiteSettings, Q_MOVABLE_TYPE)
bool operator==(const SiteSettings &other) const
QMap< QWebEnginePage::Feature, Permission > features
QMap< QWebEngineSettings::WebAttribute, Permission > attributes