diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js index f7f6e770..96d549c9 100644 --- a/ext/bg/js/util.js +++ b/ext/bg/js/util.js @@ -32,11 +32,32 @@ function utilIsolate(value) { return typeof stringValue === 'string' ? JSON.parse(stringValue) : null; } +function utilFunctionIsolate(func) { + return function (...args) { + try { + return func.call(this, ...args); + } catch (e) { + try { + String(func); + } catch (e2) { + // Dead object + return; + } + throw e; + } + }; +} + function utilBackgroundIsolate(data) { const backgroundPage = chrome.extension.getBackgroundPage(); return backgroundPage.utilIsolate(data); } +function utilBackgroundFunctionIsolate(func) { + const backgroundPage = chrome.extension.getBackgroundPage(); + return backgroundPage.utilFunctionIsolate(func); +} + function utilSetEqual(setA, setB) { if (setA.size !== setB.size) { return false; @@ -110,15 +131,15 @@ function utilDatabasePurge() { function utilDatabaseDeleteDictionary(dictionaryName, onProgress) { return utilBackend().translator.database.deleteDictionary( utilBackgroundIsolate(dictionaryName), - onProgress + utilBackgroundFunctionIsolate(onProgress) ); } -async function utilDatabaseImport(data, progress, details) { +async function utilDatabaseImport(data, onProgress, details) { data = await utilReadFile(data); return utilBackend().translator.database.importDictionary( utilBackgroundIsolate(data), - progress, + utilBackgroundFunctionIsolate(onProgress), utilBackgroundIsolate(details) ); }