aboutsummaryrefslogtreecommitdiff
path: root/background/storage_server.js
diff options
context:
space:
mode:
authorWojtek Kosior <wk@koszkonutek-tmp.pl.eu.org>2021-05-12 16:00:09 +0200
committerWojtek Kosior <wk@koszkonutek-tmp.pl.eu.org>2021-05-12 16:00:09 +0200
commit7f368d46ea06164da025c1ac4ed9a65ad23b25ef (patch)
treee5b740ebcb3cdc58e9c87f25556c20d8bfdccadd /background/storage_server.js
parent89db6823fae5099816732c3cd2ba39700c1c4607 (diff)
downloadbrowser-extension-7f368d46ea06164da025c1ac4ed9a65ad23b25ef.tar.gz
browser-extension-7f368d46ea06164da025c1ac4ed9a65ad23b25ef.zip
stop using js modules
Diffstat (limited to 'background/storage_server.js')
-rw-r--r--background/storage_server.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/background/storage_server.js b/background/storage_server.js
new file mode 100644
index 0000000..05f616b
--- /dev/null
+++ b/background/storage_server.js
@@ -0,0 +1,65 @@
+/**
+* Myext storage through connection (server side)
+*
+* Copyright (C) 2021 Wojtek Kosior
+*
+* Dual-licensed under:
+* - 0BSD license
+* - GPLv3 or (at your option) any later version
+*/
+
+"use strict";
+
+(() => {
+ const listen_for_connection = window.listen_for_connection;
+ const get_storage = window.get_storage;
+ const TYPE_PREFIX = window.TYPE_PREFIX;
+ const CONNECTION_TYPE = window.CONNECTION_TYPE;
+
+ var storage;
+
+ async function handle_remote_call(port, message)
+ {
+ let [call_id, func, args] = message;
+
+ try {
+ let result = await Promise.resolve(storage[func](...args));
+ port.postMessage({call_id, result});
+ } catch (error) {
+ error = error + '';
+ port.postMessage({call_id, error});
+ }
+ }
+
+ function remove_storage_listener(cb) {
+ storage.remove_change_listener(cb);
+ }
+
+ function new_connection(port)
+ {
+ console.log("new remote storage connection!");
+
+ port.postMessage({
+ [TYPE_PREFIX.SCRIPT] : storage.get_all(TYPE_PREFIX.SCRIPT),
+ [TYPE_PREFIX.BUNDLE] : storage.get_all(TYPE_PREFIX.BUNDLE),
+ [TYPE_PREFIX.PAGE] : storage.get_all(TYPE_PREFIX.PAGE)
+ });
+
+ let handle_change = change => port.postMessage(change);
+
+ storage.add_change_listener(handle_change);
+
+ port.onMessage.addListener(m => handle_remote_call(port, m));
+ port.onDisconnect.addListener(() =>
+ remove_storage_listener(handle_change));
+ }
+
+ async function start()
+ {
+ storage = await get_storage();
+
+ listen_for_connection(CONNECTION_TYPE.REMOTE_STORAGE, new_connection);
+ }
+
+ window.start_storage_server = start;
+})();