blob: e3632519c157077c25d6368807bed21706d62496 [file] [log] [blame]
<!DOCTYPE HTML>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/get-host-info.js?pipe=sub"></script>
<script>
if (window.testRunner)
testRunner.setBlockThirdPartyCookies(false);
const host_info = get_host_info();
document.cookie = "TestCookie=same";
const ANOTHER_REMOTE_ORIGIN = 'http://127.0.0.1:8080';
const SET_COOKIE_PATH = '/security/resources/set-cookie.php';
const set_cookie_promise = Promise.all([
fetch(
host_info['HTTP_REMOTE_ORIGIN'] + SET_COOKIE_PATH + '?name=TestCookie&value=cross',
{mode: 'no-cors', credentials: 'include'}),
fetch(
ANOTHER_REMOTE_ORIGIN + SET_COOKIE_PATH + '?name=TestCookie&value=cross',
{mode: 'no-cors', credentials: 'include'})
]);
let count = 0;
function load_image(url, crossOriginAttribute, expectLoad, expectCookie) {
return new Promise((resolve, reject) => {
set_cookie_promise.then(() => {
const img = new Image();
img.onload = () => {
if (expectLoad) {
resolve();
} else {
reject('Image loaded unexpectedly');
}
};
img.onerror = () => {
if (expectLoad) {
reject('Image not loaded unexpectedly');
} else {
resolve();
}
};
img.crossOrigin = crossOriginAttribute;
const destination_params = new URLSearchParams();
destination_params.append('count', count);
++count;
if (expectCookie) {
destination_params.append('Cookie', expectCookie);
}
const params = new URLSearchParams();
params.append('mode', 'use-credentials');
params.append('url', url + '?' + destination_params.toString());
img.src = host_info['HTTP_REMOTE_ORIGIN'] + '/security/resources/cors-redirect.php?' + params.toString();
document.body.appendChild(img);
});
});
}
promise_test(() => {
return load_image(
host_info['HTTP_REMOTE_ORIGIN'] + '/security/resources/abe.png',
'anonymous',
false,
undefined);
}, 'From a remote origin to the same remote origin. crossOrigin set to anonymous. Response includes no CORS header. Fails due to CORS check.');
promise_test(() => {
return load_image(
host_info['HTTP_REMOTE_ORIGIN'] + '/security/resources/abe.png',
'use-credentials',
false,
undefined);
}, 'From a remote origin to the same remote origin. crossOrigin set to use-credentials. Response includes no CORS header. Fails due to CORS check.');
promise_test(() => {
return load_image(
host_info['HTTP_REMOTE_ORIGIN'] + '/security/resources/abe-allow-star.php',
'anonymous',
true,
'NotSet');
}, 'From a remote origin to the same remote origin. crossOrigin set to anonymous. Response includes wildcard Access-Control-Allow-Origin.');
promise_test(() => {
return load_image(
host_info['HTTP_REMOTE_ORIGIN'] + '/security/resources/abe-allow-star.php',
'use-credentials',
false,
undefined);
}, 'From a remote origin to the same remote origin. crossOrigin set to use-credentials. Response includes wildcard Access-Control-Allow-Origin. Fails due to absence of Access-Control-Allow-Credentials.');
promise_test(() => {
return load_image(
host_info['HTTP_REMOTE_ORIGIN'] + '/security/resources/abe-allow-credentials.php',
'use-credentials',
true,
'cross');
}, 'From a remote origin to the same remote origin. crossOrigin set to use-credentials. Response includes Access-Control-Allow-Credentials.');
// Origin is set to null on remote to another remote redirect.
promise_test(() => {
return load_image(
ANOTHER_REMOTE_ORIGIN + '/security/resources/abe-allow-star.php',
'anonymous',
true,
'NotSet');
}, 'From a remote origin to another remote origin. crossOrigin set to anonymous. Response includes wildcard Access-Control-Allow-Origin.');
promise_test(() => {
return load_image(
ANOTHER_REMOTE_ORIGIN + '/security/resources/abe-allow-star.php',
'use-credentials',
false,
undefined);
}, 'From a remote origin to another remote origin. crossOrigin set to use-credentials. Response includes wildcard Access-Control-Allow-Origin. Fails due to absence of Access-Control-Allow-Credentials.');
promise_test(() => {
return load_image(
ANOTHER_REMOTE_ORIGIN + '/security/resources/abe-allow-credentials.php',
'use-credentials',
false,
undefined);
}, 'From a remote origin to another remote origin. crossOrigin set to use-credentials. Response includes Access-Control-Allow-Credentials. Fails due to allowed origin mismatch.');
// Origin is set to null on remote to another redirect even if the destination is the same origin as this document.
promise_test(() => {
return load_image(
host_info['HTTP_ORIGIN'] + '/security/resources/abe-allow-star.php',
'anonymous',
true,
'NotSet');
}, 'From a remote origin to the origin of this document. crossOrigin set to anonymous. Response includes wildcard Access-Control-Allow-Origin.');
promise_test(() => {
return load_image(
host_info['HTTP_ORIGIN'] + '/security/resources/abe-allow-star.php',
'use-credentials',
false,
undefined);
}, 'From a remote origin to the origin of this document. crossOrigin set to use-credentials. Response includes wildcard Access-Control-Allow-Origin. Fails due to absence of Access-Control-Allow-Credentials.');
promise_test(() => {
return load_image(
host_info['HTTP_ORIGIN'] + '/security/resources/abe-allow-credentials.php',
'use-credentials',
false,
undefined);
}, 'From a remote origin to the origin of this document. crossOrigin set to use-credentials. Response includes Access-Control-Allow-Credentials. Fails due to allowed origin mismatch.');
</script>