<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=1057898 https://bugzilla.mozilla.org/show_bug.cgi?id=952741 --> <head> <title>Test switching between two inputs</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=1057898">Mozilla Bug 1057898</a> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=952741">Mozilla Bug 952741</a> <p id="display"></p> <pre id="test"> <script class="testbody" type="application/javascript;version=1.7"> inputmethod_setup(function() { runTest(); }); let appFrameScript = function appFrameScript() { let input1 = content.document.body.firstElementChild; let input2 = content.document.body.children[1]; let i = 1; input1.focus(); addMessageListener('test:next', function() { i++; switch (i) { case 2: input2.focus(); i++; // keep the same count with the parent frame. break; case 4: input2.blur(); break; case 5: input2.focus(); break; case 6: input1.focus(); i++; // keep the same count with the parent frame. break; case 8: content.document.body.removeChild(input1); break; case 9: input2.focus(); break; case 10: content.document.body.removeChild(input2); break; } }); }; function runTest() { let im = navigator.mozInputMethod; let i = 0; im.oninputcontextchange = function(evt) { var inputcontext = navigator.mozInputMethod.inputcontext; i++; switch (i) { // focus on the first input receives the first input context. case 1: ok(!!inputcontext, '1) Receving the first input context'); is(inputcontext.textAfterCursor, 'First'); mm.sendAsyncMessage('test:next'); break; // focus on the second input should implicitly blur the first input case 2: is(inputcontext, null, '2) Receving null inputcontext'); break; // ... and results the second input context. case 3: ok(!!inputcontext, '3) Receving the second input context'); is(inputcontext.textAfterCursor, 'Second'); mm.sendAsyncMessage('test:next'); break; // blur on the second input results null input context case 4: is(inputcontext, null, '4) Receving null inputcontext'); mm.sendAsyncMessage('test:next'); break; // focus on the second input receives the second input context. case 5: ok(!!inputcontext, '5) Receving the second input context'); is(inputcontext.textAfterCursor, 'Second'); mm.sendAsyncMessage('test:next'); break; // focus on the second input should implicitly blur the first input case 6: is(inputcontext, null, '6) Receving null inputcontext'); break; // ... and results the second input context. case 7: ok(!!inputcontext, '7) Receving the first input context'); is(inputcontext.textAfterCursor, 'First'); mm.sendAsyncMessage('test:next'); break; // remove on the first focused input results null input context case 8: is(inputcontext, null, '8) Receving null inputcontext'); mm.sendAsyncMessage('test:next'); break; // input context for the second input. case 9: ok(!!inputcontext, '9) Receving the second input context'); is(inputcontext.textAfterCursor, 'Second'); mm.sendAsyncMessage('test:next'); break; // remove on the second focused input results null input context case 10: is(inputcontext, null, '10) Receving null inputcontext'); inputmethod_cleanup(); break; default: ok(false, 'Receving extra inputcontextchange calls'); inputmethod_cleanup(); break; } }; // Set current page as an input method. SpecialPowers.wrap(im).setActive(true); let iframe = document.createElement('iframe'); iframe.src = 'file_test_two_inputs.html'; iframe.setAttribute('mozbrowser', true); document.body.appendChild(iframe); let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); iframe.addEventListener('mozbrowserloadend', function() { mm.loadFrameScript('data:,(' + encodeURIComponent(appFrameScript.toString()) + ')();', false); }); } </script> </pre> </body> </html>