From 997ece4a59d0f90102937229e1a53c5e00271caa Mon Sep 17 00:00:00 2001 From: Khushi5623 Date: Thu, 2 Apr 2026 15:02:12 +0530 Subject: [PATCH 1/5] Improved scan function by removing dependency on runtime messaging and making it more reliable --- packages/extension/src/popup.js | 37 ++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/packages/extension/src/popup.js b/packages/extension/src/popup.js index 304aedd..014d494 100644 --- a/packages/extension/src/popup.js +++ b/packages/extension/src/popup.js @@ -619,34 +619,37 @@ } } - function scan(force) { - showStatus('Getting extensions…'); + function scan(force) { + showStatus('Getting extensions…'); - chrome.runtime.sendMessage({ action: 'getAllExtensions' }, function (all) { + try { + chrome.management.getAll(function (all) { if (chrome.runtime.lastError || !all) { - chrome.management.getAll(function (fallbackAll) { - if (chrome.runtime.lastError) { - hideStatus(); - showError('Cannot access extensions: ' + (chrome.runtime.lastError.message || 'unknown')); - return; - } - var selfId = chrome.runtime.id; - var filtered = []; - for (var j = 0; j < fallbackAll.length; j++) { - if (fallbackAll[j].type === 'extension' && fallbackAll[j].id !== selfId && fallbackAll[j].enabled) filtered.push(fallbackAll[j]); - } - runScanWithExtensions(filtered, force); - }); + hideStatus(); + showError('Cannot access extensions'); return; } + var selfId = chrome.runtime.id; var exts = []; + for (var i = 0; i < all.length; i++) { - if (all[i].enabled) exts.push(all[i]); + if ( + all[i].type === 'extension' && + all[i].id !== selfId && + all[i].enabled + ) { + exts.push(all[i]); + } } + runScanWithExtensions(exts, force); }); + } catch (e) { + hideStatus(); + showError('Unexpected error while scanning'); } +} function runScanWithExtensions(exts, force) { if (!exts || exts.length === 0) { From 683024a1f0d396dc8d1964b9842fbb04f19e6d6e Mon Sep 17 00:00:00 2001 From: Khushi5623 Date: Thu, 2 Apr 2026 15:10:14 +0530 Subject: [PATCH 2/5] Improve error message for invalid extension input --- packages/extension/src/popup.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/extension/src/popup.js b/packages/extension/src/popup.js index 014d494..850b92d 100644 --- a/packages/extension/src/popup.js +++ b/packages/extension/src/popup.js @@ -153,11 +153,10 @@ function handleScanUrlSubmit() { var raw = scanUrlInput && scanUrlInput.value ? scanUrlInput.value.trim() : ''; var extId = extractExtensionIdFromInput(raw); - if (!extId) { - setScanUrlMessage('Enter a Chrome Web Store URL.', 'error'); - return; - } - + if (!extId) { + setScanUrlMessage('Please enter a valid Chrome Web Store URL or Extension ID.', 'error'); + return; +} setScanUrlMessage('Scanning…', ''); setScanSearchLoading(true); if (scanResultsContent) scanResultsContent.hidden = true; From ce4d1fc4664accfec26faefb6c28a7625db1e802 Mon Sep 17 00:00:00 2001 From: Khushi5623 Date: Thu, 2 Apr 2026 15:17:44 +0530 Subject: [PATCH 3/5] Fix esc() function to handle null/undefined safely and prevent UI issues --- packages/extension/src/popup.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/extension/src/popup.js b/packages/extension/src/popup.js index 850b92d..5d1bffa 100644 --- a/packages/extension/src/popup.js +++ b/packages/extension/src/popup.js @@ -274,11 +274,16 @@ return new Promise(function (resolve) { setTimeout(resolve, ms); }); } - function esc(s) { +function esc(s) { + if (s === null || s === undefined) return ''; + try { var d = document.createElement('div'); - d.textContent = s; + d.textContent = String(s); return d.innerHTML; + } catch (e) { + return ''; } +} function getIconUrl(ext) { var icons = ext && ext.icons; From c9471966a8396b9e6475a2d66952dc02566568b2 Mon Sep 17 00:00:00 2001 From: Khushi5623 Date: Thu, 2 Apr 2026 15:33:00 +0530 Subject: [PATCH 4/5] Enhance loading UX by disabling submit button during scan --- packages/extension/src/popup.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/extension/src/popup.js b/packages/extension/src/popup.js index 5d1bffa..882a124 100644 --- a/packages/extension/src/popup.js +++ b/packages/extension/src/popup.js @@ -159,6 +159,9 @@ } setScanUrlMessage('Scanning…', ''); setScanSearchLoading(true); + if (scanUrlSubmit) { + scanUrlSubmit.disabled = true; +} if (scanResultsContent) scanResultsContent.hidden = true; renderScanResult({ @@ -176,6 +179,9 @@ renderScanResult(result); setScanUrlMessage('', ''); setScanSearchLoading(false); + if (scanUrlSubmit) { + scanUrlSubmit.disabled = false; +} return; } @@ -185,6 +191,9 @@ if (triggerResult.status === 'error') { setScanUrlMessage('Could not start scan. Try on the website.', 'error'); setScanSearchLoading(false); + if (scanUrlSubmit) { + scanUrlSubmit.disabled = false; +} return; } if (triggerResult.status === 'completed' || triggerResult.already_scanned) { @@ -193,11 +202,17 @@ renderScanResult(result); setScanUrlMessage('', ''); setScanSearchLoading(false); + if (scanUrlSubmit) { + scanUrlSubmit.disabled = false; +} }); } setScanUrlMessage('Scan in progress…', ''); return waitForScan(extId).then(function (p2) { setScanSearchLoading(false); + if (scanUrlSubmit) { + scanUrlSubmit.disabled = false; +} if (p2._st === 'timeout') { setScanUrlMessage('Scan is taking longer. Check again soon.', 'error'); renderScanResult({ @@ -220,9 +235,15 @@ setScanUrlMessage('Could not fetch results.', 'error'); setScanSearchLoading(false); + if (scanUrlSubmit) { + scanUrlSubmit.disabled = false; +} }).catch(function () { setScanUrlMessage('Network error. Check your connection.', 'error'); setScanSearchLoading(false); + if (scanUrlSubmit) { + scanUrlSubmit.disabled = false; +} }); } From 2faa5dade68cabf8b2f0dd9082b159ac6ca70ef9 Mon Sep 17 00:00:00 2001 From: Khushi5623 Date: Fri, 3 Apr 2026 18:07:33 +0530 Subject: [PATCH 5/5] fix: prevent popup crash by ensuring DOM is loaded before accessing elements --- packages/extension/src/popup.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/extension/src/popup.js b/packages/extension/src/popup.js index 882a124..a847585 100644 --- a/packages/extension/src/popup.js +++ b/packages/extension/src/popup.js @@ -1,6 +1,7 @@ /* ExtensionShield – popup (self-contained, no service worker needed) */ (function () { 'use strict'; + document.addEventListener("DOMContentLoaded", () => { var API = 'https://extensionshield.com'; var CACHE_TTL = 6 * 3600 * 1000; @@ -759,6 +760,7 @@ function esc(s) { nextExt(); } - initTheme(); - scan(false); + initTheme(); +scan(false); +}); })();