From 5ea353b411fa26a9b561a88b6764da85004d630d Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 10:36:41 +0300 Subject: [PATCH 01/11] Remove /s flag from regexs (Firefox does not support it) --- chrome/content_script.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chrome/content_script.js b/chrome/content_script.js index e1b4c90..6f38f35 100644 --- a/chrome/content_script.js +++ b/chrome/content_script.js @@ -104,11 +104,11 @@ var injectedJS = function(pushstate, addeventlistener) { }); var c = function(listener) { var listener_str = listener.toString() - if(listener_str.match(/\.deep.*apply.*captureException/s)) return 'raven'; - else if(listener_str.match(/arguments.*(start|typeof).*err.*finally.*end/s) && listener["nr@original"] && typeof listener["nr@original"] == "function") return 'newrelic'; - else if(listener_str.match(/rollbarContext.*rollbarWrappedError/s) && listener._isWrap && + if(listener_str.match(/\.deep.*apply.*captureException/)) return 'raven'; + else if(listener_str.match(/arguments.*(start|typeof).*err.*finally.*end/) && listener["nr@original"] && typeof listener["nr@original"] == "function") return 'newrelic'; + else if(listener_str.match(/rollbarContext.*rollbarWrappedError/) && listener._isWrap && (typeof listener._wrapped == "function" || typeof listener._rollbar_wrapped == "function")) return 'rollbar'; - else if(listener_str.match(/autoNotify.*(unhandledException|notifyException)/s) && typeof listener.bugsnag == "function") return 'bugsnag'; + else if(listener_str.match(/autoNotify.*(unhandledException|notifyException)/) && typeof listener.bugsnag == "function") return 'bugsnag'; return false; } From 1b012c7eaef7cdda942b4362701006e291919a44 Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 10:37:09 +0300 Subject: [PATCH 02/11] Add signature for Firefox support --- chrome/manifest.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/chrome/manifest.json b/chrome/manifest.json index 2d6f321..3b29376 100644 --- a/chrome/manifest.json +++ b/chrome/manifest.json @@ -3,6 +3,12 @@ "name": "postMessage-tracker", "description": "Monitors and indicates postMessage-listeners in the current window.", "version": "1.0.0", + "browser_specific_settings": { + "gecko": { + "id": "karim@karimrahal.com", + "strict_min_version": "57.0" + } + }, "background": { "scripts": [ "background.js" From 4b84dbbc68d16509f5d290cc11f9d122d3a9557f Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 10:38:22 +0300 Subject: [PATCH 03/11] Change popup.js and background.js connection (less buggy in Firefox) --- chrome/background.js | 8 +------- chrome/popup.js | 19 +++++-------------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/chrome/background.js b/chrome/background.js index dfaefdb..637dcc5 100644 --- a/chrome/background.js +++ b/chrome/background.js @@ -88,10 +88,4 @@ chrome.tabs.onActivated.addListener(function(activeInfo) { chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { selectedId = tabs[0].id; refreshCount(); -}); - -chrome.extension.onConnect.addListener(function(port) { - port.onMessage.addListener(function(msg) { - port.postMessage({listeners:tab_listeners}); - }); -}) \ No newline at end of file +}); \ No newline at end of file diff --git a/chrome/popup.js b/chrome/popup.js index 617236a..83bd012 100644 --- a/chrome/popup.js +++ b/chrome/popup.js @@ -1,18 +1,9 @@ -var port = chrome.extension.connect({ - name: "Sample Communication" -}); - - -function loaded() { - port.postMessage("get-stuff"); - port.onMessage.addListener(function(msg) { - console.log("message recieved yea: ", msg); - chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { - selectedId = tabs[0].id; - listListeners(msg.listeners[selectedId]); - }); +chrome.runtime.getBackgroundPage(function (page) { + chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { + selectedId = tabs[0].id; + listListeners(page.tab_listeners[selectedId]); }); -} +}); window.onload = loaded //addEventListener('DOMContentLoaded', loaded); From 40dd294129526c17d7a7c2415dde6255f6671b3d Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 10:57:22 +0300 Subject: [PATCH 04/11] Remove unnecessary onload listener --- chrome/popup.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/chrome/popup.js b/chrome/popup.js index 83bd012..f20dcb5 100644 --- a/chrome/popup.js +++ b/chrome/popup.js @@ -5,9 +5,6 @@ chrome.runtime.getBackgroundPage(function (page) { }); }); -window.onload = loaded -//addEventListener('DOMContentLoaded', loaded); - function listListeners(listeners) { var x = document.getElementById('x'); x.parentElement.removeChild(x); From cf3e02b81997e57d85a1e788604572fabfb50d21 Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 10:59:29 +0300 Subject: [PATCH 05/11] Update version --- chrome/manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chrome/manifest.json b/chrome/manifest.json index 3b29376..7fdc115 100644 --- a/chrome/manifest.json +++ b/chrome/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "postMessage-tracker", "description": "Monitors and indicates postMessage-listeners in the current window.", - "version": "1.0.0", + "version": "1.0.1", "browser_specific_settings": { "gecko": { "id": "karim@karimrahal.com", @@ -39,4 +39,4 @@ "http:\/\/*\/", "https:\/\/*\/" ] -} \ No newline at end of file +} From 149a4b7b78516ae61f3fa25d5f4481943e7b6129 Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 11:04:12 +0300 Subject: [PATCH 06/11] Rename chrome directory (since we now have Firefox support) --- {chrome => src}/background.js | 0 {chrome => src}/content_script.js | 0 {chrome => src}/manifest.json | 0 {chrome => src}/options.html | 0 {chrome => src}/options.js | 0 {chrome => src}/popup.html | 0 {chrome => src}/popup.js | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename {chrome => src}/background.js (100%) rename {chrome => src}/content_script.js (100%) rename {chrome => src}/manifest.json (100%) rename {chrome => src}/options.html (100%) rename {chrome => src}/options.js (100%) rename {chrome => src}/popup.html (100%) rename {chrome => src}/popup.js (100%) diff --git a/chrome/background.js b/src/background.js similarity index 100% rename from chrome/background.js rename to src/background.js diff --git a/chrome/content_script.js b/src/content_script.js similarity index 100% rename from chrome/content_script.js rename to src/content_script.js diff --git a/chrome/manifest.json b/src/manifest.json similarity index 100% rename from chrome/manifest.json rename to src/manifest.json diff --git a/chrome/options.html b/src/options.html similarity index 100% rename from chrome/options.html rename to src/options.html diff --git a/chrome/options.js b/src/options.js similarity index 100% rename from chrome/options.js rename to src/options.js diff --git a/chrome/popup.html b/src/popup.html similarity index 100% rename from chrome/popup.html rename to src/popup.html diff --git a/chrome/popup.js b/src/popup.js similarity index 100% rename from chrome/popup.js rename to src/popup.js From f7e6d303be1db5bbe8f974674338599f9e59930c Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 11:05:24 +0300 Subject: [PATCH 07/11] Add signed xpi for Firefox --- postmessage_tracker-1.0.1-fx.xpi | Bin 0 -> 14082 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 postmessage_tracker-1.0.1-fx.xpi diff --git a/postmessage_tracker-1.0.1-fx.xpi b/postmessage_tracker-1.0.1-fx.xpi new file mode 100644 index 0000000000000000000000000000000000000000..3a6f6aa79014a8a6e99472e8dbdd73298757f4f8 GIT binary patch literal 14082 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 W3Hp^o001yw$NE Date: Sat, 2 May 2020 12:21:31 +0300 Subject: [PATCH 08/11] Revert "Remove /s flag from regexs (Firefox does not support it)" This reverts commit 5ea353b411fa26a9b561a88b6764da85004d630d. --- src/content_script.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content_script.js b/src/content_script.js index 6f38f35..e1b4c90 100644 --- a/src/content_script.js +++ b/src/content_script.js @@ -104,11 +104,11 @@ var injectedJS = function(pushstate, addeventlistener) { }); var c = function(listener) { var listener_str = listener.toString() - if(listener_str.match(/\.deep.*apply.*captureException/)) return 'raven'; - else if(listener_str.match(/arguments.*(start|typeof).*err.*finally.*end/) && listener["nr@original"] && typeof listener["nr@original"] == "function") return 'newrelic'; - else if(listener_str.match(/rollbarContext.*rollbarWrappedError/) && listener._isWrap && + if(listener_str.match(/\.deep.*apply.*captureException/s)) return 'raven'; + else if(listener_str.match(/arguments.*(start|typeof).*err.*finally.*end/s) && listener["nr@original"] && typeof listener["nr@original"] == "function") return 'newrelic'; + else if(listener_str.match(/rollbarContext.*rollbarWrappedError/s) && listener._isWrap && (typeof listener._wrapped == "function" || typeof listener._rollbar_wrapped == "function")) return 'rollbar'; - else if(listener_str.match(/autoNotify.*(unhandledException|notifyException)/) && typeof listener.bugsnag == "function") return 'bugsnag'; + else if(listener_str.match(/autoNotify.*(unhandledException|notifyException)/s) && typeof listener.bugsnag == "function") return 'bugsnag'; return false; } From 1f0440400762d6c69b416ed43d441f252078a51b Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 12:36:33 +0300 Subject: [PATCH 09/11] Add /s flag equivalent (for Firefox support) --- src/content_script.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content_script.js b/src/content_script.js index e1b4c90..9bae78a 100644 --- a/src/content_script.js +++ b/src/content_script.js @@ -104,11 +104,11 @@ var injectedJS = function(pushstate, addeventlistener) { }); var c = function(listener) { var listener_str = listener.toString() - if(listener_str.match(/\.deep.*apply.*captureException/s)) return 'raven'; - else if(listener_str.match(/arguments.*(start|typeof).*err.*finally.*end/s) && listener["nr@original"] && typeof listener["nr@original"] == "function") return 'newrelic'; - else if(listener_str.match(/rollbarContext.*rollbarWrappedError/s) && listener._isWrap && + if(listener_str.match(/\.deep[^\x05]*apply[^\x05]*captureException/)) return 'raven'; + else if(listener_str.match(/arguments[^\x05]*(start|typeof)[^\x05]*err[^\x05]*finally[^\x05]*end/) && listener["nr@original"] && typeof listener["nr@original"] == "function") return 'newrelic'; + else if(listener_str.match(/rollbarContext[^\x05]*rollbarWrappedError/) && listener._isWrap && (typeof listener._wrapped == "function" || typeof listener._rollbar_wrapped == "function")) return 'rollbar'; - else if(listener_str.match(/autoNotify.*(unhandledException|notifyException)/s) && typeof listener.bugsnag == "function") return 'bugsnag'; + else if(listener_str.match(/autoNotify[^\x05]*(unhandledException|notifyException)/) && typeof listener.bugsnag == "function") return 'bugsnag'; return false; } From 7cecaeb4ffbf5364ea432fef591922132d504166 Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 12:45:31 +0300 Subject: [PATCH 10/11] Define HTML encoding --- src/options.html | 1 + src/popup.html | 1 + 2 files changed, 2 insertions(+) diff --git a/src/options.html b/src/options.html index 0302117..30b7a15 100644 --- a/src/options.html +++ b/src/options.html @@ -1,4 +1,5 @@ + diff --git a/src/popup.html b/src/popup.html index bcce81c..3c61449 100644 --- a/src/popup.html +++ b/src/popup.html @@ -1,4 +1,5 @@ + From 39859ccc178b7372dc431e7e7243d5d843c354e0 Mon Sep 17 00:00:00 2001 From: karimpwnz Date: Sat, 2 May 2020 12:51:29 +0300 Subject: [PATCH 11/11] Update signed XPI from addons.mozilla.org --- postmessage_tracker-1.0.1-fx.xpi | Bin 14082 -> 14136 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/postmessage_tracker-1.0.1-fx.xpi b/postmessage_tracker-1.0.1-fx.xpi index 3a6f6aa79014a8a6e99472e8dbdd73298757f4f8..4766401038878a6c224917468e9fa9efc559342e 100644 GIT binary patch delta 10888 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 delta 10835 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