added web_response
This commit is contained in:
107
ext/bg.js
107
ext/bg.js
@@ -13,6 +13,10 @@ var container_count = 0;
|
||||
|
||||
var proxy_map = {};
|
||||
|
||||
var web_response_whitelist = ["main_frame", "xmlhttprequest"];
|
||||
|
||||
const log_debug = true;
|
||||
|
||||
browser.browserAction.setBadgeBackgroundColor({
|
||||
color: [0, 0, 0, 0]
|
||||
});
|
||||
@@ -80,14 +84,15 @@ function send(ws, seqid, msg = {}){
|
||||
|
||||
msg.seqid = seqid;
|
||||
var msg = JSON.stringify(msg);
|
||||
console.log("-> " + msg);
|
||||
|
||||
if(log_debug){ console.log("-> " + msg); }
|
||||
ws.send(msg);
|
||||
}
|
||||
|
||||
function send_event(ws, msg = {}){
|
||||
|
||||
var msg = JSON.stringify(msg);
|
||||
console.log("-> " + msg);
|
||||
if(log_debug){ console.log("-> " + msg) };
|
||||
ws.send(msg);
|
||||
}
|
||||
|
||||
@@ -200,7 +205,7 @@ function attach_ws_events(ws){
|
||||
|
||||
ws.addEventListener("message", async function(e){
|
||||
|
||||
console.log("<- " + e.data);
|
||||
if(log_debug){ console.log("<- " + e.data); }
|
||||
|
||||
var msg = JSON.parse(e.data);
|
||||
var seqid = msg.seqid;
|
||||
@@ -216,6 +221,14 @@ function attach_ws_events(ws){
|
||||
});
|
||||
break;
|
||||
|
||||
case "web_response_whitelist":
|
||||
web_response_whitelist = msg.list;
|
||||
|
||||
send(ws, seqid, {
|
||||
"status": true
|
||||
})
|
||||
break;
|
||||
|
||||
//
|
||||
// Tabs
|
||||
//
|
||||
@@ -467,9 +480,12 @@ function attach_ws_events(ws){
|
||||
//
|
||||
// Page events
|
||||
//
|
||||
// log requests before they're sent
|
||||
browser.webRequest.onSendHeaders.addListener(
|
||||
function(details){
|
||||
|
||||
if(global_ws === null){ return; }
|
||||
|
||||
var headers = [];
|
||||
|
||||
for(const header of details.requestHeaders){
|
||||
@@ -494,10 +510,93 @@ browser.webRequest.onSendHeaders.addListener(
|
||||
}
|
||||
);
|
||||
},
|
||||
{urls: ["<all_urls>"], types: ["main_frame"]},
|
||||
{urls: ["<all_urls>"]/*, types: ["main_frame"]*/},
|
||||
["requestHeaders"]
|
||||
);
|
||||
|
||||
// forward response body
|
||||
async function buff2b64(uint8Array) {
|
||||
return new Promise(function(resolve, reject){
|
||||
const blob = new Blob([uint8Array]);
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = function(){
|
||||
const base64 = reader.result.split(",")[1];
|
||||
resolve(base64);
|
||||
};
|
||||
|
||||
reader.onerror = reject;
|
||||
reader.readAsDataURL(blob);
|
||||
});
|
||||
}
|
||||
|
||||
browser.webRequest.onBeforeRequest.addListener(
|
||||
async function(details){
|
||||
|
||||
if(
|
||||
web_response_whitelist.length === 0 ||
|
||||
global_ws === null
|
||||
){ return; }
|
||||
|
||||
const filter = browser.webRequest.filterResponseData(
|
||||
details.requestId
|
||||
);
|
||||
|
||||
var chunks = [];
|
||||
|
||||
filter.ondata = async function(event){
|
||||
|
||||
chunks.push(event.data);
|
||||
|
||||
// forward response to browser untouched
|
||||
filter.write(event.data);
|
||||
};
|
||||
|
||||
filter.onstop = async function(){
|
||||
|
||||
// we got the full response data
|
||||
var len = 0;
|
||||
for(const c of chunks){
|
||||
|
||||
len += c.byteLength;
|
||||
}
|
||||
|
||||
const merged = new Uint8Array(len);
|
||||
|
||||
let offset = 0;
|
||||
for(const c of chunks){
|
||||
|
||||
merged.set(new Uint8Array(c), offset);
|
||||
offset += c.byteLength;
|
||||
}
|
||||
|
||||
var b64 = await buff2b64(merged);
|
||||
|
||||
send_event(
|
||||
global_ws,
|
||||
{
|
||||
action: "web_response",
|
||||
data: {
|
||||
id: details.tabId,
|
||||
url: details.url,
|
||||
status: details.statusCode,
|
||||
origin: details.originUrl,
|
||||
type: details.type,
|
||||
method: details.method,
|
||||
container: details.cookieStoreId,
|
||||
url: details.url,
|
||||
body: b64
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
filter.close();
|
||||
};
|
||||
},
|
||||
{ urls: ["<all_urls>"], types: web_response_whitelist },
|
||||
["blocking"]
|
||||
);
|
||||
|
||||
browser.proxy.onRequest.addListener(function(request){
|
||||
|
||||
const proxy_config = proxy_map[request.cookieStoreId];
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0",
|
||||
"description": "4play & dominate",
|
||||
"icons": {
|
||||
"48": "icon.png"
|
||||
"32": "icon.png"
|
||||
},
|
||||
"browser_action": {
|
||||
"default_icon": "icon.png",
|
||||
@@ -26,5 +26,13 @@
|
||||
],
|
||||
"background": {
|
||||
"scripts": ["bg.js"]
|
||||
},
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"strict_min_version": "102.0",
|
||||
"data_collection_permissions": {
|
||||
"required": ["none"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user