diff options
Diffstat (limited to 'testing/web-platform/tests/shared-storage')
14 files changed, 302 insertions, 0 deletions
diff --git a/testing/web-platform/tests/shared-storage/resources/select-url-permissions-policy-helper.html b/testing/web-platform/tests/shared-storage/resources/select-url-permissions-policy-helper.html new file mode 100644 index 0000000000..b70d763ad4 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/resources/select-url-permissions-policy-helper.html @@ -0,0 +1,18 @@ +<!doctype html> +<body> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/shared-storage/resources/util.js"></script> + <script> + 'use strict'; + + window.onload = async function() { + if (await IsSharedStorageSelectUrlAllowedByPermissionsPolicy()) { + parent.postMessage({ type: 'availability-result', enabled: true }, '*'); + return; + } + + parent.postMessage({ type: 'availability-result', enabled: false }, '*'); + } + </script> +</body> diff --git a/testing/web-platform/tests/shared-storage/resources/shared-storage-permissions-policy-helper.html b/testing/web-platform/tests/shared-storage/resources/shared-storage-permissions-policy-helper.html new file mode 100644 index 0000000000..d87092aad1 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/resources/shared-storage-permissions-policy-helper.html @@ -0,0 +1,18 @@ +<!doctype html> +<body> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/shared-storage/resources/util.js"></script> + <script> + 'use strict'; + + window.onload = async function() { + if (await AreSharedStorageMethodsAllowedByPermissionsPolicy()) { + parent.postMessage({ type: 'availability-result', enabled: true }, '*'); + return; + } + + parent.postMessage({ type: 'availability-result', enabled: false }, '*'); + } + </script> +</body> diff --git a/testing/web-platform/tests/shared-storage/resources/simple-module.js b/testing/web-platform/tests/shared-storage/resources/simple-module.js new file mode 100644 index 0000000000..ad9a93a7c1 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/resources/simple-module.js @@ -0,0 +1 @@ +'use strict'; diff --git a/testing/web-platform/tests/shared-storage/resources/util.js b/testing/web-platform/tests/shared-storage/resources/util.js new file mode 100644 index 0000000000..838885a565 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/resources/util.js @@ -0,0 +1,87 @@ +'use strict'; + +async function IsSharedStorageSelectUrlAllowedByPermissionsPolicy() { + const errorMessage = 'The \"shared-storage-select-url\" Permissions Policy denied the usage of window.sharedStorage.selectURL().'; + let allowedByPermissionsPolicy = true; + try { + // Run selectURL() with without addModule() and this should always fail. + // Check the error message to distinguish between the permissions policy + // error and the missing addModule() error. + await sharedStorage.selectURL("operation", [{url: "1.html"}]); + assert_unreached("did not fail"); + } catch (e) { + if (e.message === errorMessage) { + allowedByPermissionsPolicy = false; + } + } + + return allowedByPermissionsPolicy; +} + +// Execute all shared storage methods and capture their errors. Return true if +// the permissions policy allows all of them; return false if the permissions +// policy disallows all of them. Precondition: only these two outcomes are +// possible. +async function AreSharedStorageMethodsAllowedByPermissionsPolicy() { + let permissionsPolicyDeniedCount = 0; + const errorMessage = 'The \"shared-storage\" Permissions Policy denied the method on window.sharedStorage.'; + + try { + await window.sharedStorage.worklet.addModule('/shared-storage/resources/simple-module.js'); + } catch (e) { + assert_equals(e.message, errorMessage); + ++permissionsPolicyDeniedCount; + } + + try { + await window.sharedStorage.run('operation'); + } catch (e) { + assert_equals(e.message, errorMessage); + ++permissionsPolicyDeniedCount; + } + + try { + // Run selectURL() with without addModule() and this should always fail. + // Check the error message to distinguish between the permissions policy + // error and the missing addModule() error. + await sharedStorage.selectURL("operation", [{url: "1.html"}]); + assert_unreached("did not fail"); + } catch (e) { + if (e.message === errorMessage) { + ++permissionsPolicyDeniedCount; + } + } + + try { + await window.sharedStorage.set('a', 'b'); + } catch (e) { + assert_equals(e.message, errorMessage); + ++permissionsPolicyDeniedCount; + } + + try { + await window.sharedStorage.append('a', 'b'); + } catch (e) { + assert_equals(e.message, errorMessage); + ++permissionsPolicyDeniedCount; + } + + try { + await window.sharedStorage.clear(); + } catch (e) { + assert_equals(e.message, errorMessage); + ++permissionsPolicyDeniedCount; + } + + try { + await window.sharedStorage.delete('a'); + } catch (e) { + assert_equals(e.message, errorMessage); + ++permissionsPolicyDeniedCount; + } + + if (permissionsPolicyDeniedCount === 0) + return true; + + return false; +}
\ No newline at end of file diff --git a/testing/web-platform/tests/shared-storage/select-url-permissions-policy-default.tentative.https.sub.html b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-default.tentative.https.sub.html new file mode 100644 index 0000000000..67911388ec --- /dev/null +++ b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-default.tentative.https.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<body> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <script src=/permissions-policy/resources/permissions-policy.js></script> + <script src="/shared-storage/resources/util.js"></script> + <script> + 'use strict'; + const same_origin_src = '/shared-storage/resources/select-url-permissions-policy-helper.html'; + const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; + const header = 'Default permissions policy'; + + promise_test(async t => { + const allowed = await IsSharedStorageSelectUrlAllowedByPermissionsPolicy(); + assert_true(allowed); + }, header + ' allows sharedStorage.selectURL() in the current page.'); + + async_test(t => { + test_feature_availability('shared-storage-select-url', t, same_origin_src, + expect_feature_available_default); + }, header + ' allows sharedStorage.selectURL() in same-origin iframes.'); + + async_test(t => { + test_feature_availability('shared-storage-select-url', t, cross_origin_src, + expect_feature_available_default); + }, header + ' allows sharedStorage.selectURL() in cross-origin iframes.'); + </script> +</body> diff --git a/testing/web-platform/tests/shared-storage/select-url-permissions-policy-none.tentative.https.sub.html b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-none.tentative.https.sub.html new file mode 100644 index 0000000000..6820edb084 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-none.tentative.https.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<body> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <script src=/permissions-policy/resources/permissions-policy.js></script> + <script src="/shared-storage/resources/util.js"></script> + <script> + 'use strict'; + const same_origin_src = '/shared-storage/resources/select-url-permissions-policy-helper.html'; + const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; + const header = 'permissions policy header shared-storage-select-url=()'; + + promise_test(async t => { + const allowed = await IsSharedStorageSelectUrlAllowedByPermissionsPolicy(); + assert_false(allowed); + }, header + ' disallows sharedStorage.selectURL() in the current page.'); + + async_test(t => { + test_feature_availability('shared-storage-select-url', t, same_origin_src, + expect_feature_unavailable_default); + }, header + ' disallows sharedStorage.selectURL() in same-origin iframes.'); + + async_test(t => { + test_feature_availability('shared-storage-select-url', t, cross_origin_src, + expect_feature_unavailable_default); + }, header + ' disallows sharedStorage.selectURL() in cross-origin iframes.'); + </script> +</body> diff --git a/testing/web-platform/tests/shared-storage/select-url-permissions-policy-none.tentative.https.sub.html.headers b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-none.tentative.https.sub.html.headers new file mode 100644 index 0000000000..fdd2e3780b --- /dev/null +++ b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-none.tentative.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: shared-storage-select-url=() diff --git a/testing/web-platform/tests/shared-storage/select-url-permissions-policy-self.tentative.https.sub.html b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-self.tentative.https.sub.html new file mode 100644 index 0000000000..b79bc065c2 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-self.tentative.https.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<body> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <script src=/permissions-policy/resources/permissions-policy.js></script> + <script src="/shared-storage/resources/util.js"></script> + <script> + 'use strict'; + const same_origin_src = '/shared-storage/resources/select-url-permissions-policy-helper.html'; + const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; + const header = 'permissions policy header shared-storage-select-url=(self)'; + + promise_test(async t => { + const allowed = await IsSharedStorageSelectUrlAllowedByPermissionsPolicy(); + assert_true(allowed); + }, header + ' allows sharedStorage.selectURL() in the current page.'); + + async_test(t => { + test_feature_availability('shared-storage-select-url', t, same_origin_src, + expect_feature_available_default); + }, header + ' allows sharedStorage.selectURL() in same-origin iframes.'); + + async_test(t => { + test_feature_availability('shared-storage-select-url', t, cross_origin_src, + expect_feature_unavailable_default); + }, header + ' disallows sharedStorage.selectURL() in cross-origin iframes.'); + </script> +</body> diff --git a/testing/web-platform/tests/shared-storage/select-url-permissions-policy-self.tentative.https.sub.html.headers b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-self.tentative.https.sub.html.headers new file mode 100644 index 0000000000..20d5451ba2 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/select-url-permissions-policy-self.tentative.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: shared-storage-select-url=(self) diff --git a/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-default.tentative.https.sub.html b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-default.tentative.https.sub.html new file mode 100644 index 0000000000..5439df2a06 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-default.tentative.https.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<body> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <script src=/permissions-policy/resources/permissions-policy.js></script> + <script src="/shared-storage/resources/util.js"></script> + <script> + 'use strict'; + const same_origin_src = '/shared-storage/resources/shared-storage-permissions-policy-helper.html'; + const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; + const header = 'Default permissions policy'; + + promise_test(async t => { + const allowed = await AreSharedStorageMethodsAllowedByPermissionsPolicy(); + assert_true(allowed); + }, header + ' allows sharedStorage in the current page.'); + + async_test(t => { + test_feature_availability('shared-storage', t, same_origin_src, + expect_feature_available_default); + }, header + ' allows sharedStorage in same-origin iframes.'); + + async_test(t => { + test_feature_availability('shared-storage', t, cross_origin_src, + expect_feature_available_default); + }, header + ' allows sharedStorage in cross-origin iframes.'); + </script> +</body> diff --git a/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-none.tentative.https.sub.html b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-none.tentative.https.sub.html new file mode 100644 index 0000000000..17a4bf1803 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-none.tentative.https.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<body> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <script src=/permissions-policy/resources/permissions-policy.js></script> + <script src="/shared-storage/resources/util.js"></script> + <script> + 'use strict'; + const same_origin_src = '/shared-storage/resources/shared-storage-permissions-policy-helper.html'; + const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; + const header = 'permissions policy header shared-storage=()'; + + promise_test(async t => { + const allowed = await AreSharedStorageMethodsAllowedByPermissionsPolicy(); + assert_false(allowed); + }, header + ' disallows sharedStorage in the current page.'); + + async_test(t => { + test_feature_availability('shared-storage', t, same_origin_src, + expect_feature_unavailable_default); + }, header + ' disallows sharedStorage in same-origin iframes.'); + + async_test(t => { + test_feature_availability('shared-storage', t, cross_origin_src, + expect_feature_unavailable_default); + }, header + ' disallows sharedStorage in cross-origin iframes.'); + </script> +</body> diff --git a/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-none.tentative.https.sub.html.headers b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-none.tentative.https.sub.html.headers new file mode 100644 index 0000000000..9903f7c578 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-none.tentative.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: shared-storage=() diff --git a/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-self.tentative.https.sub.html b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-self.tentative.https.sub.html new file mode 100644 index 0000000000..171325cdf8 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-self.tentative.https.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<body> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <script src=/permissions-policy/resources/permissions-policy.js></script> + <script src="/shared-storage/resources/util.js"></script> + <script> + 'use strict'; + const same_origin_src = '/shared-storage/resources/shared-storage-permissions-policy-helper.html'; + const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; + const header = 'permissions policy header shared-storage=(self)'; + + promise_test(async t => { + const allowed = await AreSharedStorageMethodsAllowedByPermissionsPolicy(); + assert_true(allowed); + }, header + ' allows sharedStorage in the current page.'); + + async_test(t => { + test_feature_availability('shared-storage', t, same_origin_src, + expect_feature_available_default); + }, header + ' allows sharedStorage in same-origin iframes.'); + + async_test(t => { + test_feature_availability('shared-storage', t, cross_origin_src, + expect_feature_unavailable_default); + }, header + ' disallows sharedStorage in cross-origin iframes.'); + </script> +</body> diff --git a/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-self.tentative.https.sub.html.headers b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-self.tentative.https.sub.html.headers new file mode 100644 index 0000000000..36c95f2b08 --- /dev/null +++ b/testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-self.tentative.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: shared-storage=(self) |