From 3fa1bdd574773e79f4861f6f3034fb9c4ec63ffe Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 17 May 2024 21:41:55 -0300 Subject: client: report uncaught runtime errors in search worker --- src/static/js/client.js | 17 +++++++++++++++++ src/static/js/search-worker.js | 5 +++++ 2 files changed, 22 insertions(+) (limited to 'src') diff --git a/src/static/js/client.js b/src/static/js/client.js index 58f1acb9..9bef44a2 100644 --- a/src/static/js/client.js +++ b/src/static/js/client.js @@ -3455,6 +3455,7 @@ const wikiSearchInfo = initInfo('wikiSearchInfo', { whenWorkerAlive: [], whenWorkerReady: [], whenWorkerFailsToInitialize: [], + whenWorkerHasRuntimeError: [], whenDownloadBegins: [], whenDownloadsBegin: [], @@ -3533,6 +3534,11 @@ function handleSearchWorkerStatusMessage(message) { dispatchInternalEvent(event, 'whenWorkerFailsToInitialize'); break; + case 'runtime-error': + console.debug(`Search worker had an uncaught runtime error.`); + dispatchInternalEvent(event, 'whenWorkerHasRuntimeError'); + break; + default: console.warn(`Unknown status "${message.data.status}" <- from search worker`); break; @@ -3782,6 +3788,10 @@ function addSidebarSearchInternalListeners() { trackSidebarSearchWorkerFailsToInitialize, updateSidebarSearchStatus); + wikiSearchInfo.event.whenWorkerHasRuntimeError.push( + trackSidebarSearchWorkerHasRuntimeError, + updateSidebarSearchStatus); + wikiSearchInfo.event.whenDownloadsBegin.push( trackSidebarSearchDownloadsBegin, updateSidebarSearchStatus); @@ -3973,6 +3983,13 @@ function trackSidebarSearchWorkerFailsToInitialize() { state.searchStage = 'failed'; } +function trackSidebarSearchWorkerHasRuntimeError() { + const {state} = sidebarSearchInfo; + + state.workerStatus = 'failed'; + state.searchStage = 'failed'; +} + function trackSidebarSearchDownloadsBegin(event) { const {state} = sidebarSearchInfo; diff --git a/src/static/js/search-worker.js b/src/static/js/search-worker.js index 9a7827da..66c0cf2e 100644 --- a/src/static/js/search-worker.js +++ b/src/static/js/search-worker.js @@ -26,6 +26,7 @@ let status = null; let indexes = null; onmessage = handleWindowMessage; +onerror = handleRuntimeError; postStatus('alive'); Promise.all([ @@ -302,6 +303,10 @@ function importIndex(indexKey, indexData) { } } +function handleRuntimeError() { + postStatus('runtime-error'); +} + function handleWindowMessage(message) { switch (message.data.kind) { case 'action': -- cgit 1.3.0-6-gf8a5