summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/clipboard-apis/feature-policy
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /testing/web-platform/tests/clipboard-apis/feature-policy
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/clipboard-apis/feature-policy')
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html40
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html31
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-tentative.https.sub.html25
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin-tentative.https.sub.html30
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html32
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html45
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html40
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html31
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-tentative.https.sub.html25
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin-tentative.https.sub.html30
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html32
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html.headers1
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html41
-rw-r--r--testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html.headers1
20 files changed, 410 insertions, 0 deletions
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html
new file mode 100644
index 0000000000..7af2b8944e
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-read.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+promise_test(async t => {
+ await test_driver.set_permission({ name: 'clipboard-read' }, 'granted');
+ return promise_rejects_dom(t, 'NotAllowedError',
+ navigator.clipboard.readText('test text'));
+}, 'Feature-Policy header clipboard-read "none" disallows the top-level document.');
+
+async_test(t => {
+ test_feature_availability(
+ 'navigator.clipboard.readText()',
+ t,
+ same_origin_src,
+ expect_feature_unavailable_default
+ );
+}, 'Feature-Policy header clipboard-read "none" disallows same-origin iframes.');
+
+async_test(t => {
+ test_feature_availability(
+ 'navigator.clipboard.readText()',
+ t,
+ cross_origin_src,
+ expect_feature_unavailable_default
+ );
+}, 'Feature-Policy header clipboard-read "none" disallows cross-origin iframes.');
+</script>
+</body>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html.headers b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html.headers
new file mode 100644
index 0000000000..ee9a2b6fb6
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: clipboard-read 'none'
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html
new file mode 100644
index 0000000000..367d033d0f
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-read.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+// TODO(https://github.com/whatwg/html/issues/5493, https://crbug.com/1074482):
+// In Chrome and Firefox, Cross-origin focus requires user gesture. In Chrome
+// only, cross-origin focus is asynchronous. Implement WPT support for
+// cross-origin focus.
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.readText()',
+ t,
+ cross_origin_src,
+ expect_feature_available_default,
+ 'clipboard-read'
+ );
+}, 'Feature policy "clipboard-read" can be enabled in cross-origin iframe using allow="clipboard-read" attribute');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-tentative.https.sub.html
new file mode 100644
index 0000000000..e812854b4c
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-tentative.https.sub.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-read.html';
+
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.readText()',
+ t,
+ same_origin_src,
+ expect_feature_available_default,
+ 'clipboard-read'
+ );
+}, 'Feature policy "clipboard-read" can be enabled in same-origin iframe using allow="clipboard-read" attribute');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin-tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin-tentative.https.sub.html
new file mode 100644
index 0000000000..c371ea3b41
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin-tentative.https.sub.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-read.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+// TODO(https://github.com/whatwg/html/issues/5493, https://crbug.com/1074482):
+// In Chrome and Firefox, Cross-origin focus requires user gesture. In Chrome
+// only, cross-origin focus is asynchronous. Implement WPT support for
+// cross-origin focus.
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.readText()',
+ t,
+ cross_origin_src,
+ expect_feature_available_default
+ );
+}, 'Feature-Policy header clipboard-read "*" allows cross-origin iframes.');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin.tentative.https.sub.html.headers b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin.tentative.https.sub.html.headers
new file mode 100644
index 0000000000..a147e2a64f
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: clipboard-read *
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html
new file mode 100644
index 0000000000..552183cc67
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-read.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+promise_test(async t => {
+ await test_driver.set_permission({ name: 'clipboard-read' }, 'granted');
+ await waitForUserActivation();
+ await navigator.clipboard.readText('test text');
+}, 'Feature-Policy header clipboard-read "*" allows the top-level document.');
+
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.readText()',
+ t,
+ same_origin_src,
+ expect_feature_available_default
+ );
+}, 'Feature-Policy header clipboard-read "*" allows same-origin iframes.');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html.headers b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html.headers
new file mode 100644
index 0000000000..a147e2a64f
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: clipboard-read *
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html
new file mode 100644
index 0000000000..17dc3628a7
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-read.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+promise_test(async t => {
+ await test_driver.set_permission({ name: 'clipboard-read' }, 'granted');
+ await waitForUserActivation();
+ await navigator.clipboard.readText('test text');
+}, 'Feature-Policy header clipboard-read "self" allows the top-level document.');
+
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.readText()',
+ t,
+ same_origin_src,
+ expect_feature_available_default
+ );
+}, 'Feature-Policy header clipboard-read "self" allows same-origin iframes.');
+
+// TODO(https://github.com/whatwg/html/issues/5493, https://crbug.com/1074482):
+// In Chrome and Firefox, Cross-origin focus requires user gesture. In Chrome
+// only, cross-origin focus is asynchronous. Implement WPT support for
+// cross-origin focus.
+promise_test(async t => {
+ test_feature_availability(
+ 'navigator.clipboard.readText()',
+ t,
+ cross_origin_src,
+ expect_feature_unavailable_default
+ );
+}, 'Feature-Policy header clipboard-read "self" disallows cross-origin iframes.');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html.headers b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html.headers
new file mode 100644
index 0000000000..752d7faff4
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: clipboard-read 'self'
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html
new file mode 100644
index 0000000000..5d19d8dd6f
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-write.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+promise_test(async t => {
+ await test_driver.set_permission({ name: 'clipboard-write' }, 'granted');
+ return promise_rejects_dom(t, 'NotAllowedError',
+ navigator.clipboard.writeText('test text'));
+}, 'Feature-Policy header clipboard-write "none" disallows the top-level document.');
+
+async_test(t => {
+ test_feature_availability(
+ 'navigator.clipboard.writeText("test text")',
+ t,
+ same_origin_src,
+ expect_feature_unavailable_default
+ );
+}, 'Feature-Policy header clipboard-write "none" disallows same-origin iframes.');
+
+async_test(t => {
+ test_feature_availability(
+ 'navigator.clipboard.writeText("test text")',
+ t,
+ cross_origin_src,
+ expect_feature_unavailable_default
+ );
+}, 'Feature-Policy header clipboard-write "none" disallows cross-origin iframes.');
+</script>
+</body>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html.headers b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html.headers
new file mode 100644
index 0000000000..f35f5b6a09
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: clipboard-write 'none'
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html
new file mode 100644
index 0000000000..e669c8fec4
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-write.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+// TODO(https://github.com/whatwg/html/issues/5493, https://crbug.com/1074482):
+// In Chrome and Firefox, Cross-origin focus requires user gesture. In Chrome
+// only, cross-origin focus is asynchronous. Implement WPT support for
+// cross-origin focus.
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.writeText("test text")',
+ t,
+ cross_origin_src,
+ expect_feature_available_default,
+ 'clipboard-write'
+ );
+}, 'Feature policy "clipboard-write" can be enabled in cross-origin iframe using allow="clipboard-write" attribute');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-tentative.https.sub.html
new file mode 100644
index 0000000000..b57dfe3dd2
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-tentative.https.sub.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-write.html';
+
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.writeText("test text")',
+ t,
+ same_origin_src,
+ expect_feature_available_default,
+ 'clipboard-write'
+ );
+}, 'Feature policy "clipboard-write" can be enabled in same-origin iframe using allow="clipboard-write" attribute');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin-tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin-tentative.https.sub.html
new file mode 100644
index 0000000000..6e7029cc78
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin-tentative.https.sub.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-write.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+// TODO(https://github.com/whatwg/html/issues/5493, https://crbug.com/1074482):
+// In Chrome and Firefox, Cross-origin focus requires user gesture. In Chrome
+// only, cross-origin focus is asynchronous. Implement WPT support for
+// cross-origin focus.
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.writeText("test text")',
+ t,
+ cross_origin_src,
+ expect_feature_available_default
+ );
+}, 'Feature-Policy header clipboard-write "*" allows cross-origin iframes.');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin.tentative.https.sub.html.headers b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin.tentative.https.sub.html.headers
new file mode 100644
index 0000000000..81b10d8e33
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: clipboard-write *
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html
new file mode 100644
index 0000000000..ca97994c61
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-write.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+promise_test(async t => {
+ await test_driver.set_permission({ name: 'clipboard-write' }, 'granted');
+ await waitForUserActivation();
+ await navigator.clipboard.writeText('test text');
+}, 'Feature-Policy header clipboard-write "*" allows the top-level document.');
+
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.writeText("test text")',
+ t,
+ same_origin_src,
+ expect_feature_available_default
+ );
+}, 'Feature-Policy header clipboard-write "*" allows same-origin iframes.');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html.headers b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html.headers
new file mode 100644
index 0000000000..81b10d8e33
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: clipboard-write *
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html
new file mode 100644
index 0000000000..5615a68ac5
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<body>Body needed for test_driver.click()</body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
+<script src="../../resources/user-activation.js"></script>
+<script>
+'use strict';
+
+const same_origin_src =
+ '/feature-policy/resources/feature-policy-clipboard-write.html';
+const cross_origin_src =
+ 'https://{{domains[www]}}:{{ports[https][0]}}' + same_origin_src;
+
+promise_test(async t => {
+ await test_driver.set_permission({ name: 'clipboard-write' }, 'granted');
+ await waitForUserActivation();
+ await navigator.clipboard.writeText('test text');
+}, 'Feature-Policy header clipboard-write "self" allows the top-level document.');
+
+promise_test(async t => {
+ await waitForUserActivation();
+ test_feature_availability(
+ 'navigator.clipboard.writeText("test text")',
+ t,
+ same_origin_src,
+ expect_feature_available_default
+ );
+}, 'Feature-Policy header clipboard-write "self" allows same-origin iframes.');
+
+promise_test(async t => {
+ test_feature_availability(
+ 'navigator.clipboard.writeText("test text")',
+ t,
+ cross_origin_src,
+ expect_feature_unavailable_default
+ );
+}, 'Feature-Policy header clipboard-write "self" disallows cross-origin iframes.');
+</script>
diff --git a/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html.headers b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html.headers
new file mode 100644
index 0000000000..e226f41c6a
--- /dev/null
+++ b/testing/web-platform/tests/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: clipboard-write 'self'