added web_response

This commit is contained in:
2026-06-06 19:49:40 -04:00
parent c86151ac82
commit 27261e0751
8 changed files with 223 additions and 6 deletions

107
ext/bg.js
View File

@@ -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];

View File

@@ -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"]
}
}
}
}