-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbackground.js
More file actions
107 lines (81 loc) · 2.8 KB
/
background.js
File metadata and controls
107 lines (81 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
var requestMap = new Map();
var headersMap = new Map();
var registerMap = new Map();
chrome.webRequest.onCompleted.addListener(function(request){
recordLog(request);
},{
urls: ["https://*/*"]
}, ["responseHeaders"]);
chrome.webRequest.onErrorOccurred.addListener(function(request){
recordLog(request);
},{
urls: ["https://*/*"]
});
chrome.webRequest.onBeforeSendHeaders.addListener(function(request){
recordHeaders(request);
},{
urls: ["https://*/*"]
}, ["requestHeaders"]);
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.message == "fetchLogs")
sendResponse({data: requestMap.get(request.tabId)});
if (request.message == "register") {
registerTab(request.tabId);
sendResponse({ack: 'Done!'});
}
if (request.message == "unregister") {
unRegisterTab(request.tabId);
sendResponse({ack: 'Done!'});
}
if (request.message == "fetchRecordingStatus")
sendResponse({isRecording: isRegistered(request.tabId)});
});
function registerTab(tabId){
if(registerMap.get(tabId) !== undefined) {
return;
}
registerMap.set(tabId, {});
}
function unRegisterTab(tabId){
if(registerMap.get(tabId) === undefined) {
return;
}
registerMap.delete(tabId);
}
function isRegistered(tabId) {
return registerMap.get(tabId) !== undefined
}
function recordLog(request) {
if(!isRegistered(request.tabId)) {
console.log('tab not registered skipping log');
requestMap.delete(request.tabId);
return;
}
if (requestMap.get(request.tabId) == undefined || requestMap.get(request.tabId) == null) {
requestMap.set(request.tabId, new Array());
}
var requestArray = requestMap.get(request.tabId);
requestArray.push(request);
if (headersMap.get(request.requestId) === undefined || headersMap.get(request.requestId) === null ) {
console.error('Request headers are absent for the request ' + request.requestId);
}
request.requestHeaders = headersMap.get(request.requestId);
headersMap.delete(request.requestId);
var port = chrome.runtime.connect({name:"test"});
port.postMessage(request);
}
function recordHeaders(request) {
if(!isRegistered(request.tabId)) {
console.log('tab not registered skipping log');
headersMap.delete(request.requestId);
return;
}
if (headersMap.get(request.requestId) != undefined && headersMap.get(request.requestId) == null) {
console.error('Already headers are set for the request id');
}
headersMap.set(request.requestId, request.requestHeaders);
}