gecko-dev/dom/inputmethod/mochitest/test_bug944397.html
J. Ryan Stinnett 2a55d065b7 Bug 1238160 - Rename OriginAttributes.mInBrowser and associated methods. r=bz,mayhemer
This change renames OriginAttributes.mInBrowser to mInIsolatedMozBrowser and
nsIPrincipal::GetIsInBrowserElement to GetIsInIsolatedMozBrowserElement.  Other
methods that pass these values around also have name changes.

Tokens such as "inBrowser" have previously been serialized into cache keys, used
as DB column names, stored in app registries, etc.  No changes are made to any
serialization formats.  Only runtime method and variable names are updated.

No behavior changes are made in this patch, so some renamed methods may have
nonsensical implementations.  These are corrected in subsequent patches
focused on behavior.

MozReview-Commit-ID: 66HfMlsXFLs
2016-03-02 10:35:56 -06:00

119 lines
3.4 KiB
HTML

<!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="/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript;version=1.7" src="inputmethod_common.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=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';
SpecialPowers.pushPermissions([{
type: 'input',
allow: true,
context: {
url: imeUrl,
originAttributes: {
inIsolatedMozBrowser: true
}
}
}], function() {
// 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>