@@ -13,10 +13,10 @@ import * as icons from '../shared/icons.ts'
1313log ( bridge . Place_Name . Background + ' loaded.' )
1414
1515type TabDataConfig = {
16- toContent : TabData [ 'toContent' ]
17- fromContent : TabData [ 'fromContent' ]
18- forwardToDevtools : TabData [ 'forwardToDevtools' ]
19- forwardToClient : TabData [ 'forwardToClient' ]
16+ toContent : bridge . PostMessageFn
17+ fromContent : bridge . OnMessageFn
18+ forwardToDevtools : ( fn : ( message : bridge . ForwardPayload ) => void ) => void
19+ forwardToClient : ( message : bridge . ForwardPayload ) => void
2020}
2121
2222type PostMessanger = { post : bridge . PostMessageFn ; on : bridge . OnMessageFn }
@@ -29,32 +29,22 @@ class EventBus<T> extends Set<(payload: T) => void> {
2929}
3030
3131class TabData {
32- public connected = true
3332
34- private disconnectBus = new EventBus ( )
35- private connectListeners = new Set <
33+ disconnectBus = new EventBus ( )
34+ connectListeners = new Set <
3635 ( toContent : bridge . PostMessageFn , fromContent : bridge . OnMessageFn ) => void
3736 > ( )
3837
39- private toContent : bridge . PostMessageFn
40- private fromContent : bridge . OnMessageFn
41- public forwardToDevtools : ( fn : ( message : bridge . ForwardPayload ) => void ) => void
42- public forwardToClient : ( message : bridge . ForwardPayload ) => void
43-
4438 constructor (
4539 public tabId : number ,
46- config : TabDataConfig ,
47- ) {
48- this . toContent = config . toContent
49- this . fromContent = config . fromContent
50- this . forwardToDevtools = config . forwardToDevtools
51- this . forwardToClient = config . forwardToClient
52- }
40+ // null when not connected with content-script
41+ public config : TabDataConfig | null ,
42+ ) { }
5343
5444 untilContentScriptConnect ( ) : Promise < PostMessanger > {
5545 return new Promise ( resolve => {
56- if ( this . connected ) {
57- resolve ( { post : this . toContent . bind ( this ) , on : this . fromContent . bind ( this ) } )
46+ if ( this . config ) {
47+ resolve ( { post : this . config . toContent . bind ( this ) , on : this . config . fromContent . bind ( this ) } )
5848 } else {
5949 this . connectListeners . add ( ( toContent , fromContent ) => {
6050 resolve ( { post : toContent , on : fromContent } )
@@ -64,58 +54,48 @@ class TabData {
6454 }
6555
6656 reconnected ( config : TabDataConfig ) {
67- this . toContent = config . toContent
68- this . fromContent = config . fromContent
69- this . forwardToDevtools = config . forwardToDevtools
70- this . forwardToClient = config . forwardToClient
71-
72- this . connected = true
73- this . connectListeners . forEach ( fn =>
74- fn ( this . toContent . bind ( this ) , this . fromContent . bind ( this ) ) ,
75- )
57+ this . config = config
58+
59+ for ( let fn of this . connectListeners ) {
60+ fn ( config . toContent . bind ( this ) , config . fromContent . bind ( this ) )
61+ }
7662 }
7763
7864 onContentScriptDisconnect ( fn : VoidFunction ) : void {
7965 this . disconnectBus . add ( fn )
8066 }
8167
8268 disconnected ( ) {
83- this . connected = false
8469 this . disconnectBus . emit ( )
8570 this . disconnectBus . clear ( )
86- this . forwardToClient = ( ) => {
87- /**/
88- }
89- this . forwardToDevtools = ( ) => {
90- /**/
91- }
71+ this . config = null
9272 }
9373
94- # versions: bridge . Versions | undefined
95- # versionsBus = new EventBus < bridge . Versions > ( )
74+ versions : bridge . Versions | undefined
75+ versionsBus = new EventBus < bridge . Versions > ( )
9676 onVersions ( fn : ( versions : bridge . Versions ) => void ) {
97- if ( this . # versions) fn ( this . # versions)
98- else this . # versionsBus. add ( fn )
77+ if ( this . versions ) fn ( this . versions )
78+ else this . versionsBus . add ( fn )
9979 }
10080 setVersions ( versions : bridge . Versions ) {
101- this . # versions = versions
102- this . # versionsBus. emit ( versions )
103- this . # versionsBus. clear ( )
81+ this . versions = versions
82+ this . versionsBus . emit ( versions )
83+ this . versionsBus . clear ( )
10484 }
10585
106- # detected: bridge . DetectionState = {
86+ detected : bridge . DetectionState = {
10787 Solid : false ,
10888 SolidDev : false ,
10989 Debugger : false ,
11090 }
111- # detectedListeners = new EventBus < bridge . DetectionState > ( )
91+ detectedListeners = new EventBus < bridge . DetectionState > ( )
11292 onDetected ( fn : ( state : bridge . DetectionState ) => void ) {
113- fn ( this . # detected)
114- this . # detectedListeners. add ( fn )
93+ fn ( this . detected )
94+ this . detectedListeners . add ( fn )
11595 }
116- detected ( state : bridge . DetectionState ) {
117- this . # detected = state
118- this . # detectedListeners. emit ( state )
96+ set_detected ( state : bridge . DetectionState ) {
97+ this . detected = state
98+ this . detectedListeners . emit ( state )
11999 }
120100}
121101
@@ -162,7 +142,7 @@ const getActiveTabData = async (): Promise<TabData | Error> => {
162142
163143// for reconnecting after page reload
164144let last_disconnected_tab_data : TabData | undefined
165- let last_disconnected_tab_id : number | undefined
145+ let last_disconnected_tab_id : number | undefined
166146
167147chrome . runtime . onConnect . addListener ( async port => {
168148
@@ -209,7 +189,7 @@ chrome.runtime.onConnect.addListener(async port => {
209189 } )
210190
211191 // "DetectSolid" from content-script (realWorld)
212- content_messanger . onPortMessage ( 'Detected' , state => data . detected ( state ) )
192+ content_messanger . onPortMessage ( 'Detected' , state => data . set_detected ( state ) )
213193
214194 port . onDisconnect . addListener ( ( ) => {
215195 data . disconnected ( )
@@ -255,6 +235,7 @@ chrome.runtime.onConnect.addListener(async port => {
255235 error ( data )
256236 break
257237 }
238+
258239 const panel_messanger = bridge . createPortMessanger (
259240 bridge . Place_Name . Background ,
260241 bridge . Place_Name . Panel ,
@@ -275,19 +256,29 @@ chrome.runtime.onConnect.addListener(async port => {
275256 panel_messanger . postPortMessage ( 'ResetPanel' )
276257 } )
277258
278- /* Force debugger to send state when panel conects */
279- data . forwardToClient ( {
280- name : 'ResetState' ,
281- details : undefined ,
282- forwarding : true , // TODO: this shouldn't be a "forward", but not sure how to typesafe send a post to debugger from here
283- } )
259+ if ( ! data . config ) {
260+ error ( `No ${ bridge . Place_Name . Content_Script } connection when ${ bridge . Place_Name . Panel } got connected` )
261+ } else {
262+ /* Force debugger to send state when panel conects */
263+ data . config . forwardToClient ( {
264+ name : 'ResetState' ,
265+ details : undefined ,
266+ forwarding : true , // TODO: this shouldn't be a "forward", but not sure how to typesafe send a post to debugger from here
267+ } )
268+
269+ // Forward messages from Content Script (client) to Panel
270+ data . config . forwardToDevtools ( message => {
271+ port . postMessage ( message )
272+ } )
273+ }
284274
285- // FORWARD MESSAGES FROM and TO CLIENT
286- data . forwardToDevtools ( message => {
287- port . postMessage ( message )
288- } )
275+ // Forward messages from Panel to Content Script (client)
289276 panel_messanger . onForwardMessage ( message => {
290- data . forwardToClient ( message )
277+ if ( ! data . config ) {
278+ error ( `Cannot forward message, no ${ bridge . Place_Name . Content_Script } connection.` , message )
279+ } else {
280+ data . config . forwardToClient ( message )
281+ }
291282 } )
292283
293284 break
0 commit comments