108 lines
3.0 KiB
HTML
108 lines
3.0 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
<script>
|
|
document.body.contentEditable = "true";
|
|
</script>
|
|
<script>
|
|
description('Ensure safety on side-effect on drop-initiated TextEvent.');
|
|
|
|
function toStringLiteral(str)
|
|
{
|
|
return "'" + str + "'";
|
|
}
|
|
|
|
var testSourceRoot = document.createElement("div");
|
|
document.body.appendChild(testSourceRoot);
|
|
|
|
var testTargetRoot = document.createElement("div");
|
|
testTargetRoot.innerHTML += "<div><span id='targetEditable' contentEditable>initialValue</span></div>";
|
|
testTargetRoot.innerHTML += "<iframe id='targetIFrame' src='data:text/html;charset=utf-8," + encodeURI("<html></html>") + "'></iframe>";
|
|
document.body.appendChild(testTargetRoot);
|
|
|
|
testTargetEditable = document.getElementById("targetEditable");
|
|
testTargetIFrame = document.getElementById("targetIFrame");
|
|
testTargetIFrameDocument = testTargetIFrame.contentDocument;
|
|
testTargetIFrameDocument.body.innerHTML = "initialBody";
|
|
testTargetIFrameDocument.designMode = "on";
|
|
|
|
function handlerRemovingTarget(event)
|
|
{
|
|
event.target.parentNode.removeChild(event.target);
|
|
}
|
|
|
|
function handlerRemovingIFrame(event)
|
|
{
|
|
testTargetIFrame.parentNode.removeChild(testTargetIFrame);
|
|
}
|
|
|
|
function dragFrom(element)
|
|
{
|
|
var x = element.offsetLeft + element.offsetWidth / 2;
|
|
var y = element.offsetTop + element.offsetHeight / 2;
|
|
eventSender.mouseMoveTo(x, y);
|
|
eventSender.mouseDown();
|
|
|
|
// Makes drag happen
|
|
var meaninglessDelta = 10;
|
|
eventSender.leapForward(500);
|
|
eventSender.mouseMoveTo(x + meaninglessDelta , y + meaninglessDelta);
|
|
}
|
|
|
|
function dropTo(element)
|
|
{
|
|
var x = element.offsetLeft + element.offsetWidth / 2;
|
|
var y = element.offsetTop + element.offsetHeight / 2;
|
|
|
|
eventSender.mouseMoveTo(x, y);
|
|
eventSender.mouseUp();
|
|
}
|
|
|
|
function dragPlainText()
|
|
{
|
|
var selection = window.getSelection();
|
|
|
|
testSourceRoot.innerHTML = "<input type='text' value='PlainHello' id='src' />";
|
|
var input = document.getElementById("src");
|
|
input.focus();
|
|
selection.modify("extend", "forward", "line");
|
|
dragFrom(input);
|
|
}
|
|
|
|
function dropToTargetEditable()
|
|
{
|
|
dropTo(testTargetEditable);
|
|
}
|
|
|
|
function dropToTargetIFrame()
|
|
{
|
|
dropTo(testTargetIFrame);
|
|
}
|
|
|
|
testTargetEditable.addEventListener("textInput", handlerRemovingTarget);
|
|
dragPlainText();
|
|
dropToTargetEditable();
|
|
// detached node shouldn't get dropped value
|
|
shouldBe("testTargetEditable.innerHTML", toStringLiteral("initialValue"));
|
|
|
|
testTargetIFrameDocument.body.addEventListener("textInput", handlerRemovingIFrame);
|
|
dragPlainText();
|
|
dropToTargetIFrame();
|
|
// detached frame shouldn't get dropped value
|
|
shouldBe("testTargetIFrameDocument.body.innerHTML", toStringLiteral("initialBody"));
|
|
|
|
// Hides dataset to make dump clean.
|
|
testTargetRoot.style.display = "none";
|
|
testSourceRoot.style.display = "none";
|
|
|
|
var successfullyParsed = true;
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|