Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 37 additions & 81 deletions background.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,19 +45,42 @@ chrome.runtime.onMessage.addListener( function(request, sender, callback) {

const method = request.method ? request.method.toUpperCase() : 'GET';
if (method == 'POST') {
const jsData = getJsonFromUrl(request.data);
if (jsData.photo !== undefined) {
const photoOk = GetPhoto(jsData);
photoOk.then((jsData) => {
request.data = jsData;
const header = "application/x-www-form-urlencoded";
GeniPostReq(request,header,callback);
});
return true
}
const header = "application/x-www-form-urlencoded";
GeniPostReq(request,header,callback);

(async () => {
try {
let jsData = getJsonFromUrl(request.data);
if (jsData.photo !== undefined) {
const photoResponse = await fetch(jsData.photo);
if (!photoResponse.ok) {
callback({error: photoResponse.error, responseURL: photoResponse.responseURL});
return;
}
const buf = await photoResponse.arrayBuffer();
let binary = "";
const bytes = new Uint8Array(buf);
for (let i = 0; i < bytes.byteLength; i++) {
binary += String.fromCharCode(bytes[i] & 0xff);
}
delete jsData.photo;
jsData.file = btoa(binary);
}
const body = getUrlFromJson(jsData);
const response = await fetch(request.url, {
method: 'POST',
body: body,
headers: {"Content-Type": "application/x-www-form-urlencoded"}
});
const responseText = await response.text();
if (!response.ok) {
console.error("Unable to get XMLHttpRequest: " + request.url);
callback({error: response.error, variable: request.variable, responseURL: response.responseURL});
} else {
callback({source: responseText, variable: request.variable, responseURL: response.url});
}
} catch (error) {
console.error("Fetch POST failed: ", error);
callback({error: error.message, variable: request.variable});
}
})();
} else {
// pass this request through - note that all receivers need to change for fetch response
var vartn = {variable: request.variable};
Expand Down Expand Up @@ -86,74 +109,7 @@ chrome.runtime.onMessage.addListener( function(request, sender, callback) {
return true;
}
return false;
});

function GeniPostReq(request,header,callback) {
fetch(request.url, {
method : "POST",
body: request.data,
headers: {
"Content-Type" : header
}
})
.then((response) => {
if (!response.ok) {
return response.text()
.then((responseText)=> {
console.error("Unable to get Fetch Request: " + request.url);
var valrtn = {error: responseText, variable: request.variable, responseURL: request.url};
console.log("valrtn_FL ",valrtn,request.data);
callback(valrtn);
});

} else {
return response.text()
.then((responseText)=> {
var valrtn = {source: responseText, variable: request.variable, responseURL: request.url};
//console.log("valrtn_OK ",valrtn);
callback(valrtn);
});
}
})
}
// load the photo from the given URL
async function GetPhoto (jsData){
try {
const photoResponse = await fetch(jsData.photo, {
method: 'GET',
mode: "cors",
headers: {
"Content-Type" : "application/xml",
// "Access-Control-Allow-Origin": "*",
// "Access-Control-Allow-Methods": "GET",
// "Access-Control-Max-Age": "86400",
},
});
if (!photoResponse.ok) {
throw new Error(`Erreur Photo : ${photoResponse.status}`);
}
const photoreader = photoResponse.body.getReader();
let binary = "";
while (true){
const {done,value} = await photoreader.read();
if (done){

delete jsData.photo;
jsData.file = btoa(binary);
jsData = getUrlFromJson(jsData);
return jsData;
}

charsReceived = value.length;
for(i=0;i<charsReceived;i++){
binary += String.fromCharCode(value[i]);
}
}
}
catch({name, stat}) {
console.error(name, stat);
}
}
});

async function evalObject(expression, callback) {
await setupOffscreenDocument("offscreen.html");
Expand Down
25 changes: 16 additions & 9 deletions offscreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,25 @@ const iframe = document.getElementById("offscreen");

console.log("Offscreen script loaded...");

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action == "offscreen") {
console.log("Offscreen received message with payload: {}", request);
let listenerAdded = false;
let pendingResponse = null;

function handleMessage(event) {
if (pendingResponse) {
pendingResponse(event.data);
pendingResponse = null;
}
}

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === "offscreen" && sender.id === chrome.runtime.id) {
if (!listenerAdded) {
window.addEventListener("message", handleMessage);
listenerAdded = true;
}
pendingResponse = sendResponse;
iframe.contentWindow.postMessage(request.data, "*");
window.addEventListener("message", (event) => {
console.log("Offscreen callback event {}", event);
sendResponse(event.data);
}, false);
return true;
} else {
console.log("Offscreen ignoring message type: {}", request.action);
}
return false;
});
19 changes: 13 additions & 6 deletions popup.js
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ function loadPage(request) {
}
if (!profilechanged && focusURLid !== "") {
for (var i = 0; i < buildhistory.length; i++) {
if (buildhistory[i].itemId === focusURLid) {
if (String(buildhistory[i].itemId) === String(focusURLid)) {
focusid = buildhistory[i].id;
profilechanged = true;
loadPage(request);
Expand Down Expand Up @@ -1883,7 +1883,7 @@ function dateAmbigous(valdate) {

function addHistory(id, itemId, name, data) {
if (exists(id)) {
buildhistory.unshift({id: id, itemId: itemId, name: name, date: Date.now(), data: data});
buildhistory.unshift({id: id, itemId: itemId != null ? String(itemId) : "", name: name, date: Date.now(), data: data});
if (buildhistory.length > 100) {
buildhistory.pop();
}
Expand Down Expand Up @@ -2390,11 +2390,18 @@ function geoonoff(value) {
}

function getProfileName(profile) {
if (typeof profile == "object" && profile.displayname) {
return profile.displayname;
} else {
return profile;
if (typeof profile === 'object') {
if (profile.displayname) {
return profile.displayname;
}
if (profile.display_name) {
return profile.display_name;
}
if (profile.displayName) {
return profile.displayName;
}
}
return profile;
}

function hostDomain(url) {
Expand Down