diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-07-11 15:20:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-11 15:20:00 -0400 |
commit | ec42a7e4d61dc30c2839a7ff7be44bec131127a5 (patch) | |
tree | 73d0221a3aebab8bf786012d1a61f14483b59df8 /ext/bg/js/backend.js | |
parent | 8389cd8ba27f328123fb73e72b24e69a4a6de2c1 (diff) |
Message handler refactor (#660)
* Refactor searchQueryUpdate action
* Use standard message handler style
* Use name "promiseOrResult" for consistency
* Use standard message handler convention for Yomichan message handlers
* Use common message handler invoker
Diffstat (limited to 'ext/bg/js/backend.js')
-rw-r--r-- | ext/bg/js/backend.js | 54 |
1 files changed, 26 insertions, 28 deletions
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 6e594f9b..07c32fa2 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -294,28 +294,16 @@ class Backend { const messageHandler = this._messageHandlers.get(action); if (typeof messageHandler === 'undefined') { return false; } - const {handler, async, contentScript} = messageHandler; - - try { - if (!contentScript) { + if (!messageHandler.contentScript) { + try { this._validatePrivilegedMessageSender(sender); - } - - const promiseOrResult = handler(params, sender); - if (async) { - promiseOrResult.then( - (result) => callback({result}), - (error) => callback({error: errorToJson(error)}) - ); - return true; - } else { - callback({result: promiseOrResult}); + } catch (error) { + callback({error: errorToJson(error)}); return false; } - } catch (error) { - callback({error: errorToJson(error)}); - return false; } + + return yomichan.invokeMessageHandler(messageHandler, params, callback, sender); } _onConnect(port) { @@ -814,11 +802,7 @@ class Backend { if (tab !== null) { await this._focusTab(tab); if (queryParams.query) { - await new Promise((resolve) => chrome.tabs.sendMessage( - tab.id, - {action: 'searchQueryUpdate', params: {text: queryParams.query}}, - resolve - )); + await this._updateSearchQuery(tab.id, queryParams.query); } return true; } @@ -882,6 +866,21 @@ class Backend { // Utilities + _updateSearchQuery(tabId, text) { + new Promise((resolve, reject) => { + const callback = (response) => { + try { + resolve(yomichan.getMessageResponseResult(response)); + } catch (error) { + reject(error); + } + }; + + const message = {action: 'updateSearchQuery', params: {text}}; + chrome.tabs.sendMessage(tabId, message, callback); + }); + } + _sendMessageAllTabs(action, params={}) { const callback = () => this._checkLastError(chrome.runtime.lastError); chrome.tabs.query({}, (tabs) => { @@ -1286,11 +1285,10 @@ class Backend { return new Promise((resolve) => { chrome.tabs.sendMessage(tab.id, {action: 'getUrl'}, {frameId: 0}, (response) => { let url = null; - if (!chrome.runtime.lastError) { - url = (response !== null && typeof response === 'object' && !Array.isArray(response) ? response.url : null); - if (url !== null && typeof url !== 'string') { - url = null; - } + try { + url = yomichan.getMessageResponseResult(response); + } catch (error) { + // NOP } resolve({tab, url}); }); |