diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2018-02-04 19:27:22 +0900 |
---|---|---|
committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2018-02-04 19:27:22 +0900 |
commit | f6f64297aa030cd3fbad4bbb9e322e469bc762e8 (patch) | |
tree | 02ad2374c6e7060c7f13658e7dd4c3c0d99b5b9f /e2e/ambassador/src/content | |
parent | bb5b6d367cdd19a1d81c78cf8a79c47520ca469e (diff) |
first webextension test
Diffstat (limited to 'e2e/ambassador/src/content')
-rw-r--r-- | e2e/ambassador/src/content/index.js | 11 | ||||
-rw-r--r-- | e2e/ambassador/src/content/ipc.js | 31 |
2 files changed, 42 insertions, 0 deletions
diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js index e69de29..dd46688 100644 --- a/e2e/ambassador/src/content/index.js +++ b/e2e/ambassador/src/content/index.js @@ -0,0 +1,11 @@ +import { WINDOWS_CREATE, WINDOWS_REMOVE } from '../shared/messages'; +import * as ipc from './ipc'; + +ipc.receivePageMessage((message) => { + switch (message.type) { + case WINDOWS_CREATE: + return ipc.send(message); + case WINDOWS_REMOVE: + return ipc.send(message); + } +}); diff --git a/e2e/ambassador/src/content/ipc.js b/e2e/ambassador/src/content/ipc.js new file mode 100644 index 0000000..62fcac1 --- /dev/null +++ b/e2e/ambassador/src/content/ipc.js @@ -0,0 +1,31 @@ +import { METHOD_REQUEST, METHOD_RESPONSE } from '../shared/messages'; + +const send = (message) => { + return browser.runtime.sendMessage(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 { send, receivePageMessage }; |