Path: blob/main/plugins/default-browser-emulator/lib/loadDomOverrides.ts
1029 views
import { BrowserEmulator } from '@secret-agent/plugin-utils';1import DomOverridesBuilder from './DomOverridesBuilder';2import IBrowserData from '../interfaces/IBrowserData';3import parseNavigatorPlugins from './utils/parseNavigatorPlugins';45export default function loadDomOverrides(6emulator: BrowserEmulator,7data: IBrowserData,8): DomOverridesBuilder {9const domOverrides = new DomOverridesBuilder();1011domOverrides.add('Error.captureStackTrace');12domOverrides.add('Error.constructor');13const deviceProfile = emulator.deviceProfile;1415domOverrides.add('navigator.deviceMemory', { memory: deviceProfile.deviceMemory });16domOverrides.add('navigator', {17userAgentString: emulator.userAgentString,18platform: emulator.operatingSystemPlatform,19headless: emulator.browserEngine.isHeaded !== true,20});2122domOverrides.add('MediaDevices.prototype.enumerateDevices', {23videoDevice: deviceProfile.videoDevice,24});2526domOverrides.add('Notification.permission');27domOverrides.add('Permission.prototype.query');2829const windowChrome = data.windowChrome;30if (windowChrome) {31domOverrides.add('window.chrome', {32updateLoadTimes: true,33polyfill: {34property: windowChrome.chrome,35prevProperty: windowChrome.prevProperty,36},37});38}3940const domPolyfill = data.domPolyfill;41if (domPolyfill) {42if (domPolyfill?.add?.length) {43domOverrides.add('polyfill.add', {44itemsToAdd: domPolyfill.add,45});46}47if (domPolyfill?.remove?.length) {48domOverrides.add('polyfill.remove', {49itemsToRemove: domPolyfill.remove,50});51}52if (domPolyfill?.modify?.length) {53domOverrides.add('polyfill.modify', {54itemsToModify: domPolyfill.modify,55});56}57if (domPolyfill?.reorder?.length) {58domOverrides.add('polyfill.reorder', {59itemsToReorder: domPolyfill.reorder,60});61}62}6364const windowNavigator = data.windowNavigator;65domOverrides.add('navigator.plugins', parseNavigatorPlugins(windowNavigator.navigator));66domOverrides.add('WebGLRenderingContext.prototype.getParameter', deviceProfile.webGlParameters);67domOverrides.add('console.debug');68domOverrides.add('HTMLIFrameElement.prototype');69domOverrides.add('Element.prototype.attachShadow');7071domOverrides.add('window.outerWidth', {72frameBorderWidth: data.windowFraming.frameBorderWidth,73});74domOverrides.add('window.outerHeight', {75frameBorderHeight: data.windowFraming.frameBorderHeight,76});7778return domOverrides;79}808182