aboutsummaryrefslogtreecommitdiff
path: root/javascript
diff options
context:
space:
mode:
authorDavid Baker <dave@matrix.org>2018-09-25 17:13:29 +0100
committerDavid Baker <dave@matrix.org>2018-09-25 17:13:29 +0100
commit263b94428a24caaa5b899ed7f73b896620e6cdf4 (patch)
treedacfa7322ee472d9a09e4bd56805bae0aad215c9 /javascript
parentf29d8cdd7bf1faf8294f51624c633fb05c9a0e2f (diff)
Another day, another interface
Change the interface again, hopefully this time a bit more normal. Now we wrap the emscripten module completely and just expose the high level objects. The olm library export is now imported as normal (ie. returns a module rather than a function returning a module) but has an `init` method which *must* be called. This returns a promise which resolves when the module is ready. It also rejects if the module failed to set up, unlike before (and unlike the promise-not-a-promise that emscripten returns). Generally catch failures to init the module.
Diffstat (limited to 'javascript')
-rw-r--r--javascript/externs.js3
-rw-r--r--javascript/olm_post.js30
-rw-r--r--javascript/olm_pre.js1
-rw-r--r--javascript/olm_prefix.js3
-rw-r--r--javascript/olm_suffix.js23
-rw-r--r--javascript/test/megolm.spec.js10
-rw-r--r--javascript/test/olm.spec.js16
-rw-r--r--javascript/test/pk.spec.js10
8 files changed, 56 insertions, 40 deletions
diff --git a/javascript/externs.js b/javascript/externs.js
index 8ec5b02..752e937 100644
--- a/javascript/externs.js
+++ b/javascript/externs.js
@@ -1 +1,4 @@
var OLM_OPTIONS;
+var olm_exports;
+var onInitSuccess;
+var onInitFail;
diff --git a/javascript/olm_post.js b/javascript/olm_post.js
index 071021c..9e0294a 100644
--- a/javascript/olm_post.js
+++ b/javascript/olm_post.js
@@ -464,27 +464,11 @@ olm_exports["get_library_version"] = restore_stack(function() {
];
});
-// 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
- for (var olm_export in olm_exports) {
- if (olm_exports.hasOwnProperty(olm_export)) {
- Module[olm_export] = olm_exports[olm_export];
- }
- }
-}
-
-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;
-}
-
-Module.then(function() {
+Module['onRuntimeInitialized'] = function() {
OLM_ERROR = Module['_olm_error']();
-});
+ if (onInitSuccess) onInitSuccess();
+};
+
+Module['onAbort'] = function(err) {
+ if (onInitFail) onInitFail(err);
+};
diff --git a/javascript/olm_pre.js b/javascript/olm_pre.js
index 673b868..4feff97 100644
--- a/javascript/olm_pre.js
+++ b/javascript/olm_pre.js
@@ -1,4 +1,3 @@
-var olm_exports = {};
var get_random_values;
if (typeof(window) !== 'undefined') {
diff --git a/javascript/olm_prefix.js b/javascript/olm_prefix.js
new file mode 100644
index 0000000..b33dfe9
--- /dev/null
+++ b/javascript/olm_prefix.js
@@ -0,0 +1,3 @@
+var olm_exports = {};
+var onInitSuccess;
+var onInitFail;
diff --git a/javascript/olm_suffix.js b/javascript/olm_suffix.js
new file mode 100644
index 0000000..023c0a5
--- /dev/null
+++ b/javascript/olm_suffix.js
@@ -0,0 +1,23 @@
+olm_exports['init'] = function() {
+ return new Promise(function(resolve, reject) {
+ onInitSuccess = function() {
+ resolve();
+ };
+ onInitFail = function(err) {
+ reject(err);
+ };
+ Module();
+ });
+};
+
+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;
+}
+
+// Emscripten sets the module exports to be its module
+// with wrapped c functions. Clobber it with our higher
+// level wrapper class.
+module.exports = olm_exports;
diff --git a/javascript/test/megolm.spec.js b/javascript/test/megolm.spec.js
index 9d5eb72..241d4bd 100644
--- a/javascript/test/megolm.spec.js
+++ b/javascript/test/megolm.spec.js
@@ -1,5 +1,6 @@
/*
Copyright 2016 OpenMarket Ltd
+Copyright 2018 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,17 +17,18 @@ limitations under the License.
"use strict";
-var Olm = require('../olm')();
+var Olm = require('../olm');
describe("megolm", function() {
var aliceSession, bobSession;
beforeEach(function(done) {
- Olm.then(function() {
+ Olm.init().then(function() {
+ aliceSession = new Olm.OutboundGroupSession();
+ bobSession = new Olm.InboundGroupSession();
+
done();
});
- aliceSession = new Olm.OutboundGroupSession();
- bobSession = new Olm.InboundGroupSession();
});
afterEach(function() {
diff --git a/javascript/test/olm.spec.js b/javascript/test/olm.spec.js
index 94fa87b..77dd712 100644
--- a/javascript/test/olm.spec.js
+++ b/javascript/test/olm.spec.js
@@ -1,5 +1,6 @@
/*
Copyright 2016 OpenMarket Ltd
+Copyright 2018 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,7 +17,7 @@ limitations under the License.
"use strict";
-var Olm = require('../olm')();
+var Olm = require('../olm');
if (!Object.keys) {
Object.keys = function(o) {
@@ -33,14 +34,15 @@ describe("olm", function() {
beforeEach(function(done) {
// This should really be in a beforeAll, but jasmine-node
// doesn't support that
- Olm.then(function() {
+ debugger;
+ Olm.init().then(function() {
+ aliceAccount = new Olm.Account();
+ bobAccount = new Olm.Account();
+ aliceSession = new Olm.Session();
+ bobSession = new Olm.Session();
+
done();
});
-
- aliceAccount = new Olm.Account();
- bobAccount = new Olm.Account();
- aliceSession = new Olm.Session();
- bobSession = new Olm.Session();
});
afterEach(function() {
diff --git a/javascript/test/pk.spec.js b/javascript/test/pk.spec.js
index 9f7dbfd..007882f 100644
--- a/javascript/test/pk.spec.js
+++ b/javascript/test/pk.spec.js
@@ -16,7 +16,7 @@ limitations under the License.
"use strict";
-var Olm = require('../olm')();
+var Olm = require('../olm');
if (!Object.keys) {
Object.keys = function(o) {
@@ -30,12 +30,12 @@ describe("pk", function() {
var encryption, decryption;
beforeEach(function(done) {
- Olm.then(function() {
+ Olm.init().then(function() {
+ encryption = new Olm.PkEncryption();
+ decryption = new Olm.PkDecryption();
+
done();
});
-
- encryption = new Olm.PkEncryption();
- decryption = new Olm.PkDecryption();
});
afterEach(function () {