summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/shared-storage
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/shared-storage')
-rw-r--r--testing/web-platform/tests/shared-storage/resources/select-url-permissions-policy-helper.html18
-rw-r--r--testing/web-platform/tests/shared-storage/resources/shared-storage-permissions-policy-helper.html18
-rw-r--r--testing/web-platform/tests/shared-storage/resources/simple-module.js1
-rw-r--r--testing/web-platform/tests/shared-storage/resources/util.js87
-rw-r--r--testing/web-platform/tests/shared-storage/select-url-permissions-policy-default.tentative.https.sub.html29
-rw-r--r--testing/web-platform/tests/shared-storage/select-url-permissions-policy-none.tentative.https.sub.html29
-rw-r--r--testing/web-platform/tests/shared-storage/select-url-permissions-policy-none.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/shared-storage/select-url-permissions-policy-self.tentative.https.sub.html29
-rw-r--r--testing/web-platform/tests/shared-storage/select-url-permissions-policy-self.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-default.tentative.https.sub.html29
-rw-r--r--testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-none.tentative.https.sub.html29
-rw-r--r--testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-none.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-self.tentative.https.sub.html29
-rw-r--r--testing/web-platform/tests/shared-storage/shared-storage-permissions-policy-self.tentative.https.sub.html.headers1
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)