Merge pull request #14642 from Snuffleupagus/Driver-send-fetch

Replace XMLHttpRequest usage with the Fetch API in `Driver._send`
This commit is contained in:
Tim van der Meij 2022-03-09 20:43:12 +01:00 committed by GitHub
commit fee1bc68e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -19,6 +19,7 @@
const {
AnnotationLayer,
AnnotationMode,
createPromiseCapability,
getDocument,
GlobalWorkerOptions,
PixelsPerInch,
@ -571,7 +572,7 @@ class Driver {
if (!task.pdfDoc) {
const dataUrl = this.canvas.toDataURL("image/png");
this._sendResult(dataUrl, task, failure, () => {
this._sendResult(dataUrl, task, failure).then(() => {
this._log(
"done" + (failure ? " (failed !: " + failure + ")" : "") + "\n"
);
@ -831,7 +832,7 @@ class Driver {
this._log("Snapshotting... ");
const dataUrl = this.canvas.toDataURL("image/png");
this._sendResult(dataUrl, task, failure, () => {
this._sendResult(dataUrl, task, failure).then(() => {
this._log(
"done" + (failure ? " (failed !: " + failure + ")" : "") + "\n"
);
@ -885,7 +886,7 @@ class Driver {
}
}
_sendResult(snapshot, task, failure, callback) {
_sendResult(snapshot, task, failure) {
const result = JSON.stringify({
browser: this.browser,
id: task.id,
@ -901,29 +902,38 @@ class Driver {
viewportHeight: task.viewportHeight,
outputScale: task.outputScale,
});
this._send("/submit_task_results", result, callback);
return this._send("/submit_task_results", result);
}
_send(url, message, callback) {
const r = new XMLHttpRequest();
r.open("POST", url, true);
r.setRequestHeader("Content-Type", "application/json");
r.onreadystatechange = e => {
if (r.readyState === 4) {
this.inFlightRequests--;
// Retry until successful
if (r.status !== 200) {
setTimeout(() => {
this._send(url, message);
});
}
if (callback) {
callback();
}
}
};
_send(url, message) {
const capability = createPromiseCapability();
this.inflight.textContent = this.inFlightRequests++;
r.send(message);
fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: message,
})
.then(response => {
// Retry until successful.
if (!response.ok || response.status !== 200) {
throw new Error(response.statusText);
}
this.inFlightRequests--;
capability.resolve();
})
.catch(reason => {
console.warn(`Driver._send failed (${url}): ${reason}`);
this.inFlightRequests--;
capability.resolve();
this._send(url, message);
});
return capability.promise;
}
}