Skip to content

Commit

Permalink
♻️ user-agent for webContents (#412)
Browse files Browse the repository at this point in the history
Allows easier transition to BaseWindow and Electron 30
  • Loading branch information
manusa authored May 14, 2024
1 parent 24f0490 commit 4d9ad66
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 23 deletions.
2 changes: 1 addition & 1 deletion src/main/__tests__/init-browser-versions.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ describe('Main :: initBrowserVersions test suite', () => {
jest.mock('electron', () => require('../../__tests__').mockElectronInstance());
electron = require('electron');
userAgent = require('../../user-agent');
jest.spyOn(userAgent, 'userAgentForView').mockImplementation(() => 'UserAgent String');
jest.spyOn(userAgent, 'userAgentForWebContents').mockImplementation(() => 'UserAgent String');
});
describe('throws error', () => {
let show;
Expand Down
4 changes: 2 additions & 2 deletions src/main/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const {
} = require('../spell-check');
const tabManager = require('../tab-manager');
const {initTray} = require('../tray');
const {initBrowserVersions, userAgentForView} = require('../user-agent');
const {initBrowserVersions, userAgentForWebContents} = require('../user-agent');

const webPreferences = {
contextIsolation: false,
Expand Down Expand Up @@ -248,7 +248,7 @@ const initGlobalListeners = () => {
};

const browserVersionsReady = () => {
app.userAgentFallback = userAgentForView(mainWindow);
app.userAgentFallback = userAgentForWebContents(mainWindow.webContents);
tabContainer = newTabContainer();
appMenu = newAppMenu();
eventBus.emit(APP_EVENTS.trayInit);
Expand Down
4 changes: 2 additions & 2 deletions src/tab-manager/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const path = require('path');
const {APP_EVENTS} = require('../constants');
const {loadSettings, updateSettings} = require('../settings');
const {getEnabledDictionaries, getUseNativeSpellChecker} = require('../spell-check');
const {userAgentForView, addUserAgentInterceptor} = require('../user-agent');
const {userAgentForWebContents, addUserAgentInterceptor} = require('../user-agent');
const {handleContextMenu} = require('./context-menu');
const {handleRedirect, windowOpenHandler} = require('./redirect');

Expand Down Expand Up @@ -60,7 +60,7 @@ const handlePageFaviconUpdated = (browserView, ipcSender, tabId) => async (_e, f
const setGlobalUserAgentFallback = userAgent => (app.userAgentFallback = userAgent);

const cleanUserAgent = browserView => {
const validUserAgent = userAgentForView(browserView);
const validUserAgent = userAgentForWebContents(browserView.webContents);
browserView.webContents.userAgent = validUserAgent;
setGlobalUserAgentFallback(validUserAgent);
};
Expand Down
26 changes: 10 additions & 16 deletions src/user-agent/__tests__/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,44 +57,38 @@ describe('User Agent module test suite', () => {
expect(userAgent.BROWSER_VERSIONS.firefox).toBeNull();
});
});
describe('userAgentForView', () => {
describe('userAgentForWebContents', () => {
test('default and chromium version not available, should remove non-standard tokens from user-agent header', () => {
// Given
userAgent.BROWSER_VERSIONS.chromium = null;
const browserView = {
webContents: {
userAgent: 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) ElectronIM/13.337.0 Chrome/79.0.1337.79 Electron/0.0.99 Safari/537.36'
}
const webContents = {
userAgent: 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) ElectronIM/13.337.0 Chrome/79.0.1337.79 Electron/0.0.99 Safari/537.36'
};
// When
const result = userAgent.userAgentForView(browserView);
const result = userAgent.userAgentForWebContents(webContents);
// Then
expect(result).toBe('Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) Chrome/79.0.1337.79 Safari/537.36');
});
test('default and chromium version available, should replace Chrome version in user-agent header', () => {
// Given
userAgent.BROWSER_VERSIONS.chromium = '1337.1337.1337';
const browserView = {
webContents: {
userAgent: 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) ElectronIM/13.337.0 Chrome/79.0.1337.79 Electron/0.0.99 Safari/537.36'
}
const webContents = {
userAgent: 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) ElectronIM/13.337.0 Chrome/79.0.1337.79 Electron/0.0.99 Safari/537.36'
};
// When
const result = userAgent.userAgentForView(browserView);
const result = userAgent.userAgentForWebContents(webContents);
// Then
expect(result).toBe('Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) Chrome/1337.1337.1337 Safari/537.36');
});
test('non-matching url provided and chromium version available, should replace Chrome version in user-agent header', () => {
// Given
userAgent.BROWSER_VERSIONS.chromium = '1337.1337.1337';
const browserView = {
webContents: {
userAgent: 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) ElectronIM/13.337.0 Chrome/79.0.1337.79 Electron/0.0.99 Safari/537.36'
}
const webContents = {
userAgent: 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) ElectronIM/13.337.0 Chrome/79.0.1337.79 Electron/0.0.99 Safari/537.36'
};
const nonMatchingUrl = 'https://some-url-com/google.com';
// When
const result = userAgent.userAgentForView(browserView, nonMatchingUrl);
const result = userAgent.userAgentForWebContents(webContents, nonMatchingUrl);
// Then
expect(result).toBe('Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/1337.36 (KHTML, like Gecko) Chrome/1337.1337.1337 Safari/537.36');
});
Expand Down
4 changes: 2 additions & 2 deletions src/user-agent/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ const firefoxUserAgent = userAgent => firefoxVersion => {
return userAgent;
};

const userAgentForView = browserViewOrWindow => defaultUserAgent(browserViewOrWindow.webContents.userAgent);
const userAgentForWebContents = webContents => defaultUserAgent(webContents.userAgent);

const addUserAgentInterceptor = session => {
if (!session.userAgentInterceptor) {
Expand All @@ -96,6 +96,6 @@ const addUserAgentInterceptor = session => {
module.exports = {
BROWSER_VERSIONS,
initBrowserVersions,
userAgentForView,
userAgentForWebContents,
addUserAgentInterceptor
};

0 comments on commit 4d9ad66

Please sign in to comment.