Skip to content
This repository was archived by the owner on Oct 13, 2023. It is now read-only.

Commit 026a195

Browse files
Change getWebContents to be Promised, force fixed headers on every webContents.
1 parent 22788c2 commit 026a195

File tree

2 files changed

+57
-39
lines changed

2 files changed

+57
-39
lines changed

app/ux/WebView.js

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Ext.define('Hamsket.ux.WebView',{
1515
// private
1616
,zoomLevel: 0
1717
,currentUnreadCount: 0
18+
,isReady: false
1819

1920
// CONFIG
2021
,hideMode: 'offsets'
@@ -226,21 +227,8 @@ Ext.define('Hamsket.ux.WebView',{
226227
console.info('Start loading...', me.src);
227228
if ( !me.down('statusbar').closed || !me.down('statusbar').keep ) me.down('statusbar').show();
228229
me.down('statusbar').showBusy();
229-
me.getWebContents().session.webRequest.onBeforeSendHeaders(
230-
{
231-
urls: [
232-
'https://accounts.google.com/',
233-
'https://accounts.google.com/*'
234-
]
235-
},
236-
(details, callback) => {
237-
details.requestHeaders['User-Agent'] =
238-
'Mozilla/5.0 (X11; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0';
239-
callback({ requestHeaders: details.requestHeaders });
240-
}
241-
);
242-
243230
});
231+
244232
webview.addEventListener("did-stop-loading", function() {
245233
me.down('statusbar').clearStatus({useDefaults: true});
246234
if ( !me.down('statusbar').keep ) me.down('statusbar').hide();
@@ -293,6 +281,7 @@ Ext.define('Hamsket.ux.WebView',{
293281
}
294282

295283
webview.addEventListener("dom-ready", function(e) {
284+
me.isReady = true;
296285
// Mute Webview
297286
if ( me.record.get('muted') || localStorage.getItem('locked') || JSON.parse(localStorage.getItem('dontDisturb')) ) me.setAudioMuted(true, true);
298287

@@ -363,22 +352,26 @@ Ext.define('Hamsket.ux.WebView',{
363352

364353
// Scroll always to top (bug)
365354
js_inject += '{document.body.scrollTop=0;}';
366-
367355
// Handles Certificate Errors
368-
me.getWebContents().on('certificate-error', function(event, url, error, certificate, callback) {
369-
if ( me.record.get('trust') ) {
370-
event.preventDefault();
371-
callback(true);
372-
} else {
373-
callback(false);
374-
}
375-
356+
me.getWebContents().then(webContents => {
357+
webContents.on('certificate-error', (event, url, error, certificate, callback) => {
358+
if (me.record.get('trust')) {
359+
event.preventDefault();
360+
callback(true);
361+
} else {
362+
callback(false);
363+
}
364+
return webContents;
365+
});
376366
me.down('statusbar').keep = true;
377367
me.down('statusbar').show();
378368
me.down('statusbar').setStatus({
379369
text: '<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> Certification Warning'
380370
});
381371
me.down('statusbar').down('button').show();
372+
return webContents;
373+
}).catch(error => {
374+
console.error(error);
382375
});
383376

384377
webview.executeJavaScript(js_inject);
@@ -658,7 +651,10 @@ Ext.define('Hamsket.ux.WebView',{
658651
}
659652
,setZoomLevel(level)
660653
{
661-
this.getWebContents().zoomLevel = level;
654+
this.getWebContents().then(webContents => {
655+
webContents.zoomLevel = level;
656+
return webContents;
657+
}).catch(error => console.log(error));
662658
}
663659

664660
,zoomIn() {
@@ -692,22 +688,26 @@ Ext.define('Hamsket.ux.WebView',{
692688
}
693689

694690
,getWebView() {
695-
if ( this.record.get('enabled') ) {
696-
return this.down('component').el.dom;
697-
} else {
698-
return false;
699-
}
691+
return this.record.get('enabled') ? this.down('component').el.dom : false;
700692
}
701693
,getWebContents() {
702-
if ( this.record.get('enabled') ) {
703-
const remote = require('@electron/remote');
694+
const promise = new Promise((resolve, reject) => {
704695
const webview = this.getWebView();
705-
const id = webview.getWebContentsId();
706-
const webContents = remote.webContents.fromId(id);
707-
return webContents;
708-
} else {
709-
return false;
710-
}
696+
const webContents = () => {
697+
const remote = require('@electron/remote');
698+
const id = webview.getWebContentsId();
699+
const webContents = remote.webContents.fromId(id);
700+
return webContents;
701+
};
702+
if (this.record.get('enabled') && this.isReady) {
703+
resolve(webContents());
704+
} else {
705+
webview.addEventListener("dom-ready", () => {
706+
resolve(webContents());
707+
});
708+
}
709+
});
710+
return promise;
711711
}
712712
,getUserAgent() {
713713
const me = this;
@@ -739,8 +739,10 @@ Ext.define('Hamsket.ux.WebView',{
739739
}
740740
,updateUserAgent() {
741741
const me = this;
742-
const webcontents = me.getWebContents();
743-
webcontents.setUserAgent(me.getUserAgent());
742+
me.getWebContents().then(webContents => {
743+
webContents.setUserAgent(me.getUserAgent());
744+
return webContents;
745+
}).catch(error => console.error(error));
744746
}
745747
,getOSArch(platform) {
746748
const me = this;

electron/main.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,12 +624,28 @@ app.on('before-quit', function () {
624624

625625
// Prevent the ability to create webview with nodeIntegration.
626626
app.on('web-contents-created', (event, contents) => {
627+
require("@electron/remote/main").enable(contents);
627628
const contextMenuWebContentsDispose = contextMenu({
628629
window: contents,
629630
showCopyImageAddress: true,
630631
showSaveImage: false,
631632
showSaveImageAs: true,
632633
});
634+
635+
contents.session.webRequest.onBeforeSendHeaders(
636+
{
637+
urls: [
638+
'https://accounts.google.com/',
639+
'https://accounts.google.com/*'
640+
]
641+
},
642+
(details, callback) => {
643+
details.requestHeaders['User-Agent'] =
644+
'Mozilla/5.0 (X11; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0';
645+
callback({ requestHeaders: details.requestHeaders });
646+
}
647+
);
648+
633649
contents.on('will-attach-webview', (event, webPreferences, params) => {
634650
// Always prevent node integration
635651
webPreferences.nodeIntegration = false;

0 commit comments

Comments
 (0)