From fad57ad18e7ffea32ed56a1eb6cf03fd0333c4ca Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Thu, 8 May 2025 13:30:34 +0200 Subject: [PATCH 01/11] Fix reloading page no longer working --- src/js/background.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/js/background.js b/src/js/background.js index 6a7f35c..5032798 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -29,6 +29,7 @@ let hasAPIs = chrome.webRequest; */ chrome.browserAction.onClicked.addListener((tab) => { + // debugger; debug = !debug; chrome.browserAction.setTitle({ title: debug ? 'Sidecar Debug: ON' : 'Sidecar Debug: OFF' @@ -40,7 +41,9 @@ chrome.browserAction.onClicked.addListener((tab) => { text: debug ? 'ON' : '' }); - chrome.tabs.update(tab.id, {url: tab.url, selected: tab.selected}, null); + // chrome.tabs.update(tab.id, {url: tab.url, selected: tab.selected}, null); + chrome.tabs.update(tab.id, {url: tab.url, active: true}); + chrome.tabs.reload(); // webRequest handlers changed (solves caching issues) hasAPIs && chrome.webRequest.handlerBehaviorChanged(); From 6e6d2935cb3fbd471ec35cfc54191726644d1617 Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Fri, 9 May 2025 21:41:02 +0200 Subject: [PATCH 02/11] Update icons --- src/img/dark_cube.png | Bin 1296 -> 21040 bytes src/img/sugarcube.png | Bin 6814 -> 32548 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/img/dark_cube.png b/src/img/dark_cube.png index 2b3db8de9cdff2c791ba8071928ed5e7a45f738f..f840d2e0ea6c6642a1d4aef704d375082264d7c2 100644 GIT binary patch literal 21040 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 LxKjDIbIkt%jyUN4 literal 1296 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 literal 6814 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

lF22+l#xc$DH$w)h~s0!j&z3Qvg>)o|3V zuE^_rHU4TD-ATQ!#@}+oEh~g*sMc>|%i;FkphwH_xsM*oII@~h?v$TLX`Vi+rc&(^ z8zdW^QucLdn@k+`q+vd7YOVz5hWJW+)KSIB`N`i7(2b-vBK`HVg3H|2^PHTFYpXeK zx_`8^U&c&pNj2CLHEnD-`B}j zSzKw%f*R6+F0($9cU@K|O&oN zEPcAqC+s%5-`(J_a{ttN{Si~r*TFGk37zoS%_?zj59*>(f6?lduef%E@lNd|s)j7J zjIvKot%Q<>)&-e)YpZ67%vjMk1J^sNb>_?S-@ZM<(bJuP?2Ww%k_uo6%k%8O62akUEk{ z6?GsnYDZ>t_M$Mhjmolg-#MSK@-NZG>rIwg#>XJx8e~S}R79rSw}r!x+u7DDTNU9g z=?np9a^@kIh00)u55xqM`0C<4o(#ylf$Ke3wkj`_L{e5dei&mHY(YTVc3nDw3FP3a z+AQk$kAG2J=k$Del)L!x9f8h86guJIU)?mKnb&CzHX%0=7qWJ<1Axx+l_+jPveiK% z_GB~A?>!R2u+n$Zsn2x#aY3^M4OfnBdm4e-d5+{5yx#j9V|V7NuC6CGpYfNjk&OIC zl0pPfJcyQAJ&Zu&TJt!XZ7t`X3N@VQ?5+%JTg8t6}Ntmo_^iYP8_XLq9H5G zpfUq$zg>g-sXB^vD6W1rFBAN$h>z_J;4%VDJ+A?LL!~iUDxy$xtM+j&U%b=A2o7JD zfUV$y6e~jI56oIl?-0LQ{0`dJtK2-=QOh0f9Z2?24SSCTRb4|?&5JAJOhy?ylM?|P zw*#rJUG~+KXhyO3M>UWID205^rC_0sj7YP;k!O}`&H#bdQb7PB3ScPVvDiWgUIge- zn5r(u%gbrZLwR;(hpx1I{Bp#UGfU?J7Nce=j*er$=p#GEUZTM8bf!s8@&*c1%&%6* z!9iWWp3J>I111m6nGOe{!coe^=QQpfJU?1U<4gc-E+S4Ip#ta^C+&@c?nRp6J<%%T z{A%WBfeUzoS-dk#syYDtG;R%2LS5t88t=UD;cn+iJ%D{!XS+17fQ&2mrI_F6eFRJ! z1H)543Y>rvqJR}r|NawUhA$6^2jl};dx+eghrAamEnpYvAc0`9m5ZAMhki2u(OWon z_FObB8!*W^dx$VIdjWJ+(e!qX}tSyDtMF9F}uc1b2&ai|aZw@XVK(+ec ztfCmYd;qdbXn+o3;HOA~C^!K2{xo0u%mcTJMrw}(_|N7Y&9#g>8<6ZC*hzgJCMrjY zrI=)JaZg0V9g2R`3Rh26iryqk3W`LL{q#Q-Gp~G=)QHs0XY@pxePVFmZ+suBw{=+f zR@h&}JPv#d&Qe#1&D*L{L%dG=>@~XBg5=kz#p#1n%>|R3nN`=B5UaXdZtq3(2RzqJ z6GbY`I8PNJ_z}STmy4$Yucgm^itW_sy&Q|x;++c7a^;Q(cV52KBUaVJenVscA<o0@@S|!V&J+(Gf#() zck9xb9uq+^xsR7n2UzXYc?-?k#x+X6suBDM0bT6`e!=nxaN&eFWo~Vjcf$G4{{y%O BuQLDu From 1c0337ffeb3be93128c598e904ae9d014262608f Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Fri, 9 May 2025 22:07:06 +0200 Subject: [PATCH 03/11] Update manifest for v3 support + increase version --- src/manifest.json | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/manifest.json b/src/manifest.json index 5c37bf3..d9a9c7c 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,28 +1,32 @@ { - "manifest_version": 2, + "manifest_version": 3, "name": "Sidecar Debugger Tool", - "version": "0.2", - "description": "Sidecar Debugger Tool extension helps you debugging Sugar7, for a better productivity and faster development.", + "version": "0.3", + "description": "Sidecar Debugger Tool extension helps you debugging Sugar 7 and upward, for a better productivity and faster development.", "icons": { "128": "img/sugarcube.png" }, - "browser_action": { + "action": { "default_icon": "img/sugarcube.png" }, "devtools_page": "html/devtools.html", "permissions": [ - "webRequest", + "scripting", + "tabs", + "webRequest" + ], + "host_permissions": [ + "*://*/*", "*://*/*/sidecar.js*", - "*://*/*/sidecar.min.js*", - "tabs" + "*://*/*/sidecar.min.js*" ], "background": { - "scripts": ["js/background.js"] + "service_worker": "js/background.js" }, "content_scripts": [ @@ -38,11 +42,15 @@ ], "web_accessible_resources": [ - "js/inject/sidecar.debug.js" + { + "resources": ["js/inject/sidecar.debug.js"], + "matches": [""] + } ], - "minimum_chrome_version": "50", - - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" - + "minimum_chrome_version": "130", + "content_security_policy": { + "extension_pages": "script-src 'self'; object-src 'self';", + "sandbox": "sandbox allow-scripts allow-forms allow-popups allow-modals; script-src 'self' 'unsafe-inline' 'unsafe-eval'; child-src 'self';" + } } From 9f26ce30575ffd4234ce1643ee20517ee8f52786 Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Fri, 9 May 2025 21:43:20 +0200 Subject: [PATCH 04/11] Replace deprecated functions --- src/js/background.js | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/js/background.js b/src/js/background.js index 5032798..3a2a131 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -3,16 +3,15 @@ */ //Handle request from devtools -chrome.extension.onConnect.addListener(function(port) { - - //Listening to the extension page. +chrome.runtime.onConnect.addListener(function(port) { + // Listening to the extension page. port.onMessage.addListener(function(message) { // Sending to the content script. chrome.tabs.sendMessage(message.tabId, message); }); // Listening to the content script messages. - chrome.runtime.onMessage.addListener(function(message,sender,sendResponse) { + chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { // Sending to the extension page. port.postMessage(message); }); @@ -27,25 +26,18 @@ let hasAPIs = chrome.webRequest; /** * Responds to clicks on the extension's icon. Toggles debug mode. */ -chrome.browserAction.onClicked.addListener((tab) => { - - // debugger; +chrome.action.onClicked.addListener((tab) => { debug = !debug; - chrome.browserAction.setTitle({ + chrome.action.setTitle({ title: debug ? 'Sidecar Debug: ON' : 'Sidecar Debug: OFF' }); - // chrome.browserAction.setIcon({ - // path: debug ? 'icon-on.png' : 'icon-off.png' - // }); - chrome.browserAction.setBadgeText({ + chrome.action.setBadgeText({ text: debug ? 'ON' : '' }); - // chrome.tabs.update(tab.id, {url: tab.url, selected: tab.selected}, null); chrome.tabs.update(tab.id, {url: tab.url, active: true}); chrome.tabs.reload(); - // webRequest handlers changed (solves caching issues) hasAPIs && chrome.webRequest.handlerBehaviorChanged(); }); @@ -58,8 +50,9 @@ hasAPIs && chrome.webRequest.onCompleted.addListener((details) => { return; } - chrome.tabs.executeScript(details.tabId, { - file: 'js/debug-mode-injector.js', + chrome.scripting.executeScript({ + target: {tabId: details.tabId}, + files: ['js/debug-mode-injector.js'] }); }, {urls: ['*://*/*/sidecar.js*', '*://*/*/sidecar.min.js*']}); From 48a4339282caf69f2d91d97cbf41ce83095c32f4 Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Fri, 9 May 2025 21:43:36 +0200 Subject: [PATCH 05/11] Replace deprecated function --- src/js/debug-mode-injector.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/debug-mode-injector.js b/src/js/debug-mode-injector.js index bb9dbd6..50b64bb 100644 --- a/src/js/debug-mode-injector.js +++ b/src/js/debug-mode-injector.js @@ -14,7 +14,7 @@ let s = document.createElement('script'); s.type = 'text/javascript'; - s.src = chrome.extension.getURL(scriptFiles[i]); + s.src = chrome.runtime.getURL(scriptFiles[i]); $body.append(s); } From 751dbbdedec64d1b993aecc850063befd254d8b2 Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Mon, 12 May 2025 16:52:02 +0200 Subject: [PATCH 06/11] Check if components are disposed Fixes issue #48 --- src/js/inject/sidecar.debug.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/js/inject/sidecar.debug.js b/src/js/inject/sidecar.debug.js index dafb8a8..485e662 100644 --- a/src/js/inject/sidecar.debug.js +++ b/src/js/inject/sidecar.debug.js @@ -268,6 +268,10 @@ }; Debug.prototype._onHookLayoutRender = function() { + if (this.disposed) { + return; + } + this.$el.attr('data-debug-cid', this.cid); _components[this.cid].renderCount = _components[this.cid].renderCount ? ++_components[this.cid].renderCount : 1; var performance = Array.prototype.slice.call(arguments, -1).pop(); @@ -289,6 +293,10 @@ }; Debug.prototype._onHookViewRender = function() { + if (this.disposed) { + return; + } + this.$el.attr('data-debug-cid', this.cid); _components[this.cid].renderCount = _components[this.cid].renderCount ? ++_components[this.cid].renderCount : 1; @@ -330,6 +338,10 @@ }; Debug.prototype._onHookFieldRender = function() { + if (this.disposed) { + return; + } + var parent = this.parent ? 'parent' : 'view'; _components[this.cid].renderCount = _components[this.cid].renderCount ?++_components[this.cid].renderCount : 1; From 4a2fae8420bf1da5070db9fa73c57d1728225fdf Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Thu, 15 May 2025 10:12:12 +0200 Subject: [PATCH 07/11] Make sure components have been initialized correctly Fixes issue #48 --- src/js/inject/sidecar.debug.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/js/inject/sidecar.debug.js b/src/js/inject/sidecar.debug.js index 485e662..aee3c64 100644 --- a/src/js/inject/sidecar.debug.js +++ b/src/js/inject/sidecar.debug.js @@ -272,6 +272,10 @@ return; } + if (_.isUndefined(_components[this.cid])) { + _.bind(Sidecar.Debug.prototype._onHookLayoutInitialize, this)(); + } + this.$el.attr('data-debug-cid', this.cid); _components[this.cid].renderCount = _components[this.cid].renderCount ? ++_components[this.cid].renderCount : 1; var performance = Array.prototype.slice.call(arguments, -1).pop(); @@ -297,6 +301,10 @@ return; } + if (_.isUndefined(_components[this.cid])) { + _.bind(Sidecar.Debug.prototype._onHookViewInitialize, this)(); + } + this.$el.attr('data-debug-cid', this.cid); _components[this.cid].renderCount = _components[this.cid].renderCount ? ++_components[this.cid].renderCount : 1; @@ -342,6 +350,10 @@ return; } + if (_.isUndefined(_components[this.cid])) { + _.bind(Sidecar.Debug.prototype._onHookFieldInitialize, this)(); + } + var parent = this.parent ? 'parent' : 'view'; _components[this.cid].renderCount = _components[this.cid].renderCount ?++_components[this.cid].renderCount : 1; From 99ee27b18575363771bb08cf35087981612b1432 Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Thu, 15 May 2025 10:25:48 +0200 Subject: [PATCH 08/11] Readded comment --- src/js/background.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/background.js b/src/js/background.js index 3a2a131..18918bf 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -38,6 +38,7 @@ chrome.action.onClicked.addListener((tab) => { chrome.tabs.update(tab.id, {url: tab.url, active: true}); chrome.tabs.reload(); + // webRequest handlers changed (solves caching issues) hasAPIs && chrome.webRequest.handlerBehaviorChanged(); }); From 7f305bcaf88133d5490af97c5e8d3ff89a8ebfc6 Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Thu, 15 May 2025 10:28:33 +0200 Subject: [PATCH 09/11] =?UTF-8?q?Update=20color=20scheme=20+=20add=20font?= =?UTF-8?q?=20=E2=80=9DInter=E2=80=9D=20to=20better=20match=20later=20Suga?= =?UTF-8?q?r=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/css/foundation.css | 26 +++++++++++++------------- src/css/general.css | 2 +- src/css/panel.css | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/css/foundation.css b/src/css/foundation.css index f63e314..07978d4 100644 --- a/src/css/foundation.css +++ b/src/css/foundation.css @@ -59,7 +59,7 @@ body { color: #222; padding: 0; margin: 0; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1.5; @@ -1144,7 +1144,7 @@ button, .button { border-style: solid; border-width: 0; cursor: pointer; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-weight: normal; line-height: normal; margin: 0 0 1.25rem; @@ -1567,7 +1567,7 @@ select { border-color: #cccccc; padding: 0.5rem; font-size: 0.875rem; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; color: rgba(0, 0, 0, 0.75); line-height: normal; border-radius: 0; @@ -1829,7 +1829,7 @@ meta.foundation-mq-topbar { color: #FFFFFF; padding: 12px 0 12px 0; padding-left: 0.9375rem; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-size: 0.8125rem; font-weight: normal; text-transform: none; } @@ -2838,7 +2838,7 @@ meta.foundation-mq-topbar { color: #EEEEEE; font-weight: normal; font-size: 1rem; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } .pricing-table .price { background-color: #F6F6F6; padding: 0.9375rem 1.25rem; @@ -2846,7 +2846,7 @@ meta.foundation-mq-topbar { color: #333333; font-weight: normal; font-size: 2rem; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } .pricing-table .description { background-color: #FFFFFF; padding: 0.9375rem; @@ -3292,7 +3292,7 @@ meta.foundation-mq-topbar { background-color: #EFEFEF; color: #222222; padding: 1rem 2rem; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-size: 1rem; } .tabs dd > a:hover, .tabs .tab-title > a:hover { background-color: #e1e1e1; } @@ -3409,7 +3409,7 @@ ul.pagination { padding: 0.875rem 0; list-style-type: none; list-style-position: outside; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } .side-nav li { margin: 0 0 0.4375rem 0; font-size: 0.875rem; @@ -3425,7 +3425,7 @@ ul.pagination { .side-nav li.active > a:first-child:not(.button) { color: #1cc7ff; font-weight: normal; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; } .side-nav li.divider { border-top: 1px solid; height: 0; @@ -3455,7 +3455,7 @@ ul.pagination { color: #222222; padding: 1rem; display: block; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-size: 1rem; } .accordion .accordion-navigation > a:hover, .accordion dd > a:hover { background: #e3e3e3; } @@ -3649,7 +3649,7 @@ p { /* Default header styles */ h1, h2, h3, h4, h5, h6 { - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-weight: normal; font-style: normal; color: #222222; @@ -4348,7 +4348,7 @@ blockquote p { float: left; margin-left: 1rem; margin-bottom: 0; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; font-weight: normal; font-size: 0.875rem; color: #999999; } @@ -4532,7 +4532,7 @@ blockquote p { right: auto; } } .label { font-weight: normal; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; text-align: center; text-decoration: none; line-height: 1; diff --git a/src/css/general.css b/src/css/general.css index 6215eae..d6baf82 100644 --- a/src/css/general.css +++ b/src/css/general.css @@ -7,7 +7,7 @@ padding: 0; } .general .features .pricing-table .title { background-color: #282828; - box-shadow: 0 4px 0 #e61718; + box-shadow: 0 4px 0 #0679c8; font-size: 1.2rem; } .general .features .pricing-table .description { margin-top: 4px; diff --git a/src/css/panel.css b/src/css/panel.css index 8836ccc..4e8b194 100644 --- a/src/css/panel.css +++ b/src/css/panel.css @@ -19,7 +19,7 @@ html, body { height: 46px; z-index: 100; background-color: #282828; - box-shadow: 0 -4px 0 #e61718; } + box-shadow: 0 -4px 0 #0679c8; } #menu a { color: #f6f6f6; padding: 14px 12px; From 01fb78bde63ef66c7b8e01ad2f13da33b3d94844 Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Fri, 22 May 2026 13:58:17 +0200 Subject: [PATCH 10/11] Update for modern chrome versions --- src/js/background.js | 65 +++++++++++++++++++++++++++++--------------- src/manifest.json | 1 + 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/js/background.js b/src/js/background.js index 18918bf..f208fb7 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -2,52 +2,73 @@ * Copyright (c) 2015 SugarCRM Inc. Licensed by SugarCRM under the Apache 2.0 license. */ -//Handle request from devtools +// Handle requests from devtools panel. chrome.runtime.onConnect.addListener(function(port) { - // Listening to the extension page. + // Forward panel messages to the content script. port.onMessage.addListener(function(message) { - // Sending to the content script. chrome.tabs.sendMessage(message.tabId, message); }); - // Listening to the content script messages. - chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { - // Sending to the extension page. + // Forward content script messages to the panel. + // Keep a named reference so we can remove it when the panel closes. + function onRuntimeMessage(message) { port.postMessage(message); + } + chrome.runtime.onMessage.addListener(onRuntimeMessage); + + port.onDisconnect.addListener(function() { + chrome.runtime.onMessage.removeListener(onRuntimeMessage); }); }); /** - * Holds the state of debug mode. True means we should debug the page. + * In-memory cache of debug mode state, seeded from storage on every SW load. + * chrome.storage.session is the persistent source of truth across SW restarts. + * + * @type {boolean} */ let debug = false; -let hasAPIs = chrome.webRequest; + +const hasAPIs = chrome.webRequest; + +/** + * Restores badge and title from persisted storage, and seeds the in-memory + * cache. Called at top level so it runs on every service worker load. + */ +async function restoreDebugState() { + const { debug: stored = false } = await chrome.storage.session.get('debug'); + debug = stored; + chrome.action.setTitle({ title: debug ? 'Sidecar Debug: ON' : 'Sidecar Debug: OFF' }); + chrome.action.setBadgeText({ text: debug ? 'ON' : '' }); +} + +restoreDebugState(); /** * Responds to clicks on the extension's icon. Toggles debug mode. */ -chrome.action.onClicked.addListener((tab) => { +chrome.action.onClicked.addListener(async (tab) => { + if (!tab.id) return; + debug = !debug; - chrome.action.setTitle({ - title: debug ? 'Sidecar Debug: ON' : 'Sidecar Debug: OFF' - }); - chrome.action.setBadgeText({ - text: debug ? 'ON' : '' - }); - chrome.tabs.update(tab.id, {url: tab.url, active: true}); - chrome.tabs.reload(); + // Persist before reloading so the webRequest listener reads the updated value. + await chrome.storage.session.set({ debug }); + + chrome.action.setTitle({ title: debug ? 'Sidecar Debug: ON' : 'Sidecar Debug: OFF' }); + chrome.action.setBadgeText({ text: debug ? 'ON' : '' }); + + chrome.tabs.reload(tab.id); - // webRequest handlers changed (solves caching issues) + // Flush webRequest handler cache (resolves caching issues). hasAPIs && chrome.webRequest.handlerBehaviorChanged(); }); hasAPIs && chrome.webRequest.onCompleted.addListener((details) => { - // if we are in debug mode or the script is actually a sourcemap, skip - // the attachment (was probably added already from `sidecar.min.js` or - // `sidecar.js`) - if (!debug || details.url.indexOf('sidecar.min.js.map') > 0) { + // Skip if not in debug mode, if the tab ID is invalid, or if the script is + // a sourcemap (already attached from sidecar.min.js or sidecar.js). + if (!debug || details.tabId < 0 || details.url.indexOf('sidecar.min.js.map') > 0) { return; } diff --git a/src/manifest.json b/src/manifest.json index d9a9c7c..54c5897 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -16,6 +16,7 @@ "permissions": [ "scripting", + "storage", "tabs", "webRequest" ], From 5fb41e821570b65d363aacd31e3c9e7eb1f661f5 Mon Sep 17 00:00:00 2001 From: Oskar Hellgren <3854573+oskhel@users.noreply.github.com> Date: Fri, 22 May 2026 15:35:06 +0200 Subject: [PATCH 11/11] Add safeguarding support for different versions of sugar --- src/js/page.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/js/page.js b/src/js/page.js index b963d17..9410091 100644 --- a/src/js/page.js +++ b/src/js/page.js @@ -238,12 +238,14 @@ }, consoleActivityArgs: function(id) { - var act = window.SUGAR.App.debug.AppStream.get(id); + var SugarApp = (window.SUGAR && window.SUGAR.App) || window.App; + var act = SugarApp.debug.AppStream.get(id); console.log(act.get('args')); }, consoleActivityComponent: function(id) { - var act = window.SUGAR.App.debug.AppStream.get(id); + var SugarApp = (window.SUGAR && window.SUGAR.App) || window.App; + var act = SugarApp.debug.AppStream.get(id); console.log(act.get('instance')); },