@@ -16,11 +16,11 @@ chrome.runtime.onConnect.addListener((port) => {
16
16
ports . delete ( message . tabId ) ;
17
17
18
18
if ( ports . size === 0 ) {
19
- chrome . tabs . onUpdated . removeListener ( attach ) ;
19
+ chrome . tabs . onUpdated . removeListener ( courier ) ;
20
20
}
21
21
} ) ;
22
22
23
- return chrome . tabs . onUpdated . addListener ( attach ) ;
23
+ return chrome . tabs . onUpdated . addListener ( courier ) ;
24
24
} else if ( message . type === 'ext/reload' ) {
25
25
return chrome . runtime . reload ( ) ;
26
26
} else if ( message . type === 'page/refresh' ) {
@@ -35,12 +35,26 @@ chrome.runtime.onConnect.addListener((port) => {
35
35
// relay messages from `chrome.scripting` to devtools page
36
36
chrome . runtime . onMessage . addListener ( ( message , sender ) => {
37
37
if ( sender . id !== chrome . runtime . id ) return ; // unexpected sender
38
+
39
+ if ( message . type === 'ext/icon:set' ) {
40
+ const selected = message . payload ? 'default' : 'disabled' ;
41
+ return chrome . action . setIcon ( {
42
+ path : {
43
+ 16 : `icons/${ selected } -16.png` ,
44
+ 24 : `icons/${ selected } -24.png` ,
45
+ 48 : `icons/${ selected } -48.png` ,
46
+ 96 : `icons/${ selected } -96.png` ,
47
+ 128 : `icons/${ selected } -128.png` ,
48
+ } ,
49
+ } ) ;
50
+ }
51
+
38
52
const port = sender . tab ?. id && ports . get ( sender . tab . id ) ;
39
- if ( port ) port . postMessage ( message ) ;
53
+ if ( port ) return port . postMessage ( message ) ;
40
54
} ) ;
41
55
42
56
/** @type {Parameters<chrome.tabs.TabUpdatedEvent['addListener']>[0] } */
43
- function attach ( tabId , changed ) {
57
+ function courier ( tabId , changed ) {
44
58
if ( ! ports . has ( tabId ) || changed . status !== 'loading' ) return ;
45
59
46
60
chrome . scripting . executeScript ( {
@@ -94,3 +108,27 @@ function attach(tabId, changed) {
94
108
} ,
95
109
} ) ;
96
110
}
111
+
112
+ chrome . tabs . onActivated . addListener ( ( { tabId } ) => sensor ( tabId ) ) ;
113
+ chrome . tabs . onUpdated . addListener (
114
+ ( tabId , changed ) => changed . status === 'loading' && sensor ( tabId ) ,
115
+ ) ;
116
+
117
+ /** @param {number } tabId */
118
+ async function sensor ( tabId ) {
119
+ chrome . scripting . executeScript ( {
120
+ target : { tabId } ,
121
+
122
+ func : ( ) => {
123
+ const source = chrome . runtime . getURL ( '/sensor.js' ) ;
124
+ document . querySelector ( `script[src="${ source } "]` ) ?. remove ( ) ;
125
+ const script = document . createElement ( 'script' ) ;
126
+ script . setAttribute ( 'src' , source ) ;
127
+ document . documentElement . appendChild ( script ) ;
128
+
129
+ document . addEventListener ( 'SvelteDevTools' , ( { detail } ) => {
130
+ chrome . runtime . sendMessage ( detail ) ;
131
+ } ) ;
132
+ } ,
133
+ } ) ;
134
+ }
0 commit comments