blob: dc5e182f8e370d74f9262c0e2b80f9f1f988c9e4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test.js"></script>
<script>
description('This tests copying and pasting content with "overflow: auto" would not strip its content.');
function startTest() {
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
iframe.src = `data:text/html;charset=utf-8,<!DOCTYPE html>
<body><button onclick="document.execCommand('selectAll'); document.execCommand('copy'); getSelection().removeAllRanges();">Start</button>
<script>
document.addEventListener('copy', () => {
event.preventDefault();
event.clipboardData.setData('text/html', '<div>Start</div><div style="height: 1000px;"></div><!-- secret -->'
+ '<div style="visibility: hidden;">secret</div><p style="overflow: auto;">Content</p><div style="height: 1000px;"></div><span id="end">End</span>');
window.parent.postMessage({}, '*');
});
window.onload = () => {
document.execCommand('selectAll');
document.execCommand('copy');
}
</sc` + `ript>
</body>`;
}
function continueTest() {
editor.focus();
document.execCommand('selectAll');
if (window.testRunner)
testRunner.execCommand('paste');
}
function didPaste(event) {
window.markup = event.clipboardData.getData('text/html');
shouldBeFalse('markup.includes("secret")');
shouldBeTrue('markup.includes("Start</div>")');
shouldBeTrue('markup.includes("Content</p>")');
shouldBeTrue('markup.includes("End</span>")');
setTimeout(() => {
shouldBeEqualToString('editor.querySelector("div").textContent', 'Start');
shouldBeEqualToString('editor.querySelector("p").textContent', 'Content');
shouldBeEqualToString('editor.querySelector("span").textContent', 'End');
editor.textContent = editor.innerHTML;
editor.contentEditable = false;
if (window.testRunner)
editor.style.display = 'none';
finishJSTest();
}, 0);
}
onload = startTest;
onmessage = continueTest;
jsTestIsAsync = true;
</script>
<div id="editor" onpaste="didPaste(event)" contenteditable>Paste now</div>
</body>
</html>