aboutsummaryrefslogtreecommitdiff
path: root/ext/mixed/js/yomichan.js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-07-03 12:20:22 -0400
committerGitHub <noreply@github.com>2020-07-03 12:20:22 -0400
commita07a8dfff667e0bba20d7199c4d7aa610e98bcdb (patch)
tree0621aa42db97b7ac39207452b54c10b528080f24 /ext/mixed/js/yomichan.js
parentce634325ce3a6ba4994916116b15b90e92666255 (diff)
Extension unload detection (#647)
* Update how extension unload is detected * Remove event handlers and use yomichan.isExtensionUnloaded instead * Update terminology
Diffstat (limited to 'ext/mixed/js/yomichan.js')
-rw-r--r--ext/mixed/js/yomichan.js35
1 files changed, 30 insertions, 5 deletions
diff --git a/ext/mixed/js/yomichan.js b/ext/mixed/js/yomichan.js
index 00335eba..d921a5a2 100644
--- a/ext/mixed/js/yomichan.js
+++ b/ext/mixed/js/yomichan.js
@@ -47,6 +47,8 @@ const yomichan = (() => {
// NOP
}
+ this._isExtensionUnloaded = false;
+
const {promise, resolve} = deferPromise();
this._isBackendPreparedPromise = promise;
this._isBackendPreparedPromiseResolve = resolve;
@@ -61,12 +63,16 @@ const yomichan = (() => {
// Public
+ get isExtensionUnloaded() {
+ return this._isExtensionUnloaded;
+ }
+
prepare() {
chrome.runtime.onMessage.addListener(this._onMessage.bind(this));
}
ready() {
- chrome.runtime.sendMessage({action: 'yomichanCoreReady'});
+ this.sendMessage({action: 'yomichanCoreReady'});
return this._isBackendPreparedPromise;
}
@@ -80,10 +86,6 @@ const yomichan = (() => {
return id;
}
- triggerOrphaned(error) {
- this.trigger('orphaned', {error});
- }
-
isExtensionUrl(url) {
try {
return url.startsWith(chrome.runtime.getURL('/'));
@@ -190,8 +192,31 @@ const yomichan = (() => {
this.trigger('log', {error, level, context});
}
+ sendMessage(...args) {
+ try {
+ return chrome.runtime.sendMessage(...args);
+ } catch (e) {
+ this._onExtensionUnloaded(e);
+ throw e;
+ }
+ }
+
+ connect(...args) {
+ try {
+ return chrome.runtime.connect(...args);
+ } catch (e) {
+ this._onExtensionUnloaded(e);
+ throw e;
+ }
+ }
+
// Private
+ _onExtensionUnloaded(error) {
+ this._isExtensionUnloaded = true;
+ this.trigger('extensionUnloaded', {error});
+ }
+
_getUrl() {
return (typeof window === 'object' && window !== null ? window.location.href : '');
}