diff options
Diffstat (limited to 'e2e/ambassador/src/content/ipc.js')
-rw-r--r-- | e2e/ambassador/src/content/ipc.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/e2e/ambassador/src/content/ipc.js b/e2e/ambassador/src/content/ipc.js new file mode 100644 index 0000000..917623c --- /dev/null +++ b/e2e/ambassador/src/content/ipc.js @@ -0,0 +1,40 @@ +import { METHOD_REQUEST, METHOD_RESPONSE } from '../shared/messages'; + +const sendToBackground = (message) => { + return browser.runtime.sendMessage(message); +}; + +const receiveBackgroundMesssage = (func) => { + return browser.runtime.onMessage.addListener((message) => { + return Promise.resolve(func(message)); + }); +}; + +const receivePageMessage = (func) => { + window.addEventListener('message', (e) => { + let packet = e.data; + if (e.origin !== window.origin || packet.method !== METHOD_REQUEST) { + return; + } + + let resp = { + id: packet.id, + method: METHOD_RESPONSE, + }; + let respMessage = func(packet.message); + if (respMessage instanceof Promise) { + return respMessage.then((data) => { + resp.message = data; + e.source.postMessage(resp, e.origin); + }); + } else if (respMessage) { + resp.message = respMessage; + } + e.source.postMessage(resp, e.origin); + }); +}; + +export { + sendToBackground, receiveBackgroundMesssage, + receivePageMessage, +}; |