function reload(controlledFrame) {
return new Promise((resolve, reject) => {
const onAbort = () => {
controlledFrame.removeEventListener('loadabort', onAbort);
controlledFrame.removeEventListener('loadcommit', onCommit);
reject();
};
const onCommit = () => {
controlledFrame.removeEventListener('loadabort', onAbort);
controlledFrame.removeEventListener('loadcommit', onCommit);
resolve();
};
controlledFrame.addEventListener('loadabort', onAbort);
controlledFrame.addEventListener('loadcommit', onCommit);
controlledFrame.src += '&reload';
});
}
async function getBackgroundColor(controlledFrame) {
return await executeAsyncScript(
controlledFrame, 'document.body.style.backgroundColor');
}
promise_test(async (test) => {
const controlledFrame = await createControlledFrame('/simple.html?');
await controlledFrame.addContentScripts([{
name: 'test',
urlPatterns: ['https://*/*'],
js: {files: ['/resources/content_script.js']},
runAt: 'document-start',
}]);
assert_equals('', await getBackgroundColor(controlledFrame));
await reload(controlledFrame);
assert_equals('red', await getBackgroundColor(controlledFrame));
await controlledFrame.removeContentScripts(['test']);
await reload(controlledFrame);
assert_equals('', await getBackgroundColor(controlledFrame));
}, 'Content scripts run');
promise_test(async (test) => {
const controlledFrame = await createControlledFrame('/simple.html?');
const result = controlledFrame.addContentScripts([{
name: 'test',
urlPatterns: ['*invalid pattern*'],
js: {files: ['/resources/content_script.js']},
runAt: 'document-start',
}]);
return promise_rejects_js(test, TypeError, result, 'Promise should reject');
}, 'Reject a content script with invalid pattern');