diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-08-02 21:51:51 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-02 21:51:51 -0400 |
commit | b253cdc92e38e960a6256f8aad730624c37d2a1b (patch) | |
tree | 9709cc6ad507e4f2000c9c3bef2e8c15fe7ad2c2 /ext/fg/js/popup.js | |
parent | a81d69d6c12a383664a92acb40c1c365b2425ca5 (diff) |
Fix extension unload cases (#712)
* Add _invokeSafe function to silently ignore extension unload errors
* Remove "Api" from function names
* Add invokeSafe to Popup
* Don't redundantly set content type to 'unloaded'
Diffstat (limited to 'ext/fg/js/popup.js')
-rw-r--r-- | ext/fg/js/popup.js | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index 281913c6..22672706 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -97,7 +97,7 @@ class Popup { this._options = await api.optionsGet(optionsContext); this.updateTheme(); - this._invokeApi('setOptionsContext', {optionsContext}); + this._invokeSafe('setOptionsContext', {optionsContext}); } hide(changeFocus) { @@ -146,25 +146,21 @@ class Popup { } if (displayDetails !== null) { - this._invokeApi('setContent', {details: displayDetails}); + this._invokeSafe('setContent', {details: displayDetails}); } } setCustomCss(css) { - this._invokeApi('setCustomCss', {css}); + this._invokeSafe('setCustomCss', {css}); } - async clearAutoPlayTimer() { - try { - await this._invokeApi('clearAutoPlayTimer'); - } catch (e) { - // NOP - } + clearAutoPlayTimer() { + this._invokeSafe('clearAutoPlayTimer'); } setContentScale(scale) { this._contentScale = scale; - this._invokeApi('setContentScale', {scale}); + this._invokeSafe('setContentScale', {scale}); } // Popup-only public functions @@ -266,7 +262,7 @@ class Popup { await frameClient.connect(this._frame, this._targetOrigin, this._frameId, setupFrame); // Configure - await this._invokeApi('configure', { + await this._invokeSafe('configure', { frameId: this._frameId, ownerFrameId: this._ownerFrameId, popupId: this._id, @@ -448,7 +444,7 @@ class Popup { return dark ? 'dark' : 'light'; } - async _invokeApi(action, params={}) { + async _invoke(action, params={}) { const contentWindow = this._frame.contentWindow; if (this._frameClient === null || !this._frameClient.isConnected() || contentWindow === null) { return; } @@ -456,7 +452,16 @@ class Popup { return await api.crossFrame.invoke(this._frameClient.frameId, 'popupMessage', message); } - _invokeWindowApi(action, params={}) { + async _invokeSafe(action, params={}, defaultReturnValue) { + try { + return await this._invoke(action, params); + } catch (e) { + if (!yomichan.isExtensionUnloaded) { throw e; } + return defaultReturnValue; + } + } + + _invokeWindow(action, params={}) { const contentWindow = this._frame.contentWindow; if (this._frameClient === null || !this._frameClient.isConnected() || contentWindow === null) { return; } @@ -465,7 +470,7 @@ class Popup { } _onExtensionUnloaded() { - this._invokeWindowApi('extensionUnloaded'); + this._invokeWindow('extensionUnloaded'); } _getFrameParentElement() { |