From d6639fd1da938011cb7b34a737bee94e51b451c4 Mon Sep 17 00:00:00 2001 From: Adam Weeden Date: Sat, 1 May 2021 10:46:40 -0400 Subject: [PATCH] App: fix child windows not inheriting mainWindow properties, including userAgent (#1174) When a new child window is spawned (such as for a Google login popup), those child windows were not receiving the mainWindow's properties. Chiefly among this was the userAgent which caused a bug in #831 --- app/src/components/mainWindow.ts | 20 +++++++++++---- app/src/main.ts | 42 +++++++++++++++++++++++++++++++- docs/manual-test | 2 +- 3 files changed, 57 insertions(+), 7 deletions(-) diff --git a/app/src/components/mainWindow.ts b/app/src/components/mainWindow.ts index c60bf3b284..b26534893b 100644 --- a/app/src/components/mainWindow.ts +++ b/app/src/components/mainWindow.ts @@ -106,6 +106,12 @@ export function saveAppArgs(newAppArgs: any) { ); } } + +export type createWindowResult = { + window: BrowserWindow; + setupWindow: (window: BrowserWindow) => void; +}; + /** * @param {{}} nativefierOptions AppArgs from nativefier.json * @param {function} onAppQuit @@ -115,7 +121,7 @@ export function createMainWindow( nativefierOptions, onAppQuit, setDockBadge, -): BrowserWindow { +): createWindowResult { const options = { ...nativefierOptions }; const mainWindowState = windowStateKeeper({ defaultWidth: options.width || 1280, @@ -292,6 +298,12 @@ export function createMainWindow( const createNewWindow: (url: string) => BrowserWindow = (url: string) => { const window = new BrowserWindow(DEFAULT_WINDOW_OPTIONS); + setupWindow(window); + window.loadURL(url); // eslint-disable-line @typescript-eslint/no-floating-promises + return window; + }; + + function setupWindow(window: BrowserWindow): void { if (options.userAgent) { window.webContents.userAgent = options.userAgent; } @@ -305,9 +317,7 @@ export function createMainWindow( window.webContents.on('new-window', onNewWindow); window.webContents.on('will-navigate', onWillNavigate); window.webContents.on('will-prevent-unload', onWillPreventUnload); - window.loadURL(url); // eslint-disable-line @typescript-eslint/no-floating-promises - return window; - }; + } const createNewTab = (url: string, foreground: boolean): BrowserWindow => { log.debug('createNewTab', { url, foreground }); @@ -552,5 +562,5 @@ export function createMainWindow( } }); - return mainWindow; + return { window: mainWindow, setupWindow }; } diff --git a/app/src/main.ts b/app/src/main.ts index c8887a15b5..6fe337e816 100644 --- a/app/src/main.ts +++ b/app/src/main.ts @@ -87,6 +87,7 @@ if (appArgs.processEnvs) { } let mainWindow: BrowserWindow; +let setupWindow: (BrowserWindow) => void; if (typeof appArgs.flashPluginDir === 'string') { app.commandLine.appendSwitch('ppapi-flash-path', appArgs.flashPluginDir); @@ -251,7 +252,14 @@ if (shouldQuit) { } function onReady(): void { - mainWindow = createMainWindow(appArgs, app.quit.bind(this), setDockBadge); + const createWindowResult = createMainWindow( + appArgs, + app.quit.bind(this), + setDockBadge, + ); + log.debug('onReady', createWindowResult); + mainWindow = createWindowResult.window; + setupWindow = createWindowResult.setupWindow; createTrayIcon(appArgs, mainWindow); // Register global shortcuts @@ -344,3 +352,35 @@ app.on('login', (event, webContents, request, authInfo, callback) => { createLoginWindow(callback); } }); + +app.on( + 'accessibility-support-changed', + (event: Event, accessibilitySupportEnabled: boolean) => { + log.debug('app.accessibility-support-changed', { + event, + accessibilitySupportEnabled, + }); + }, +); + +app.on( + 'activity-was-continued', + (event: Event, type: string, userInfo: any) => { + log.debug('app.activity-was-continued', { event, type, userInfo }); + }, +); + +app.on('browser-window-blur', (event: Event, window: BrowserWindow) => { + log.debug('app.browser-window-blur', { event, window }); +}); + +app.on('browser-window-created', (event: Event, window: BrowserWindow) => { + log.debug('app.browser-window-created', { event, window }); + if (setupWindow !== undefined) { + setupWindow(window); + } +}); + +app.on('browser-window-focus', (event: Event, window: BrowserWindow) => { + log.debug('app.browser-window-focus', { event, window }); +}); diff --git a/docs/manual-test b/docs/manual-test index ef3f1a4fe8..be9e5a0009 100755 --- a/docs/manual-test +++ b/docs/manual-test @@ -41,7 +41,7 @@ printf "\n***** Test checklist ***** printf "\n***** Running app *****\n" if [ "$(uname -s)" = "Darwin" ]; then - open -a 'app-darwin-x64/app.app' + open -a "$tmp_dir/app-darwin-x64/app.app" else "$tmp_dir/app-linux-x64/app" fi