From 31c91f8ee212629fbeb8ae39ac2217cbdbfd16a3 Mon Sep 17 00:00:00 2001
From: David Byers <david.byers@liu.se>
Date: Sat, 20 Feb 2021 13:50:27 +0100
Subject: [PATCH] Chrome support.

---
 chrome/BUILD                |  1 +
 edge/BUILD                  |  2 +-
 edge/manifest.override.json |  6 +++++-
 firefox/manifest.merge.json |  1 +
 scripts/build.sh            |  2 +-
 shared/menu.js              | 20 +++++++++++++++++++-
 6 files changed, 28 insertions(+), 4 deletions(-)
 create mode 100644 chrome/BUILD

diff --git a/chrome/BUILD b/chrome/BUILD
new file mode 100644
index 0000000..c180dd6
--- /dev/null
+++ b/chrome/BUILD
@@ -0,0 +1 @@
+source edge/BUILD
diff --git a/edge/BUILD b/edge/BUILD
index cbfeb4d..05cc127 100644
--- a/edge/BUILD
+++ b/edge/BUILD
@@ -1,5 +1,5 @@
 build --source firefox \
-      --target edge \
+      --target $target \
       --override "edge/manifest.override.json" \
       --ext zip
 
diff --git a/edge/manifest.override.json b/edge/manifest.override.json
index 8e28306..e597657 100644
--- a/edge/manifest.override.json
+++ b/edge/manifest.override.json
@@ -3,5 +3,9 @@
 	"16": "icon16x16.png",
         "32": "icon32x32.png",
 	"128": "icon128x128.png"
-    }
+    },
+    "permissions": [
+	"clipboardWrite",
+	"contextMenus"
+    ]
 }
diff --git a/firefox/manifest.merge.json b/firefox/manifest.merge.json
index 5e26fd5..2500958 100644
--- a/firefox/manifest.merge.json
+++ b/firefox/manifest.merge.json
@@ -1,6 +1,7 @@
 {
     "background": {
         "scripts": [
+	    "links.js",
 	    "menu.js"
         ]
     },
diff --git a/scripts/build.sh b/scripts/build.sh
index 1a33e4b..9b12a88 100644
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -62,7 +62,7 @@ parse_args() {
 }
 
 setup_globals() {
-    TARGETS=(thunderbird firefox edge)
+    TARGETS=(thunderbird firefox edge chrome)
     BASEDIR="$( cd "$(dirname "${BASH_SOURCE[0]}")/.." >/dev/null 2>&1 && pwd )"
 
     BUILDDIR="$BASEDIR/build"
diff --git a/shared/menu.js b/shared/menu.js
index 8e5f4de..22d58cd 100644
--- a/shared/menu.js
+++ b/shared/menu.js
@@ -21,6 +21,24 @@
 
 // Context menu
 
+/*
+ * Workaround for Chrome
+ */
+async function copyToClipboard(text) {
+    try {
+	await navigator.clipboard.writeText(text);
+    }
+    catch {
+	const textArea = document.createElement('textarea');
+	document.body.append(textArea);
+	textArea.textContent = text;
+	textArea.select();
+	document.execCommand('copy');
+	textArea.remove();
+    }
+}
+
+
 /*
  * Minimal polyfill for Chrome
  */
@@ -41,6 +59,6 @@ browser.menus.create({
 
 browser.menus.onClicked.addListener((info, tab) => {
     if (info.menuItemId == "liu-safelinks-copy") {
-	navigator.clipboard.writeText(untangleLink(info.linkUrl));
+	copyToClipboard(untangleLink(info.linkUrl));
     }
 });
-- 
GitLab