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

Commit 8f21f90

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

File tree

5 files changed

+12396
-1707
lines changed

5 files changed

+12396
-1707
lines changed

background.js

+50-25
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,17 @@ 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+
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

Comments
 (0)