aboutsummaryrefslogtreecommitdiff
path: root/e2e/ambassador/src/content
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2018-05-01 13:51:07 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2018-05-01 13:51:07 +0900
commit4d7c24f38a6861e1d498b6e7dd5c7be2d1a0ad15 (patch)
tree0948f730a25eeda127c56a0f01009f14d066e4dc /e2e/ambassador/src/content
parent177940981ed9c4f096ad7db20f0b7ee044fd7b17 (diff)
parentfb8a0f36aa4d070df936cc7598ef8dd988ee1b15 (diff)
Merge remote-tracking branch 'origin/master' into background-adjacent-tabs
Diffstat (limited to 'e2e/ambassador/src/content')
-rw-r--r--e2e/ambassador/src/content/events.js31
-rw-r--r--e2e/ambassador/src/content/index.js30
-rw-r--r--e2e/ambassador/src/content/ipc.js40
-rw-r--r--e2e/ambassador/src/content/scrolls.js20
4 files changed, 121 insertions, 0 deletions
diff --git a/e2e/ambassador/src/content/events.js b/e2e/ambassador/src/content/events.js
new file mode 100644
index 0000000..1e45909
--- /dev/null
+++ b/e2e/ambassador/src/content/events.js
@@ -0,0 +1,31 @@
+const keypress = (opts) => {
+ let event = new KeyboardEvent('keypress', {
+ key: opts.key,
+ altKey: opts.altKey,
+ shiftKey: opts.shiftKey,
+ ctrlKey: opts.ctrlKey
+ });
+ document.body.dispatchEvent(event);
+};
+
+const keydown = (opts) => {
+ let event = new KeyboardEvent('keydown', {
+ key: opts.key,
+ altKey: opts.altKey,
+ shiftKey: opts.shiftKey,
+ ctrlKey: opts.ctrlKey
+ });
+ document.body.dispatchEvent(event);
+};
+
+const keyup = (opts) => {
+ let event = new KeyboardEvent('keyup', {
+ key: opts.key,
+ altKey: opts.altKey,
+ shiftKey: opts.shiftKey,
+ ctrlKey: opts.ctrlKey
+ });
+ document.body.dispatchEvent(event);
+};
+
+export { keypress, keydown, keyup };
diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js
new file mode 100644
index 0000000..fd19136
--- /dev/null
+++ b/e2e/ambassador/src/content/index.js
@@ -0,0 +1,30 @@
+import {
+ EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP,
+ SCROLL_GET, SCROLL_SET,
+} from '../shared/messages';
+import * as ipc from './ipc';
+import * as events from './events';
+import * as scrolls from './scrolls';
+
+ipc.receivePageMessage((message) => {
+ return ipc.sendToBackground(message);
+});
+
+ipc.receiveBackgroundMesssage((message) => {
+ switch (message.type) {
+ case EVENT_KEYPRESS:
+ events.keypress(message);
+ break;
+ case EVENT_KEYDOWN:
+ events.keydown(message);
+ break;
+ case EVENT_KEYUP:
+ events.keyup(message);
+ break;
+ case SCROLL_GET:
+ return Promise.resolve(scrolls.get());
+ case SCROLL_SET:
+ return Promise.resolve(scrolls.set(message.x, message.y));
+ }
+ 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,
+};
diff --git a/e2e/ambassador/src/content/scrolls.js b/e2e/ambassador/src/content/scrolls.js
new file mode 100644
index 0000000..4227cf7
--- /dev/null
+++ b/e2e/ambassador/src/content/scrolls.js
@@ -0,0 +1,20 @@
+const get = () => {
+ let element = document.documentElement;
+ return {
+ xMax: element.scrollWidth - element.clientWidth,
+ yMax: element.scrollHeight - element.clientHeight,
+ x: element.scrollLeft,
+ y: element.scrollTop,
+ frameWidth: element.clientWidth,
+ frameHeight: element.clientHeight,
+ };
+};
+
+const set = (x, y) => {
+ let element = document.documentElement;
+ element.scrollLeft = x;
+ element.scrollTop = y;
+ return get();
+};
+
+export { get, set };