@@ -5,9 +5,17 @@ var inspectedTabs = {};
5
5
// tabId -> buffered data
6
6
var data = { } ;
7
7
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 ] ;
11
19
12
20
if ( ! data [ tabId ] || message === 'refresh' ) {
13
21
resetState ( tabId ) ;
@@ -94,34 +102,35 @@ function bufferData(tabId, message) {
94
102
// TODO: Handle digest timings
95
103
}
96
104
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
+ }
103
110
104
- function registerInspectedTabId ( inspectedTabId ) {
105
- inspectedTabs [ inspectedTabId ] = devToolsPort ;
111
+ function registerInspectedTabId ( devToolsPort , inspectedTabId ) {
112
+ inspectedTabs [ inspectedTabId ] = devToolsPort ;
106
113
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
+ } ) ;
114
121
115
- devToolsPort . onDisconnect . addListener ( function ( ) {
116
- delete inspectedTabs [ inspectedTabId ] ;
117
- } ) ;
122
+ var devToolsDisconnect = createRxFrom ( devToolsPort . onDisconnect ) ;
123
+ devToolsDisconnect . forEach ( onDisconnect ) ;
124
+ return event ;
125
+ }
118
126
119
- //devToolsPort.onMessage.removeListener(registerInspectedTabId);
120
- }
127
+ function onDisconnect ( inspectedTabId ) {
128
+ delete inspectedTabs [ inspectedTabId ] ;
129
+ }
121
130
122
- } ) ;
131
+ var tabsRemoved = createRxFrom ( chrome . tabs . onRemoved ) ;
123
132
124
- chrome . tabs . onRemoved . addListener ( function ( tabId ) {
133
+ tabsRemoved . forEach ( function ( tabId ) {
125
134
if ( data [ tabId ] ) {
126
135
delete data [ tabId ] ;
127
136
}
@@ -135,3 +144,19 @@ function showPageAction(tabId) {
135
144
title : 'Batarang Active'
136
145
} ) ;
137
146
}
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