Skip to content

Commit ccf05b9

Browse files
committed
fixup! fixup! Fix filters, annotation canvases
1 parent 0a74461 commit ccf05b9

3 files changed

Lines changed: 29 additions & 16 deletions

File tree

src/display/api.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,8 @@ function operatorListHasDOMFilters({ fnArray, argsArray }) {
239239
* The default value is `false`.
240240
* @property {HTMLDocument} [ownerDocument] - Specify an explicit document
241241
* context to create elements with and to load resources, such as fonts,
242-
* into. Defaults to the current document.
242+
* into. Defaults to the current document. Renderer-worker rendering is
243+
* disabled when this is set to a custom document.
243244
* @property {boolean} [disableRange] - Disable range request loading of PDF
244245
* files. When enabled, and if the server supports partial content requests,
245246
* then the PDF will be fetched in chunks. The default value is `false`.
@@ -377,10 +378,22 @@ function getDocument(src = {}) {
377378
const enableHWA = src.enableHWA === true;
378379
const useWasm = src.useWasm !== false;
379380
const pagesMapper = src.pagesMapper || new PagesMapper();
381+
const styleElement =
382+
typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")
383+
? src.styleElement
384+
: null;
385+
// Custom DOM contexts are main-thread only and cannot be transferred to
386+
// the renderer worker.
387+
const hasCustomOwnerDocument =
388+
src.ownerDocument !== undefined &&
389+
src.ownerDocument !== globalThis.document;
390+
const hasCustomStyleElement = !!styleElement;
380391
const disableWorkerRendering =
381392
src.disableWorkerRendering === true ||
382393
typeof Worker === "undefined" ||
383-
typeof MessageChannel === "undefined";
394+
typeof MessageChannel === "undefined" ||
395+
hasCustomOwnerDocument ||
396+
hasCustomStyleElement;
384397

385398
// Parameters whose default values depend on other parameters.
386399
const length = rangeTransport ? rangeTransport.length : (src.length ?? NaN);
@@ -403,13 +416,6 @@ function getDocument(src = {}) {
403416
isValidFetchUrl(standardFontDataUrl, document.baseURI) &&
404417
isValidFetchUrl(wasmUrl, document.baseURI)
405418
);
406-
407-
// Parameters only intended for development/testing purposes.
408-
const styleElement =
409-
typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")
410-
? src.styleElement
411-
: null;
412-
413419
// Set the main-thread verbosity level.
414420
setVerbosityLevel(verbosity);
415421

@@ -3672,8 +3678,6 @@ class InternalRenderTask {
36723678
const { viewport, transform, background, dependencyTracker } = this.params;
36733679

36743680
// TODO(Aditi): Should we disable worker rendering when pdfBug is enabled?
3675-
const hasOperatorListChunk =
3676-
this.operatorList.argsArray.length > 0 || this.operatorList.lastChunk;
36773681

36783682
// Worker Rendering is disabled when canvas filters are present because
36793683
// OffscreenCanvas's OffscreenCanvasRenderingContext2D completely ignores
@@ -3684,7 +3688,7 @@ class InternalRenderTask {
36843688
this._rendererHandler &&
36853689
this._canvasContext === null &&
36863690
!hasCanvasFilters &&
3687-
hasOperatorListChunk;
3691+
!this.pageColors;
36883692

36893693
// TODO(Aditi): Should we disable worker rendering when pdfBug is enabled?
36903694
if (!useWorkerRendering) {

src/display/renderer_worker.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,14 +220,21 @@ class RendererMessageHandler {
220220
});
221221
const canvasFactory = createCanvasFactory({ enableHWA });
222222
const filterFactory = new WorkerFilterFactory();
223+
let annotationCanvases = null;
224+
if (annotationCanvasMap) {
225+
annotationCanvases =
226+
annotationCanvasMap instanceof Map
227+
? annotationCanvasMap
228+
: new Map(annotationCanvasMap);
229+
}
223230
const gfx = new CanvasGraphics(
224231
ctx,
225232
this.#commonObjs,
226233
objs,
227234
canvasFactory,
228235
filterFactory,
229236
{ optionalContentConfig },
230-
annotationCanvasMap
237+
annotationCanvases
231238
/** Renderer worker doesn't support pageColors and dependencyTracker */
232239
);
233240

@@ -304,7 +311,7 @@ class RendererMessageHandler {
304311
return currentOperatorListIdx;
305312
});
306313

307-
handler.on("resetCanvas", ({ renderTaskId }) => {
314+
handler.on("ResetCanvas", ({ renderTaskId }) => {
308315
const task = this.#renderTaskStates.get(renderTaskId);
309316
if (!task) {
310317
return;
@@ -331,6 +338,8 @@ class RendererMessageHandler {
331338

332339
const pdfWorkerHandler = new MessageHandler(sourceName, targetName, port);
333340
this.#pdfWorkerHandlers.set(bridgeId, pdfWorkerHandler);
341+
// TODO(Aditi): To be used when we stop forwarding and start
342+
// transferring to worker directly.
334343
this.#setupObjectHandler(pdfWorkerHandler);
335344

336345
pdfWorkerHandler.send("ready", null);

test/driver.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -512,8 +512,8 @@ class Driver {
512512

513513
// Create a working canvas
514514
this.canvas = document.createElement("canvas");
515-
// Used as the render-target when testing `renderInWorker`, since a canvas
516-
// can only be transferred once using `transferControlToOffscreen`.
515+
// Used as the render-target when testing rendering in worker, since a
516+
// canvas can only be transferred once using `transferControlToOffscreen`.
517517
this.renderCanvas = null;
518518
}
519519

0 commit comments

Comments
 (0)