diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-05-08 19:04:53 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-08 19:04:53 -0400 |
commit | b936c3e4b1bc993e535b02dee91bf6afc15a3564 (patch) | |
tree | 389b05a78e4b1d8f4d6184516d8418b0816f3d63 /ext/fg/js/frontend-api-receiver.js | |
parent | b972f8cbf671c0e09603d54153a6344b105f41d9 (diff) |
Popup proxy host refactor (#516)
* Rename PopupProxyHost to PopupFactory
* Update FrontendApiReceiver to support non-async handlers
* Make some functions non-async
* Make setCustomCss non-async
* Make setContentScale non-async
* Remove static
* Rename variables
* Pass frameId into PopupFactory's constructor
* Change FrontendApiReceiver source from popup-proxy-host to popup-factor
* Rename _invokeHostApi to _invoke
* Rename PopupProxy.getHostUrl to getUrl
Diffstat (limited to 'ext/fg/js/frontend-api-receiver.js')
-rw-r--r-- | ext/fg/js/frontend-api-receiver.js | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/ext/fg/js/frontend-api-receiver.js b/ext/fg/js/frontend-api-receiver.js index c5bb58af..3fa9e8b6 100644 --- a/ext/fg/js/frontend-api-receiver.js +++ b/ext/fg/js/frontend-api-receiver.js @@ -17,9 +17,9 @@ class FrontendApiReceiver { - constructor(source='', handlers=new Map()) { + constructor(source, messageHandlers) { this._source = source; - this._handlers = handlers; + this._messageHandlers = messageHandlers; } prepare() { @@ -35,14 +35,29 @@ class FrontendApiReceiver { _onMessage(port, {id, action, params, target, senderId}) { if (target !== this._source) { return; } - const handler = this._handlers.get(action); - if (typeof handler !== 'function') { return; } + const messageHandler = this._messageHandlers.get(action); + if (typeof messageHandler === 'undefined') { return; } + + const {handler, async} = messageHandler; this._sendAck(port, id, senderId); - this._invokeHandler(handler, params, port, id, senderId); + if (async) { + this._invokeHandlerAsync(handler, params, port, id, senderId); + } else { + this._invokeHandler(handler, params, port, id, senderId); + } + } + + _invokeHandler(handler, params, port, id, senderId) { + try { + const result = handler(params); + this._sendResult(port, id, senderId, {result}); + } catch (error) { + this._sendResult(port, id, senderId, {error: errorToJson(error)}); + } } - async _invokeHandler(handler, params, port, id, senderId) { + async _invokeHandlerAsync(handler, params, port, id, senderId) { try { const result = await handler(params); this._sendResult(port, id, senderId, {result}); |