From 36efb9783c6e111bce83a9a98285fd52ff2afa5a Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Thu, 2 Mar 2017 15:48:47 +0100 Subject: [PATCH] Handle uncaught WebWorker exceptions --- .../dist/browser-es-module-loader.js | 16 ++++++++++++++++ .../src/browser-es-module-loader.js | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/vendor/browser-es-module-loader/dist/browser-es-module-loader.js b/vendor/browser-es-module-loader/dist/browser-es-module-loader.js index 8745215b..96b7701d 100644 --- a/vendor/browser-es-module-loader/dist/browser-es-module-loader.js +++ b/vendor/browser-es-module-loader/dist/browser-es-module-loader.js @@ -1308,6 +1308,7 @@ var WorkerPool = function (script, size) { wrkr._count = 0; wrkr._ind = i; wrkr.onmessage = this._onmessage.bind(this, wrkr); + wrkr.onerror = this._onerror.bind(this); this._workers[i] = wrkr; } @@ -1333,6 +1334,21 @@ WorkerPool.prototype = { this._checkJobs(); }, + _onerror: function(err) { + try { + var evt = new Event('error'); + } catch (_eventError) { + var evt = document.createEvent('Event'); + evt.initEvent('error', true, true); + } + evt.message = err.message; + evt.filename = err.filename; + evt.lineno = err.lineno; + evt.colno = err.colno; + evt.error = err.error; + window.dispatchEvent(evt); + }, + _checkJobs: function () { if (this._jobs === 0 && this._stopTimeout === undefined) { // wait for 2s of inactivity before stopping (that should be enough for local loading) diff --git a/vendor/browser-es-module-loader/src/browser-es-module-loader.js b/vendor/browser-es-module-loader/src/browser-es-module-loader.js index 67f1dce4..b6692218 100644 --- a/vendor/browser-es-module-loader/src/browser-es-module-loader.js +++ b/vendor/browser-es-module-loader/src/browser-es-module-loader.js @@ -148,6 +148,7 @@ var WorkerPool = function (script, size) { wrkr._count = 0; wrkr._ind = i; wrkr.onmessage = this._onmessage.bind(this, wrkr); + wrkr.onerror = this._onerror.bind(this); this._workers[i] = wrkr; } @@ -173,6 +174,21 @@ WorkerPool.prototype = { this._checkJobs(); }, + _onerror: function(err) { + try { + var evt = new Event('error'); + } catch (_eventError) { + var evt = document.createEvent('Event'); + evt.initEvent('error', true, true); + } + evt.message = err.message; + evt.filename = err.filename; + evt.lineno = err.lineno; + evt.colno = err.colno; + evt.error = err.error; + window.dispatchEvent(evt); + }, + _checkJobs: function () { if (this._jobs === 0 && this._stopTimeout === undefined) { // wait for 2s of inactivity before stopping (that should be enough for local loading)