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

Commit ba796af

Browse files
committed
feature(background): refactor background file to use observables
1 parent 398a87b commit ba796af

File tree

5 files changed

+12398
-1710
lines changed

5 files changed

+12398
-1710
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 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+
var tabsRemoved = createRxFrom(chrome.tabs.onRemoved);
11+
12+
runtimeMessage.forEach(bufferOrForward);
13+
runtimeConnect.forEach(onConnect);
14+
tabsRemoved.forEach(onTabsRemoved);
15+
16+
function bufferOrForward(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);
@@ -94,39 +104,37 @@ function bufferData(tabId, message) {
94104
// TODO: Handle digest timings
95105
}
96106

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

115-
devToolsPort.onDisconnect.addListener(function () {
116-
delete inspectedTabs[inspectedTabId];
117-
});
113+
function registerInspectedTabId(devToolsPort, inspectedTabId) {
114+
inspectedTabs[inspectedTabId] = devToolsPort;
118115

119-
//devToolsPort.onMessage.removeListener(registerInspectedTabId);
116+
if (!data[inspectedTabId]) {
117+
resetState(inspectedTabId);
120118
}
119+
devToolsPort.postMessage({
120+
event: 'hydrate',
121+
data: data[inspectedTabId]
122+
});
121123

122-
});
124+
var devToolsDisconnect = createRxFrom(devToolsPort.onDisconnect);
125+
devToolsDisconnect.forEach(onDisconnect);
126+
return event;
127+
}
123128

124-
chrome.tabs.onRemoved.addListener(function (tabId) {
129+
function onDisconnect(inspectedTabId) {
130+
delete inspectedTabs[inspectedTabId];
131+
}
132+
133+
function onTabsRemoved(tabId) {
125134
if (data[tabId]) {
126135
delete data[tabId];
127136
}
128-
});
129-
137+
}
130138

131139
function showPageAction(tabId) {
132140
chrome.pageAction.show(tabId);
@@ -135,3 +143,19 @@ function showPageAction(tabId) {
135143
title: 'Batarang Active'
136144
});
137145
}
146+
147+
function createRxFrom(target, selector) {
148+
return Rx.Observable.fromEventPattern(
149+
function(handler) { target.addListener(handler); },
150+
function(handler) { target.removeListener(handler); },
151+
selector
152+
);
153+
}
154+
155+
function messageSelector() {
156+
return {
157+
message: arguments[0],
158+
sender: arguments[1],
159+
sendResponse: arguments[2]
160+
};
161+
}

0 commit comments

Comments
 (0)