diff --git a/test/integration/viewer_spec.mjs b/test/integration/viewer_spec.mjs index 962d74f10fcaa9..6ef5f2b65573e2 100644 --- a/test/integration/viewer_spec.mjs +++ b/test/integration/viewer_spec.mjs @@ -55,4 +55,36 @@ describe("PDF viewer", () => { ); }); }); + + describe("Zoom commands", () => { + let pages; + + beforeAll(async () => { + pages = await loadAndWait("tracemonkey.pdf", ".textLayer .endOfContent"); + }); + + afterAll(async () => { + await closePages(pages); + }); + + it("must check that zoom commands don't scroll the document", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + for (let i = 0; i < 10; i++) { + await page.evaluate(() => window.PDFViewerApplication.zoomIn()); + await page.evaluate(() => window.PDFViewerApplication.zoomReset()); + await page.waitForSelector( + `.page[data-page-number="1"] .textLayer .endOfContent` + ); + const scrollTop = await page.evaluate( + () => document.getElementById("viewerContainer").scrollTop + ); + expect(scrollTop < 100) + .withContext(`In ${browserName}`) + .toBe(true); + } + }) + ); + }); + }); }); diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index 540a221a0d87f5..13a136886f8499 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -104,7 +104,13 @@ const LAYERS_ORDER = new Map([ ["textLayer", 1], ["annotationLayer", 2], ["annotationEditorLayer", 3], - ["xfaLayer", 2], + ["xfaLayer", 3], +]); + +const XFA_LAYERS_ORDER = new Map([ + ["canvasWrapper", 0], + ["xfaLayer", 1], + ["annotationLayer", 2], ]); /** @@ -234,8 +240,15 @@ class PDFPageView { } #addLayer(div, name) { - const pos = LAYERS_ORDER.get(name); + const pos = (this.pdfPage.isPureXfa ? XFA_LAYERS_ORDER : LAYERS_ORDER).get( + name + ); + const oldDiv = this.#layers[pos]; this.#layers[pos] = div; + if (oldDiv) { + oldDiv.replaceWith(div); + return; + } for (let i = pos - 1; i >= 0; i--) { const layer = this.#layers[i]; if (layer) {