[Editor] In the signature modal, disable the save checkbox when the storage is full (bug 1974257)

This commit is contained in:
Calixte Denizet 2025-06-26 22:23:13 +02:00
parent 85b67f19bc
commit 9acd16a0c7
3 changed files with 56 additions and 7 deletions

View File

@ -105,7 +105,7 @@ describe("Signature Editor", () => {
await page.waitForSelector(
"#addSignatureSaveContainer > input:not(:disabled)"
);
await page.waitForSelector("#addSignatureSaveCheckbox[checked=true]");
await page.waitForSelector("#addSignatureSaveCheckbox:checked");
// The description has been filled in automatically.
await page.waitForFunction(
@ -260,7 +260,7 @@ describe("Signature Editor", () => {
await page.waitForSelector(
"#addSignatureSaveContainer > input:not(:disabled)"
);
await page.waitForSelector("#addSignatureSaveCheckbox[checked=true]");
await page.waitForSelector("#addSignatureSaveCheckbox:checked");
// The description has been filled in automatically.
await page.waitForFunction(
@ -316,7 +316,7 @@ describe("Signature Editor", () => {
await page.waitForSelector(
"#addSignatureSaveContainer > input:not(:disabled)"
);
await page.waitForSelector("#addSignatureSaveCheckbox[checked=true]");
await page.waitForSelector("#addSignatureSaveCheckbox:checked");
// The description has been filled in automatically.
await page.waitForFunction(
@ -671,4 +671,48 @@ describe("Signature Editor", () => {
);
});
});
describe("Bug 1974257", () => {
let pages;
beforeEach(async () => {
pages = await loadAndWait("empty.pdf", ".annotationEditorLayer");
});
afterEach(async () => {
await closePages(pages);
});
it("must check that the signature save checkbox is disabled if storage is full", async () => {
await Promise.all(
pages.map(async ([_, page]) => {
await switchToSignature(page);
for (let i = 0; i < 6; i++) {
await page.click("#editorSignatureAddSignature");
await page.waitForSelector("#addSignatureDialog", {
visible: true,
});
await page.click("#addSignatureTypeInput");
await page.type("#addSignatureTypeInput", `PDF.js ${i}`);
if (i === 5) {
await page.waitForSelector(
"#addSignatureSaveCheckbox:not(checked)"
);
await page.waitForSelector("#addSignatureSaveCheckbox:disabled");
} else {
await page.waitForSelector("#addSignatureSaveCheckbox:checked");
await page.waitForSelector(
"#addSignatureSaveCheckbox:not(:disabled)"
);
}
await page.click("#addSignatureAddButton");
await page.waitForSelector("#addSignatureDialog", {
visible: false,
});
}
})
);
});
});
});

View File

@ -88,6 +88,8 @@ class SignatureManager {
#eventBus;
#isStorageFull = false;
#l10n;
#overlayManager;
@ -322,7 +324,9 @@ class SignatureManager {
}
#disableButtons(value) {
this.#saveCheckbox.disabled =
if (!value || !this.#isStorageFull) {
this.#saveCheckbox.disabled = !value;
}
this.#clearButton.disabled =
this.#addButton.disabled =
this.#description.disabled =
@ -847,7 +851,8 @@ class SignatureManager {
this.#currentEditor = editor;
this.#uiManager.removeEditListeners();
const isStorageFull = await this.#signatureStorage.isFull();
const isStorageFull = (this.#isStorageFull =
await this.#signatureStorage.isFull());
this.#saveContainer.classList.toggle("fullStorage", isStorageFull);
this.#saveCheckbox.checked = !isStorageFull;

View File

@ -725,7 +725,7 @@ See https://github.com/adobe-type-tools/cmap-resources
<button id="clearSignatureButton" type="button" data-l10n-id="pdfjs-editor-add-signature-clear-button" tabindex="0"><span data-l10n-id="pdfjs-editor-add-signature-clear-button-label"></span></button>
</div>
<div id="addSignatureSaveContainer">
<input type="checkbox" id="addSignatureSaveCheckbox" checked="true"></input>
<input type="checkbox" id="addSignatureSaveCheckbox"></input>
<label for="addSignatureSaveCheckbox" data-l10n-id="pdfjs-editor-add-signature-save-checkbox"></label>
<span></span>
<span id="addSignatureSaveWarning" data-l10n-id="pdfjs-editor-add-signature-save-warning-message"></span>