123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <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>
|