aboutsummaryrefslogtreecommitdiff
path: root/e2e/ambassador/src/content
diff options
context:
space:
mode:
Diffstat (limited to 'e2e/ambassador/src/content')
-rw-r--r--e2e/ambassador/src/content/index.js37
-rw-r--r--e2e/ambassador/src/content/ipc.js40
2 files changed, 77 insertions, 0 deletions
diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js
new file mode 100644
index 0000000..8573d66
--- /dev/null
+++ b/e2e/ambassador/src/content/index.js
@@ -0,0 +1,37 @@
+import {
+ WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET,
+ TABS_CREATE,
+ EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP,
+} from '../shared/messages';
+import * as ipc from './ipc';
+
+ipc.receivePageMessage((message) => {
+ switch (message.type) {
+ case WINDOWS_CREATE:
+ case WINDOWS_REMOVE:
+ case WINDOWS_GET:
+ case TABS_CREATE:
+ case EVENT_KEYPRESS:
+ case EVENT_KEYDOWN:
+ case EVENT_KEYUP:
+ return ipc.sendToBackground(message);
+ }
+});
+
+ipc.receiveBackgroundMesssage((message) => {
+ switch (message.type) {
+ case EVENT_KEYPRESS:
+ document.body.dispatchEvent(
+ new KeyboardEvent('keypress', { 'key': message.key }));
+ break;
+ case EVENT_KEYDOWN:
+ document.body.dispatchEvent(
+ new KeyboardEvent('keydown', { 'key': message.key }));
+ break;
+ case EVENT_KEYUP:
+ document.body.dispatchEvent(
+ new KeyboardEvent('keyup', { 'key': message.key }));
+ break;
+ }
+ return Promise.resolve({});
+});
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,
+};