aboutsummaryrefslogtreecommitdiff
path: root/ext/bg/js/backend.js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-07-11 15:20:00 -0400
committerGitHub <noreply@github.com>2020-07-11 15:20:00 -0400
commitec42a7e4d61dc30c2839a7ff7be44bec131127a5 (patch)
tree73d0221a3aebab8bf786012d1a61f14483b59df8 /ext/bg/js/backend.js
parent8389cd8ba27f328123fb73e72b24e69a4a6de2c1 (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.js54
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});
});