fix: crash on WebWorkerObserver script execution (#37050)

fix: crash on WebWorkerObserver script execution
This commit is contained in:
Shelley Vohr 2023-01-31 12:29:29 +01:00 committed by GitHub
parent ce35bda805
commit 23739c644b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 109 additions and 16 deletions

View file

@ -0,0 +1,22 @@
<html>
<body>
<style>
textarea {
background-image: url(checkerboard);
background-image: paint(checkerboard);
}
@supports (background: paint(id)) {
background-image: paint(checkerboard);
}
</style>
<textarea></textarea>
<script>
const addPaintWorklet = async () => {
await CSS.paintWorklet.addModule('worklet.js');
}
</script>
</body>
</html>

View file

@ -0,0 +1,38 @@
const { app, BrowserWindow } = require('electron');
async function createWindow () {
const mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegrationInWorker: true
}
});
let loads = 1;
mainWindow.webContents.on('did-finish-load', async () => {
if (loads === 2) {
process.exit(0);
} else {
loads++;
await mainWindow.webContents.executeJavaScript('addPaintWorklet()');
await mainWindow.webContents.executeJavaScript('location.reload()');
}
});
mainWindow.webContents.on('render-process-gone', () => {
process.exit(1);
});
await mainWindow.loadFile('index.html');
}
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});

View file

@ -0,0 +1,18 @@
class CheckerboardPainter {
paint (ctx, geom, properties) {
const colors = ['red', 'green', 'blue'];
const size = 32;
for (let y = 0; y < (geom.height / size); y++) {
for (let x = 0; x < (geom.width / size); x++) {
const color = colors[(x + y) % colors.length];
ctx.beginPath();
ctx.fillStyle = color;
ctx.rect(x * size, y * size, size, size);
ctx.fill();
}
}
}
}
// eslint-disable-next-line no-undef
registerPaint('checkerboard', CheckerboardPainter);