From 48d57cd5c8ff06bf5f4525a3aa1f76b54e0b2ec1 Mon Sep 17 00:00:00 2001 From: toofar Date: Wed, 15 May 2024 18:18:49 +1200 Subject: [PATCH] Add `Promise.withResolvers()` polyfill for pdf.js It's needed for both the main page (which we generate using jinja) and the worker script. Closes: https://github.com/qutebrowser/qutebrowser/issues/8170 --- qutebrowser/browser/pdfjs.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/qutebrowser/browser/pdfjs.py b/qutebrowser/browser/pdfjs.py index 841285deb..7062febb1 100644 --- a/qutebrowser/browser/pdfjs.py +++ b/qutebrowser/browser/pdfjs.py @@ -69,6 +69,21 @@ def generate_pdfjs_page(filename, url): return html +def _generate_polyfills(): + return """ + if (typeof Promise.withResolvers === 'undefined') { + Promise.withResolvers = function () { + let resolve, reject + const promise = new Promise((res, rej) => { + resolve = res + reject = rej + }) + return { promise, resolve, reject } + } + } + """ + + def _generate_pdfjs_script(filename): """Generate the script that shows the pdf with pdf.js. @@ -83,6 +98,8 @@ def _generate_pdfjs_script(filename): js_url = javascript.to_js(url.toString(urlutils.FormatOption.ENCODED)) return jinja.js_environment.from_string(""" + {{ polyfills }} + document.addEventListener("DOMContentLoaded", function() { if (typeof window.PDFJS !== 'undefined') { // v1.x @@ -104,7 +121,7 @@ def _generate_pdfjs_script(filename): }); } }); - """).render(url=js_url) + """).render(url=js_url, polyfills=_generate_polyfills()) def get_pdfjs_res_and_path(path): @@ -148,6 +165,14 @@ def get_pdfjs_res_and_path(path): log.misc.warning("OSError while reading PDF.js file: {}".format(e)) raise PDFJSNotFound(path) from None + if path == "build/pdf.worker.mjs": + content = b"\n".join( + [ + _generate_polyfills().encode("ascii"), + content, + ] + ) + return content, file_path