aboutsummaryrefslogtreecommitdiffstats
path: root/src/models
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-04-23 01:59:21 +0200
committerLibravatar GitHub <noreply@github.com>2022-04-22 23:59:21 +0000
commitd02644f7c41150709795e57bfd40351b4da35a7b (patch)
tree2403fb76bd5fae1703f8b55172ffce9e0a5d2bce /src/models
parentComplete tray icons redesign for all platforms (#28) (diff)
downloadferdium-app-d02644f7c41150709795e57bfd40351b4da35a7b.tar.gz
ferdium-app-d02644f7c41150709795e57bfd40351b4da35a7b.tar.zst
ferdium-app-d02644f7c41150709795e57bfd40351b4da35a7b.zip
Preload safe debug shim (#29)
In https://github.com/ferdium/ferdium-app/pull/23 we removed usages of the debug package due to an electron bug. This patch aims to restore some debug functionality by introducing a shim. The shim detect whether if it is being introduced in a preload script where the electron but would be triggered, and falls back to a simple replacement for debug. However, in the main and renderer processes, where a preload script is not being used, we still get full debug functionality. In this way, a module can be used both in a preload script and outside of it, while still preserving debug functionality whenever possible. Signed-off-by: Kristóf Marussy <kristof@marussy.com>
Diffstat (limited to 'src/models')
-rw-r--r--src/models/Service.js31
-rw-r--r--src/models/UserAgent.js11
2 files changed, 20 insertions, 22 deletions
diff --git a/src/models/Service.js b/src/models/Service.js
index 9f345375f..1fca034bc 100644
--- a/src/models/Service.js
+++ b/src/models/Service.js
@@ -14,8 +14,7 @@ import {
14 ifUndefinedNumber, 14 ifUndefinedNumber,
15} from '../jsUtils'; 15} from '../jsUtils';
16 16
17// TODO: Go back to 'debug' from 'console.log' when https://github.com/electron/electron/issues/31689 is fixed 17const debug = require('../preload-safe-debug')('Ferdium:Service');
18// const debug = require('debug')('Ferdium:Service');
19 18
20export default class Service { 19export default class Service {
21 id = ''; 20 id = '';
@@ -306,25 +305,25 @@ export default class Service {
306 // Send those headers to ipcMain so that it can be set in session 305 // Send those headers to ipcMain so that it can be set in session
307 if (typeof this.recipe.modifyRequestHeaders === 'function') { 306 if (typeof this.recipe.modifyRequestHeaders === 'function') {
308 const modifiedRequestHeaders = this.recipe.modifyRequestHeaders(); 307 const modifiedRequestHeaders = this.recipe.modifyRequestHeaders();
309 console.log(this.name, 'modifiedRequestHeaders', modifiedRequestHeaders); 308 debug(this.name, 'modifiedRequestHeaders', modifiedRequestHeaders);
310 ipcRenderer.send('modifyRequestHeaders', { 309 ipcRenderer.send('modifyRequestHeaders', {
311 modifiedRequestHeaders, 310 modifiedRequestHeaders,
312 serviceId: this.id, 311 serviceId: this.id,
313 }); 312 });
314 } else { 313 } else {
315 console.log(this.name, 'modifyRequestHeaders is not defined in the recipe'); 314 debug(this.name, 'modifyRequestHeaders is not defined in the recipe');
316 } 315 }
317 316
318 // if the recipe has implemented 'knownCertificateHosts' 317 // if the recipe has implemented 'knownCertificateHosts'
319 if (typeof this.recipe.knownCertificateHosts === 'function') { 318 if (typeof this.recipe.knownCertificateHosts === 'function') {
320 const knownHosts = this.recipe.knownCertificateHosts(); 319 const knownHosts = this.recipe.knownCertificateHosts();
321 console.log(this.name, 'knownCertificateHosts', knownHosts); 320 debug(this.name, 'knownCertificateHosts', knownHosts);
322 ipcRenderer.send('knownCertificateHosts', { 321 ipcRenderer.send('knownCertificateHosts', {
323 knownHosts, 322 knownHosts,
324 serviceId: this.id, 323 serviceId: this.id,
325 }); 324 });
326 } else { 325 } else {
327 console.log(this.name, 'knownCertificateHosts is not defined in the recipe'); 326 debug(this.name, 'knownCertificateHosts is not defined in the recipe');
328 } 327 }
329 328
330 this.webview.addEventListener('ipc-message', async e => { 329 this.webview.addEventListener('ipc-message', async e => {
@@ -348,7 +347,7 @@ export default class Service {
348 this.webview.addEventListener( 347 this.webview.addEventListener(
349 'new-window', 348 'new-window',
350 (event, url, frameName, options) => { 349 (event, url, frameName, options) => {
351 console.log('new-window', event, url, frameName, options); 350 debug('new-window', event, url, frameName, options);
352 if (!isValidExternalURL(event.url)) { 351 if (!isValidExternalURL(event.url)) {
353 return; 352 return;
354 } 353 }
@@ -372,7 +371,7 @@ export default class Service {
372 ); 371 );
373 372
374 this.webview.addEventListener('did-start-loading', event => { 373 this.webview.addEventListener('did-start-loading', event => {
375 console.log('Did start load', this.name, event); 374 debug('Did start load', this.name, event);
376 375
377 this.hasCrashed = false; 376 this.hasCrashed = false;
378 this.isLoading = true; 377 this.isLoading = true;
@@ -391,7 +390,7 @@ export default class Service {
391 this.webview.addEventListener('did-navigate', didLoad.bind(this)); 390 this.webview.addEventListener('did-navigate', didLoad.bind(this));
392 391
393 this.webview.addEventListener('did-fail-load', event => { 392 this.webview.addEventListener('did-fail-load', event => {
394 console.log('Service failed to load', this.name, event); 393 debug('Service failed to load', this.name, event);
395 if ( 394 if (
396 event.isMainFrame && 395 event.isMainFrame &&
397 event.errorCode !== -21 && 396 event.errorCode !== -21 &&
@@ -404,33 +403,33 @@ export default class Service {
404 }); 403 });
405 404
406 this.webview.addEventListener('crashed', () => { 405 this.webview.addEventListener('crashed', () => {
407 console.log('Service crashed', this.name); 406 debug('Service crashed', this.name);
408 this.hasCrashed = true; 407 this.hasCrashed = true;
409 }); 408 });
410 409
411 this.webview.addEventListener('found-in-page', ({ result }) => { 410 this.webview.addEventListener('found-in-page', ({ result }) => {
412 console.log('Found in page', result); 411 debug('Found in page', result);
413 this.webview.send('found-in-page', result); 412 this.webview.send('found-in-page', result);
414 }); 413 });
415 414
416 webviewWebContents.on('login', (event, request, authInfo, callback) => { 415 webviewWebContents.on('login', (event, request, authInfo, callback) => {
417 // const authCallback = callback; 416 // const authCallback = callback;
418 console.log('browser login event', authInfo); 417 debug('browser login event', authInfo);
419 event.preventDefault(); 418 event.preventDefault();
420 419
421 if (authInfo.isProxy && authInfo.scheme === 'basic') { 420 if (authInfo.isProxy && authInfo.scheme === 'basic') {
422 console.log('Sending service echo ping'); 421 debug('Sending service echo ping');
423 webviewWebContents.send('get-service-id'); 422 webviewWebContents.send('get-service-id');
424 423
425 console.log('Received service id', this.id); 424 debug('Received service id', this.id);
426 425
427 const ps = stores.settings.proxy[this.id]; 426 const ps = stores.settings.proxy[this.id];
428 427
429 if (ps) { 428 if (ps) {
430 console.log('Sending proxy auth callback for service', this.id); 429 debug('Sending proxy auth callback for service', this.id);
431 callback(ps.user, ps.password); 430 callback(ps.user, ps.password);
432 } else { 431 } else {
433 console.log('No proxy auth config found for', this.id); 432 debug('No proxy auth config found for', this.id);
434 } 433 }
435 } 434 }
436 }); 435 });
diff --git a/src/models/UserAgent.js b/src/models/UserAgent.js
index f818ee9d0..3e1394b45 100644
--- a/src/models/UserAgent.js
+++ b/src/models/UserAgent.js
@@ -2,8 +2,7 @@ import { action, computed, observe, observable } from 'mobx';
2 2
3import defaultUserAgent from '../helpers/userAgent-helpers'; 3import defaultUserAgent from '../helpers/userAgent-helpers';
4 4
5// TODO: Go back to 'debug' from 'console.log' when https://github.com/electron/electron/issues/31689 is fixed 5const debug = require('../preload-safe-debug')('Ferdium:UserAgent');
6// const debug = require('debug')('Ferdium:UserAgent');
7 6
8export default class UserAgent { 7export default class UserAgent {
9 _willNavigateListener = null; 8 _willNavigateListener = null;
@@ -79,7 +78,7 @@ export default class UserAgent {
79 @action _handleNavigate(url, forwardingHack = false) { 78 @action _handleNavigate(url, forwardingHack = false) {
80 if (url.startsWith('https://accounts.google.com')) { 79 if (url.startsWith('https://accounts.google.com')) {
81 if (!this.chromelessUserAgent) { 80 if (!this.chromelessUserAgent) {
82 console.log('Setting user agent to chromeless for url', url); 81 debug('Setting user agent to chromeless for url', url);
83 this.chromelessUserAgent = true; 82 this.chromelessUserAgent = true;
84 this.webview.userAgent = this.userAgent; 83 this.webview.userAgent = this.userAgent;
85 if (forwardingHack) { 84 if (forwardingHack) {
@@ -87,14 +86,14 @@ export default class UserAgent {
87 } 86 }
88 } 87 }
89 } else if (this.chromelessUserAgent) { 88 } else if (this.chromelessUserAgent) {
90 console.log('Setting user agent to contain chrome for url', url); 89 debug('Setting user agent to contain chrome for url', url);
91 this.chromelessUserAgent = false; 90 this.chromelessUserAgent = false;
92 this.webview.userAgent = this.userAgent; 91 this.webview.userAgent = this.userAgent;
93 } 92 }
94 } 93 }
95 94
96 _addWebviewEvents(webview) { 95 _addWebviewEvents(webview) {
97 console.log('Adding event handlers'); 96 debug('Adding event handlers');
98 97
99 this._willNavigateListener = event => this._handleNavigate(event.url, true); 98 this._willNavigateListener = event => this._handleNavigate(event.url, true);
100 webview.addEventListener('will-navigate', this._willNavigateListener); 99 webview.addEventListener('will-navigate', this._willNavigateListener);
@@ -104,7 +103,7 @@ export default class UserAgent {
104 } 103 }
105 104
106 _removeWebviewEvents(webview) { 105 _removeWebviewEvents(webview) {
107 console.log('Removing event handlers'); 106 debug('Removing event handlers');
108 107
109 webview.removeEventListener('will-navigate', this._willNavigateListener); 108 webview.removeEventListener('will-navigate', this._willNavigateListener);
110 webview.removeEventListener('did-navigate', this._didNavigateListener); 109 webview.removeEventListener('did-navigate', this._didNavigateListener);