+void PrivacyWebEngineView::applyDomainSettingsWithoutReloading(const QString &hostname)
+{
+ // Apply the domain settings `false` does not reload the website.
+ applyDomainSettings(hostname, false);
+}
+
+void PrivacyWebEngineView::applyDomainSettings(const QString &hostname, const bool reloadWebsite)
+{
+ // Get the record for the hostname.
+ QSqlQuery domainQuery = DomainsDatabase::getDomainQuery(hostname);
+
+ // Check if the hostname has domain settings.
+ if (domainQuery.isValid()) // The hostname has domain settings.
+ {
+ // Get the domain record.
+ QSqlRecord domainRecord = domainQuery.record();
+
+ // Store the domain settings name.
+ domainSettingsName = domainRecord.field(DomainsDatabase::DOMAIN_NAME).value().toString();
+
+ // Set the JavaScript status.
+ switch (domainRecord.field(DomainsDatabase::JAVASCRIPT).value().toInt())
+ {
+ // Set the default JavaScript status.
+ case (DomainsDatabase::SYSTEM_DEFAULT):
+ {
+ webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScriptEnabled());
+
+ break;
+ }
+
+ // Disable JavaScript.
+ case (DomainsDatabase::DISABLED):
+ {
+ webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, false);
+
+ break;
+ }
+
+ // Enable JavaScript.
+ case (DomainsDatabase::ENABLED):
+ {
+ webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
+
+ break;
+ }
+ }
+
+ // Set the local storage status.
+ switch (domainRecord.field(DomainsDatabase::LOCAL_STORAGE).value().toInt())
+ {
+ // Set the default local storage status.
+ case (DomainsDatabase::SYSTEM_DEFAULT):
+ {
+ localStorageEnabled = Settings::localStorageEnabled();
+
+ break;
+ }
+
+ // Disable local storage.
+ case (DomainsDatabase::DISABLED):
+ {
+ localStorageEnabled = false;
+
+ break;
+ }
+
+ // Enable local storage.
+ case (DomainsDatabase::ENABLED):
+ {
+ localStorageEnabled = true;
+
+ break;
+ }
+ }
+
+ // Set the DOM storage status.
+ switch (domainRecord.field(DomainsDatabase::DOM_STORAGE).value().toInt())
+ {
+ // Set the default DOM storage status. QWebEngineSettings confusingly calls this local storage.
+ case (DomainsDatabase::SYSTEM_DEFAULT):
+ {
+ webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::domStorageEnabled());
+
+ break;
+ }
+
+ // Disable DOM storage. QWebEngineSettings confusingly calls this local storage.
+ case (DomainsDatabase::DISABLED):
+ {
+ webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, false);
+
+ break;
+ }
+
+ // Enable DOM storage. QWebEngineSettings confusingly calls this local storage.
+ case (DomainsDatabase::ENABLED):
+ {
+ webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
+
+ break;
+ }
+ }
+
+ // Set the user agent.
+ webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getResultingDomainSettingsUserAgent(domainRecord.field(DomainsDatabase::USER_AGENT).value().toString()));
+
+ // Check if a custom zoom factor is set.
+ if (domainRecord.field(DomainsDatabase::ZOOM_FACTOR).value().toInt())
+ {
+ // Store the current zoom factor.
+ setZoomFactor(domainRecord.field(DomainsDatabase::CUSTOM_ZOOM_FACTOR).value().toDouble());
+ }
+ else
+ {
+ // Reset the current zoom factor.
+ setZoomFactor(Settings::zoomFactor());
+ }
+ }
+ else // The hostname does not have domain settings.
+ {
+ // Reset the domain settings name.
+ domainSettingsName = QLatin1String("");
+
+ // Set the JavaScript status.
+ webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScriptEnabled());
+
+ // Set the local storage status.
+ localStorageEnabled = Settings::localStorageEnabled();
+
+ // Set DOM storage. In QWebEngineSettings it is called Local Storage.
+ webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::domStorageEnabled());
+
+ // Set the user agent.
+ webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgentFromDatabaseName(Settings::userAgent()));
+
+ // Set the zoom factor.
+ setZoomFactor(Settings::zoomFactor());
+ }
+
+ // Reload the website if requested.
+ if (reloadWebsite)
+ reload();
+
+ // Update the UI.
+ emit updateUi(this);
+}
+