2 * Copyright 2022 Soren Stoutner <soren@stoutner.com>.
4 * This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc>.
6 * Privacy Browser PC is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * Privacy Browser PC is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Privacy Browser PC. If not, see <http://www.gnu.org/licenses/>.
20 // Application headers.
22 #include "UserAgentHelper.h"
23 #include "widgets/TabWidget.h"
25 // KDE Framework headers.
26 #include <KLocalizedString>
28 // Define the public database constants.
29 const QString UserAgentHelper::SYSTEM_DEFAULT_DATABASE = QLatin1String("System Default");
30 const QString UserAgentHelper::PRIVACY_BROWSER_DATABASE = QLatin1String("Privacy Browser");
31 const QString UserAgentHelper::WEB_ENGINE_DEFAULT_DATABASE = QLatin1String("WebEngine Default");
32 const QString UserAgentHelper::FIREFOX_LINUX_DATABASE = QLatin1String("Firefox Linux");
33 const QString UserAgentHelper::CHROMIUM_LINUX_DATABASE = QLatin1String("Chromium Linux");
34 const QString UserAgentHelper::FIREFOX_WINDOWS_DATABASE = QLatin1String("Firefox Windows");
35 const QString UserAgentHelper::CHROME_WINDOWS_DATABASE = QLatin1String("Chrome Windows");
36 const QString UserAgentHelper::EDGE_WINDOWS_DATABASE = QLatin1String("Edge Windows");
37 const QString UserAgentHelper::SAFARI_MACOS_DATABASE = QLatin1String("Safari macOS");
39 // Define the public user agent constants.
40 const QString UserAgentHelper::PRIVACY_BROWSER_USER_AGENT = QLatin1String("PrivacyBrowser/1.0");
41 const QString UserAgentHelper::FIREFOX_LINUX_USER_AGENT = QLatin1String("Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0");
42 const QString UserAgentHelper::CHROMIUM_LINUX_USER_AGENT = QLatin1String("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36");
43 const QString UserAgentHelper::FIREFOX_WINDOWS_USER_AGENT = QLatin1String("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0");
44 const QString UserAgentHelper::CHROME_WINDOWS_USER_AGENT = QLatin1String("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36");
45 const QString UserAgentHelper::EDGE_WINDOWS_USER_AGENT = QLatin1String("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54");
46 const QString UserAgentHelper::SAFARI_MACOS_USER_AGENT = QLatin1String("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15");
48 // Construct the class.
49 UserAgentHelper::UserAgentHelper() {
50 // Populate the translated user agents. Translated entries cannot be public static const.
51 SYSTEM_DEFAULT_TRANSLATED = i18nc("User agents", "System default");
52 PRIVACY_BROWSER_TRANSLATED = i18nc("User agents", "Privacy Browser");
53 WEB_ENGINE_DEFAULT_TRANSLATED = i18nc("User agents", "WebEngine default");
54 FIREFOX_LINUX_TRANSLATED = i18nc("User agents", "Firefox on Linux");
55 CHROMIUM_LINUX_TRANSLATED = i18nc("User agents", "Chromium on Linux");
56 FIREFOX_WINDOWS_TRANSLATED = i18nc("User agents", "Firefox on Windows");
57 CHROME_WINDOWS_TRANSLATED = i18nc("User agents", "Chrome on Windows");
58 EDGE_WINDOWS_TRANSLATED = i18nc("User agents", "Edge on Windows");
59 SAFARI_MACOS_TRANSLATED = i18nc("User agents", "Safari on macOS");
62 QString UserAgentHelper::getDatabaseUserAgentNameFromTranslatedName(const QString &translatedUserAgentName)
64 // Return the database user agent name.
65 if (translatedUserAgentName == SYSTEM_DEFAULT_TRANSLATED) return SYSTEM_DEFAULT_DATABASE; // System Default.
66 else if (translatedUserAgentName == PRIVACY_BROWSER_TRANSLATED) return PRIVACY_BROWSER_DATABASE; // Privacy Browser.
67 else if (translatedUserAgentName == WEB_ENGINE_DEFAULT_TRANSLATED) return WEB_ENGINE_DEFAULT_DATABASE; // WebEngine default.
68 else if (translatedUserAgentName == FIREFOX_LINUX_TRANSLATED) return FIREFOX_LINUX_DATABASE; // Firefox Linux.
69 else if (translatedUserAgentName == CHROMIUM_LINUX_TRANSLATED) return CHROMIUM_LINUX_DATABASE; // Chromium Linux.
70 else if (translatedUserAgentName == FIREFOX_WINDOWS_TRANSLATED) return FIREFOX_WINDOWS_DATABASE; // Firefox Windows.
71 else if (translatedUserAgentName == CHROME_WINDOWS_TRANSLATED) return CHROME_WINDOWS_DATABASE; // Chrome Windows.
72 else if (translatedUserAgentName == EDGE_WINDOWS_TRANSLATED) return EDGE_WINDOWS_DATABASE; // Edge Windows.
73 else if (translatedUserAgentName == SAFARI_MACOS_TRANSLATED) return SAFARI_MACOS_DATABASE; // Safari macOS.
74 else return translatedUserAgentName; // Return the custom user agent.
77 int UserAgentHelper::getDomainSettingsUserAgentIndex(const QString &userAgentName)
79 // Return the domain settings user agent index.
80 if (userAgentName == SYSTEM_DEFAULT_DATABASE) return 0; // System Default.
81 else if (userAgentName == PRIVACY_BROWSER_DATABASE) return 1; // Privacy Browser.
82 else if (userAgentName == WEB_ENGINE_DEFAULT_DATABASE) return 2; // WebEngine default.
83 else if (userAgentName == FIREFOX_LINUX_DATABASE) return 3; // Firefox Linux.
84 else if (userAgentName == CHROMIUM_LINUX_DATABASE) return 4; // Chromium Linux.
85 else if (userAgentName == FIREFOX_WINDOWS_DATABASE) return 5; // Firefox Windows.
86 else if (userAgentName == CHROME_WINDOWS_DATABASE) return 6; // Chrome Windows.
87 else if (userAgentName == EDGE_WINDOWS_DATABASE) return 7; // Edge Windows.
88 else if (userAgentName == SAFARI_MACOS_DATABASE) return 8; // Safari macOS.
89 else return -1; // Custom user agent.
92 QString UserAgentHelper::getUserAgentFromDatabaseName(const QString &userAgentDatabaseName)
94 if (userAgentDatabaseName == PRIVACY_BROWSER_DATABASE) return PRIVACY_BROWSER_USER_AGENT; // Privacy Browser.
95 else if (userAgentDatabaseName == WEB_ENGINE_DEFAULT_DATABASE) return TabWidget::webEngineDefaultUserAgent; // WebEngine default.
96 else if (userAgentDatabaseName == FIREFOX_LINUX_DATABASE) return FIREFOX_LINUX_USER_AGENT; // Firefox Linux.
97 else if (userAgentDatabaseName == CHROMIUM_LINUX_DATABASE) return CHROMIUM_LINUX_USER_AGENT; // Chromium Linux.
98 else if (userAgentDatabaseName == FIREFOX_WINDOWS_DATABASE) return FIREFOX_WINDOWS_USER_AGENT; // Firefox Windows.
99 else if (userAgentDatabaseName == CHROME_WINDOWS_DATABASE) return CHROME_WINDOWS_USER_AGENT; // Chrome Windows.
100 else if (userAgentDatabaseName == EDGE_WINDOWS_DATABASE) return EDGE_WINDOWS_USER_AGENT; // Edge Windows.
101 else if (userAgentDatabaseName == SAFARI_MACOS_DATABASE) return SAFARI_MACOS_USER_AGENT; // Safari macOS.
102 else return userAgentDatabaseName; // Return the custom user agent.
105 QString UserAgentHelper::getUserAgentFromTranslatedName(const QString &userAgentTranslatedName)
107 if (userAgentTranslatedName == PRIVACY_BROWSER_TRANSLATED) return PRIVACY_BROWSER_USER_AGENT; // Privacy Browser.
108 else if (userAgentTranslatedName == WEB_ENGINE_DEFAULT_TRANSLATED) return TabWidget::webEngineDefaultUserAgent; // WebEngine default.
109 else if (userAgentTranslatedName == FIREFOX_LINUX_TRANSLATED) return FIREFOX_LINUX_USER_AGENT; // Firefox on Linux.
110 else if (userAgentTranslatedName == CHROMIUM_LINUX_TRANSLATED) return CHROMIUM_LINUX_USER_AGENT; // Chromium on Linux.
111 else if (userAgentTranslatedName == FIREFOX_WINDOWS_TRANSLATED) return FIREFOX_WINDOWS_USER_AGENT; // Firefox on Windows.
112 else if (userAgentTranslatedName == CHROME_WINDOWS_TRANSLATED) return CHROME_WINDOWS_USER_AGENT; // Chrome on Windows.
113 else if (userAgentTranslatedName == EDGE_WINDOWS_TRANSLATED) return EDGE_WINDOWS_USER_AGENT; // Edge on Windows.
114 else if (userAgentTranslatedName == SAFARI_MACOS_TRANSLATED) return SAFARI_MACOS_USER_AGENT; // Safari on macOS.
115 else return userAgentTranslatedName; // Return the custom user agent.
118 QString UserAgentHelper::getResultingDomainSettingsUserAgent(const QString &rawUserAgent)
120 // Return the resulting user agent. If `System default` is selected, it looks up the default user agent from the settings.
121 if (rawUserAgent == SYSTEM_DEFAULT_DATABASE) return getUserAgentFromDatabaseName(Settings::userAgent()); // Return the default user agent.
122 else return getUserAgentFromDatabaseName(rawUserAgent); // Return the domain user agent.
125 QString UserAgentHelper::getTranslatedUserAgentNameFromDatabaseName(const QString &userAgentName)
127 // Return the translated user agent name.
128 if (userAgentName == PRIVACY_BROWSER_DATABASE) return PRIVACY_BROWSER_TRANSLATED; // Privacy Browser.
129 else if (userAgentName == WEB_ENGINE_DEFAULT_DATABASE) return WEB_ENGINE_DEFAULT_TRANSLATED; // WebEngine default.
130 else if (userAgentName == FIREFOX_LINUX_DATABASE) return FIREFOX_LINUX_TRANSLATED; // Firefox on Linux.
131 else if (userAgentName == CHROMIUM_LINUX_DATABASE) return CHROMIUM_LINUX_TRANSLATED; // Chromium on Linux.
132 else if (userAgentName == FIREFOX_WINDOWS_DATABASE) return FIREFOX_WINDOWS_TRANSLATED; // Firefox on Windows.
133 else if (userAgentName == CHROME_WINDOWS_DATABASE) return CHROME_WINDOWS_TRANSLATED; // Chrome on Windows.
134 else if (userAgentName == EDGE_WINDOWS_DATABASE) return EDGE_WINDOWS_TRANSLATED; // Edge on Windows.
135 else if (userAgentName == SAFARI_MACOS_DATABASE) return SAFARI_MACOS_TRANSLATED; // Safari on macOS.
136 else return userAgentName; // Return the custom user agent.