function createCookieValue(settings) {
return settings.credentials + '-' + settings.origin;
}
function createSetCookieURL(settings) {
const params = new URLSearchParams;
params.append('name', 'cookieName');
params.append('value', createCookieValue(settings));
if (settings.origin == 'same') {
return get_host_info().HTTPS_ORIGIN +
'/worklets/resources/set-cookie.py?' + params;
}
if (settings.origin == 'remote') {
return get_host_info().HTTPS_REMOTE_ORIGIN +
'/worklets/resources/set-cookie.py?' + params;
}
assert_unreached('settings.origin has an invalid value.');
}
function createScriptURL(settings) {
const params = new URLSearchParams;
if (settings.expectCredentialsSent)
params.append('value', createCookieValue(settings));
if (settings.origin == 'same') {
return get_host_info().HTTPS_ORIGIN +
'/worklets/resources/credentials.py?' + params;
}
if (settings.origin == 'remote') {
return get_host_info().HTTPS_REMOTE_ORIGIN +
'/worklets/resources/credentials.py?' + params;
}
assert_unreached('settings.origin has an invalid value.');
}
function createWorkletOptions(settings) {
if (settings.credentials == '')
return {};
return { credentials: settings.credentials };
}
// Run a credentials test with the given settings.
//
// Example:
// settings = {
// workletType: 'paint',
// credentials: 'include',
// origin: 'same', // 'same' or 'remote'
// expectCredentialsSent: true
// };
function runCredentialsTest(settings) {
const worklet = get_worklet(settings.workletType);
const setCookieURL = createSetCookieURL(settings);
const scriptURL = createScriptURL(settings);
const options = createWorkletOptions(settings);
// { credentials: 'include' } is necessary for configuring document's cookies
// with the Set-Cookie: header of the response.
return fetch(setCookieURL, { mode: 'cors', credentials: 'include' })
.then(response => worklet.addModule(scriptURL, options));
}
// Runs a series of tests related to credentials on a worklet.
//
// Usage:
// runCredentialsTests("paint");
function runCredentialsTests(worklet_type) {
promise_test(() => {
return runCredentialsTest({ workletType: worklet_type,
credentials: '',
origin: 'same',
expectCredentialsSent: true });
}, 'Importing a same-origin script with the default WorkletOptions should ' +
'send the credentials');
promise_test(() => {
return runCredentialsTest({ workletType: worklet_type,
credentials: '',
origin: 'remote',
expectCredentialsSent: false });
}, 'Importing a remote-origin script with the default WorkletOptions ' +
'should not send the credentials');
promise_test(() => {
return runCredentialsTest({ workletType: worklet_type,
credentials: 'omit',
origin: 'same',
expectCredentialsSent: false });
}, 'Importing a same-origin script with credentials=omit should not send ' +
'the credentials');
promise_test(() => {
return runCredentialsTest({ workletType: worklet_type,
credentials: 'omit',
origin: 'remote',
expectCredentialsSent: false });
}, 'Importing a remote-origin script with credentials=omit should not send ' +
'the credentials');
promise_test(() => {
return runCredentialsTest({ workletType: worklet_type,
credentials: 'same-origin',
origin: 'same',
expectCredentialsSent: true });
}, 'Importing a same-origin script with credentials=same-origin should ' +
'send the credentials');
promise_test(() => {
return runCredentialsTest({ workletType: worklet_type,
credentials: 'same-origin',
origin: 'remote',
expectCredentialsSent: false });
}, 'Importing a remote-origin script with credentials=same-origin should ' +
'not send the credentials');
promise_test(() => {
return runCredentialsTest({ workletType: worklet_type,
credentials: 'include',
origin: 'same',
expectCredentialsSent: true });
}, 'Importing a same-origin script with credentials=include should send ' +
'the credentials');
promise_test(() => {
return runCredentialsTest({ workletType: worklet_type,
credentials: 'include',
origin: 'remote',
expectCredentialsSent: true });
}, 'Importing a remote-origin script with credentials=include should ' +
'send the credentials');
}