fix sync xhr hang

This commit is contained in:
velzie 2024-09-03 11:23:13 -04:00
parent 277d8c8ad9
commit a8169c4cde
No known key found for this signature in database
GPG key ID: 048413F95F0DDE1F
3 changed files with 20 additions and 9 deletions

View file

@ -1,7 +1,7 @@
import { config, decodeUrl, encodeUrl, rewriteHeaders } from "../../../shared";
import { ScramjetClient } from "../../client";
const nativeworker = Worker;
const postmessage = Worker.prototype.postMessage;
export default function (client: ScramjetClient, self: Self) {
const worker = new nativeworker(config.sync);
const ARGS = Symbol("xhr original args");
@ -34,14 +34,18 @@ export default function (client: ScramjetClient, self: Self) {
const sab = new SharedArrayBuffer(1024, { maxByteLength: 2147483647 });
const view = new DataView(sab);
worker.postMessage({
postmessage.call(worker, {
sab,
args,
headers: ctx.this[HEADERS],
body: ctx.args[0],
});
let now = performance.now();
while (view.getUint8(0) === 0) {
if (performance.now() - now > 1000) {
throw new Error("xhr timeout");
}
/* spin */
}

View file

@ -56,12 +56,12 @@ export function rewriteHtml(
script(self.$scramjet.config["codecs"]),
script("data:application/javascript;base64," + btoa(injected)),
script(self.$scramjet.config["shared"]),
script(self.$scramjet.config["client"]),
script("/vc/browser.js"),
new Element("link", {
rel: "stylesheet",
href: "/vc/browser.css",
})
script(self.$scramjet.config["client"])
// script("/vc/browser.js"),
// new Element("link", {
// rel: "stylesheet",
// href: "/vc/browser.css",
// })
);
}
@ -197,8 +197,8 @@ function traverseParsedHtml(
if (v === null) delete node.attribs[attr];
else {
node.attribs[attr] = v;
node.attribs[`data-scramjet-${attr}`] = value;
}
node.attribs[`data-scramjet-${attr}`] = value;
}
}
}

View file

@ -50,5 +50,12 @@ addEventListener(
// release the lock, main thread will stop spinning now
view.setUint8(0, 1);
};
xhr.ontimeout =
xhr.onerror =
xhr.onabort =
() => {
console.error("xhr failed");
view.setUint8(0, 1);
};
}
);