]> git.r.bdr.sh - rbdr/junction/blobdiff - extension/junction.js
Add safari code
[rbdr/junction] / extension / junction.js
index 16bc9f379c318f619e930fd57fb5454c5290df52..3e8b4d9e4996b50c738d476df389573ad0e4d09d 100644 (file)
@@ -1,18 +1,18 @@
 const internals = {
-
-  promisesSupported: !!(window.browser),
+  promisesSupported: !!window.browser,
   port: null,
+  currentUrl: null,
 
   icons: {
     call: {
-      16: 'icons/action-16.png',
-      32: 'icons/action-32.png'
+      16: "icons/action-16.png",
+      32: "icons/action-32.png",
     },
 
     hangUp: {
-      16: 'icons/hang_up-16.png',
-      32: 'icons/hang_up-32.png'
-    }
+      16: "icons/hang_up-16.png",
+      32: "icons/hang_up-32.png",
+    },
   },
 
   onClick() {
@@ -24,89 +24,90 @@ const internals = {
   },
 
   onConnect(port) {
-
     internals.port = port;
     port.onDisconnect.addListener(internals.onDisconnect);
     port.onMessage.addListener(internals.onMessage);
     port.postMessage({
-      action: 'joinAudioCall',
+      action: "joinAudioCall",
       data: {
-        tada: internals.getRoot().runtime.getURL('sounds/tada.wav')
-      }
+        currentUrl: internals.currentUrl,
+        tada: internals.getRoot().runtime.getURL("sounds/tada.wav"),
+      },
     });
     internals.getRoot().browserAction.enable();
-    internals.setIcon('hangUp');
+    internals.setIcon("hangUp");
   },
 
   onMessage(message) {
-
-    if (message.action === 'error') {
-      internals.getRoot().browserAction.setBadgeText({ text: 'x' }, () => {});
+    if (message.action === "error") {
+      internals.getRoot().browserAction.setBadgeText({ text: "x" }, () => {});
     }
   },
 
   onDisconnect() {
-    internals.getRoot().browserAction.setBadgeText({ text: '' }, () => {});
-    internals.setIcon('call');
+    internals.getRoot().browserAction.setBadgeText({ text: "" }, () => {});
+    internals.setIcon("call");
+    internals.currentUrl = null;
     internals.port = null;
     internals.getRoot().browserAction.enable();
   },
 
   async joinAudioCall() {
-
     internals.getRoot().browserAction.disable();
     const activeTabs = await internals.getActiveTabs();
-    const execution = await internals.getRoot().tabs.executeScript(activeTabs[0].id, {
-      file: '/content_script.js'
-    });
 
-    if (!execution[0]) {
+    internals.currentUrl = activeTabs[0].url;
+    const execution = await internals.getRoot().tabs.executeScript(
+      activeTabs[0].id,
+      {
+        file: "/build/content_script.js",
+      },
+      () => {
+        if (internals.getRoot().runtime.lastError) {
+          internals.onDisconnect();
+        }
+      },
+    );
+
+    if (execution && !execution[0]) {
       internals.onDisconnect();
     }
   },
-
   hangUp() {
-
     internals.getRoot().browserAction.disable();
     internals.port.postMessage({
-      action: 'hangUp'
+      action: "hangUp",
     });
   },
 
   isInCall() {
-
-    return !!(internals.port);
+    return !!internals.port;
   },
 
   setIcon(iconSet) {
-
     internals.getRoot().browserAction.setIcon({
-      path: internals.icons[iconSet]
+      path: internals.icons[iconSet],
     });
   },
 
   getRoot() {
-
     return window.browser || window.chrome;
   },
 
   // Chrome doesn't yet implement the promise based tabs.query :'(
 
   getActiveTabs() {
-
     const query = {
       currentWindow: true,
-      active: true
+      active: true,
     };
 
     if (internals.promisesSupported) {
       return internals.getRoot().tabs.query(query);
     }
 
-    return new Promise((resolve, reject) => {
-
+    return new Promise((resolve) => {
       internals.getRoot().tabs.query(query, (tabs) => {
-
         return resolve(tabs);
       });
     });