@@ -5,9 +5,17 @@ var inspectedTabs = {};
55// tabId -> buffered data
66var data = { } ;
77
8- function bufferOrForward ( message , sender ) {
9- var tabId = sender . tab . id ,
10- devToolsPort = inspectedTabs [ tabId ] ;
8+ var runtimeMessage = createRxFrom ( chrome . runtime . onMessage , messageSelector ) ;
9+ var runtimeConnect = createRxFrom ( chrome . runtime . onConnect ) ;
10+
11+ runtimeMessage . forEach ( bufferOrForward ) ;
12+ runtimeConnect . forEach ( onConnect ) ;
13+
14+ function bufferOrForward ( event ) {
15+ var message = event . message ;
16+ var sender = event . sender ;
17+ var tabId = sender . tab . id ;
18+ var devToolsPort = inspectedTabs [ tabId ] ;
1119
1220 if ( ! data [ tabId ] || message === 'refresh' ) {
1321 resetState ( tabId ) ;
@@ -94,34 +102,35 @@ function bufferData(tabId, message) {
94102 // TODO: Handle digest timings
95103}
96104
97- // context script –> background
98- chrome . runtime . onMessage . addListener ( bufferOrForward ) ;
99-
100- chrome . runtime . onConnect . addListener ( function ( devToolsPort ) {
101-
102- devToolsPort . onMessage . addListener ( registerInspectedTabId ) ;
105+ function onConnect ( devToolsPort ) {
106+ var devToolsMessage = createRxFrom ( devToolsPort . onMessage ) ;
107+ devToolsMessage . forEach ( registerInspectedTabId . bind ( null , devToolsPort ) ) ;
108+ return event ;
109+ }
103110
104- function registerInspectedTabId ( inspectedTabId ) {
105- inspectedTabs [ inspectedTabId ] = devToolsPort ;
111+ function registerInspectedTabId ( devToolsPort , inspectedTabId ) {
112+ inspectedTabs [ inspectedTabId ] = devToolsPort ;
106113
107- if ( ! data [ inspectedTabId ] ) {
108- resetState ( inspectedTabId ) ;
109- }
110- devToolsPort . postMessage ( {
111- event : 'hydrate' ,
112- data : data [ inspectedTabId ]
113- } ) ;
114+ if ( ! data [ inspectedTabId ] ) {
115+ resetState ( inspectedTabId ) ;
116+ }
117+ devToolsPort . postMessage ( {
118+ event : 'hydrate' ,
119+ data : data [ inspectedTabId ]
120+ } ) ;
114121
115- devToolsPort . onDisconnect . addListener ( function ( ) {
116- delete inspectedTabs [ inspectedTabId ] ;
117- } ) ;
122+ var devToolsDisconnect = createRxFrom ( devToolsPort . onDisconnect ) ;
123+ devToolsDisconnect . forEach ( onDisconnect ) ;
124+ return event ;
125+ }
118126
119- //devToolsPort.onMessage.removeListener(registerInspectedTabId);
120- }
127+ function onDisconnect ( inspectedTabId ) {
128+ delete inspectedTabs [ inspectedTabId ] ;
129+ }
121130
122- } ) ;
131+ var tabsRemoved = createRxFrom ( chrome . tabs . onRemoved ) ;
123132
124- chrome . tabs . onRemoved . addListener ( function ( tabId ) {
133+ tabsRemoved . forEach ( function ( tabId ) {
125134 if ( data [ tabId ] ) {
126135 delete data [ tabId ] ;
127136 }
@@ -135,3 +144,19 @@ function showPageAction(tabId) {
135144 title : 'Batarang Active'
136145 } ) ;
137146}
147+
148+ function createRxFrom ( target , selector ) {
149+ return Rx . Observable . fromEventPattern (
150+ function ( handler ) { target . addListener ( handler ) ; } ,
151+ function ( handler ) { target . removeListener ( handler ) ; } ,
152+ selector
153+ ) ;
154+ }
155+
156+ function messageSelector ( ) {
157+ return {
158+ message : arguments [ 0 ] ,
159+ sender : arguments [ 1 ] ,
160+ sendResponse : arguments [ 2 ]
161+ } ;
162+ }
0 commit comments