Merge "Fix another race condition triggered when two vanadium runtimes authenticate at the same time (like on the tutorials)."
diff --git a/extension/src/background/index.js b/extension/src/background/index.js
index 77c6abb..e13c5ef 100644
--- a/extension/src/background/index.js
+++ b/extension/src/background/index.js
@@ -238,19 +238,23 @@
// Return true if the nacl plug-in is running.
BackgroundPage.prototype.naclPluginIsActive = function() {
- return this.hasOwnProperty('nacl');
+ return this.hasOwnProperty('nacl') && this.nacl.isReady;
};
// Start the nacl plug-in -- add it to the page and register handlers.
BackgroundPage.prototype.startNaclPlugin = function(cb) {
var bp = this;
cb = cb || function() {};
- bp.nacl = new Nacl();
- bp.registerNaclListeners();
- bp.nacl.once('ready', function() {
- bp.authHandler = new AuthHandler(bp.nacl.channel);
- cb();
- });
+
+ if (!bp.nacl) {
+ bp.nacl = new Nacl();
+ bp.registerNaclListeners();
+ bp.nacl.once('ready', function() {
+ bp.authHandler = new AuthHandler(bp.nacl.channel);
+ });
+ }
+
+ bp.nacl.once('ready', cb.bind(bp));
};
// Stop the nacl plug-in - remove it from the page and clean up state.
diff --git a/extension/src/background/nacl.js b/extension/src/background/nacl.js
index 27bed46..e55aa97 100644
--- a/extension/src/background/nacl.js
+++ b/extension/src/background/nacl.js
@@ -108,6 +108,7 @@
nacl._initialized = true;
nacl._sendQueuedMessages();
nacl.channel.ready();
+ nacl.isReady = true;
nacl.emit('ready');
});
});