From 4734888685505cf786c03bb2a2616e5a46df58e6 Mon Sep 17 00:00:00 2001 From: Ujjwal Sharma Date: Mon, 14 Jul 2025 23:08:36 +0200 Subject: [PATCH] Add a pdf.renderer.js entrypoint and gulp function to build renderer --- gulpfile.mjs | 20 ++++++++++++++++++++ src/display/api.js | 11 ++++++++--- src/pdf.renderer.js | 18 ++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 src/pdf.renderer.js diff --git a/gulpfile.mjs b/gulpfile.mjs index 4f790b8ef..87fb3c6dc 100644 --- a/gulpfile.mjs +++ b/gulpfile.mjs @@ -589,6 +589,18 @@ function createWorkerBundle(defines) { .pipe(webpack2Stream(workerFileConfig)); } +function createRendererWorkerBundle(defines) { + const rendererWorkerFileConfig = createWebpackConfig(defines, { + filename: defines.MINIFIED ? "pdf.renderer.min.mjs" : "pdf.renderer.mjs", + library: { + type: "module", + }, + }); + return gulp + .src("./src/pdf.renderer.js", { encoding: false }) + .pipe(webpack2Stream(rendererWorkerFileConfig)); +} + function createWebBundle(defines, options) { const viewerFileConfig = createWebpackConfig( defines, @@ -1103,6 +1115,7 @@ function buildGeneric(defines, dir) { return ordered([ createMainBundle(defines).pipe(gulp.dest(dir + "build")), createWorkerBundle(defines).pipe(gulp.dest(dir + "build")), + createRendererWorkerBundle(defines).pipe(gulp.dest(dir + "build")), createSandboxBundle(defines).pipe(gulp.dest(dir + "build")), createWebBundle(defines, { defaultPreferencesDir: defines.SKIP_BABEL @@ -1294,6 +1307,7 @@ function buildMinified(defines, dir) { return ordered([ createMainBundle(defines).pipe(gulp.dest(dir + "build")), createWorkerBundle(defines).pipe(gulp.dest(dir + "build")), + createRendererWorkerBundle(defines).pipe(gulp.dest(dir + "build")), createSandboxBundle(defines).pipe(gulp.dest(dir + "build")), createImageDecodersBundle({ ...defines, IMAGE_DECODERS: true }).pipe( gulp.dest(dir + "image_decoders") @@ -1439,6 +1453,9 @@ gulp.task( createWorkerBundle(defines).pipe( gulp.dest(MOZCENTRAL_CONTENT_DIR + "build") ), + createRendererWorkerBundle(defines).pipe( + gulp.dest(MOZCENTRAL_CONTENT_DIR + "build") + ), createWebBundle(defines, { defaultPreferencesDir: "mozcentral/" }).pipe( gulp.dest(MOZCENTRAL_CONTENT_DIR + "web") ), @@ -1536,6 +1553,9 @@ gulp.task( createWorkerBundle(defines).pipe( gulp.dest(CHROME_BUILD_CONTENT_DIR + "build") ), + createRendererWorkerBundle(defines).pipe( + gulp.dest(CHROME_BUILD_CONTENT_DIR + "build") + ), createSandboxBundle(defines).pipe( gulp.dest(CHROME_BUILD_CONTENT_DIR + "build") ), diff --git a/src/display/api.js b/src/display/api.js index 572cfed93..54135d76e 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -2400,9 +2400,14 @@ class RendererWorker { #handler; constructor(channelPort, enableHWA) { - this.#worker = new Worker("../src/display/renderer_worker.js", { - type: "module", - }); + const src = + // eslint-disable-next-line no-nested-ternary + typeof PDFJSDev === "undefined" + ? "../src/pdf.worker.js" + : PDFJSDev.test("MOZCENTRAL") + ? "resource://pdf.js/build/pdf.worker.mjs" + : "../build/pdf.worker.mjs"; + this.#worker = new Worker(src, { type: "module" }); this.#handler = new MessageHandler("main", "renderer", this.#worker); this.#handler.send("configure", { channelPort, enableHWA }, [channelPort]); this.#handler.on("ready", () => { diff --git a/src/pdf.renderer.js b/src/pdf.renderer.js new file mode 100644 index 000000000..5f16c287c --- /dev/null +++ b/src/pdf.renderer.js @@ -0,0 +1,18 @@ +/* Copyright 2025 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { RendererMessageHandler } from "./display/renderer_worker.js"; + +export { RendererMessageHandler };