1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-16 00:24:48 +01:00
pywb/wombat/test/helpers/initChrome.js
John Berlin 6437dab1f4 server side rewriting: (#475)
- fixed edge case in jsonP rewriting where no callback name is supplied only ? but body has normal jsonP callback (url = https://geolocation.onetrust.com/cookieconsentpub/v1/geo/countries/EU?callback=?)
  - made the `!self.__WB_pmw` server side inject match the client side one done via wombat
  - added regex's for eval override to JSWombatProxyRules

wombat:
  - added eval override in order to ensure AD network JS does not lockup the browser (cnn.com)
  - added returning a proxied value for window.parent from the window proxy object in order to ensure AD network JS does not lock up browser (cnn.com, boston.com, et. al.)
  - ensured that the read only storageArea property of 'StorageEvents' fired by the custom storage class is present (spec)
  - ensured that userland cannot create new instances of Storage and that localStorage instanceof Storage works with our override (spec)
  - ensured that assignments to SomeElement.[innerHTML|outerHTML], iframe.srcdoc, or style.textContent are more correctly handled in particular doing script.[innerHTML|outerHTML] = <JS>
  - ensured that the test used in the isArgumentsObj function does not throw errors IFF the pages JS has made it so when toString is called (linkedin.com)
  - ensured that Web Worker construction when using the optional options object, the options get supplied to the create worker (spec)
  - ensured that the expected TypeError exception thrown from DomConstructors of overridden interfaces are thrown when their pre-conditions are not met (spec)
  - ensured that wombat worker rewriting skipes data urls which should not be rewritten
  - ensured the bound function returned by the window function is the same on subsequent retrievals fixes #474

  tests:
   - added direct testing of wombat's parts
2019-06-20 19:06:41 -07:00

56 lines
1.6 KiB
JavaScript

const { launch } = require('just-launch-chrome');
const Browser = require('chrome-remote-interface-extra/lib/browser/Browser');
const winPos = !process.env.NO_MOVE_WINDOW ? '--window-position=2000,0' : '';
const chromeArgs = [
'--force-color-profile=srgb',
'--disable-background-networking',
'--disable-background-timer-throttling',
'--disable-renderer-backgrounding',
'--disable-backgrounding-occluded-windows',
'--disable-ipc-flooding-protection',
'--enable-features=NetworkService,NetworkServiceInProcess,AwaitOptimization',
'--disable-client-side-phishing-detection',
'--disable-default-apps',
'--disable-extensions',
'--disable-popup-blocking',
'--disable-hang-monitor',
'--disable-prompt-on-repost',
'--disable-sync',
'--disable-domain-reliability',
'--disable-infobars',
'--disable-features=site-per-process,TranslateUI,BlinkGenPropertyTrees,LazyFrameLoading',
'--disable-breakpad',
'--disable-backing-store-limit',
'--metrics-recording-only',
'--no-first-run',
'--safebrowsing-disable-auto-update',
'--password-store=basic',
'--use-mock-keychain',
'--mute-audio',
'--autoplay-policy=no-user-gesture-required',
winPos,
'about:blank'
];
/**
*
* @return {Promise<Browser>}
*/
async function initChrome() {
const { browserWSEndpoint, closeBrowser, chromeProcess } = await launch({
args: chromeArgs
});
const browser = await Browser.connect(browserWSEndpoint, {
ignoreHTTPSErrors: true,
additionalDomains: { workers: true },
process: chromeProcess,
closeCallback: closeBrowser
});
await browser.waitForTarget(t => t.type() === 'page');
return browser;
}
module.exports = initChrome;