forked from mirrors/gecko-dev
Blink is the only engine supporting it, and thus it should not be the WPT requirement. Some tests still need the testing pref, and for now this patch gives the pref for such failing tests without modifying them, for simplicity sake. Modification can happen separately. Differential Revision: https://phabricator.services.mozilla.com/D201999
60 lines
2.5 KiB
HTML
60 lines
2.5 KiB
HTML
<!doctype html>
|
|
<meta charset="utf-8">
|
|
<title>
|
|
Async Clipboard write ([text/html ClipboardItem]) -> readHtml (and remove scripts) tests
|
|
</title>
|
|
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
|
|
<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="resources/user-activation.js"></script>
|
|
<script>
|
|
'use strict';
|
|
// This function removes extra spaces between tags in html. For example, the
|
|
// following html: "<p> Hello </p> <body> World </body>" would turn into this
|
|
// html: "<p> Hello </p> <body> World </body>"
|
|
// We remove the extra spaces because in html they are considered equivalent,
|
|
// but when we are comparing for equality the spaces make a difference.
|
|
function reformatHtml(html) {
|
|
const parser = new DOMParser();
|
|
const htmlString =
|
|
parser.parseFromString(html, 'text/html').documentElement.innerHTML;
|
|
const reformattedString = htmlString.replace(/\>\s*\</g, '> <');
|
|
return reformattedString;
|
|
}
|
|
|
|
// The string must be concatenated in this way because the html parser
|
|
// will recognize a script tag even in quotes as a real script tag. By
|
|
// splitting it up in this way we avoid that error.
|
|
const html_with_script =
|
|
'<title>Title of the document</title> <script>const a = 5;</scr'
|
|
+ 'ipt> <p>Hello World</p>';
|
|
const html_without_script =
|
|
'<title>Title of the document</title> <p>Hello World</p>';
|
|
promise_test(async t => {
|
|
await tryGrantReadPermission();
|
|
await tryGrantWritePermission();
|
|
const blobInput = new Blob([html_with_script], {type: 'text/html'});
|
|
const clipboardItem = new ClipboardItem({'text/html': blobInput});
|
|
await waitForUserActivation();
|
|
await navigator.clipboard.write([clipboardItem]);
|
|
await waitForUserActivation();
|
|
const clipboardItems = await navigator.clipboard.read();
|
|
|
|
const html = clipboardItems[0];
|
|
assert_equals(html.types.length, 1);
|
|
assert_equals(html.types[0], 'text/html');
|
|
|
|
const blobOutput = await html.getType('text/html');
|
|
assert_equals(blobOutput.type, 'text/html');
|
|
|
|
const blobText = await (new Response(blobOutput)).text();
|
|
|
|
const outputHtml = reformatHtml(blobText);
|
|
const inputHtml = reformatHtml(html_without_script);
|
|
assert_equals(outputHtml, inputHtml);
|
|
}, 'Verify write and read clipboard with scripts removed given text/html: '
|
|
+ html_with_script);
|
|
</script>
|