Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 1 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /clipboard-apis/detached-iframe/write-read-on-detached-iframe.https.html - WPT Dashboard Interop Dashboard
<!doctype html>
<meta charset=utf-8>
<title>navigator.clipboard read and write on detached iframe</title>
<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="../resources/user-activation.js"></script>
<iframe id="iframe"></iframe>
<script>
'use strict';
promise_test(async t => {
// This tests proper behavior on a detaching iframe. text/plain is chosen for
// simplicity, and the test should fail the same way no matter what the input
// type is.
await tryGrantReadPermission();
await tryGrantWritePermission();
const iframe = document.getElementById('iframe');
const iframeClipboard = iframe.contentWindow.navigator.clipboard;
const blobInput = new Blob(['test string'], {type: 'text/plain'});
const clipboardItemInput = new ClipboardItem({'text/plain': blobInput});
await waitForUserActivation();
// Clipboard API must only be available in focused documents.
iframe.focus();
// Writing and reading should succeed on same-origin iframes.
await iframeClipboard.write([clipboardItemInput]);
const readResultAttached = await iframeClipboard.read();
assert_not_equals(readResultAttached, undefined);
assert_equals(readResultAttached.length, 1,
'attached iframes should be able to read and write normally');
iframe.parentNode.removeChild(iframe);
// Writing onto a detached iframe's clipboard should fail, but not crash.
await iframeClipboard.write([clipboardItemInput]);
const readResultDetached = await iframeClipboard.read();
assert_equals(readResultDetached, undefined,
'reading from detached iframes should output undefined');
}, 'Verify read and write fail on detached iframe');
</script>