<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=460568 --> <head> <title>Test for Bug 460568</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=460568">Mozilla Bug 460568</a> <p id="display"><a href="" id="anchor">a[href]</a></p> <div id="editor"> <a href="" id="anchorInEditor">a[href] in editor</a> </div> <pre id="test"> <script class="testbody" type="text/javascript"> /** Test for Bug 460568 **/ function runTest() { var editor = document.getElementById("editor"); var anchor = document.getElementById("anchor"); var anchorInEditor = document.getElementById("anchorInEditor"); var focused; anchorInEditor.onfocus = function() { focused = true; }; function isReallyEditable() { editor.focus(); var range = document.createRange(); range.selectNodeContents(editor); var prevStr = range.toString(); var docShell = SpecialPowers.wrap(window) .QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor) .getInterface(SpecialPowers.Ci.nsIWebNavigation) .QueryInterface(SpecialPowers.Ci.nsIDocShell); var controller = docShell.QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor) .getInterface(SpecialPowers.Ci.nsISelectionDisplay) .QueryInterface(SpecialPowers.Ci.nsISelectionController); var sel = controller.getSelection(controller.SELECTION_NORMAL); sel.collapse(anchorInEditor, 0); synthesizeKey('a', {}); range.selectNodeContents(editor); return prevStr != range.toString(); } focused = false; anchor.focus(); editor.setAttribute("contenteditable", "true"); anchorInEditor.focus(); is(focused, false, "focus moved to element in contenteditable=true"); is(isReallyEditable(), true, "cannot edit by a key event"); // for bug 502273 focused = false; anchor.focus(); editor.setAttribute("dummy", "dummy"); editor.removeAttribute("dummy"); anchorInEditor.focus(); is(focused, false, "focus moved to element in contenteditable=true (after dummy attribute was removed)"); is(isReallyEditable(), true, "cannot edit by a key event"); focused = false; anchor.focus(); editor.setAttribute("contenteditable", "false"); anchorInEditor.focus(); is(focused, true, "focus didn't move to element in contenteditable=false"); is(isReallyEditable(), false, "can edit by a key event"); // for bug 502273 focused = false; anchor.focus(); editor.setAttribute("dummy", "dummy"); editor.removeAttribute("dummy"); anchorInEditor.focus(); is(focused, true, "focus moved to element in contenteditable=true (after dummy attribute was removed)"); is(isReallyEditable(), false, "cannot edit by a key event"); focused = false; anchor.focus(); editor.setAttribute("contenteditable", "true"); anchorInEditor.focus(); is(focused, false, "focus moved to element in contenteditable=true"); is(isReallyEditable(), true, "cannot edit by a key event"); // for bug 502273 focused = false; anchor.focus(); editor.setAttribute("dummy", "dummy"); editor.removeAttribute("dummy"); anchorInEditor.focus(); is(focused, false, "focus moved to element in contenteditable=true (after dummy attribute was removed)"); is(isReallyEditable(), true, "cannot edit by a key event"); focused = false; anchor.focus(); editor.removeAttribute("contenteditable"); anchorInEditor.focus(); is(focused, true, "focus didn't move to element in contenteditable removed element"); is(isReallyEditable(), false, "can edit by a key event"); focused = false; anchor.focus(); editor.contentEditable = true; anchorInEditor.focus(); is(focused, false, "focus moved to element in contenteditable=true by property"); is(isReallyEditable(), true, "cannot edit by a key event"); focused = false; anchor.focus(); editor.contentEditable = false; anchorInEditor.focus(); is(focused, true, "focus didn't move to element in contenteditable=false by property"); is(isReallyEditable(), false, "can edit by a key event"); focused = false; anchor.focus(); editor.setAttribute("contenteditable", "true"); anchorInEditor.focus(); is(focused, false, "focus moved to element in contenteditable=true"); is(isReallyEditable(), true, "cannot edit by a key event"); // for bug 502273 focused = false; anchor.focus(); editor.setAttribute("dummy", "dummy"); editor.removeAttribute("dummy"); anchorInEditor.focus(); is(focused, false, "focus moved to element in contenteditable=true (after dummy attribute was removed)"); is(isReallyEditable(), true, "cannot edit by a key event"); } SimpleTest.waitForExplicitFinish(); addLoadEvent(runTest); addLoadEvent(SimpleTest.finish); </script> </pre> </body> </html>