Merge pull request #38 from matrix-org/rav/handle_load_exceptions

Better handling of exceptions during loading, and import OLM_OPTIONS
This commit is contained in:
Richard van der Hoff 2016-12-14 14:34:39 +00:00 committed by GitHub
commit 2e04868c46
2 changed files with 34 additions and 16 deletions

View file

@ -419,4 +419,22 @@ olm_exports["get_library_version"] = restore_stack(function() {
getValue(buf+2, 'i8'), getValue(buf+2, 'i8'),
]; ];
}); });
}();
})();
// export the olm functions into the environment.
//
// make sure that we do this *after* populating olm_exports, so that we don't
// get a half-built window.Olm if there is an exception.
if (typeof module !== 'undefined' && module.exports) {
// node / browserify
module.exports = olm_exports;
}
if (typeof(window) !== 'undefined') {
// We've been imported directly into a browser. Define the global 'Olm' object.
// (we do this even if module.exports was defined, because it's useful to have
// Olm in the global scope for browserified and webpacked apps.)
window["Olm"] = olm_exports;
}

View file

@ -2,32 +2,32 @@ var olm_exports = {};
var get_random_values; var get_random_values;
var process; // Shadow the process object so that emscripten won't get var process; // Shadow the process object so that emscripten won't get
// confused by browserify // confused by browserify
if (typeof(global) !== 'undefined' && global["window"]) {
// We're running with browserify if (typeof(window) !== 'undefined') {
module["exports"] = olm_exports; // We've in a browser (directly, via browserify, or via webpack).
global["window"]["Olm"] = olm_exports;
get_random_values = function(buf) {
window.crypto.getRandomValues(buf);
};
} else if (typeof(window) !== 'undefined') {
// We've been imported directly into a browser.
window["Olm"] = olm_exports;
get_random_values = function(buf) { get_random_values = function(buf) {
window.crypto.getRandomValues(buf); window.crypto.getRandomValues(buf);
}; };
} else if (module["exports"]) { } else if (module["exports"]) {
// We're running in node. // We're running in node.
module["exports"] = olm_exports;
var nodeCrypto = require("crypto"); var nodeCrypto = require("crypto");
get_random_values = function(buf) { get_random_values = function(buf) {
var bytes = nodeCrypto.randomBytes(buf.length); var bytes = nodeCrypto.randomBytes(buf.length);
buf.set(bytes); buf.set(bytes);
} };
process = global["process"]; process = global["process"];
} else { } else {
throw new Error("Cannot find global to attach library to"); throw new Error("Cannot find global to attach library to");
} }
var init = function() { (function() {
var module; // Shadow the Node 'module' object so that emscripten won't try /* applications should define OLM_OPTIONS in the environment to override
// to fiddle with it. * emscripten module settings */
var Module = {};
if (typeof(OLM_OPTIONS) !== 'undefined') {
for (var key in OLM_OPTIONS) {
if (OLM_OPTIONS.hasOwnProperty(key)) {
Module[key] = OLM_OPTIONS[key];
}
}
}