mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-16 08:28:52 +01:00
- 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
147 lines
2.8 KiB
JavaScript
147 lines
2.8 KiB
JavaScript
const initChrome = require('./initChrome');
|
|
const initServer = require('./initServer');
|
|
const { Browser } = require('chrome-remote-interface-extra');
|
|
|
|
class TestHelper {
|
|
/**
|
|
* @param {*} t
|
|
* @param {boolean} [direct = false]
|
|
* @return {Promise<TestHelper>}
|
|
*/
|
|
static async init(t, direct = false) {
|
|
const browser = await initChrome();
|
|
const server = await initServer();
|
|
const th = new TestHelper({
|
|
server,
|
|
browser,
|
|
t,
|
|
direct
|
|
});
|
|
await th.setup();
|
|
return th;
|
|
}
|
|
|
|
/**
|
|
* @param {TestHelperInit} init
|
|
*/
|
|
constructor({ server, browser, t, direct }) {
|
|
/**
|
|
* @type {fastify.FastifyInstance}
|
|
*/
|
|
this._server = server;
|
|
|
|
/**
|
|
* @type {Browser}
|
|
*/
|
|
this._browser = browser;
|
|
|
|
/** @type {*} */
|
|
this._t = t;
|
|
|
|
/** @type {Page} */
|
|
this._testPage = null;
|
|
|
|
/** @type {Frame} */
|
|
this._sandbox = null;
|
|
|
|
/** @type {boolean} */
|
|
this._direct = direct;
|
|
}
|
|
|
|
/**
|
|
* @return {fastify.FastifyInstance}
|
|
*/
|
|
server() {
|
|
return this._server;
|
|
}
|
|
|
|
/**
|
|
* @return {Page}
|
|
*/
|
|
testPage() {
|
|
return this._testPage;
|
|
}
|
|
|
|
/**
|
|
* @return {Frame}
|
|
*/
|
|
sandbox() {
|
|
return this._sandbox;
|
|
}
|
|
|
|
async initWombat() {
|
|
await this._testPage.evaluate(() => {
|
|
window.overwatch.initSandbox();
|
|
});
|
|
}
|
|
|
|
async maybeInitWombat() {
|
|
await this._testPage.evaluate(() => {
|
|
window.overwatch.maybeInitSandbox();
|
|
});
|
|
}
|
|
|
|
async setup() {
|
|
this._testPage = await this._browser.newPage();
|
|
await this.cleanup();
|
|
}
|
|
|
|
async cleanup() {
|
|
const testPageURL = this._direct
|
|
? this._server.testPageDirect
|
|
: this._server.testPage;
|
|
await this._testPage.goto(testPageURL, {
|
|
waitUntil: 'networkidle2'
|
|
});
|
|
this._sandbox = this._testPage.frames()[1];
|
|
}
|
|
|
|
async fullRefresh() {
|
|
await this.cleanup();
|
|
await this.initWombat();
|
|
}
|
|
|
|
async ensureSandbox() {
|
|
const url = `https://tests.${this._direct ? 'direct.' : ''}wombat.io/`;
|
|
if (!this._sandbox.url().endsWith(url)) {
|
|
await this.fullRefresh();
|
|
} else {
|
|
await this.maybeInitWombat();
|
|
}
|
|
}
|
|
|
|
async stop() {
|
|
if (this._testPage) {
|
|
try {
|
|
await this._testPage.close();
|
|
} catch (e) {
|
|
console.log(`Exception closing test page ${e}`);
|
|
}
|
|
}
|
|
try {
|
|
if (this._browser) {
|
|
await this._browser.close();
|
|
}
|
|
} catch (e) {
|
|
console.log(`Exception closing browser ${e}`);
|
|
}
|
|
try {
|
|
if (this._server) {
|
|
await this._server.stop();
|
|
}
|
|
} catch (e) {
|
|
console.log(`Exception stopping server ${e}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = TestHelper;
|
|
|
|
/**
|
|
* @typedef {Object} TestHelperInit
|
|
* @property {fastify.FastifyInstance} server
|
|
* @property {*} t
|
|
* @property {Browser} browser
|
|
* @property {boolean} direct
|
|
*/
|