4chan-x/builds/crx/eventPage.js
2023-06-16 22:22:04 +02:00

60 lines
1.8 KiB
JavaScript

/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
*/
let requestID = 0;
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
const id = requestID;
requestID++;
sendResponse(id);
return handlers[request.type](request, response => chrome.tabs.sendMessage(sender.tab.id, {id, data: response}));});
var handlers = {
permission(request, cb) {
const origins = request.origins || ['*://*/'];
return chrome.permissions.contains({origins}, function(result) {
if (result) {
return cb(result);
} else {
return chrome.permissions.request({origins}, function(result) {
if (chrome.runtime.lastError) {
return cb(false);
} else {
return cb(result);
}
});
}
});
},
ajax(request, cb) {
const xhr = new XMLHttpRequest();
xhr.open('GET', request.url, true);
xhr.responseType = request.responseType;
xhr.timeout = request.timeout;
const object = request.headers || {};
for (var key in object) {
var value = object[key];
xhr.setRequestHeader(key, value);
}
xhr.addEventListener('load', function() {
let {status, statusText, response} = this;
const responseHeaderString = this.getAllResponseHeaders();
if (response && (request.responseType === 'arraybuffer')) {
response = [...new Uint8Array(response)];
}
return cb({status, statusText, response, responseHeaderString});
}
, false);
xhr.addEventListener('error', () => cb({error: true})
, false);
xhr.addEventListener('abort', () => cb({error: true})
, false);
xhr.addEventListener('timeout', () => cb({error: true})
, false);
return xhr.send();
}
};