summaryrefslogtreecommitdiff
path: root/extension/background.js
diff options
context:
space:
mode:
authorOmar Rizwan <omar@omar.website>2021-02-14 16:45:07 -0800
committerGitHub <noreply@github.com>2021-02-14 16:45:07 -0800
commit5350b73c2a68dae4f822d06e70897ef57031346d (patch)
tree39d35441314690e45235af7e2ecee91c92a19264 /extension/background.js
parentd7f462e96415fcbb265cdaac854ddfc47b3482ca (diff)
parent0f2ab4b4de7e828757091e323be1caab0a70b770 (diff)
downloadTabFS-5350b73c2a68dae4f822d06e70897ef57031346d.tar.gz
TabFS-5350b73c2a68dae4f822d06e70897ef57031346d.zip
Merge pull request #64 from osnr/safari
Safari support
Diffstat (limited to 'extension/background.js')
-rw-r--r--extension/background.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/extension/background.js b/extension/background.js
index 5e487cf..e31a4c4 100644
--- a/extension/background.js
+++ b/extension/background.js
@@ -673,6 +673,10 @@ function findRoute(path) {
let port;
async function onMessage(req) {
+ // Safari / Safari extension app API forces you to adopt their
+ // {name, userInfo} structure for the request.
+ if (req.name === 'ToSafari') req = req.userInfo;
+
if (req.buf) req.buf = atob(req.buf);
console.log('req', req);
@@ -709,6 +713,37 @@ async function onMessage(req) {
};
function tryConnect() {
+ // Safari is very weird -- it has this native app that we have to talk to,
+ // so we poke that app to wake it up, get it to start the TabFS process
+ // and boot a WebSocket, then connect to it.
+ // Is there a better way to do this?
+ if (chrome.runtime.getURL('/').startsWith('safari-web-extension://')) { // Safari-only
+ chrome.runtime.sendNativeMessage('com.rsnous.tabfs', {op: 'safari_did_connect'}, resp => {
+ console.log(resp);
+
+ let socket;
+ function connectSocket(checkAfterTime) {
+ socket = new WebSocket('ws://localhost:9991');
+ socket.addEventListener('message', event => {
+ onMessage(JSON.parse(event.data));
+ });
+
+ port = { postMessage(message) {
+ socket.send(JSON.stringify(message));
+ } };
+
+ setTimeout(() => {
+ if (socket.readyState !== 1) {
+ console.log('ws connection failed, retrying in', checkAfterTime);
+ connectSocket(checkAfterTime * 2);
+ }
+ }, checkAfterTime);
+ }
+ connectSocket(200);
+ });
+ return;
+ }
+
port = chrome.runtime.connectNative('com.rsnous.tabfs');
port.onMessage.addListener(onMessage);
port.onDisconnect.addListener(p => {console.log('disconnect', p)});