60 lines
1.8 KiB
JavaScript
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();
|
|
}
|
|
};
|