<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=1026997 --> <head> <title>SelectionChange on InputMethod API.</title> <script type="application/javascript;version=1.7" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <script type="application/javascript;version=1.7" src="inputmethod_common.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1026997">Mozilla Bug 1026997</a> <p id="display"></p> <pre id="test"> <script class="testbody" type="application/javascript;version=1.7"> inputmethod_setup(function() { runTest(); }); // The frame script running in file_test_app.html. function appFrameScript() { let input = content.document.getElementById('test-input'); input.focus(); function next(start, end) { input.setSelectionRange(start, end); } addMessageListener("test:KeyBoard:nextSelection", function(event) { let json = event.json; next(json[0], json[1]); }); } function runTest() { let actions = [ [0, 4], [1, 1], [3, 3], [2, 3] ]; let counter = 0; let mm = null; let ic = null; let im = navigator.mozInputMethod; im.oninputcontextchange = function() { ok(true, 'inputcontextchange event was fired.'); im.oninputcontextchange = null; ic = im.inputcontext; if (!ic) { ok(false, 'Should have a non-null inputcontext.'); inputmethod_cleanup(); return; } ic.onselectionchange = function() { is(ic.selectionStart, actions[counter][0], "start"); is(ic.selectionEnd, actions[counter][1], "end"); if (++counter === actions.length) { inputmethod_cleanup(); return; } next(); }; next(); }; // Set current page as an input method. SpecialPowers.wrap(im).setActive(true); // Create an app frame to recieve keyboard inputs. let app = document.createElement('iframe'); app.src = 'file_test_app.html'; app.setAttribute('mozbrowser', true); document.body.appendChild(app); app.addEventListener('mozbrowserloadend', function() { mm = SpecialPowers.getBrowserFrameMessageManager(app); mm.loadFrameScript('data:,(' + appFrameScript.toString() + ')();', false); next(); }); function next() { if (ic && mm) { mm.sendAsyncMessage('test:KeyBoard:nextSelection', actions[counter]); } } } </script> </pre> </body> </html>