diff options
Diffstat (limited to 'dom/inputmethod/mochitest/test_bug944397.html')
-rw-r--r-- | dom/inputmethod/mochitest/test_bug944397.html | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/dom/inputmethod/mochitest/test_bug944397.html b/dom/inputmethod/mochitest/test_bug944397.html new file mode 100644 index 000000000..4be95f395 --- /dev/null +++ b/dom/inputmethod/mochitest/test_bug944397.html @@ -0,0 +1,107 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=944397 +--> +<head> + <title>Basic test for 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=944397">Mozilla Bug 944397</a> +<p id="display"></p> +<pre id="test"> +<script class="testbody" type="application/javascript;version=1.7"> + +SimpleTest.requestFlakyTimeout("untriaged"); + +inputmethod_setup(function() { + runTest(); +}); + +// The frame script running in file_test_app.html. +function appFrameScript() { + let input = content.document.getElementById('test-input'); + input.oninput = function() { + sendAsyncMessage('test:InputMethod:oninput', { + value: input.value + }); + }; +} + +function runTest() { + let app, keyboard; + + /** + * So this test does the following: + * 1. Create a mozbrowser iframe with a text field in it, and focus the text field + * 2. 100ms. after loading we create new keyboard iframe, that will try to execute + * replaceSurroundingText on the current active inputcontext + * 3. That should trigger 'input' event on the said text field + * 4. And if that happens we know everything is OK + */ + + let path = location.pathname; + let basePath = location.protocol + '//' + location.host + + path.substring(0, path.lastIndexOf('/')); + + // STEP 1: Create an app frame to recieve keyboard inputs. + function step1() { + app = document.createElement('iframe'); + app.src = basePath + '/file_test_app.html'; + app.setAttribute('mozbrowser', true); + document.body.appendChild(app); + app.addEventListener('mozbrowserloadend', function() { + let mm = SpecialPowers.getBrowserFrameMessageManager(app); + mm.loadFrameScript('data:,(' + appFrameScript.toString() + ')();', false); + mm.addMessageListener("test:InputMethod:oninput", function(ev) { + step4(SpecialPowers.wrap(ev).json.value); + }); + + step2(); + }); + } + + function step2() { + // STEP 2a: Create a browser frame to load the input method app. + keyboard = document.createElement('iframe'); + keyboard.setAttribute('mozbrowser', true); + document.body.appendChild(keyboard); + + // STEP 2b: Grant input privileges to the keyboard iframe + let imeUrl = basePath + '/file_inputmethod.html#data'; + + // STEP 2c: Tell Gecko to use this iframe as its keyboard app + let req = keyboard.setInputMethodActive(true); + + req.onsuccess = function() { + ok(true, 'setInputMethodActive succeeded.'); + }; + + req.onerror = function() { + ok(false, 'setInputMethodActive failed: ' + this.error.name); + inputmethod_cleanup(); + }; + + // STEP 3: Loads the input method app to the browser frame after a delay. + setTimeout(function() { + keyboard.src = imeUrl; + }, 100); + } + + function step4(val) { + ok(true, 'Keyboard input was received.'); + is(val, '#dataYuan', 'Input value'); + inputmethod_cleanup(); + } + + step1(); +} + +</script> +</pre> +</body> +</html> + |