• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const { runInThisContext } = require('vm');
4const { parentPort, workerData } = require('worker_threads');
5
6const { ResourceLoader } = require(workerData.wptRunner);
7const resource = new ResourceLoader(workerData.wptPath);
8
9global.self = global;
10global.GLOBAL = {
11  isWindow() { return false; }
12};
13global.require = require;
14
15// This is a mock, because at the moment fetch is not implemented
16// in Node.js, but some tests and harness depend on this to pull
17// resources.
18global.fetch = function fetch(file) {
19  return resource.read(workerData.filename, file, true);
20};
21
22if (workerData.initScript) {
23  runInThisContext(workerData.initScript);
24}
25
26runInThisContext(workerData.harness.code, {
27  filename: workerData.harness.filename
28});
29
30// eslint-disable-next-line no-undef
31add_result_callback((result) => {
32  parentPort.postMessage({
33    type: 'result',
34    result: {
35      status: result.status,
36      name: result.name,
37      message: result.message,
38      stack: result.stack,
39    },
40  });
41});
42
43// eslint-disable-next-line no-undef
44add_completion_callback((_, status) => {
45  parentPort.postMessage({
46    type: 'completion',
47    status,
48  });
49});
50
51for (const scriptToRun of workerData.scriptsToRun) {
52  runInThisContext(scriptToRun.code, { filename: scriptToRun.filename });
53}
54