201 lines
9.5 KiB
JavaScript
201 lines
9.5 KiB
JavaScript
function openWindow(t, url) {
|
|
return new Promise(resolve => {
|
|
let win = window.open(url, '_blank');
|
|
t.add_cleanup(() => win.close());
|
|
window.onmessage = e => {
|
|
assert_equals(e.data, 'LOADED');
|
|
resolve(win);
|
|
};
|
|
});
|
|
}
|
|
|
|
// Run a referrer policy test with the given settings.
|
|
//
|
|
// Example:
|
|
// settings = {
|
|
// workletType: 'paint',
|
|
// fetchType: 'top-level' or 'descendant',
|
|
// referrerPolicy: 'no-referrer',
|
|
// scriptsOrigins: { topLevel: 'same', descendant: 'remote' }
|
|
// };
|
|
function runReferrerTest(t, settings) {
|
|
const kWindowURL =
|
|
'resources/referrer-window.html' +
|
|
`?pipe=header(Referrer-Policy,${settings.referrerPolicy})`;
|
|
return openWindow(t, kWindowURL).then(win => {
|
|
const promise = new Promise(resolve => window.onmessage = resolve);
|
|
win.postMessage(settings, '*');
|
|
return promise;
|
|
}).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
|
|
}
|
|
|
|
// Runs a series of tests related to the referrer policy on a worklet.
|
|
//
|
|
// Usage:
|
|
// runReferrerTests("paint");
|
|
function runReferrerTests(workletType) {
|
|
const worklet = get_worklet(workletType);
|
|
|
|
// Tests for top-level script fetch -----------------------------------------
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'top-level',
|
|
referrerPolicy: 'no-referrer',
|
|
scriptOrigins: { topLevel: 'same' } });
|
|
}, 'Importing a same-origin script from a page that has "no-referrer" ' +
|
|
'referrer policy should not send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'top-level',
|
|
referrerPolicy: 'no-referrer',
|
|
scriptOrigins: { topLevel: 'remote' } });
|
|
}, 'Importing a remote-origin script from a page that has "no-referrer" ' +
|
|
'referrer policy should not send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'top-level',
|
|
referrerPolicy: 'origin',
|
|
scriptOrigins: { topLevel: 'same' } });
|
|
}, 'Importing a same-origin script from a page that has "origin" ' +
|
|
'referrer policy should send only an origin as referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'top-level',
|
|
referrerPolicy: 'origin',
|
|
scriptOrigins: { topLevel: 'remote' } });
|
|
}, 'Importing a remote-origin script from a page that has "origin" ' +
|
|
'referrer policy should send only an origin as referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'top-level',
|
|
referrerPolicy: 'same-origin',
|
|
scriptOrigins: { topLevel: 'same' } });
|
|
}, 'Importing a same-origin script from a page that has "same-origin" ' +
|
|
'referrer policy should send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'top-level',
|
|
referrerPolicy: 'same-origin',
|
|
scriptOrigins: { topLevel: 'remote' } });
|
|
}, 'Importing a remote-origin script from a page that has "same-origin" ' +
|
|
'referrer policy should not send referrer.');
|
|
|
|
// Tests for descendant script fetch -----------------------------------------
|
|
|
|
// Referrer policy: no-referrer.
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'no-referrer',
|
|
scriptOrigins: { topLevel: 'same',
|
|
descendant: 'same' } });
|
|
}, 'Importing a same-origin script from a same-origin worklet script that ' +
|
|
'has "no-referrer" referrer policy should not send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'no-referrer',
|
|
scriptOrigins: { topLevel: 'same',
|
|
descendant: 'remote' } });
|
|
}, 'Importing a remote-origin script from a same-origin worklet script ' +
|
|
'that has "no-referrer" referrer policy should not send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'no-referrer',
|
|
scriptOrigins: { topLevel: 'remote',
|
|
descendant: 'same' } });
|
|
}, 'Importing a same-origin script from a remote-origin worklet script ' +
|
|
'that has "no-referrer" referrer policy should not send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'no-referrer',
|
|
scriptOrigins: { topLevel: 'remote',
|
|
descendant: 'remote' } });
|
|
}, 'Importing a remote-origin script from a remote-origin worklet script ' +
|
|
'that has "no-referrer" referrer policy should not send referrer.');
|
|
|
|
// Referrer policy: origin.
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'origin',
|
|
scriptOrigins: { topLevel: 'same',
|
|
descendant: 'same' } });
|
|
}, 'Importing a same-origin script from a same-origin worklet script that ' +
|
|
'has "origin" referrer policy should send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'origin',
|
|
scriptOrigins: { topLevel: 'same',
|
|
descendant: 'remote' } });
|
|
}, 'Importing a remote-origin script from a same-origin worklet script ' +
|
|
'that has "origin" referrer policy should send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'origin',
|
|
scriptOrigins: { topLevel: 'remote',
|
|
descendant: 'same' } });
|
|
}, 'Importing a same-origin script from a remote-origin worklet script ' +
|
|
'that has "origin" referrer policy should send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'origin',
|
|
scriptOrigins: { topLevel: 'remote',
|
|
descendant: 'remote' } });
|
|
}, 'Importing a remote-origin script from a remote-origin worklet script ' +
|
|
'that has "origin" referrer policy should send referrer.');
|
|
|
|
// Referrer policy: same-origin.
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'same-origin',
|
|
scriptOrigins: { topLevel: 'same',
|
|
descendant: 'same' } });
|
|
}, 'Importing a same-origin script from a same-origin worklet script that ' +
|
|
'has "same-origin" referrer policy should send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'same-origin',
|
|
scriptOrigins: { topLevel: 'same',
|
|
descendant: 'remote' } });
|
|
}, 'Importing a remote-origin script from a same-origin worklet script ' +
|
|
'that has "same-origin" referrer policy should not send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'same-origin',
|
|
scriptOrigins: { topLevel: 'remote',
|
|
descendant: 'same' } });
|
|
}, 'Importing a same-origin script from a remote-origin worklet script ' +
|
|
'that has "same-origin" referrer policy should not send referrer.');
|
|
|
|
promise_test(t => {
|
|
return runReferrerTest(t, { workletType: workletType,
|
|
fetchType: 'descendant',
|
|
referrerPolicy: 'same-origin',
|
|
scriptOrigins: { topLevel: 'remote',
|
|
descendant: 'remote' } });
|
|
}, 'Importing a remote-origin script from a remote-origin worklet script ' +
|
|
'that has "same-origin" referrer policy should send referrer.');
|
|
}
|