From 861ba95deec6c61a951f95422cf2589df931d017 Mon Sep 17 00:00:00 2001
From: Thomas Rientjes <synzvato@protonmail.com>
Date: Sun, 10 Dec 2017 18:27:21 -0300
Subject: [PATCH] Improve cross-browser compatibility

---
 core/main.js          | 16 +---------------
 core/state-manager.js | 27 +++++++++++++++++----------
 pages/popup/popup.css | 11 +++++++++++
 3 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/core/main.js b/core/main.js
index 7869946..d562f7c 100644
--- a/core/main.js
+++ b/core/main.js
@@ -94,20 +94,6 @@ chrome.runtime.getPlatformInfo(function (information) {
     main.operatingSystem = information.os;
 });
 
-if (typeof chrome.browserAction.setBadgeBackgroundColor !== 'function') {
-
-    chrome.browserAction.setBadgeBackgroundColor = function () {};
-    chrome.browserAction.setBadgeText = function () {};
-
-    chrome.browserAction.onClicked.addListener(function () {
-
-        chrome.tabs.create({
-            'url': chrome.extension.getURL('pages/popup/popup.html'),
-            'active': false
-        });
-    });
-}
-
-chrome.browserAction.setBadgeBackgroundColor({
+wrappers.setBadgeBackgroundColor({
     'color': [74, 130, 108, 255]
 });
diff --git a/core/state-manager.js b/core/state-manager.js
index 2728d0a..43bf38b 100644
--- a/core/state-manager.js
+++ b/core/state-manager.js
@@ -37,14 +37,14 @@ stateManager.registerInjection = function (tabIdentifier, injection) {
 
         if (injectionCount > 0) {
 
-            chrome.browserAction.setBadgeText({
+            wrappers.setBadgeText({
                 'tabId': tabIdentifier,
                 'text': injectionCount.toString()
             });
 
         } else {
 
-            chrome.browserAction.setBadgeText({
+            wrappers.setBadgeText({
                 'tabId': tabIdentifier,
                 'text': ''
             });
@@ -114,12 +114,8 @@ stateManager._createTab = function (tab) {
 
     chrome.webRequest.onBeforeRequest.addListener(function (requestDetails) {
 
-        return new Promise((resolve) => {
-
-            browser.tabs.get(tabIdentifier).then(function (tab) {
-                resolve(interceptor.handleRequest(requestDetails, tabIdentifier, tab));
-            });
-        });
+        let tab = stateManager.tabs[tabIdentifier].details || {};
+        return interceptor.handleRequest(requestDetails, tabIdentifier, tab);
 
     }, requestFilters, [WebRequest.BLOCKING]);
 };
@@ -141,7 +137,7 @@ stateManager._updateTab = function (details) {
 
     if (stateManager.showIconBadge === true) {
 
-        chrome.browserAction.setBadgeText({
+        wrappers.setBadgeText({
             'tabId': tabIdentifier,
             'text': ''
         });
@@ -203,7 +199,7 @@ stateManager._handleStorageChanged = function (changes) {
 
 stateManager._removeIconBadgeFromTab = function (tab) {
 
-    chrome.browserAction.setBadgeText({
+    wrappers.setBadgeText({
         'tabId': tab.id,
         'text': ''
     });
@@ -238,6 +234,17 @@ chrome.storage.local.get('showIconBadge', function (items) {
 chrome.tabs.onCreated.addListener(stateManager._createTab);
 chrome.tabs.onRemoved.addListener(stateManager._removeTab);
 
+chrome.webRequest.onBeforeRequest.addListener(function (requestDetails) {
+
+    if (requestDetails.tabId !== -1) {
+
+        stateManager.tabs[requestDetails.tabId].details = {
+            'url': requestDetails.url
+        };
+    }
+
+}, {'types': ['main_frame'], 'urls': [Address.ANY]});
+
 chrome.webNavigation.onCommitted.addListener(stateManager._updateTab, {
     'url': [{'urlContains': ':'}]
 });
diff --git a/pages/popup/popup.css b/pages/popup/popup.css
index 204c037..37c2c59 100644
--- a/pages/popup/popup.css
+++ b/pages/popup/popup.css
@@ -247,3 +247,14 @@ footer {
     font-style: italic;
     font-weight: 400;
 }
+
+/**
+ * Compatibility
+ */
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+
+    body {
+        width: 348px;
+    }
+}
-- 
GitLab