aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/settings/settings/EditSettingsForm.jsx8
-rw-r--r--src/config.ts16
-rw-r--r--src/containers/settings/EditSettingsScreen.tsx17
-rw-r--r--src/i18n/locales/en-US.json1
-rw-r--r--src/index.ts17
5 files changed, 56 insertions, 3 deletions
diff --git a/src/components/settings/settings/EditSettingsForm.jsx b/src/components/settings/settings/EditSettingsForm.jsx
index e6cba922b..d0da4ed14 100644
--- a/src/components/settings/settings/EditSettingsForm.jsx
+++ b/src/components/settings/settings/EditSettingsForm.jsx
@@ -798,6 +798,14 @@ class EditSettingsForm extends Component {
798 798
799 <Hr /> 799 <Hr />
800 800
801 <Select field={form.$('webRTCIPHandlingPolicy')} />
802
803 <p className="settings__help">
804 {intl.formatMessage(messages.appRestartRequired)}
805 </p>
806
807 <Hr />
808
801 <Select field={form.$('searchEngine')} /> 809 <Select field={form.$('searchEngine')} />
802 810
803 <p className="settings__help"> 811 <p className="settings__help">
diff --git a/src/config.ts b/src/config.ts
index c8cb09d84..1261d900f 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -38,6 +38,21 @@ export const CDN_URL = 'https://cdn.franzinfra.com';
38 38
39export const KEEP_WS_LOADED_USID = '0a0aa000-0a0a-49a0-a000-a0a0a0a0a0a0'; 39export const KEEP_WS_LOADED_USID = '0a0aa000-0a0a-49a0-a000-a0a0a0a0a0a0';
40 40
41const defaultWebRTCIPHandlingPolicy = 'default';
42const publicWebRTCIPHandlingPolicy = 'default_public_interface_only';
43const publicPrivateWebRTCIPHandlingPolicy =
44 'default_public_and_private_interfaces';
45const disableWebRTCIPHandlingPolicy = 'disable_non_proxied_udp';
46
47export const WEBRTC_IP_HANDLING_POLICY = {
48 [defaultWebRTCIPHandlingPolicy]: 'Expose user public and local IPs',
49 [publicWebRTCIPHandlingPolicy]:
50 'Expose user public IP, but not expose user local IP',
51 [publicPrivateWebRTCIPHandlingPolicy]:
52 'Expose user public and local IPs (only use default route used by http)',
53 [disableWebRTCIPHandlingPolicy]: 'Do not expose public or local IPs',
54};
55
41// TODO: Need to convert many of these to i18n 56// TODO: Need to convert many of these to i18n
42export const HIBERNATION_STRATEGIES = { 57export const HIBERNATION_STRATEGIES = {
43 10: 'Extremely Fast Hibernation (10sec)', 58 10: 'Extremely Fast Hibernation (10sec)',
@@ -397,6 +412,7 @@ export const DEFAULT_APP_SETTINGS = {
397 sidebarServicesLocation: SIDEBAR_SERVICES_LOCATION_TOPLEFT, 412 sidebarServicesLocation: SIDEBAR_SERVICES_LOCATION_TOPLEFT,
398 iconSize: iconSizeBias, 413 iconSize: iconSizeBias,
399 navigationBarBehaviour: 'custom', 414 navigationBarBehaviour: 'custom',
415 webRTCIPHandlingPolicy: disableWebRTCIPHandlingPolicy,
400 searchEngine: SEARCH_ENGINE_STARTPAGE, 416 searchEngine: SEARCH_ENGINE_STARTPAGE,
401 translatorLanguage: 'en', 417 translatorLanguage: 'en',
402 translatorEngine: TRANSLATOR_ENGINE_LIBRETRANSLATE, 418 translatorEngine: TRANSLATOR_ENGINE_LIBRETRANSLATE,
diff --git a/src/containers/settings/EditSettingsScreen.tsx b/src/containers/settings/EditSettingsScreen.tsx
index a4d7ba0eb..162d422ce 100644
--- a/src/containers/settings/EditSettingsScreen.tsx
+++ b/src/containers/settings/EditSettingsScreen.tsx
@@ -26,6 +26,7 @@ import {
26 WAKE_UP_HIBERNATION_STRATEGIES, 26 WAKE_UP_HIBERNATION_STRATEGIES,
27 SPLIT_COLUMNS_MIN, 27 SPLIT_COLUMNS_MIN,
28 SPLIT_COLUMNS_MAX, 28 SPLIT_COLUMNS_MAX,
29 WEBRTC_IP_HANDLING_POLICY,
29} from '../../config'; 30} from '../../config';
30import { isMac } from '../../environment'; 31import { isMac } from '../../environment';
31 32
@@ -103,6 +104,10 @@ const messages = defineMessages({
103 id: 'settings.app.form.navigationBarBehaviour', 104 id: 'settings.app.form.navigationBarBehaviour',
104 defaultMessage: 'Navigation bar behaviour', 105 defaultMessage: 'Navigation bar behaviour',
105 }, 106 },
107 webRTCIPHandlingPolicy: {
108 id: 'settings.app.form.webRTCIPHandlingPolicy',
109 defaultMessage: 'WebRTC IP Handling Policy',
110 },
106 searchEngine: { 111 searchEngine: {
107 id: 'settings.app.form.searchEngine', 112 id: 'settings.app.form.searchEngine',
108 defaultMessage: 'Search engine', 113 defaultMessage: 'Search engine',
@@ -357,6 +362,7 @@ class EditSettingsScreen extends Component<EditSettingsScreenProps> {
357 clipboardNotifications: Boolean(settingsData.clipboardNotifications), 362 clipboardNotifications: Boolean(settingsData.clipboardNotifications),
358 notifyTaskBarOnMessage: Boolean(settingsData.notifyTaskBarOnMessage), 363 notifyTaskBarOnMessage: Boolean(settingsData.notifyTaskBarOnMessage),
359 navigationBarBehaviour: settingsData.navigationBarBehaviour, 364 navigationBarBehaviour: settingsData.navigationBarBehaviour,
365 webRTCIPHandlingPolicy: settingsData.webRTCIPHandlingPolicy,
360 searchEngine: settingsData.searchEngine, 366 searchEngine: settingsData.searchEngine,
361 translatorEngine: settingsData.translatorEngine, 367 translatorEngine: settingsData.translatorEngine,
362 translatorLanguage: settingsData.translatorLanguage, 368 translatorLanguage: settingsData.translatorLanguage,
@@ -465,6 +471,11 @@ class EditSettingsScreen extends Component<EditSettingsScreenProps> {
465 sort: false, 471 sort: false,
466 }); 472 });
467 473
474 const webRTCIPHandlingPolicies = getSelectOptions({
475 locales: WEBRTC_IP_HANDLING_POLICY,
476 sort: false,
477 });
478
468 const searchEngines = getSelectOptions({ 479 const searchEngines = getSelectOptions({
469 locales: SEARCH_ENGINE_NAMES, 480 locales: SEARCH_ENGINE_NAMES,
470 sort: false, 481 sort: false,
@@ -597,6 +608,12 @@ class EditSettingsScreen extends Component<EditSettingsScreenProps> {
597 default: DEFAULT_APP_SETTINGS.navigationBarBehaviour, 608 default: DEFAULT_APP_SETTINGS.navigationBarBehaviour,
598 options: navigationBarBehaviours, 609 options: navigationBarBehaviours,
599 }, 610 },
611 webRTCIPHandlingPolicy: {
612 label: intl.formatMessage(messages.webRTCIPHandlingPolicy),
613 value: settings.all.app.webRTCIPHandlingPolicy,
614 default: DEFAULT_APP_SETTINGS.webRTCIPHandlingPolicy,
615 options: webRTCIPHandlingPolicies,
616 },
600 searchEngine: { 617 searchEngine: {
601 label: intl.formatMessage(messages.searchEngine), 618 label: intl.formatMessage(messages.searchEngine),
602 value: settings.all.app.searchEngine, 619 value: settings.all.app.searchEngine,
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 4dc8bad82..80ad855c3 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -266,6 +266,7 @@
266 "settings.app.form.wakeUpHibernationSplay": "Splay hibernate/wake cycles to reduce load", 266 "settings.app.form.wakeUpHibernationSplay": "Splay hibernate/wake cycles to reduce load",
267 "settings.app.form.wakeUpHibernationStrategy": "Hibernation strategy after automatic wake up", 267 "settings.app.form.wakeUpHibernationStrategy": "Hibernation strategy after automatic wake up",
268 "settings.app.form.wakeUpStrategy": "Wake up strategy", 268 "settings.app.form.wakeUpStrategy": "Wake up strategy",
269 "settings.app.form.webRTCIPHandlingPolicy": "WebRTC IP Handling Policy",
269 "settings.app.headlineAdvanced": "Advanced", 270 "settings.app.headlineAdvanced": "Advanced",
270 "settings.app.headlineAppearance": "Appearance", 271 "settings.app.headlineAppearance": "Appearance",
271 "settings.app.headlineGeneral": "General", 272 "settings.app.headlineGeneral": "General",
diff --git a/src/index.ts b/src/index.ts
index 7c80ca955..97c77d185 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -90,8 +90,8 @@ if (isWindows) {
90const settings = new Settings('app', DEFAULT_APP_SETTINGS); 90const settings = new Settings('app', DEFAULT_APP_SETTINGS);
91const proxySettings = new Settings('proxy'); 91const proxySettings = new Settings('proxy');
92 92
93const retrieveSettingValue = (key: string, defaultValue: boolean) => 93const retrieveSettingValue = (key: string, defaultValue: boolean | string) =>
94 ifUndefined<boolean>(settings.get(key), defaultValue); 94 ifUndefined<boolean | string>(settings.get(key), defaultValue);
95 95
96const liftSingleInstanceLock = retrieveSettingValue( 96const liftSingleInstanceLock = retrieveSettingValue(
97 'liftSingleInstanceLock', 97 'liftSingleInstanceLock',
@@ -164,6 +164,15 @@ if (!retrieveSettingValue('enableGPUAcceleration', false)) {
164 app.disableHardwareAcceleration(); 164 app.disableHardwareAcceleration();
165} 165}
166 166
167const webRTCIPHandlingPolicy = retrieveSettingValue(
168 'webRTCIPHandlingPolicy',
169 DEFAULT_APP_SETTINGS.webRTCIPHandlingPolicy,
170) as
171 | 'disable_non_proxied_udp'
172 | 'default'
173 | 'default_public_interface_only'
174 | 'default_public_and_private_interfaces';
175
167const createWindow = () => { 176const createWindow = () => {
168 // Remember window size 177 // Remember window size
169 const mainWindowState = windowStateKeeper({ 178 const mainWindowState = windowStateKeeper({
@@ -202,7 +211,7 @@ const createWindow = () => {
202 spellcheck: retrieveSettingValue( 211 spellcheck: retrieveSettingValue(
203 'enableSpellchecking', 212 'enableSpellchecking',
204 DEFAULT_APP_SETTINGS.enableSpellchecking, 213 DEFAULT_APP_SETTINGS.enableSpellchecking,
205 ), 214 ) as boolean | undefined,
206 nodeIntegration: true, 215 nodeIntegration: true,
207 contextIsolation: false, 216 contextIsolation: false,
208 webviewTag: true, 217 webviewTag: true,
@@ -210,6 +219,7 @@ const createWindow = () => {
210 }); 219 });
211 220
212 enableWebContents(mainWindow.webContents); 221 enableWebContents(mainWindow.webContents);
222 mainWindow.webContents.setWebRTCIPHandlingPolicy(webRTCIPHandlingPolicy);
213 223
214 app.on('browser-window-created', (_, window) => { 224 app.on('browser-window-created', (_, window) => {
215 enableWebContents(window.webContents); 225 enableWebContents(window.webContents);
@@ -532,6 +542,7 @@ ipcMain.on('open-browser-window', (_e, { url, serviceId }) => {
532 }, 542 },
533 }); 543 });
534 enableWebContents(child.webContents); 544 enableWebContents(child.webContents);
545 child.webContents.setWebRTCIPHandlingPolicy(webRTCIPHandlingPolicy);
535 child.show(); 546 child.show();
536 child.loadURL(url); 547 child.loadURL(url);
537 debug('Received open-browser-window', url); 548 debug('Received open-browser-window', url);