26#include <QtWebEngineCoreVersion>
30 QWebEngineSettings::AutoLoadImages
31 ,QWebEngineSettings::JavascriptEnabled
32 ,QWebEngineSettings::JavascriptCanOpenWindows
33 ,QWebEngineSettings::JavascriptCanAccessClipboard
34 ,QWebEngineSettings::JavascriptCanPaste
35 ,QWebEngineSettings::AllowWindowActivationFromJavaScript
36 ,QWebEngineSettings::LocalStorageEnabled
37 ,QWebEngineSettings::FullScreenSupportEnabled
38 ,QWebEngineSettings::AllowRunningInsecureContent
39 ,QWebEngineSettings::PlaybackRequiresUserGesture
40#if QTWEBENGINECORE_VERSION >= QT_VERSION_CHECK(6, 6, 0)
41 ,QWebEngineSettings::ReadingFromCanvasEnabled
43#if QTWEBENGINECORE_VERSION >= QT_VERSION_CHECK(6, 7, 0)
44 ,QWebEngineSettings::ForceDarkMode
48 QWebEnginePage::Notifications
49 ,QWebEnginePage::Geolocation
50 ,QWebEnginePage::MediaAudioCapture
51 ,QWebEnginePage::MediaVideoCapture
52 ,QWebEnginePage::MediaAudioVideoCapture
53 ,QWebEnginePage::MouseLock
54 ,QWebEnginePage::DesktopVideoCapture
55 ,QWebEnginePage::DesktopAudioVideoCapture
61, m_defaultCookies(Deny)
81 m_defaultCookies = settings.
value(
QSL(
"allowCookies"),
true).toBool() ?
Allow :
Deny;
89 for (
auto it = defaultFeatures.begin(); it != defaultFeatures.end(); ++it) {
97 QHash<QWebEngineSettings::WebAttribute, bool> attributes;
98 QString host = url.host();
100 if (host.isEmpty()) {
103 attributes[attribute] =
mApp->webSettings()->testAttribute(attribute);
110 query.prepare(attributesSql);
111 query.addBindValue(host);
115 for (
int i = 0;
i < query.record().count(); ++
i) {
120 attributes[attribute] =
true;
122 else if (perm ==
Deny) {
123 attributes[attribute] =
false;
126 attributes[attribute] =
mApp->webSettings()->testAttribute(attribute);
136 QString host = url.host();
138 if (column.isEmpty() || host.isEmpty()) {
143 job->addBindValue(
value);
144 job->addBindValue(host);
146 if (job->numRowsAffected() == 0) {
147 auto job = new SqlQueryJob(QSL(
"INSERT INTO %2 (server, %1) VALUES (?,?)").arg(column, sqlTable()), this);
148 job->addBindValue(host);
149 job->addBindValue(value);
173 if (column.isEmpty()) {
176 if (host.isEmpty()) {
181 query.prepare(
QSL(
"SELECT %1 FROM %2 WHERE server=?").arg(column,
sqlTable()));
182 query.addBindValue(host);
186 int allow_option = query.value(column).toInt();
233 return m_defaultCookies;
237 qWarning() <<
"Unknown option:" << option;
245 qWarning() <<
"Unknown feature:" << feature;
249 return defaultFeatures[feature];
255 qWarning() <<
"Unknown attribute:" << attribute;
259 if (
mApp->webSettings()->testAttribute(attribute)) {
269 switch (permission) {
285 return tr(
"Zoom level");
287 return tr(
"Cookies");
289 qWarning() <<
"Unknown option:" << option;
290 return tr(
"Unknown");;
297 case QWebEnginePage::Notifications:
298 return tr(
"Notifications");
299 case QWebEnginePage::Geolocation:
300 return tr(
"Geolocation");
301 case QWebEnginePage::MediaAudioCapture:
302 return tr(
"Microphone");
303 case QWebEnginePage::MediaVideoCapture:
305 case QWebEnginePage::MediaAudioVideoCapture:
306 return tr(
"Microphone and Camera");
307 case QWebEnginePage::MouseLock:
308 return tr(
"Hide mouse pointer");
309 case QWebEnginePage::DesktopVideoCapture:
310 return tr(
"Screen capture");
311 case QWebEnginePage::DesktopAudioVideoCapture:
312 return tr(
"Screen capture with audio");
314 qWarning() <<
"Unknown feature:" << feature;
315 return tr(
"Unknown");
322 case QWebEngineSettings::AutoLoadImages:
323 return tr(
"Autoload images");
325 case QWebEngineSettings::JavascriptEnabled:
326 return tr(
"Enable JavaScript");
327 case QWebEngineSettings::JavascriptCanOpenWindows:
328 return tr(
"JavaScript: Open popup windows");
329 case QWebEngineSettings::JavascriptCanAccessClipboard:
330 return tr(
"JavaScript: Access clipboard");
331 case QWebEngineSettings::JavascriptCanPaste:
332 return tr(
"JavaScript: Paste from clipboard");
333 case QWebEngineSettings::AllowWindowActivationFromJavaScript:
334 return tr(
"JavaScript: Activate windows");
336 case QWebEngineSettings::LocalStorageEnabled:
337 return tr(
"Local storage");
338 case QWebEngineSettings::FullScreenSupportEnabled:
339 return tr(
"FullScreen support");
340 case QWebEngineSettings::AllowRunningInsecureContent:
341 return tr(
"Run insecure content");
342 case QWebEngineSettings::PlaybackRequiresUserGesture:
343 return tr(
"Automatic playing of videos");
344#if QTWEBENGINECORE_VERSION >= QT_VERSION_CHECK(6, 6, 0)
345 case QWebEngineSettings::ReadingFromCanvasEnabled:
346 return tr(
"Allow reading from canvas");
348#if QTWEBENGINECORE_VERSION >= QT_VERSION_CHECK(6, 7, 0)
349 case QWebEngineSettings::ForceDarkMode:
350 return tr(
"Force dark mode");
354 qWarning() <<
"Unknown attribute:" << attribute;
355 return tr(
"Unknown");
361 switch (permission) {
369 return tr(
"Default");
371 qWarning() <<
"Uknown permission:" << permission;
372 return tr(
"Unknown");
380 return QSL(
"allow_cookies");
382 return QSL(
"zoom_level");
384 qWarning() <<
"Unknown option:" << option;
385 return QLatin1String(
"");
392 case QWebEnginePage::Notifications:
393 return QSL(
"f_notifications");
394 case QWebEnginePage::Geolocation:
395 return QSL(
"f_geolocation");
396 case QWebEnginePage::MediaAudioCapture:
397 return QSL(
"f_media_audio_capture");
398 case QWebEnginePage::MediaVideoCapture:
399 return QSL(
"f_media_video_capture");
400 case QWebEnginePage::MediaAudioVideoCapture:
401 return QSL(
"f_media_audio_video_capture");
402 case QWebEnginePage::MouseLock:
403 return QSL(
"f_mouse_lock");
404 case QWebEnginePage::DesktopVideoCapture:
405 return QSL(
"f_desktop_video_capture");
406 case QWebEnginePage::DesktopAudioVideoCapture:
407 return QSL(
"f_desktop_audio_video_capture");
409 qWarning() <<
"Unknown feature:" << feature;
410 return QSL(
"f_notifications");
417 case QWebEngineSettings::AutoLoadImages:
418 return QSL(
"wa_autoload_images");
420 case QWebEngineSettings::JavascriptEnabled:
421 return QSL(
"wa_js_enabled");
422 case QWebEngineSettings::JavascriptCanOpenWindows:
423 return QSL(
"wa_js_open_windows");
424 case QWebEngineSettings::JavascriptCanAccessClipboard:
425 return QSL(
"wa_js_access_clipboard");
426 case QWebEngineSettings::JavascriptCanPaste:
427 return QSL(
"wa_js_can_paste");
428 case QWebEngineSettings::AllowWindowActivationFromJavaScript:
429 return QSL(
"wa_js_window_activation");
431 case QWebEngineSettings::LocalStorageEnabled:
432 return QSL(
"wa_local_storage");
433 case QWebEngineSettings::FullScreenSupportEnabled:
434 return QSL(
"wa_fullscreen_support");
435 case QWebEngineSettings::AllowRunningInsecureContent:
436 return QSL(
"wa_run_insecure_content");
437 case QWebEngineSettings::PlaybackRequiresUserGesture:
438 return QSL(
"wa_playback_needs_gesture");
439#if QTWEBENGINECORE_VERSION >= QT_VERSION_CHECK(6, 6, 0)
440 case QWebEngineSettings::ReadingFromCanvasEnabled:
441 return QSL(
"wa_reading_from_canvas");
443#if QTWEBENGINECORE_VERSION >= QT_VERSION_CHECK(6, 7, 0)
444 case QWebEngineSettings::ForceDarkMode:
445 return QSL(
"wa_force_dark_mode");
449 qWarning() <<
"Unknown attribute:" << attribute;
450 return QSL(
"wa_js_enabled");
467 siteSettings.
server = url.host();
476 query.prepare(everythingSql.arg(
sqlTable()));
477 query.addBindValue(url.host());
491 siteSettings.
ZoomLevel = query.value(index++).toInt();
499 if (siteSettings.
server.isEmpty()) {
512 job->addBindValue(siteSettings.
ZoomLevel);
513 job->addBindValue(siteSettings.
server);
516 if (job->numRowsAffected() == 0) {
517 auto job = new SqlQueryJob(everythingInsertSql.arg(sqlTable()), this);
519 for (int i = 0; i < supportedAttribute.size(); ++i) {
520 job->addBindValue(siteSettings.attributes[supportedAttribute[i]]);
526 job->addBindValue(siteSettings.
ZoomLevel);
527 job->addBindValue(siteSettings.
server);
537 return QSL(
"site_settings");
540void SiteSettingsManager::prepareSqls() {
542 attributesSql =
QSL(
"SELECT ");
546 attributesSql.append(
QSL(
", "));
551 attributesSql.append(
QSL(
" FROM %1 WHERE server=?").arg(
sqlTable()));
555 everythingSql =
QSL(
"SELECT ");
559 everythingSql.append(
QSL(
", "));
565 everythingSql.append(
QSL(
", "));
569 everythingSql.append(
QSL(
", "));
572 everythingSql.append(
QSL(
", "));
575 everythingSql.append(
QSL(
" FROM %1 WHERE server=?"));
579 everythingInsertSql =
QSL(
"INSERT INTO %1 (");
582 everythingInsertSql.append(
QSL(
", "));
586 everythingInsertSql.append(
QSL(
", "));
590 everythingInsertSql.append(
QSL(
", "));
594 everythingInsertSql.append(
QSL(
", server"));
596 everythingInsertSql.append(
QSL(
") Values ("));
599 for (
int i = 0;
i < index; ++
i) {
601 everythingInsertSql.append(
QSL(
", "));
603 everythingInsertSql.append(
QSL(
"?"));
605 everythingInsertSql.append(
QSL(
")"));
609 everythingUpdateSql =
QSL(
"UPDATE %1 SET ");
612 everythingUpdateSql.append(
QSL(
"=?, "));
616 everythingUpdateSql.append(
QSL(
"=?, "));
620 everythingUpdateSql.append(
QSL(
"=?, "));
623 everythingUpdateSql.append(
QSL(
"=? "));
625 everythingUpdateSql.append(
QSL(
" WHERE server=?"));
void beginGroup(const QString &prefix)
QVariant value(const QString &key, const QVariant &defaultValue=QVariant())
void setValue(const QString &key, const QVariant &defaultValue=QVariant())
Permission getPermission(const QString &column, const QString &host)
QString getPermissionName(const Permission permission) const
QString featureToSqlColumn(const QWebEnginePage::Feature feature) const
QList< QWebEnginePage::Feature > getSupportedFeatures() const
SiteSettingsManager(QObject *parent=nullptr)
QString webAttributeToSqlColumn(const QWebEngineSettings::WebAttribute attribute) const
Permission getDefaultPermission(const PageOptions option)
Permission intToPermission(const int permission) const
QHash< QWebEngineSettings::WebAttribute, bool > getWebAttributes(const QUrl &url)
void setOption(const QString &column, const QUrl &url, const int value)
QString getOptionName(const SiteSettingsManager::PageOptions option) const
QString optionToSqlColumn(const PageOptions option) const
QList< QWebEngineSettings::WebAttribute > getSupportedAttribute() const
void setSiteSettings(SiteSettings &siteSettings)
SiteSettings getSiteSettings(QUrl &url)
static SqlDatabase * instance()
void finished(SqlQueryJob *job)
int value(const QColor &c)
const QList< QWebEngineSettings::WebAttribute > supportedAttribute
const QList< QWebEnginePage::Feature > supportedFeatures
QMap< QWebEnginePage::Feature, Permission > features
QMap< QWebEngineSettings::WebAttribute, Permission > attributes