summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fenced-frame/background-sync.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/fenced-frame/background-sync.https.html')
-rw-r--r--testing/web-platform/tests/fenced-frame/background-sync.https.html218
1 files changed, 218 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fenced-frame/background-sync.https.html b/testing/web-platform/tests/fenced-frame/background-sync.https.html
new file mode 100644
index 0000000000..72eb44750b
--- /dev/null
+++ b/testing/web-platform/tests/fenced-frame/background-sync.https.html
@@ -0,0 +1,218 @@
+<!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>