tenfourfox/dom/permission/tests/file_shim.html

100 lines
2.1 KiB
HTML
Raw Normal View History

2017-04-19 07:56:45 +00:00
<html>
<head>
<script type="application/javascript;version=1.8">
function TestData(aOpts) {
for (var opt in aOpts) {
if (aOpts.hasOwnProperty(opt)) {
this[opt] = aOpts[opt];
}
}
}
TestData.prototype = {
getObj: function() {
if (!this.obj) {
return null;
}
// only one of the 2 should be set
if ((this.idl && this.webidl) ||
(!this.idl && !this.webidl)) {
return null;
}
// split on . to allow nested props
var props = this.obj.split(".");
var obj = window.navigator;
for (var i = 0; i < props.length && obj !== undefined; i++) {
obj = obj[props[i]];
}
if ((this.webidl && obj instanceof window[this.webidl]) ||
(this.idl && obj instanceof SpecialPowers.Ci[this.idl])) {
return obj;
} else {
return null;
}
},
// default verifier
verifier: function(success, failure) {
try {
if (this.getObj()) {
success(this.perm);
} else {
failure("Did not receive proper object");
}
} catch (e) {
failure("Received exception!: " + e);
}
},
}
function receiveMessage(e) {
var src = e.source;
var step = e.data.step;
var id = e.data.id;
var data = new TestData(e.data.testdata);
var success, failure;
function reply(res, msg) {
window.removeEventListener("message", receiveMessage, false);
src.postMessage({result: res, msg: msg,
id: id}, "*");
}
function _success(msg) {
reply(true, msg);
}
function _failure(msg) {
reply(false, msg);
}
// flip success and failure around for precheck
if (step == 0) {
success = _failure;
failure = _success;
} else {
success = _success;
failure = _failure;
}
if (data.verifier instanceof Function) {
data.verifier(success, failure);
} else {
// import toSource() function to global
eval(data.verifier);
verifier.bind(data, success, failure)();
}
}
window.addEventListener("message", receiveMessage, false);
</script>
</head>
<body>
<div id="content" style="display: none"></div>
</body>
</html>