<!DOCTYPE html>
<html>
<body>
<script src="/resources/js-test-pre.js"></script>
<script>

description('This tests calling setData with a HTML in a null origin document. The HTML should be sanitized in another document');
jsTestIsAsync = true;

if (window.internals)
    internals.settings.setCustomPasteboardDataEnabled(true);

onmessage = (event) => {
    originalHTML = event.data.originalHTML;
    htmlReadInSameDocument = event.data.html;
    shouldBeEqualToString('htmlReadInSameDocument', originalHTML);
    typesInSameDocument = event.data.types;
    shouldBeEqualToString('JSON.stringify(typesInSameDocument)', '["text/html"]');
    itemsInSameDocument = event.data.items;
    shouldBeEqualToString('JSON.stringify(itemsInSameDocument)', '[{"kind":"string","type":"text/html"}]');
    document.getElementById('destination').focus();
    if (window.testRunner)
        document.execCommand('paste');
}

function doPaste(event) {
    shouldBeTrue('html = event.clipboardData.getData("text/html"); html.includes("hello")');
    shouldBeTrue('html.includes(", world")');
    shouldBeFalse('html.includes("secret")');
    shouldBeFalse('html.includes("dangerousCode")');
    shouldBeEqualToString('JSON.stringify(event.clipboardData.types)', '["text/html"]');
    shouldBeEqualToString('JSON.stringify(Array.from(event.clipboardData.items).map((item) => ({kind: item.kind, type: item.type})))',
        '[{"kind":"string","type":"text/html"}]');
    document.getElementById('destination').remove();
    finishJSTest();
}

</script>
<iframe src="http://localhost:8000/security/clipboard/resources/copy-html.html"></iframe>
<div id="destination" onpaste="doPaste(event)" contenteditable>3. Paste here</div>
<script src="/resources/js-test-post.js"></script>
</body>
</html>
