test: convert functions to async & eliminate duplicates (#37316)
test: convert functions to async Co-authored-by: Milan Burda <miburda@microsoft.com>
This commit is contained in:
parent
969665eaa2
commit
f97d68c4bf
24 changed files with 225 additions and 343 deletions
|
@ -9,7 +9,7 @@ import { promisify } from 'util';
|
|||
import { app, BrowserWindow, Menu, session, net as electronNet } from 'electron/main';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { closeWindow, closeAllWindows } from './lib/window-helpers';
|
||||
import { ifdescribe, ifit, waitUntil } from './lib/spec-helpers';
|
||||
import { ifdescribe, ifit, listen, waitUntil } from './lib/spec-helpers';
|
||||
import split = require('split')
|
||||
|
||||
const fixturesPath = path.resolve(__dirname, 'fixtures');
|
||||
|
@ -33,7 +33,7 @@ describe('app module', () => {
|
|||
let secureUrl: string;
|
||||
const certPath = path.join(fixturesPath, 'certificates');
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
const options = {
|
||||
key: fs.readFileSync(path.join(certPath, 'server.key')),
|
||||
cert: fs.readFileSync(path.join(certPath, 'server.pem')),
|
||||
|
@ -55,11 +55,7 @@ describe('app module', () => {
|
|||
}
|
||||
});
|
||||
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
const port = (server.address() as net.AddressInfo).port;
|
||||
secureUrl = `https://127.0.0.1:${port}`;
|
||||
done();
|
||||
});
|
||||
secureUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(done => {
|
||||
|
@ -1937,7 +1933,7 @@ describe('default behavior', () => {
|
|||
let server: http.Server;
|
||||
let serverUrl: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((request, response) => {
|
||||
if (request.headers.authorization) {
|
||||
return response.end('ok');
|
||||
|
@ -1945,10 +1941,9 @@ describe('default behavior', () => {
|
|||
response
|
||||
.writeHead(401, { 'WWW-Authenticate': 'Basic realm="Foo"' })
|
||||
.end();
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
serverUrl = 'http://127.0.0.1:' + (server.address() as net.AddressInfo).port;
|
||||
done();
|
||||
});
|
||||
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
it('should emit a login event on app when a WebContents hits a 401', async () => {
|
||||
|
|
|
@ -5,11 +5,10 @@ import * as fs from 'fs';
|
|||
import * as qs from 'querystring';
|
||||
import * as http from 'http';
|
||||
import * as os from 'os';
|
||||
import { AddressInfo } from 'net';
|
||||
import { app, BrowserWindow, BrowserView, dialog, ipcMain, OnBeforeSendHeadersListenerDetails, protocol, screen, webContents, session, WebContents } from 'electron/main';
|
||||
|
||||
import { emittedOnce, emittedUntil, emittedNTimes } from './lib/events-helpers';
|
||||
import { ifit, ifdescribe, defer, delay } from './lib/spec-helpers';
|
||||
import { ifit, ifdescribe, defer, delay, listen } from './lib/spec-helpers';
|
||||
import { closeWindow, closeAllWindows } from './lib/window-helpers';
|
||||
import { areColorsSimilar, captureScreen, HexColors, getPixelColor } from './lib/screen-helpers';
|
||||
|
||||
|
@ -153,7 +152,7 @@ describe('BrowserWindow module', () => {
|
|||
let server: http.Server;
|
||||
let url: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((request, response) => {
|
||||
switch (request.url) {
|
||||
case '/net-error':
|
||||
|
@ -175,10 +174,9 @@ describe('BrowserWindow module', () => {
|
|||
default:
|
||||
throw new Error(`unsupported endpoint: ${request.url}`);
|
||||
}
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
url = 'http://127.0.0.1:' + (server.address() as AddressInfo).port;
|
||||
done();
|
||||
});
|
||||
|
||||
url = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -297,7 +295,7 @@ describe('BrowserWindow module', () => {
|
|||
let server: http.Server;
|
||||
let url: string;
|
||||
let postData = null as any;
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
const filePath = path.join(fixtures, 'pages', 'a.html');
|
||||
const fileStats = fs.statSync(filePath);
|
||||
postData = [
|
||||
|
@ -340,10 +338,8 @@ describe('BrowserWindow module', () => {
|
|||
}
|
||||
setTimeout(respond, req.url && req.url.includes('slow') ? 200 : 0);
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
done();
|
||||
});
|
||||
|
||||
url = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -486,7 +482,7 @@ describe('BrowserWindow module', () => {
|
|||
describe('will-navigate event', () => {
|
||||
let server: http.Server;
|
||||
let url: string;
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
if (req.url === '/navigate-top') {
|
||||
res.end('<a target=_top href="/">navigate _top</a>');
|
||||
|
@ -494,22 +490,18 @@ describe('BrowserWindow module', () => {
|
|||
res.end('');
|
||||
}
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}/`;
|
||||
done();
|
||||
});
|
||||
url = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(() => {
|
||||
server.close();
|
||||
});
|
||||
|
||||
it('allows the window to be closed from the event listener', (done) => {
|
||||
w.webContents.once('will-navigate', () => {
|
||||
w.close();
|
||||
done();
|
||||
});
|
||||
it('allows the window to be closed from the event listener', async () => {
|
||||
const event = emittedOnce(w.webContents, 'will-navigate');
|
||||
w.loadFile(path.join(fixtures, 'pages', 'will-navigate.html'));
|
||||
await event;
|
||||
w.close();
|
||||
});
|
||||
|
||||
it('can be prevented', (done) => {
|
||||
|
@ -541,7 +533,7 @@ describe('BrowserWindow module', () => {
|
|||
resolve(url);
|
||||
});
|
||||
});
|
||||
expect(navigatedTo).to.equal(url);
|
||||
expect(navigatedTo).to.equal(url + '/');
|
||||
expect(w.webContents.getURL()).to.match(/^file:/);
|
||||
});
|
||||
|
||||
|
@ -554,12 +546,12 @@ describe('BrowserWindow module', () => {
|
|||
resolve(url);
|
||||
});
|
||||
});
|
||||
expect(navigatedTo).to.equal(url);
|
||||
expect(navigatedTo).to.equal(url + '/');
|
||||
expect(w.webContents.getURL()).to.equal('about:blank');
|
||||
});
|
||||
|
||||
it('is triggered when a cross-origin iframe navigates _top', async () => {
|
||||
await w.loadURL(`data:text/html,<iframe src="http://127.0.0.1:${(server.address() as AddressInfo).port}/navigate-top"></iframe>`);
|
||||
await w.loadURL(`data:text/html,<iframe src="${url}/navigate-top"></iframe>`);
|
||||
await delay(1000);
|
||||
w.webContents.debugger.attach('1.1');
|
||||
const targets = await w.webContents.debugger.sendCommand('Target.getTargets');
|
||||
|
@ -594,7 +586,7 @@ describe('BrowserWindow module', () => {
|
|||
describe('will-redirect event', () => {
|
||||
let server: http.Server;
|
||||
let url: string;
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
if (req.url === '/302') {
|
||||
res.setHeader('Location', '/200');
|
||||
|
@ -606,10 +598,7 @@ describe('BrowserWindow module', () => {
|
|||
res.end();
|
||||
}
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
done();
|
||||
});
|
||||
url = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -643,12 +632,11 @@ describe('BrowserWindow module', () => {
|
|||
expect(stopCalled).to.equal(false, 'should not have called did-stop-loading first');
|
||||
});
|
||||
|
||||
it('allows the window to be closed from the event listener', (done) => {
|
||||
w.webContents.once('will-redirect', () => {
|
||||
w.close();
|
||||
done();
|
||||
});
|
||||
it('allows the window to be closed from the event listener', async () => {
|
||||
const event = emittedOnce(w.webContents, 'will-redirect');
|
||||
w.loadURL(`${url}/302`);
|
||||
await event;
|
||||
w.close();
|
||||
});
|
||||
|
||||
it('can be prevented', (done) => {
|
||||
|
@ -1914,9 +1902,7 @@ describe('BrowserWindow module', () => {
|
|||
res.end();
|
||||
});
|
||||
server.on('connection', () => { connections++; });
|
||||
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', () => resolve()));
|
||||
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
url = (await listen(server)).url;
|
||||
});
|
||||
afterEach(async () => {
|
||||
server.close();
|
||||
|
@ -2944,7 +2930,7 @@ describe('BrowserWindow module', () => {
|
|||
let server: http.Server;
|
||||
let serverUrl: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((request, response) => {
|
||||
switch (request.url) {
|
||||
case '/cross-site':
|
||||
|
@ -2953,10 +2939,8 @@ describe('BrowserWindow module', () => {
|
|||
default:
|
||||
throw new Error(`unsupported endpoint: ${request.url}`);
|
||||
}
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
serverUrl = 'http://127.0.0.1:' + (server.address() as AddressInfo).port;
|
||||
done();
|
||||
});
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -4475,13 +4459,11 @@ describe('BrowserWindow module', () => {
|
|||
let server: http.Server;
|
||||
let serverUrl: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((request, response) => {
|
||||
response.end();
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
serverUrl = 'http://127.0.0.1:' + (server.address() as AddressInfo).port;
|
||||
done();
|
||||
});
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
|
|
@ -9,7 +9,7 @@ import * as cp from 'child_process';
|
|||
|
||||
import { closeWindow } from './lib/window-helpers';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { AddressInfo } from 'net';
|
||||
import { listen } from './lib/spec-helpers';
|
||||
|
||||
const fixturesPath = path.resolve(__dirname, 'fixtures', 'api', 'context-bridge');
|
||||
|
||||
|
@ -17,13 +17,14 @@ describe('contextBridge', () => {
|
|||
let w: BrowserWindow;
|
||||
let dir: string;
|
||||
let server: http.Server;
|
||||
let serverUrl: string;
|
||||
|
||||
before(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end('');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
|
@ -95,7 +96,7 @@ describe('contextBridge', () => {
|
|||
additionalArguments: ['--unsafely-expose-electron-internals-for-testing']
|
||||
}
|
||||
});
|
||||
await w.loadURL(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
|
||||
await w.loadURL(serverUrl);
|
||||
};
|
||||
|
||||
const callWithBindings = (fn: Function, worldId: number = 0) =>
|
||||
|
|
|
@ -3,10 +3,9 @@ import * as childProcess from 'child_process';
|
|||
import * as http from 'http';
|
||||
import * as Busboy from 'busboy';
|
||||
import * as path from 'path';
|
||||
import { ifdescribe, ifit, defer, startRemoteControlApp, delay, repeatedly } from './lib/spec-helpers';
|
||||
import { ifdescribe, ifit, defer, startRemoteControlApp, delay, repeatedly, listen } from './lib/spec-helpers';
|
||||
import { app } from 'electron/main';
|
||||
import { crashReporter } from 'electron/common';
|
||||
import { AddressInfo } from 'net';
|
||||
import { EventEmitter } from 'events';
|
||||
import * as fs from 'fs';
|
||||
import * as uuid from 'uuid';
|
||||
|
@ -89,11 +88,7 @@ const startServer = async () => {
|
|||
req.pipe(busboy);
|
||||
});
|
||||
|
||||
await new Promise<void>(resolve => {
|
||||
server.listen(0, '127.0.0.1', () => { resolve(); });
|
||||
});
|
||||
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
|
||||
defer(() => { server.close(); });
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import { expect } from 'chai';
|
||||
import * as http from 'http';
|
||||
import * as path from 'path';
|
||||
import { AddressInfo } from 'net';
|
||||
import { BrowserWindow } from 'electron/main';
|
||||
import { closeAllWindows } from './lib/window-helpers';
|
||||
import { emittedOnce, emittedUntil } from './lib/events-helpers';
|
||||
import { listen } from './lib/spec-helpers';
|
||||
|
||||
describe('debugger module', () => {
|
||||
const fixtures = path.resolve(__dirname, 'fixtures');
|
||||
|
@ -138,9 +138,9 @@ describe('debugger module', () => {
|
|||
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
||||
res.end('\u0024');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
|
||||
w.loadURL(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
|
||||
const { url } = await listen(server);
|
||||
w.loadURL(url);
|
||||
// If we do this synchronously, it's fast enough to attach and enable
|
||||
// network capture before the load. If we do it before the loadURL, for
|
||||
// some reason network capture doesn't get enabled soon enough and we get
|
||||
|
@ -155,19 +155,17 @@ describe('debugger module', () => {
|
|||
expect(body).to.equal('\u0024');
|
||||
});
|
||||
|
||||
it('does not crash for invalid unicode characters in message', (done) => {
|
||||
try {
|
||||
w.webContents.debugger.attach();
|
||||
} catch (err) {
|
||||
done(`unexpected error : ${err}`);
|
||||
}
|
||||
it('does not crash for invalid unicode characters in message', async () => {
|
||||
w.webContents.debugger.attach();
|
||||
|
||||
w.webContents.debugger.on('message', (event, method) => {
|
||||
// loadingFinished indicates that page has been loaded and it did not
|
||||
// crash because of invalid UTF-8 data
|
||||
if (method === 'Network.loadingFinished') {
|
||||
done();
|
||||
}
|
||||
const loadingFinished = new Promise<void>(resolve => {
|
||||
w.webContents.debugger.on('message', (event, method) => {
|
||||
// loadingFinished indicates that page has been loaded and it did not
|
||||
// crash because of invalid UTF-8 data
|
||||
if (method === 'Network.loadingFinished') {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
server = http.createServer((req, res) => {
|
||||
|
@ -175,10 +173,11 @@ describe('debugger module', () => {
|
|||
res.end('\uFFFF');
|
||||
});
|
||||
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
w.webContents.debugger.sendCommand('Network.enable');
|
||||
w.loadURL(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
|
||||
});
|
||||
const { url } = await listen(server);
|
||||
w.webContents.debugger.sendCommand('Network.enable');
|
||||
w.loadURL(url);
|
||||
|
||||
await loadingFinished;
|
||||
});
|
||||
|
||||
it('uses empty sessionId by default', async () => {
|
||||
|
|
|
@ -3,10 +3,9 @@ import { expect } from 'chai';
|
|||
import { BrowserWindow, ipcMain, IpcMainInvokeEvent, MessageChannelMain, WebContents } from 'electron/main';
|
||||
import { closeAllWindows } from './lib/window-helpers';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { defer } from './lib/spec-helpers';
|
||||
import { defer, listen } from './lib/spec-helpers';
|
||||
import * as path from 'path';
|
||||
import * as http from 'http';
|
||||
import { AddressInfo } from 'net';
|
||||
|
||||
const v8Util = process._linkedBinding('electron_common_v8_util');
|
||||
const fixturesPath = path.resolve(__dirname, 'fixtures');
|
||||
|
@ -644,8 +643,7 @@ describe('ipc module', () => {
|
|||
res.setHeader('content-type', 'text/html');
|
||||
res.end('');
|
||||
});
|
||||
await new Promise<void>((resolve) => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
defer(() => {
|
||||
server.close();
|
||||
});
|
||||
|
@ -745,8 +743,7 @@ describe('ipc module', () => {
|
|||
res.setHeader('content-type', 'text/html');
|
||||
res.end('');
|
||||
});
|
||||
await new Promise<void>((resolve) => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
defer(() => {
|
||||
server.close();
|
||||
});
|
||||
|
|
|
@ -2,7 +2,7 @@ import { expect } from 'chai';
|
|||
import { BrowserWindow, session, desktopCapturer } from 'electron/main';
|
||||
import { closeAllWindows } from './lib/window-helpers';
|
||||
import * as http from 'http';
|
||||
import { ifdescribe, ifit } from './lib/spec-helpers';
|
||||
import { ifdescribe, ifit, listen } from './lib/spec-helpers';
|
||||
|
||||
const features = process._linkedBinding('electron_common_features');
|
||||
|
||||
|
@ -17,8 +17,7 @@ ifdescribe(features.isDesktopCapturerEnabled())('setDisplayMediaRequestHandler',
|
|||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end('');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = `http://localhost:${(server.address() as any).port}`;
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
after(() => {
|
||||
server.close();
|
||||
|
|
|
@ -5,8 +5,8 @@ import * as os from 'os';
|
|||
import * as path from 'path';
|
||||
import * as ChildProcess from 'child_process';
|
||||
import { session, net } from 'electron/main';
|
||||
import { Socket, AddressInfo } from 'net';
|
||||
import { ifit } from './lib/spec-helpers';
|
||||
import { Socket } from 'net';
|
||||
import { ifit, listen } from './lib/spec-helpers';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
|
||||
const appPath = path.join(__dirname, 'fixtures', 'api', 'net-log');
|
||||
|
@ -20,12 +20,8 @@ describe('netLog module', () => {
|
|||
let serverUrl: string;
|
||||
const connections: Set<Socket> = new Set();
|
||||
|
||||
before(done => {
|
||||
before(async () => {
|
||||
server = http.createServer();
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
serverUrl = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
done();
|
||||
});
|
||||
server.on('connection', (connection) => {
|
||||
connections.add(connection);
|
||||
connection.once('close', () => {
|
||||
|
@ -35,6 +31,7 @@ describe('netLog module', () => {
|
|||
server.on('request', (request, response) => {
|
||||
response.end();
|
||||
});
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(done => {
|
||||
|
|
|
@ -3,9 +3,9 @@ import * as dns from 'dns';
|
|||
import { net, session, ClientRequest, BrowserWindow, ClientRequestConstructorOptions } from 'electron/main';
|
||||
import * as http from 'http';
|
||||
import * as url from 'url';
|
||||
import { AddressInfo, Socket } from 'net';
|
||||
import { Socket } from 'net';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { defer, delay } from './lib/spec-helpers';
|
||||
import { defer, delay, listen } from './lib/spec-helpers';
|
||||
|
||||
// See https://github.com/nodejs/node/issues/40702.
|
||||
dns.setDefaultResultOrder('ipv4first');
|
||||
|
@ -53,26 +53,22 @@ function collectStreamBodyBuffer (response: Electron.IncomingMessage | http.Inco
|
|||
});
|
||||
}
|
||||
|
||||
function respondNTimes (fn: http.RequestListener, n: number): Promise<string> {
|
||||
return new Promise((resolve) => {
|
||||
const server = http.createServer((request, response) => {
|
||||
fn(request, response);
|
||||
// don't close if a redirect was returned
|
||||
if ((response.statusCode < 300 || response.statusCode >= 399) && n <= 0) {
|
||||
n--;
|
||||
server.close();
|
||||
}
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
resolve(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
|
||||
});
|
||||
const sockets: Socket[] = [];
|
||||
server.on('connection', s => sockets.push(s));
|
||||
defer(() => {
|
||||
async function respondNTimes (fn: http.RequestListener, n: number): Promise<string> {
|
||||
const server = http.createServer((request, response) => {
|
||||
fn(request, response);
|
||||
// don't close if a redirect was returned
|
||||
if ((response.statusCode < 300 || response.statusCode >= 399) && n <= 0) {
|
||||
n--;
|
||||
server.close();
|
||||
sockets.forEach(s => s.destroy());
|
||||
});
|
||||
}
|
||||
});
|
||||
const sockets: Socket[] = [];
|
||||
server.on('connection', s => sockets.push(s));
|
||||
defer(() => {
|
||||
server.close();
|
||||
sockets.forEach(s => s.destroy());
|
||||
});
|
||||
return (await listen(server)).url;
|
||||
}
|
||||
|
||||
function respondOnce (fn: http.RequestListener) {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { expect } from 'chai';
|
||||
import { v4 } from 'uuid';
|
||||
import { protocol, webContents, WebContents, session, BrowserWindow, ipcMain } from 'electron/main';
|
||||
import { AddressInfo } from 'net';
|
||||
import * as ChildProcess from 'child_process';
|
||||
import * as path from 'path';
|
||||
import * as http from 'http';
|
||||
|
@ -12,7 +11,7 @@ import { EventEmitter } from 'events';
|
|||
import { closeAllWindows, closeWindow } from './lib/window-helpers';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { WebmGenerator } from './lib/video-helpers';
|
||||
import { delay } from './lib/spec-helpers';
|
||||
import { delay, listen } from './lib/spec-helpers';
|
||||
|
||||
const fixturesPath = path.resolve(__dirname, 'fixtures');
|
||||
|
||||
|
@ -324,10 +323,8 @@ describe('protocol module', () => {
|
|||
res.end(text);
|
||||
server.close();
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const { url } = await listen(server);
|
||||
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const url = 'http://127.0.0.1:' + port;
|
||||
registerHttpProtocol(protocolName, (request, callback) => callback({ url }));
|
||||
const r = await ajax(protocolName + '://fake-host');
|
||||
expect(r.data).to.equal(text);
|
||||
|
@ -354,9 +351,7 @@ describe('protocol module', () => {
|
|||
}
|
||||
});
|
||||
after(() => server.close());
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
const url = `${protocolName}://fake-host`;
|
||||
const redirectURL = `http://127.0.0.1:${port}/serverRedirect`;
|
||||
registerHttpProtocol(protocolName, (request, callback) => callback({ url: redirectURL }));
|
||||
|
@ -653,10 +648,7 @@ describe('protocol module', () => {
|
|||
server.close();
|
||||
});
|
||||
after(() => server.close());
|
||||
server.listen(0, '127.0.0.1');
|
||||
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const url = `http://127.0.0.1:${port}`;
|
||||
const { url } = await listen(server);
|
||||
interceptHttpProtocol('http', (request, callback) => {
|
||||
const data: Electron.ProtocolResponse = {
|
||||
url: url,
|
||||
|
@ -874,9 +866,8 @@ describe('protocol module', () => {
|
|||
server.close();
|
||||
requestReceived.resolve();
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const content = `<script>fetch("http://127.0.0.1:${port}")</script>`;
|
||||
const { url } = await listen(server);
|
||||
const content = `<script>fetch(${JSON.stringify(url)})</script>`;
|
||||
registerStringProtocol(standardScheme, (request, callback) => callback({ data: content, mimeType: 'text/html' }));
|
||||
await w.loadURL(origin);
|
||||
await requestReceived;
|
||||
|
|
|
@ -4,8 +4,8 @@ import * as path from 'path';
|
|||
import { session, webContents, WebContents } from 'electron/main';
|
||||
import { expect } from 'chai';
|
||||
import { v4 } from 'uuid';
|
||||
import { AddressInfo } from 'net';
|
||||
import { emittedOnce, emittedNTimes } from './lib/events-helpers';
|
||||
import { listen } from './lib/spec-helpers';
|
||||
|
||||
const partition = 'service-workers-spec';
|
||||
|
||||
|
@ -32,12 +32,8 @@ describe('session.serviceWorkers', () => {
|
|||
}
|
||||
res.end(fs.readFileSync(path.resolve(__dirname, 'fixtures', 'api', 'service-workers', file)));
|
||||
});
|
||||
await new Promise<void>(resolve => {
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
baseUrl = `http://localhost:${(server.address() as AddressInfo).port}/${uuid}`;
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
const { port } = await listen(server);
|
||||
baseUrl = `http://localhost:${port}/${uuid}`;
|
||||
|
||||
w = (webContents as typeof ElectronInternal.WebContents).create({ session: ses });
|
||||
});
|
||||
|
|
|
@ -9,8 +9,7 @@ import * as send from 'send';
|
|||
import * as auth from 'basic-auth';
|
||||
import { closeAllWindows } from './lib/window-helpers';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { defer, delay } from './lib/spec-helpers';
|
||||
import { AddressInfo } from 'net';
|
||||
import { defer, delay, listen } from './lib/spec-helpers';
|
||||
|
||||
/* The whole session API doesn't use standard callbacks */
|
||||
/* eslint-disable standard/no-callback-literal */
|
||||
|
@ -51,8 +50,7 @@ describe('session module', () => {
|
|||
res.end('finished');
|
||||
server.close();
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const { port } = server.address() as AddressInfo;
|
||||
const { port } = await listen(server);
|
||||
const w = new BrowserWindow({ show: false });
|
||||
await w.loadURL(`${url}:${port}`);
|
||||
const list = await w.webContents.session.cookies.get({ url });
|
||||
|
@ -275,10 +273,7 @@ describe('session module', () => {
|
|||
res.end(mockFile);
|
||||
downloadServer.close();
|
||||
});
|
||||
await new Promise<void>(resolve => downloadServer.listen(0, '127.0.0.1', resolve));
|
||||
|
||||
const port = (downloadServer.address() as AddressInfo).port;
|
||||
const url = `http://127.0.0.1:${port}/`;
|
||||
const url = (await listen(downloadServer)).url;
|
||||
|
||||
const downloadPrevented: Promise<{itemUrl: string, itemFilename: string, item: Electron.DownloadItem}> = new Promise(resolve => {
|
||||
w.webContents.session.once('will-download', function (e, item) {
|
||||
|
@ -288,7 +283,7 @@ describe('session module', () => {
|
|||
});
|
||||
w.loadURL(url);
|
||||
const { item, itemUrl, itemFilename } = await downloadPrevented;
|
||||
expect(itemUrl).to.equal(url);
|
||||
expect(itemUrl).to.equal(url + '/');
|
||||
expect(itemFilename).to.equal('mockFile.txt');
|
||||
// Delay till the next tick.
|
||||
await new Promise(setImmediate);
|
||||
|
@ -392,15 +387,15 @@ describe('session module', () => {
|
|||
});
|
||||
res.end(pac);
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const { url } = await listen(server);
|
||||
{
|
||||
const config = { pacScript: `http://127.0.0.1:${(server.address() as AddressInfo).port}` };
|
||||
const config = { pacScript: url };
|
||||
await customSession.setProxy(config);
|
||||
const proxy = await customSession.resolveProxy('https://google.com');
|
||||
expect(proxy).to.equal('PROXY myproxy:8132');
|
||||
}
|
||||
{
|
||||
const config = { mode: 'pac_script' as any, pacScript: `http://127.0.0.1:${(server.address() as AddressInfo).port}` };
|
||||
const config = { mode: 'pac_script' as any, pacScript: url };
|
||||
await customSession.setProxy(config);
|
||||
const proxy = await customSession.resolveProxy('https://google.com');
|
||||
expect(proxy).to.equal('PROXY myproxy:8132');
|
||||
|
@ -466,8 +461,8 @@ describe('session module', () => {
|
|||
});
|
||||
res.end(pac);
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const config = { mode: 'pac_script' as any, pacScript: `http://127.0.0.1:${(server.address() as AddressInfo).port}` };
|
||||
const { url } = await listen(server);
|
||||
const config = { mode: 'pac_script' as any, pacScript: url };
|
||||
await customSession.setProxy(config);
|
||||
{
|
||||
const proxy = await customSession.resolveProxy('https://google.com');
|
||||
|
@ -575,8 +570,9 @@ describe('session module', () => {
|
|||
|
||||
describe('ses.setCertificateVerifyProc(callback)', () => {
|
||||
let server: http.Server;
|
||||
let serverUrl: string;
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(async () => {
|
||||
const certPath = path.join(fixtures, 'certificates');
|
||||
const options = {
|
||||
key: fs.readFileSync(path.join(certPath, 'server.key')),
|
||||
|
@ -592,7 +588,7 @@ describe('session module', () => {
|
|||
res.writeHead(200);
|
||||
res.end('<title>hello</title>');
|
||||
});
|
||||
server.listen(0, '127.0.0.1', done);
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
afterEach((done) => {
|
||||
|
@ -613,7 +609,7 @@ describe('session module', () => {
|
|||
});
|
||||
|
||||
const w = new BrowserWindow({ show: false, webPreferences: { session: ses } });
|
||||
await w.loadURL(`https://127.0.0.1:${(server.address() as AddressInfo).port}`);
|
||||
await w.loadURL(serverUrl);
|
||||
expect(w.webContents.getTitle()).to.equal('hello');
|
||||
expect(validate!).not.to.be.undefined();
|
||||
validate!();
|
||||
|
@ -640,10 +636,9 @@ describe('session module', () => {
|
|||
callback(-2);
|
||||
});
|
||||
|
||||
const url = `https://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
const w = new BrowserWindow({ show: false, webPreferences: { session: ses } });
|
||||
await expect(w.loadURL(url)).to.eventually.be.rejectedWith(/ERR_FAILED/);
|
||||
expect(w.webContents.getTitle()).to.equal(url);
|
||||
await expect(w.loadURL(serverUrl)).to.eventually.be.rejectedWith(/ERR_FAILED/);
|
||||
expect(w.webContents.getTitle()).to.equal(serverUrl);
|
||||
expect(validate!).not.to.be.undefined();
|
||||
validate!();
|
||||
});
|
||||
|
@ -657,12 +652,11 @@ describe('session module', () => {
|
|||
callback(-2);
|
||||
});
|
||||
|
||||
const url = `https://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
const w = new BrowserWindow({ show: false, webPreferences: { session: ses } });
|
||||
await expect(w.loadURL(url), 'first load').to.eventually.be.rejectedWith(/ERR_FAILED/);
|
||||
await expect(w.loadURL(serverUrl), 'first load').to.eventually.be.rejectedWith(/ERR_FAILED/);
|
||||
await emittedOnce(w.webContents, 'did-stop-loading');
|
||||
await expect(w.loadURL(url + '/test'), 'second load').to.eventually.be.rejectedWith(/ERR_FAILED/);
|
||||
expect(w.webContents.getTitle()).to.equal(url + '/test');
|
||||
await expect(w.loadURL(serverUrl + '/test'), 'second load').to.eventually.be.rejectedWith(/ERR_FAILED/);
|
||||
expect(w.webContents.getTitle()).to.equal(serverUrl + '/test');
|
||||
expect(numVerificationRequests).to.equal(1);
|
||||
});
|
||||
|
||||
|
@ -671,8 +665,7 @@ describe('session module', () => {
|
|||
ses1.setCertificateVerifyProc((opts, cb) => cb(0));
|
||||
const ses2 = session.fromPartition(`${Math.random()}`);
|
||||
|
||||
const url = `https://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
const req = net.request({ url, session: ses1, credentials: 'include' });
|
||||
const req = net.request({ url: serverUrl, session: ses1, credentials: 'include' });
|
||||
req.end();
|
||||
setTimeout(() => {
|
||||
ses2.setCertificateVerifyProc((opts, callback) => callback(0));
|
||||
|
@ -701,8 +694,7 @@ describe('session module', () => {
|
|||
res.end('authenticated');
|
||||
}
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
const fetch = (url: string) => new Promise((resolve, reject) => {
|
||||
const request = net.request({ url, session: ses });
|
||||
request.on('response', (response) => {
|
||||
|
@ -742,7 +734,7 @@ describe('session module', () => {
|
|||
const downloadFilePath = path.join(__dirname, '..', 'fixtures', 'mock.pdf');
|
||||
const protocolName = 'custom-dl';
|
||||
const contentDisposition = 'inline; filename="mock.pdf"';
|
||||
let address: AddressInfo;
|
||||
let port: number;
|
||||
let downloadServer: http.Server;
|
||||
before(async () => {
|
||||
downloadServer = http.createServer((req, res) => {
|
||||
|
@ -753,8 +745,7 @@ describe('session module', () => {
|
|||
});
|
||||
res.end(mockPDF);
|
||||
});
|
||||
await new Promise<void>(resolve => downloadServer.listen(0, '127.0.0.1', resolve));
|
||||
address = downloadServer.address() as AddressInfo;
|
||||
port = (await listen(downloadServer)).port;
|
||||
});
|
||||
after(async () => {
|
||||
await new Promise(resolve => downloadServer.close(resolve));
|
||||
|
@ -772,7 +763,7 @@ describe('session module', () => {
|
|||
if (isCustom) {
|
||||
expect(item.getURL()).to.equal(`${protocolName}://item`);
|
||||
} else {
|
||||
expect(item.getURL()).to.be.equal(`${url}:${address.port}/`);
|
||||
expect(item.getURL()).to.be.equal(`${url}:${port}/`);
|
||||
}
|
||||
expect(item.getMimeType()).to.equal('application/pdf');
|
||||
expect(item.getReceivedBytes()).to.equal(mockPDF.length);
|
||||
|
@ -783,7 +774,6 @@ describe('session module', () => {
|
|||
};
|
||||
|
||||
it('can download using session.downloadURL', (done) => {
|
||||
const port = address.port;
|
||||
session.defaultSession.once('will-download', function (e, item) {
|
||||
item.savePath = downloadFilePath;
|
||||
item.on('done', function (e, state) {
|
||||
|
@ -799,7 +789,6 @@ describe('session module', () => {
|
|||
});
|
||||
|
||||
it('can download using WebContents.downloadURL', (done) => {
|
||||
const port = address.port;
|
||||
const w = new BrowserWindow({ show: false });
|
||||
w.webContents.session.once('will-download', function (e, item) {
|
||||
item.savePath = downloadFilePath;
|
||||
|
@ -817,7 +806,6 @@ describe('session module', () => {
|
|||
|
||||
it('can download from custom protocols using WebContents.downloadURL', (done) => {
|
||||
const protocol = session.defaultSession.protocol;
|
||||
const port = address.port;
|
||||
const handler = (ignoredError: any, callback: Function) => {
|
||||
callback({ url: `${url}:${port}` });
|
||||
};
|
||||
|
@ -838,7 +826,6 @@ describe('session module', () => {
|
|||
});
|
||||
|
||||
it('can download using WebView.downloadURL', async () => {
|
||||
const port = address.port;
|
||||
const w = new BrowserWindow({ show: false, webPreferences: { webviewTag: true } });
|
||||
await w.loadURL('about:blank');
|
||||
function webviewDownload ({ fixtures, url, port }: {fixtures: string, url: string, port: string}) {
|
||||
|
@ -863,7 +850,6 @@ describe('session module', () => {
|
|||
});
|
||||
|
||||
it('can cancel download', (done) => {
|
||||
const port = address.port;
|
||||
const w = new BrowserWindow({ show: false });
|
||||
w.webContents.session.once('will-download', function (e, item) {
|
||||
item.savePath = downloadFilePath;
|
||||
|
@ -892,7 +878,6 @@ describe('session module', () => {
|
|||
return done();
|
||||
}
|
||||
|
||||
const port = address.port;
|
||||
const w = new BrowserWindow({ show: false });
|
||||
w.webContents.session.once('will-download', function (e, item) {
|
||||
item.savePath = downloadFilePath;
|
||||
|
@ -911,7 +896,6 @@ describe('session module', () => {
|
|||
|
||||
it('can set options for the save dialog', (done) => {
|
||||
const filePath = path.join(__dirname, 'fixtures', 'mock.pdf');
|
||||
const port = address.port;
|
||||
const options = {
|
||||
window: null,
|
||||
title: 'title',
|
||||
|
@ -999,8 +983,7 @@ describe('session module', () => {
|
|||
.on('error', (error: any) => { throw error; }).pipe(res);
|
||||
});
|
||||
try {
|
||||
await new Promise<void>(resolve => rangeServer.listen(0, '127.0.0.1', resolve));
|
||||
const port = (rangeServer.address() as AddressInfo).port;
|
||||
const { url } = await listen(rangeServer);
|
||||
const w = new BrowserWindow({ show: false });
|
||||
const downloadCancelled: Promise<Electron.DownloadItem> = new Promise((resolve) => {
|
||||
w.webContents.session.once('will-download', function (e, item) {
|
||||
|
@ -1011,7 +994,7 @@ describe('session module', () => {
|
|||
item.cancel();
|
||||
});
|
||||
});
|
||||
const downloadUrl = `http://127.0.0.1:${port}/assets/logo.png`;
|
||||
const downloadUrl = `${url}/assets/logo.png`;
|
||||
w.webContents.downloadURL(downloadUrl);
|
||||
const item = await downloadCancelled;
|
||||
expect(item.getState()).to.equal('cancelled');
|
||||
|
@ -1062,8 +1045,7 @@ describe('session module', () => {
|
|||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end('');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = `http://localhost:${(server.address() as any).port}`;
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
after(() => {
|
||||
server.close();
|
||||
|
@ -1269,8 +1251,8 @@ describe('session module', () => {
|
|||
res.end();
|
||||
server.close();
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
await w.loadURL(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
|
||||
const { url } = await listen(server);
|
||||
await w.loadURL(url);
|
||||
expect(headers!['user-agent']).to.equal(userAgent);
|
||||
expect(headers!['accept-language']).to.equal('en-US,fr;q=0.9,de;q=0.8');
|
||||
});
|
||||
|
@ -1335,9 +1317,8 @@ describe('session module', () => {
|
|||
}, (req, res) => {
|
||||
res.end('hi');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const { port } = await listen(server);
|
||||
defer(() => server.close());
|
||||
const { port } = server.address() as AddressInfo;
|
||||
|
||||
function request () {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
|
|
@ -2,12 +2,11 @@ import { BrowserWindow, app } from 'electron/main';
|
|||
import { shell } from 'electron/common';
|
||||
import { closeAllWindows } from './lib/window-helpers';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { ifdescribe, ifit } from './lib/spec-helpers';
|
||||
import { ifdescribe, ifit, listen } from './lib/spec-helpers';
|
||||
import * as http from 'http';
|
||||
import * as fs from 'fs-extra';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
import { AddressInfo } from 'net';
|
||||
import { expect } from 'chai';
|
||||
|
||||
describe('shell module', () => {
|
||||
|
@ -51,9 +50,8 @@ describe('shell module', () => {
|
|||
const server = http.createServer((req, res) => {
|
||||
res.end();
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
url = (await listen(server)).url;
|
||||
requestReceived = new Promise<void>(resolve => server.on('connection', () => resolve()));
|
||||
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
}
|
||||
|
||||
await Promise.all<void>([
|
||||
|
|
|
@ -4,8 +4,7 @@ import * as http from 'http';
|
|||
import { emittedNTimes, emittedOnce } from './lib/events-helpers';
|
||||
import { closeWindow } from './lib/window-helpers';
|
||||
import { app, BrowserWindow, ipcMain } from 'electron/main';
|
||||
import { AddressInfo } from 'net';
|
||||
import { ifdescribe } from './lib/spec-helpers';
|
||||
import { ifdescribe, listen } from './lib/spec-helpers';
|
||||
|
||||
describe('renderer nodeIntegrationInSubFrames', () => {
|
||||
const generateTests = (description: string, webPreferences: any) => {
|
||||
|
@ -218,15 +217,12 @@ ifdescribe(process.platform !== 'linux')('cross-site frame sandboxing', () => {
|
|||
let crossSiteUrl: string;
|
||||
let serverUrl: string;
|
||||
|
||||
before(function (done) {
|
||||
before(async function () {
|
||||
server = http.createServer((req, res) => {
|
||||
res.end(`<iframe name="frame" src="${crossSiteUrl}" />`);
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
serverUrl = `http://127.0.0.1:${(server.address() as AddressInfo).port}/`;
|
||||
crossSiteUrl = `http://localhost:${(server.address() as AddressInfo).port}/`;
|
||||
done();
|
||||
});
|
||||
serverUrl = (await listen(server)).url;
|
||||
crossSiteUrl = serverUrl.replace('127.0.0.1', 'localhost');
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
|
|
@ -6,7 +6,7 @@ import * as http from 'http';
|
|||
import { BrowserWindow, ipcMain, webContents, session, app, BrowserView } from 'electron/main';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { closeAllWindows } from './lib/window-helpers';
|
||||
import { ifdescribe, delay, defer, waitUntil } from './lib/spec-helpers';
|
||||
import { ifdescribe, delay, defer, waitUntil, listen } from './lib/spec-helpers';
|
||||
|
||||
const pdfjs = require('pdfjs-dist');
|
||||
const fixturesPath = path.resolve(__dirname, 'fixtures');
|
||||
|
@ -295,13 +295,11 @@ describe('webContents module', () => {
|
|||
let server: http.Server;
|
||||
let serverUrl: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((request, response) => {
|
||||
response.end();
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
serverUrl = 'http://127.0.0.1:' + (server.address() as AddressInfo).port;
|
||||
done();
|
||||
});
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -430,8 +428,7 @@ describe('webContents module', () => {
|
|||
|
||||
it('rejects if the load is aborted', async () => {
|
||||
const s = http.createServer(() => { /* never complete the request */ });
|
||||
await new Promise<void>(resolve => s.listen(0, '127.0.0.1', resolve));
|
||||
const { port } = s.address() as AddressInfo;
|
||||
const { port } = await listen(s);
|
||||
const p = expect(w.loadURL(`http://127.0.0.1:${port}`)).to.eventually.be.rejectedWith(Error, /ERR_ABORTED/);
|
||||
// load a different file before the first load completes, causing the
|
||||
// first load to be aborted.
|
||||
|
@ -448,8 +445,7 @@ describe('webContents module', () => {
|
|||
resp = res;
|
||||
// don't end the response yet
|
||||
});
|
||||
await new Promise<void>(resolve => s.listen(0, '127.0.0.1', resolve));
|
||||
const { port } = s.address() as AddressInfo;
|
||||
const { port } = await listen(s);
|
||||
const p = new Promise<void>(resolve => {
|
||||
w.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL, isMainFrame) => {
|
||||
if (!isMainFrame) {
|
||||
|
@ -472,8 +468,7 @@ describe('webContents module', () => {
|
|||
resp = res;
|
||||
// don't end the response yet
|
||||
});
|
||||
await new Promise<void>(resolve => s.listen(0, '127.0.0.1', resolve));
|
||||
const { port } = s.address() as AddressInfo;
|
||||
const { port } = await listen(s);
|
||||
const p = new Promise<void>(resolve => {
|
||||
w.webContents.on('did-frame-finish-load', (event, isMainFrame) => {
|
||||
if (!isMainFrame) {
|
||||
|
@ -841,11 +836,12 @@ describe('webContents module', () => {
|
|||
|
||||
describe('inspectElement()', () => {
|
||||
afterEach(closeAllWindows);
|
||||
it('supports inspecting an element in the devtools', (done) => {
|
||||
it('supports inspecting an element in the devtools', async () => {
|
||||
const w = new BrowserWindow({ show: false });
|
||||
w.loadURL('about:blank');
|
||||
w.webContents.once('devtools-opened', () => { done(); });
|
||||
const event = emittedOnce(w.webContents, 'devtools-opened');
|
||||
w.webContents.inspectElement(10, 10);
|
||||
await event;
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -1234,15 +1230,12 @@ describe('webContents module', () => {
|
|||
let serverUrl: string;
|
||||
let crossSiteUrl: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
setTimeout(() => res.end('hey'), 0);
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
serverUrl = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
crossSiteUrl = `http://localhost:${(server.address() as AddressInfo).port}`;
|
||||
done();
|
||||
});
|
||||
serverUrl = (await listen(server)).url;
|
||||
crossSiteUrl = serverUrl.replace('127.0.0.1', 'localhost');
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -1340,7 +1333,7 @@ describe('webContents module', () => {
|
|||
let serverUrl: string;
|
||||
let crossSiteUrl: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
const respond = () => {
|
||||
if (req.url === '/redirect-cross-site') {
|
||||
|
@ -1359,11 +1352,8 @@ describe('webContents module', () => {
|
|||
};
|
||||
setTimeout(respond, 0);
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
serverUrl = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
crossSiteUrl = `http://localhost:${(server.address() as AddressInfo).port}`;
|
||||
done();
|
||||
});
|
||||
serverUrl = (await listen(server)).url;
|
||||
crossSiteUrl = serverUrl.replace('127.0.0.1', 'localhost');
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -2110,7 +2100,7 @@ describe('webContents module', () => {
|
|||
let proxyServer: http.Server;
|
||||
let proxyServerPort: number;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((request, response) => {
|
||||
if (request.url === '/no-auth') {
|
||||
return response.end('ok');
|
||||
|
@ -2122,14 +2112,11 @@ describe('webContents module', () => {
|
|||
response
|
||||
.writeHead(401, { 'WWW-Authenticate': 'Basic realm="Foo"' })
|
||||
.end('401');
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
serverPort = (server.address() as AddressInfo).port;
|
||||
serverUrl = `http://127.0.0.1:${serverPort}`;
|
||||
done();
|
||||
});
|
||||
({ port: serverPort, url: serverUrl } = await listen(server));
|
||||
});
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
proxyServer = http.createServer((request, response) => {
|
||||
if (request.headers['proxy-authorization']) {
|
||||
response.writeHead(200, { 'Content-type': 'text/plain' });
|
||||
|
@ -2138,10 +2125,8 @@ describe('webContents module', () => {
|
|||
response
|
||||
.writeHead(407, { 'Proxy-Authenticate': 'Basic realm="Foo"' })
|
||||
.end();
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
proxyServerPort = (proxyServer.address() as AddressInfo).port;
|
||||
done();
|
||||
});
|
||||
proxyServerPort = (await listen(proxyServer)).port;
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
|
@ -2225,13 +2210,13 @@ describe('webContents module', () => {
|
|||
});
|
||||
|
||||
describe('crashed event', () => {
|
||||
it('does not crash main process when destroying WebContents in it', (done) => {
|
||||
it('does not crash main process when destroying WebContents in it', async () => {
|
||||
const contents = (webContents as typeof ElectronInternal.WebContents).create({ nodeIntegration: true });
|
||||
contents.once('render-process-gone', () => {
|
||||
contents.destroy();
|
||||
done();
|
||||
});
|
||||
contents.loadURL('about:blank').then(() => contents.forcefullyCrashRenderer());
|
||||
const crashEvent = emittedOnce(contents, 'render-process-gone');
|
||||
await contents.loadURL('about:blank');
|
||||
contents.forcefullyCrashRenderer();
|
||||
await crashEvent;
|
||||
contents.destroy();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -5,8 +5,7 @@ import * as url from 'url';
|
|||
import { BrowserWindow, WebFrameMain, webFrameMain, ipcMain, app, WebContents } from 'electron/main';
|
||||
import { closeAllWindows } from './lib/window-helpers';
|
||||
import { emittedOnce, emittedNTimes } from './lib/events-helpers';
|
||||
import { AddressInfo } from 'net';
|
||||
import { defer, delay, ifit, waitUntil } from './lib/spec-helpers';
|
||||
import { defer, delay, ifit, listen, waitUntil } from './lib/spec-helpers';
|
||||
|
||||
describe('webFrameMain module', () => {
|
||||
const fixtures = path.resolve(__dirname, 'fixtures');
|
||||
|
@ -17,7 +16,7 @@ describe('webFrameMain module', () => {
|
|||
type Server = { server: http.Server, url: string }
|
||||
|
||||
/** Creates an HTTP server whose handler embeds the given iframe src. */
|
||||
const createServer = () => new Promise<Server>(resolve => {
|
||||
const createServer = async () => {
|
||||
const server = http.createServer((req, res) => {
|
||||
const params = new URLSearchParams(url.parse(req.url || '').search || '');
|
||||
if (params.has('frameSrc')) {
|
||||
|
@ -26,11 +25,8 @@ describe('webFrameMain module', () => {
|
|||
res.end('');
|
||||
}
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
const url = `http://127.0.0.1:${(server.address() as AddressInfo).port}/`;
|
||||
resolve({ server, url });
|
||||
});
|
||||
});
|
||||
return { server, url: (await listen(server)).url + '/' };
|
||||
};
|
||||
|
||||
afterEach(closeAllWindows);
|
||||
|
||||
|
@ -390,7 +386,7 @@ describe('webFrameMain module', () => {
|
|||
|
||||
// HACK: Use 'localhost' instead of '127.0.0.1' so Chromium treats it as
|
||||
// a separate origin because differing ports aren't enough 🤔
|
||||
const secondUrl = `http://localhost:${new URL(server.url).port}`;
|
||||
const secondUrl = server.url.replace('127.0.0.1', 'localhost');
|
||||
|
||||
const w = new BrowserWindow({ show: false });
|
||||
await w.webContents.loadURL(server.url);
|
||||
|
|
|
@ -5,8 +5,9 @@ import * as path from 'path';
|
|||
import * as url from 'url';
|
||||
import * as WebSocket from 'ws';
|
||||
import { ipcMain, protocol, session, WebContents, webContents } from 'electron/main';
|
||||
import { AddressInfo, Socket } from 'net';
|
||||
import { Socket } from 'net';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { listen } from './lib/spec-helpers';
|
||||
|
||||
const fixturesPath = path.resolve(__dirname, 'fixtures');
|
||||
|
||||
|
@ -35,13 +36,9 @@ describe('webRequest module', () => {
|
|||
});
|
||||
let defaultURL: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
protocol.registerStringProtocol('cors', (req, cb) => cb(''));
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
defaultURL = `http://127.0.0.1:${port}/`;
|
||||
done();
|
||||
});
|
||||
defaultURL = (await listen(server)).url + '/';
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -489,8 +486,7 @@ describe('webRequest module', () => {
|
|||
});
|
||||
|
||||
// Start server.
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = String((server.address() as AddressInfo).port);
|
||||
const { port } = await listen(server);
|
||||
|
||||
// Use a separate session for testing.
|
||||
const ses = session.fromPartition('WebRequestWebSocket');
|
||||
|
@ -548,7 +544,7 @@ describe('webRequest module', () => {
|
|||
ses.webRequest.onCompleted(null);
|
||||
});
|
||||
|
||||
contents.loadFile(path.join(fixturesPath, 'api', 'webrequest.html'), { query: { port } });
|
||||
contents.loadFile(path.join(fixturesPath, 'api', 'webrequest.html'), { query: { port: `${port}` } });
|
||||
await emittedOnce(ipcMain, 'websocket-success');
|
||||
|
||||
expect(receivedHeaders['/websocket'].Upgrade[0]).to.equal('websocket');
|
||||
|
|
|
@ -10,8 +10,7 @@ import * as url from 'url';
|
|||
import * as ChildProcess from 'child_process';
|
||||
import { EventEmitter } from 'events';
|
||||
import { promisify } from 'util';
|
||||
import { ifit, ifdescribe, defer, delay, itremote } from './lib/spec-helpers';
|
||||
import { AddressInfo } from 'net';
|
||||
import { ifit, ifdescribe, defer, delay, itremote, listen } from './lib/spec-helpers';
|
||||
import { PipeTransport } from './pipe-transport';
|
||||
import * as ws from 'ws';
|
||||
|
||||
|
@ -60,18 +59,17 @@ describe('reporting api', () => {
|
|||
// "deprecation" report.
|
||||
res.end('<script>webkitRequestAnimationFrame(() => {})</script>');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const { url } = await listen(server);
|
||||
const bw = new BrowserWindow({
|
||||
show: false
|
||||
});
|
||||
try {
|
||||
const reportGenerated = emittedOnce(reports, 'report');
|
||||
const url = `https://localhost:${(server.address() as any).port}/a`;
|
||||
await bw.loadURL(url);
|
||||
const [report] = await reportGenerated;
|
||||
expect(report).to.be.an('array');
|
||||
expect(report[0].type).to.equal('deprecation');
|
||||
expect(report[0].url).to.equal(url);
|
||||
expect(report[0].url).to.equal(`${url}/a`);
|
||||
expect(report[0].body.id).to.equal('PrefixedRequestAnimationFrame');
|
||||
} finally {
|
||||
bw.destroy();
|
||||
|
@ -218,8 +216,7 @@ describe('web security', () => {
|
|||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end('<body>');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = `http://localhost:${(server.address() as any).port}`;
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
after(() => {
|
||||
server.close();
|
||||
|
@ -847,8 +844,7 @@ describe('chromium features', () => {
|
|||
res.end(`body:${body}`);
|
||||
});
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = `http://localhost:${(server.address() as any).port}`;
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
after(async () => {
|
||||
server.close();
|
||||
|
@ -1213,16 +1209,13 @@ describe('chromium features', () => {
|
|||
let serverURL: string;
|
||||
let server: any;
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
res.writeHead(200);
|
||||
const filePath = path.join(fixturesPath, 'pages', 'window-opener-targetOrigin.html');
|
||||
res.end(fs.readFileSync(filePath, 'utf8'));
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
serverURL = `http://127.0.0.1:${server.address().port}`;
|
||||
done();
|
||||
});
|
||||
serverURL = (await listen(server)).url;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
@ -1523,7 +1516,7 @@ describe('chromium features', () => {
|
|||
let server: http.Server;
|
||||
let serverUrl: string;
|
||||
let serverCrossSiteUrl: string;
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
const respond = () => {
|
||||
if (req.url === '/redirect-cross-site') {
|
||||
|
@ -1538,11 +1531,8 @@ describe('chromium features', () => {
|
|||
};
|
||||
setTimeout(respond, 0);
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
serverUrl = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
|
||||
serverCrossSiteUrl = `http://localhost:${(server.address() as AddressInfo).port}`;
|
||||
done();
|
||||
});
|
||||
serverUrl = (await listen(server)).url;
|
||||
serverCrossSiteUrl = serverUrl.replace('127.0.0.1', 'localhost');
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
@ -1935,8 +1925,7 @@ describe('chromium features', () => {
|
|||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end('');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = `http://localhost:${(server.address() as any).port}`;
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
after(() => {
|
||||
server.close();
|
||||
|
@ -2057,8 +2046,7 @@ describe('chromium features', () => {
|
|||
describe('websockets', () => {
|
||||
it('has user agent', async () => {
|
||||
const server = http.createServer();
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
const wss = new ws.Server({ server: server });
|
||||
const finished = new Promise<string | undefined>((resolve, reject) => {
|
||||
wss.on('error', reject);
|
||||
|
@ -2081,8 +2069,7 @@ describe('chromium features', () => {
|
|||
res.end('test');
|
||||
});
|
||||
defer(() => server.close());
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
const w = new BrowserWindow({ show: false });
|
||||
w.loadURL(`file://${fixturesPath}/pages/blank.html`);
|
||||
const x = await w.webContents.executeJavaScript(`
|
||||
|
@ -2268,7 +2255,9 @@ describe('iframe using HTML fullscreen API while window is OS-fullscreened', ()
|
|||
const fullscreenChildHtml = promisify(fs.readFile)(
|
||||
path.join(fixturesPath, 'pages', 'fullscreen-oopif.html')
|
||||
);
|
||||
let w: BrowserWindow, server: http.Server;
|
||||
let w: BrowserWindow;
|
||||
let server: http.Server;
|
||||
let crossSiteUrl: string;
|
||||
|
||||
beforeEach(async () => {
|
||||
server = http.createServer(async (_req, res) => {
|
||||
|
@ -2277,11 +2266,8 @@ describe('iframe using HTML fullscreen API while window is OS-fullscreened', ()
|
|||
res.end();
|
||||
});
|
||||
|
||||
await new Promise<void>((resolve) => {
|
||||
server.listen(8989, '127.0.0.1', () => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
const serverUrl = (await listen(server)).url;
|
||||
crossSiteUrl = serverUrl.replace('127.0.0.1', 'localhost');
|
||||
|
||||
w = new BrowserWindow({
|
||||
show: true,
|
||||
|
@ -2303,7 +2289,7 @@ describe('iframe using HTML fullscreen API while window is OS-fullscreened', ()
|
|||
ifit(process.platform !== 'darwin')('can fullscreen from out-of-process iframes (non-macOS)', async () => {
|
||||
const fullscreenChange = emittedOnce(ipcMain, 'fullscreenChange');
|
||||
const html =
|
||||
'<iframe style="width: 0" frameborder=0 src="http://localhost:8989" allowfullscreen></iframe>';
|
||||
`<iframe style="width: 0" frameborder=0 src="${crossSiteUrl}" allowfullscreen></iframe>`;
|
||||
w.loadURL(`data:text/html,${html}`);
|
||||
await fullscreenChange;
|
||||
|
||||
|
@ -2328,7 +2314,7 @@ describe('iframe using HTML fullscreen API while window is OS-fullscreened', ()
|
|||
await emittedOnce(w, 'enter-full-screen');
|
||||
const fullscreenChange = emittedOnce(ipcMain, 'fullscreenChange');
|
||||
const html =
|
||||
'<iframe style="width: 0" frameborder=0 src="http://localhost:8989" allowfullscreen></iframe>';
|
||||
`<iframe style="width: 0" frameborder=0 src="${crossSiteUrl}" allowfullscreen></iframe>`;
|
||||
w.loadURL(`data:text/html,${html}`);
|
||||
await fullscreenChange;
|
||||
|
||||
|
@ -2791,8 +2777,7 @@ describe('navigator.hid', () => {
|
|||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end('<body>');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = `http://localhost:${(server.address() as any).port}`;
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
const requestDevices: any = () => {
|
||||
|
@ -2990,8 +2975,7 @@ describe('navigator.usb', () => {
|
|||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end('<body>');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = `http://localhost:${(server.address() as any).port}`;
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
|
||||
const requestDevices: any = () => {
|
||||
|
|
|
@ -2,12 +2,11 @@ import { expect } from 'chai';
|
|||
import { app, session, BrowserWindow, ipcMain, WebContents, Extension, Session } from 'electron/main';
|
||||
import { closeAllWindows, closeWindow } from './lib/window-helpers';
|
||||
import * as http from 'http';
|
||||
import { AddressInfo } from 'net';
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
import * as WebSocket from 'ws';
|
||||
import { emittedOnce, emittedNTimes, emittedUntil } from './lib/events-helpers';
|
||||
import { ifit } from './lib/spec-helpers';
|
||||
import { ifit, listen } from './lib/spec-helpers';
|
||||
|
||||
const uuid = require('uuid');
|
||||
|
||||
|
@ -19,7 +18,7 @@ describe('chrome extensions', () => {
|
|||
// NB. extensions are only allowed on http://, https:// and ftp:// (!) urls by default.
|
||||
let server: http.Server;
|
||||
let url: string;
|
||||
let port: string;
|
||||
let port: number;
|
||||
before(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
if (req.url === '/cors') {
|
||||
|
@ -37,11 +36,7 @@ describe('chrome extensions', () => {
|
|||
});
|
||||
});
|
||||
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', () => {
|
||||
port = String((server.address() as AddressInfo).port);
|
||||
url = `http://127.0.0.1:${port}`;
|
||||
resolve();
|
||||
}));
|
||||
({ port, url } = await listen(server));
|
||||
});
|
||||
after(() => {
|
||||
server.close();
|
||||
|
@ -324,7 +319,7 @@ describe('chrome extensions', () => {
|
|||
customSession.webRequest.onBeforeSendHeaders(() => {
|
||||
resolve();
|
||||
});
|
||||
await w.loadFile(path.join(fixtures, 'api', 'webrequest.html'), { query: { port } });
|
||||
await w.loadFile(path.join(fixtures, 'api', 'webrequest.html'), { query: { port: `${port}` } });
|
||||
await customSession.loadExtension(path.join(fixtures, 'extensions', 'chrome-webRequest-wss'));
|
||||
})();
|
||||
});
|
||||
|
@ -332,7 +327,7 @@ describe('chrome extensions', () => {
|
|||
|
||||
describe('WebSocket', () => {
|
||||
it('can be proxied', async () => {
|
||||
await w.loadFile(path.join(fixtures, 'api', 'webrequest.html'), { query: { port } });
|
||||
await w.loadFile(path.join(fixtures, 'api', 'webrequest.html'), { query: { port: `${port}` } });
|
||||
await customSession.loadExtension(path.join(fixtures, 'extensions', 'chrome-webRequest-wss'));
|
||||
customSession.webRequest.onSendHeaders((details) => {
|
||||
if (details.url.startsWith('ws://')) {
|
||||
|
|
|
@ -176,17 +176,16 @@ describe('webContents.setWindowOpenHandler', () => {
|
|||
await emittedOnce(browserWindow.webContents, 'did-create-window');
|
||||
});
|
||||
|
||||
it('can change webPreferences of child windows', (done) => {
|
||||
it('can change webPreferences of child windows', async () => {
|
||||
browserWindow.webContents.setWindowOpenHandler(() => ({ action: 'allow', overrideBrowserWindowOptions: { webPreferences: { defaultFontSize: 30 } } }));
|
||||
|
||||
browserWindow.webContents.on('did-create-window', async (childWindow) => {
|
||||
await childWindow.webContents.executeJavaScript("document.write('hello')");
|
||||
const size = await childWindow.webContents.executeJavaScript("getComputedStyle(document.querySelector('body')).fontSize");
|
||||
expect(size).to.equal('30px');
|
||||
done();
|
||||
});
|
||||
|
||||
const didCreateWindow = emittedOnce(browserWindow.webContents, 'did-create-window');
|
||||
browserWindow.webContents.executeJavaScript("window.open('about:blank', '', 'show=no') && true");
|
||||
const [childWindow] = await didCreateWindow;
|
||||
|
||||
await childWindow.webContents.executeJavaScript("document.write('hello')");
|
||||
const size = await childWindow.webContents.executeJavaScript("getComputedStyle(document.querySelector('body')).fontSize");
|
||||
expect(size).to.equal('30px');
|
||||
});
|
||||
|
||||
it('does not hang parent window when denying window.open', async () => {
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
import * as childProcess from 'child_process';
|
||||
import * as path from 'path';
|
||||
import * as http from 'http';
|
||||
import * as https from 'https';
|
||||
import * as net from 'net';
|
||||
import * as v8 from 'v8';
|
||||
import * as url from 'url';
|
||||
import { SuiteFunction, TestFunction } from 'mocha';
|
||||
import { BrowserWindow } from 'electron/main';
|
||||
import { AssertionError } from 'chai';
|
||||
|
@ -191,3 +194,11 @@ export async function itremote (name: string, fn: Function, args?: any[]) {
|
|||
if (!ok) { throw new AssertionError(message); }
|
||||
});
|
||||
}
|
||||
|
||||
export async function listen (server: http.Server | https.Server) {
|
||||
const hostname = '127.0.0.1';
|
||||
await new Promise<void>(resolve => server.listen(0, hostname, () => resolve()));
|
||||
const { port } = server.address() as net.AddressInfo;
|
||||
const protocol = (server instanceof https.Server) ? 'https' : 'http';
|
||||
return { port, url: url.format({ protocol, hostname, port }) };
|
||||
}
|
||||
|
|
|
@ -7,9 +7,8 @@ import * as url from 'url';
|
|||
import { BrowserWindow, WebPreferences } from 'electron/main';
|
||||
|
||||
import { closeWindow } from './lib/window-helpers';
|
||||
import { AddressInfo } from 'net';
|
||||
import { emittedUntil } from './lib/events-helpers';
|
||||
import { delay } from './lib/spec-helpers';
|
||||
import { delay, listen } from './lib/spec-helpers';
|
||||
|
||||
const messageContainsSecurityWarning = (event: Event, level: number, message: string) => {
|
||||
return message.indexOf('Electron Security Warning') > -1;
|
||||
|
@ -25,7 +24,7 @@ describe('security warnings', () => {
|
|||
let useCsp = true;
|
||||
let serverUrl: string;
|
||||
|
||||
before((done) => {
|
||||
before(async () => {
|
||||
// Create HTTP Server
|
||||
server = http.createServer((request, response) => {
|
||||
const uri = url.parse(request.url!).pathname!;
|
||||
|
@ -57,10 +56,9 @@ describe('security warnings', () => {
|
|||
response.end();
|
||||
});
|
||||
});
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
serverUrl = `http://localhost2:${(server.address() as AddressInfo).port}`;
|
||||
done();
|
||||
});
|
||||
|
||||
serverUrl = `http://localhost2:${(await listen(server)).port}`;
|
||||
});
|
||||
|
||||
after(() => {
|
||||
|
|
|
@ -4,10 +4,9 @@ import { expect } from 'chai';
|
|||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
import * as http from 'http';
|
||||
import { AddressInfo } from 'net';
|
||||
import { closeWindow } from './lib/window-helpers';
|
||||
import { emittedOnce } from './lib/events-helpers';
|
||||
import { ifit, ifdescribe, delay } from './lib/spec-helpers';
|
||||
import { ifit, ifdescribe, delay, listen } from './lib/spec-helpers';
|
||||
|
||||
const features = process._linkedBinding('electron_common_features');
|
||||
const v8Util = process._linkedBinding('electron_common_v8_util');
|
||||
|
@ -57,8 +56,9 @@ ifdescribe(features.isBuiltinSpellCheckerEnabled())('spellchecker', function ()
|
|||
res.end(data);
|
||||
});
|
||||
});
|
||||
before((done) => {
|
||||
server.listen(0, '127.0.0.1', () => done());
|
||||
let serverUrl: string;
|
||||
before(async () => {
|
||||
serverUrl = (await listen(server)).url;
|
||||
});
|
||||
after(() => server.close());
|
||||
|
||||
|
@ -77,7 +77,7 @@ ifdescribe(features.isBuiltinSpellCheckerEnabled())('spellchecker', function ()
|
|||
sandbox
|
||||
}
|
||||
});
|
||||
w.webContents.session.setSpellCheckerDictionaryDownloadURL(`http://127.0.0.1:${(server.address() as AddressInfo).port}/`);
|
||||
w.webContents.session.setSpellCheckerDictionaryDownloadURL(serverUrl);
|
||||
w.webContents.session.setSpellCheckerLanguages(['en-US']);
|
||||
await w.loadFile(path.resolve(__dirname, './fixtures/chromium/spellchecker.html'));
|
||||
});
|
||||
|
|
|
@ -3,10 +3,9 @@ import * as url from 'url';
|
|||
import { BrowserWindow, session, ipcMain, app, WebContents } from 'electron/main';
|
||||
import { closeAllWindows } from './lib/window-helpers';
|
||||
import { emittedOnce, emittedUntil } from './lib/events-helpers';
|
||||
import { ifit, ifdescribe, delay, defer, itremote, useRemoteContext } from './lib/spec-helpers';
|
||||
import { ifit, ifdescribe, delay, defer, itremote, useRemoteContext, listen } from './lib/spec-helpers';
|
||||
import { expect } from 'chai';
|
||||
import * as http from 'http';
|
||||
import { AddressInfo } from 'net';
|
||||
import * as auth from 'basic-auth';
|
||||
|
||||
declare let WebView: any;
|
||||
|
@ -1208,11 +1207,11 @@ describe('<webview> tag', function () {
|
|||
res.end();
|
||||
server.close();
|
||||
}
|
||||
}).listen(0, '127.0.0.1', () => {
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
});
|
||||
listen(server).then(({ url }) => {
|
||||
loadWebView(w, {
|
||||
httpreferrer: referrer,
|
||||
src: `http://127.0.0.1:${port}`
|
||||
src: url
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -1464,15 +1463,13 @@ describe('<webview> tag', function () {
|
|||
res.end();
|
||||
}
|
||||
});
|
||||
const uri = await new Promise<string>(resolve => server.listen(0, '127.0.0.1', () => {
|
||||
resolve(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
|
||||
}));
|
||||
const { url } = await listen(server);
|
||||
defer(() => { server.close(); });
|
||||
const event = await loadWebViewAndWaitForEvent(w, {
|
||||
src: `${uri}/302`
|
||||
src: `${url}/302`
|
||||
}, 'did-redirect-navigation');
|
||||
|
||||
expect(event.url).to.equal(`${uri}/200`);
|
||||
expect(event.url).to.equal(`${url}/200`);
|
||||
expect(event.isInPlace).to.be.false();
|
||||
expect(event.isMainFrame).to.be.true();
|
||||
expect(event.frameProcessId).to.be.a('number');
|
||||
|
@ -1572,8 +1569,7 @@ describe('<webview> tag', function () {
|
|||
describe('dom-ready event', () => {
|
||||
it('emits when document is loaded', async () => {
|
||||
const server = http.createServer(() => {});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
await loadWebViewAndWaitForEvent(w, {
|
||||
src: `file://${fixtures}/pages/dom-ready.html?port=${port}`
|
||||
}, 'dom-ready');
|
||||
|
@ -2063,8 +2059,7 @@ describe('<webview> tag', function () {
|
|||
defer(() => {
|
||||
server.close();
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
const port = (server.address() as AddressInfo).port;
|
||||
const { port } = await listen(server);
|
||||
const e = await loadWebViewAndWaitForEvent(w, {
|
||||
nodeintegration: 'on',
|
||||
webpreferences: 'contextIsolation=no',
|
||||
|
|
Loading…
Add table
Reference in a new issue