Commit bf8aaf87 authored by Hiroki Nakagawa's avatar Hiroki Nakagawa Committed by Commit Bot

Worklet: Clean up referrer tests

This just cleans up referrer tests and doesn't change behavior.

Bug: 773921
Change-Id: I790cb392d009792b469a1907c0f2e47da87a07b5
Reviewed-on: https://chromium-review.googlesource.com/784742Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#518601}
parent 3936606f
......@@ -9,88 +9,71 @@ function openWindow(url) {
});
}
// Run a referrer policy test with the given settings.
//
// Example:
// settings = {
// workletType: 'paint',
// referrerPolicy: 'no-referrer',
// isCrossOrigin: false
// };
function runReferrerTest(settings) {
const kWindowURL =
'resources/referrer-window.html' +
`?pipe=header(Referrer-Policy, ${settings.referrerPolicy})`;
return openWindow(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(worklet_type) {
const worklet = get_worklet(worklet_type);
function runReferrerTests(workletType) {
const worklet = get_worklet(workletType);
promise_test(() => {
const kWindowURL = "resources/referrer-window.html" +
"?pipe=header(Referrer-Policy,no-referrer)";
return openWindow(kWindowURL).then(win => {
const promise = new Promise(resolve => window.onmessage = resolve);
win.postMessage({ type: worklet_type,
referrer_policy: 'no-referrer',
is_cross_origin: false }, '*');
return promise;
}).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
return runReferrerTest({ workletType: workletType,
referrerPolicy: 'no-referrer',
isCrossOrigin: false });
}, 'Importing a same-origin script from a page that has "no-referrer" ' +
'referrer policy should not send referrer.');
promise_test(() => {
const kWindowURL = "resources/referrer-window.html" +
"?pipe=header(Referrer-Policy,no-referrer)";
return openWindow(kWindowURL).then(win => {
const promise = new Promise(resolve => window.onmessage = resolve);
win.postMessage({ type: worklet_type,
referrer_policy: 'no-referrer',
is_cross_origin: true }, '*');
return promise;
}).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
return runReferrerTest({ workletType: workletType,
referrerPolicy: 'no-referrer',
isCrossOrigin: true });
}, 'Importing a remote-origin script from a page that has "no-referrer" ' +
'referrer policy should not send referrer.');
promise_test(() => {
const kWindowURL = 'resources/referrer-window.html' +
'?pipe=header(Referrer-Policy,origin)';
return openWindow(kWindowURL).then(win => {
const promise = new Promise(resolve => window.onmessage = resolve);
win.postMessage({ type: worklet_type,
referrer_policy: 'origin',
is_cross_origin: false }, '*');
return promise;
}).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
return runReferrerTest({ workletType: workletType,
referrerPolicy: 'origin',
isCrossOrigin: false });
}, 'Importing a same-origin script from a page that has "origin" ' +
'referrer policy should send only an origin as referrer.');
promise_test(() => {
const kWindowURL = 'resources/referrer-window.html' +
'?pipe=header(Referrer-Policy,origin)';
return openWindow(kWindowURL).then(win => {
const promise = new Promise(resolve => window.onmessage = resolve);
win.postMessage({ type: worklet_type,
referrer_policy: 'origin',
is_cross_origin: true }, '*');
return promise;
}).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
return runReferrerTest({ workletType: workletType,
referrerPolicy: 'origin',
isCrossOrigin: true });
}, 'Importing a remote-origin script from a page that has "origin" ' +
'referrer policy should send only an origin as referrer.');
promise_test(() => {
const kWindowURL = 'resources/referrer-window.html' +
'?pipe=header(Referrer-Policy,same-origin)';
return openWindow(kWindowURL).then(win => {
const promise = new Promise(resolve => window.onmessage = resolve);
win.postMessage({ type: worklet_type,
referrer_policy: 'same-origin',
is_cross_origin: false }, '*');
return promise;
}).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
return runReferrerTest({ workletType: workletType,
referrerPolicy: 'same-origin',
isCrossOrigin: false });
}, 'Importing a same-origin script from a page that has "same-origin" ' +
'referrer policy should send referrer.');
promise_test(() => {
const kWindowURL = 'resources/referrer-window.html' +
'?pipe=header(Referrer-Policy,same-origin)';
return openWindow(kWindowURL).then(win => {
const promise = new Promise(resolve => window.onmessage = resolve);
win.postMessage({ type: worklet_type,
referrer_policy: 'same-origin',
is_cross_origin: true }, '*');
return promise;
}).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
return runReferrerTest({ workletType: workletType,
referrerPolicy: 'same-origin',
isCrossOrigin: true });
}, 'Importing a remote-origin script from a page that has "same-origin" ' +
'referrer policy should not send referrer.');
}
......@@ -9,22 +9,24 @@
</head>
<body>
<script>
function createScriptURL(isCrossOrigin, params) {
if (isCrossOrigin) {
return get_host_info().HTTPS_REMOTE_ORIGIN +
'/worklets/resources/referrer.py?' + params;
}
return 'referrer.py?' + params;
}
window.onmessage = e => {
const worklet_type = e.data.type;
const is_cross_origin = e.data.is_cross_origin;
const isCrossOrigin = e.data.isCrossOrigin;
const params = new URLSearchParams;
params.append('referrer_policy', e.data.referrer_policy)
params.append('referrer_policy', e.data.referrerPolicy)
params.append('source_origin', get_host_info().HTTPS_ORIGIN);
params.append('is_cross_origin', isCrossOrigin ? 'true' : 'false')
let script_url = '';
if (is_cross_origin) {
params.append('is_cross_origin', 'true')
script_url = get_host_info().HTTPS_REMOTE_ORIGIN + '/worklets/resources/';
}
script_url += 'referrer.py?' + params;
get_worklet(worklet_type).addModule(script_url)
const scriptURL = createScriptURL(isCrossOrigin, params);
get_worklet(e.data.workletType).addModule(scriptURL)
.then(() => window.opener.postMessage('RESOLVED', '*'))
.catch(e => window.opener.postMessage(e.message, '*'));
};
......
......@@ -3,7 +3,7 @@ def main(request, response):
referrer = request.headers.get("referer", None)
referrer_policy = request.GET.first("referrer_policy")
source_origin = request.GET.first("source_origin")
is_cross_origin = request.GET.first("is_cross_origin", False)
is_cross_origin = request.GET.first("is_cross_origin")
response_headers = [("Content-Type", "text/javascript"),
("Access-Control-Allow-Origin", source_origin)];
......@@ -22,9 +22,9 @@ def main(request, response):
# When the referrer policy is "same-origin", the referrer header should be
# sent only for a same-origin request.
if referrer_policy == "same-origin":
if is_cross_origin and not referrer:
if is_cross_origin == "true" and not referrer:
return (200, response_headers, "")
if not is_cross_origin and referrer:
if is_cross_origin == "false" and referrer:
return (200, response_headers, "")
return (404)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment