Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<title>Test fenced frame does not allow to register background sync</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/utils.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/common/utils.js"></script>
<body>
<script>
const background_sync_register_key = token();
const fenced_frame_url = 'resources/background-sync-inner.https.html';
const fenced_frame_url_for_service_worker_test =
'resources/background-sync-sw-inner.https.html';
const generateFencedFrameUrl = (params, is_worker_test = false) => {
const searchParams = new URLSearchParams(params);
const frame_url = is_worker_test ?
fenced_frame_url_for_service_worker_test : fenced_frame_url;
return generateURL(`${frame_url}?${searchParams.toString()}`,
[background_sync_register_key]);
};
async function background_sync_test(url, expected_text, message) {
attachFencedFrame(url)
// Get the result for the top-level fenced frame.
const fenced_frame_result =
await nextValueFromServer(background_sync_register_key);
assert_equals(fenced_frame_result, expected_text, message);
};
const background_sync_message =
"Background Sync is not allowed in fenced frames.";
const periodic_background_sync_message =
"Periodic Background Sync is not allowed in fenced frames.";
promise_test(async (t) => {
const method = 'register';
const frame_url = generateFencedFrameUrl({method});
const expected_message = "Failed to execute 'register' on 'SyncManager': " +
background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'register() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'register() is disallowed inside a cross-origin fenced frame');
}, 'background sync register');
promise_test(async (t) => {
const method = 'getTags';
const frame_url = generateFencedFrameUrl({method});
const expected_message = background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'getTags() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'getTags() is disallowed inside a cross-origin fenced frame');
}, 'background sync getTags');
promise_test(async (t) => {
const method = 'register';
const frame_url = generateFencedFrameUrl({method}, true);
const expected_message = "Failed to execute 'register' on 'SyncManager': " +
background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'register() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'register() is disallowed inside a cross-origin fenced frame');
}, 'background sync register in service worker');
promise_test(async (t) => {
const method = 'getTags';
const frame_url = generateFencedFrameUrl({method}, true);
const expected_message = background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'getTags() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'getTags() is disallowed inside a cross-origin fenced frame');
}, 'background sync getTags in service worker');
promise_test(async (t) => {
const params = {
method: 'register',
periodic: true
};
const frame_url = generateFencedFrameUrl(params)
const expected_message = "Failed to execute 'register' on " +
"'PeriodicSyncManager': " + periodic_background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'register() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'register() is disallowed inside a cross-origin fenced frame');
}, 'periodic sync register');
promise_test(async (t) => {
const params = {
method: 'getTags',
periodic: true
};
const frame_url = generateFencedFrameUrl(params)
const expected_message = periodic_background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'getTags() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'getTags() is disallowed inside a cross-origin fenced frame');
}, 'periodic sync getTags');
promise_test(async (t) => {
const params = {
method: 'unregister',
periodic: true
};
const frame_url = generateFencedFrameUrl(params)
const expected_message = periodic_background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'unregister() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'unregister() is disallowed inside a cross-origin fenced frame');
}, 'periodic sync unregister');
promise_test(async (t) => {
const params = {
method: 'register',
periodic: true
};
const frame_url = generateFencedFrameUrl(params, true)
const expected_message = "Failed to execute 'register' on " +
"'PeriodicSyncManager': " + periodic_background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'register() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'register() is disallowed inside a cross-origin fenced frame');
}, 'periodic sync register in service worker');
promise_test(async (t) => {
const params = {
method: 'getTags',
periodic: true
};
const frame_url = generateFencedFrameUrl(params, true)
const expected_message = periodic_background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'getTags() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'getTags() is disallowed inside a cross-origin fenced frame');
}, 'periodic sync getTags in service worker');
promise_test(async (t) => {
const params = {
method: 'unregister',
periodic: true
};
const frame_url = generateFencedFrameUrl(params, true)
const expected_message = periodic_background_sync_message;
await background_sync_test(
frame_url,
expected_message,
'unregister() is disallowed inside a same-origin fenced frame');
const cross_origin_frame_url = getRemoteOriginURL(frame_url);
await background_sync_test(
cross_origin_frame_url,
expected_message,
'unregister() is disallowed inside a cross-origin fenced frame');
}, 'periodic sync unregister in service worker');
</script>
</body>