diff options
author | Omar Rizwan <omar@omar.website> | 2021-02-14 16:45:07 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-14 16:45:07 -0800 |
commit | 5350b73c2a68dae4f822d06e70897ef57031346d (patch) | |
tree | 39d35441314690e45235af7e2ecee91c92a19264 /extension/background.js | |
parent | d7f462e96415fcbb265cdaac854ddfc47b3482ca (diff) | |
parent | 0f2ab4b4de7e828757091e323be1caab0a70b770 (diff) | |
download | TabFS-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.js | 35 |
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)}); |