Skip to content
This repository was archived by the owner on Feb 9, 2020. It is now read-only.

Commit e5b4efc

Browse files
committed
feature(background): refactor background file to use observables
1 parent 37fc5e2 commit e5b4efc

File tree

4 files changed

+10718
-28
lines changed

4 files changed

+10718
-28
lines changed

background.js

+52-28
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,19 @@ var inspectedTabs = {};
55
// tabId -> buffered data
66
var data = {};
77

8-
function brokerMessage(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+
var tabsRemoved = createRxFrom(chrome.tabs.onRemoved);
11+
12+
runtimeMessage.forEach(brokerMessage);
13+
runtimeConnect.forEach(onConnect);
14+
tabsRemoved.forEach(onTabsRemoved);
15+
16+
function brokerMessage(event) {
17+
var message = event.message;
18+
var sender = event.sender;
19+
var tabId = sender.tab.id;
20+
var devToolsPort = inspectedTabs[tabId];
1121

1222
if (!data[tabId] || message === 'refresh') {
1323
resetState(tabId);
@@ -98,39 +108,37 @@ function bufferData(tabId, message) {
98108
// TODO: Handle digest timings
99109
}
100110

101-
// context script –> background
102-
chrome.runtime.onMessage.addListener(brokerMessage);
103-
104-
chrome.runtime.onConnect.addListener(function(devToolsPort) {
105-
106-
devToolsPort.onMessage.addListener(registerInspectedTabId);
107-
108-
function registerInspectedTabId(inspectedTabId) {
109-
inspectedTabs[inspectedTabId] = devToolsPort;
110-
111-
if (!data[inspectedTabId]) {
112-
resetState(inspectedTabId);
113-
}
114-
devToolsPort.postMessage({
115-
event: 'hydrate',
116-
data: data[inspectedTabId]
117-
});
111+
function onConnect(devToolsPort) {
112+
var devToolsMessage = createRxFrom(devToolsPort.onMessage);
113+
devToolsMessage.forEach(registerInspectedTabId.bind(null, devToolsPort));
114+
return event;
115+
}
118116

119-
devToolsPort.onDisconnect.addListener(function () {
120-
delete inspectedTabs[inspectedTabId];
121-
});
117+
function registerInspectedTabId(devToolsPort, inspectedTabId) {
118+
inspectedTabs[inspectedTabId] = devToolsPort;
122119

123-
//devToolsPort.onMessage.removeListener(registerInspectedTabId);
120+
if (!data[inspectedTabId]) {
121+
resetState(inspectedTabId);
124122
}
123+
devToolsPort.postMessage({
124+
event: 'hydrate',
125+
data: data[inspectedTabId]
126+
});
125127

126-
});
128+
var devToolsDisconnect = createRxFrom(devToolsPort.onDisconnect);
129+
devToolsDisconnect.forEach(onDisconnect);
130+
return event;
131+
}
127132

128-
chrome.tabs.onRemoved.addListener(function (tabId) {
133+
function onDisconnect(inspectedTabId) {
134+
delete inspectedTabs[inspectedTabId];
135+
}
136+
137+
function onTabsRemoved(tabId) {
129138
if (data[tabId]) {
130139
delete data[tabId];
131140
}
132-
});
133-
141+
}
134142

135143
function showPageAction(tabId) {
136144
chrome.pageAction.show(tabId);
@@ -139,3 +147,19 @@ function showPageAction(tabId) {
139147
title: 'Batarang Active'
140148
});
141149
}
150+
151+
function createRxFrom(target, selector) {
152+
return Rx.Observable.fromEventPattern(
153+
function(handler) { target.addListener(handler); },
154+
function(handler) { target.removeListener(handler); },
155+
selector
156+
);
157+
}
158+
159+
function messageSelector() {
160+
return {
161+
message: arguments[0],
162+
sender: arguments[1],
163+
sendResponse: arguments[2]
164+
};
165+
}

gulpfile.js

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ gulp.task('package', ['browserify'], function () {
2424
'./dist/**',
2525
'./img/**',
2626
'./panel/**',
27+
'libs/rx.all.js',
2728
'background.js',
2829
'devtoolsBackground.*',
2930
'inject.js',

0 commit comments

Comments
 (0)