@@ -20,8 +20,6 @@ type TabDataConfig = {
2020 forwardToClient : ( message : bridge . ForwardPayload ) => void
2121}
2222
23- type PostMessanger = { post : bridge . PostMessageFn ; on : bridge . OnMessageFn }
24-
2523class TabData {
2624
2725 connectListeners = new Set <
@@ -32,13 +30,23 @@ class TabData {
3230 debug . Debugger . OutputChannels >
3331 | null = null
3432
33+ popup_messanger : bridge . PortMessanger < debug . Debugger . InputChannels ,
34+ debug . Debugger . OutputChannels >
35+ | null = null
36+
37+ detected_state : bridge . DetectionState = {
38+ Solid : false ,
39+ SolidDev : false ,
40+ Debugger : false ,
41+ }
42+
3543 constructor (
3644 public id : number ,
3745 // null when not connected with content-script
3846 public config : TabDataConfig | null ,
3947 ) { }
4048
41- untilContentScriptConnect ( ) : Promise < PostMessanger > {
49+ untilContentScriptConnect ( ) : Promise < { post : bridge . PostMessageFn ; on : bridge . OnMessageFn } > {
4250 return new Promise ( resolve => {
4351 if ( this . config ) {
4452 resolve ( { post : this . config . toContent . bind ( this ) , on : this . config . fromContent . bind ( this ) } )
@@ -67,21 +75,6 @@ class TabData {
6775 bridge . emit ( this . versionsBus , versions )
6876 this . versionsBus . clear ( )
6977 }
70-
71- detected : bridge . DetectionState = {
72- Solid : false ,
73- SolidDev : false ,
74- Debugger : false ,
75- }
76- detectedListeners = new bridge . CallbackSet < [ bridge . DetectionState ] > ( )
77- onDetected ( fn : ( state : bridge . DetectionState ) => void ) {
78- fn ( this . detected )
79- this . detectedListeners . add ( fn )
80- }
81- set_detected ( state : bridge . DetectionState ) {
82- this . detected = state
83- bridge . emit ( this . detectedListeners , state )
84- }
8578}
8679
8780const ACTIVE_TAB_QUERY = { active : true , currentWindow : true } as const
@@ -172,7 +165,10 @@ chrome.runtime.onConnect.addListener(async port => {
172165 } )
173166
174167 // "DetectSolid" from content-script (realWorld)
175- content_messanger . on ( 'Detected' , state => tab . set_detected ( state ) )
168+ content_messanger . on ( 'Detected' , state => {
169+ tab . popup_messanger ?. post ( 'Detected' , state )
170+ tab . detected_state = state
171+ } )
176172
177173 port . onDisconnect . addListener ( ( ) => {
178174 tab . panel_messanger ?. post ( 'ResetPanel' )
@@ -263,25 +259,34 @@ chrome.runtime.onConnect.addListener(async port => {
263259 }
264260 } )
265261
262+ port . onDisconnect . addListener ( ( ) => {
263+ tab . panel_messanger = null
264+ content_messanger . post ( 'DevtoolsClosed' )
265+ } )
266+
266267 break
267268 }
268269
269270 case bridge . ConnectionName . Popup : {
270- const data = await getActiveTabData ( )
271- if ( data instanceof Error ) {
272- error ( data )
271+ const tab = await getActiveTabData ( )
272+ if ( tab instanceof Error ) {
273+ error ( tab )
273274 break
274275 }
275276 const popup_messanger = bridge . createPortMessanger (
276277 bridge . Place_Name . Background ,
277278 bridge . Place_Name . Popup ,
278279 port )
280+ tab . popup_messanger = popup_messanger
281+
282+ popup_messanger . post ( 'Detected' , tab . detected_state )
279283
280- data . onVersions ( v => {
284+ tab . onVersions ( v => {
281285 popup_messanger . post ( 'Versions' , v )
282286 } )
283- data . onDetected ( state => {
284- popup_messanger . post ( 'Detected' , state )
287+
288+ port . onDisconnect . addListener ( ( ) => {
289+ tab . popup_messanger = null
285290 } )
286291
287292 break
0 commit comments