aboutsummaryrefslogtreecommitdiffstats
path: root/app/vendor
diff options
context:
space:
mode:
Diffstat (limited to 'app/vendor')
-rw-r--r--app/vendor/trezor/content-script.js21
-rw-r--r--app/vendor/trezor/usb-permissions.js50
2 files changed, 71 insertions, 0 deletions
diff --git a/app/vendor/trezor/content-script.js b/app/vendor/trezor/content-script.js
new file mode 100644
index 000000000..a21332f46
--- /dev/null
+++ b/app/vendor/trezor/content-script.js
@@ -0,0 +1,21 @@
+/*
+Passing messages from background script to popup
+*/
+
+let port = chrome.runtime.connect({ name: 'trezor-connect' });
+port.onMessage.addListener(message => {
+ window.postMessage(message, window.location.origin);
+});
+port.onDisconnect.addListener(d => {
+ port = null;
+});
+
+/*
+Passing messages from popup to background script
+*/
+
+window.addEventListener('message', event => {
+ if (port && event.source === window && event.data) {
+ port.postMessage(event.data);
+ }
+});
diff --git a/app/vendor/trezor/usb-permissions.js b/app/vendor/trezor/usb-permissions.js
new file mode 100644
index 000000000..9de47e0a1
--- /dev/null
+++ b/app/vendor/trezor/usb-permissions.js
@@ -0,0 +1,50 @@
+/*
+Handling messages from usb permissions iframe
+*/
+
+const switchToPopupTab = (event) => {
+
+ window.removeEventListener('beforeunload', switchToPopupTab);
+
+ if (!event) {
+ // triggered from 'usb-permissions-close' message
+ // switch tab to previous index and close current
+ chrome.tabs.query({
+ currentWindow: true,
+ active: true,
+ }, (current) => {
+ if (current.length < 0) return;
+ chrome.tabs.query({
+ index: current[0].index - 1
+ }, popup => {
+ if (popup.length < 0) return;
+ chrome.tabs.update(popup[0].id, { active: true });
+ })
+ chrome.tabs.remove(current[0].id);
+ });
+ return;
+ }
+
+ // triggered from 'beforeunload' event
+ // find tab by popup pattern and switch to it
+ chrome.tabs.query({
+ url: "*://connect.trezor.io/*/popup.html"
+ }, (tabs) => {
+ if (tabs.length < 0) return;
+ chrome.tabs.update(tabs[0].id, { active: true });
+ });
+}
+
+window.addEventListener('message', event => {
+ if (event.data === 'usb-permissions-init') {
+ const iframe = document.getElementById('trezor-usb-permissions');
+ iframe.contentWindow.postMessage({
+ type: 'usb-permissions-init',
+ extension: chrome.runtime.id,
+ }, '*');
+ } else if (event.data === 'usb-permissions-close') {
+ switchToPopupTab();
+ }
+});
+
+window.addEventListener('beforeunload', switchToPopupTab); \ No newline at end of file