From ec396c215025e17e777e77711aed4b64313fc566 Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Thu, 9 Nov 2023 13:50:33 +0100 Subject: [PATCH] Don't avoid to execute the Blur callback when blurring a text field (bug 1863910) --- src/display/annotation_layer.js | 8 ++++-- test/integration/scripting_spec.mjs | 42 ++++++++++++++++++++++++++++ test/pdfs/.gitignore | 2 +- test/pdfs/bug1863910.pdf | Bin 0 -> 6796 bytes 4 files changed, 49 insertions(+), 3 deletions(-) create mode 100755 test/pdfs/bug1863910.pdf diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index e7dbf59bd..220974bf1 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -1288,7 +1288,9 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { } elementData.lastCommittedValue = target.value; elementData.commitKey = 1; - elementData.focused = true; + if (!this.data.actions?.Focus) { + elementData.focused = true; + } }); element.addEventListener("updatefromsandbox", jsEvent => { @@ -1397,7 +1399,9 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { if (!elementData.focused || !event.relatedTarget) { return; } - elementData.focused = false; + if (!this.data.actions?.Blur) { + elementData.focused = false; + } const { value } = event.target; elementData.userValue = value; if (elementData.lastCommittedValue !== value) { diff --git a/test/integration/scripting_spec.mjs b/test/integration/scripting_spec.mjs index 83d5bfeeb..52b60b1db 100644 --- a/test/integration/scripting_spec.mjs +++ b/test/integration/scripting_spec.mjs @@ -2183,4 +2183,46 @@ describe("Interaction", () => { ); }); }); + + describe("Textfield with a Blur callback", () => { + let pages; + let otherPages; + + beforeAll(async () => { + otherPages = await Promise.all( + global.integrationSessions.map(async session => + session.browser.newPage() + ) + ); + pages = await loadAndWait("bug1863910.pdf", getSelector("25R")); + }); + + afterAll(async () => { + await closePages(pages); + await Promise.all(otherPages.map(page => page.close())); + }); + + it("must check that blur callback is called", async () => { + await Promise.all( + pages.map(async ([browserName, page], i) => { + await page.waitForFunction( + "window.PDFViewerApplication.scriptingReady === true" + ); + + await page.click(getSelector("25R")); + await page.waitForTimeout(10); + await page.click(getSelector("26R")); + + await page.waitForFunction( + sel => document.querySelector(sel).value !== "", + {}, + getSelector("26R") + ); + + const text = await page.$eval(getSelector("26R"), el => el.value); + expect(text).withContext(`In ${browserName}`).toEqual("hello"); + }) + ); + }); + }); }); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 4101b2eb0..d63f3d7d9 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -618,4 +618,4 @@ !issue17065.pdf !issue17069.pdf !issue17215.pdf - +!bug1863910.pdf diff --git a/test/pdfs/bug1863910.pdf b/test/pdfs/bug1863910.pdf new file mode 100755 index 0000000000000000000000000000000000000000..3db6eded51d33279bad5ab9fafdf1506bd837d40 GIT binary patch literal 6796 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 literal 0 HcmV?d00001