[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( await page.waitForSelector(
"#addSignatureSaveContainer > input:not(:disabled)" "#addSignatureSaveContainer > input:not(:disabled)"
); );
await page.waitForSelector("#addSignatureSaveCheckbox[checked=true]"); await page.waitForSelector("#addSignatureSaveCheckbox:checked");
// The description has been filled in automatically. // The description has been filled in automatically.
await page.waitForFunction( await page.waitForFunction(
@ -260,7 +260,7 @@ describe("Signature Editor", () => {
await page.waitForSelector( await page.waitForSelector(
"#addSignatureSaveContainer > input:not(:disabled)" "#addSignatureSaveContainer > input:not(:disabled)"
); );
await page.waitForSelector("#addSignatureSaveCheckbox[checked=true]"); await page.waitForSelector("#addSignatureSaveCheckbox:checked");
// The description has been filled in automatically. // The description has been filled in automatically.
await page.waitForFunction( await page.waitForFunction(
@ -316,7 +316,7 @@ describe("Signature Editor", () => {
await page.waitForSelector( await page.waitForSelector(
"#addSignatureSaveContainer > input:not(:disabled)" "#addSignatureSaveContainer > input:not(:disabled)"
); );
await page.waitForSelector("#addSignatureSaveCheckbox[checked=true]"); await page.waitForSelector("#addSignatureSaveCheckbox:checked");
// The description has been filled in automatically. // The description has been filled in automatically.
await page.waitForFunction( 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; #eventBus;
#isStorageFull = false;
#l10n; #l10n;
#overlayManager; #overlayManager;
@ -322,7 +324,9 @@ class SignatureManager {
} }
#disableButtons(value) { #disableButtons(value) {
this.#saveCheckbox.disabled = if (!value || !this.#isStorageFull) {
this.#saveCheckbox.disabled = !value;
}
this.#clearButton.disabled = this.#clearButton.disabled =
this.#addButton.disabled = this.#addButton.disabled =
this.#description.disabled = this.#description.disabled =
@ -847,7 +851,8 @@ class SignatureManager {
this.#currentEditor = editor; this.#currentEditor = editor;
this.#uiManager.removeEditListeners(); this.#uiManager.removeEditListeners();
const isStorageFull = await this.#signatureStorage.isFull(); const isStorageFull = (this.#isStorageFull =
await this.#signatureStorage.isFull());
this.#saveContainer.classList.toggle("fullStorage", isStorageFull); this.#saveContainer.classList.toggle("fullStorage", isStorageFull);
this.#saveCheckbox.checked = !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> <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>
<div id="addSignatureSaveContainer"> <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> <label for="addSignatureSaveCheckbox" data-l10n-id="pdfjs-editor-add-signature-save-checkbox"></label>
<span></span> <span></span>
<span id="addSignatureSaveWarning" data-l10n-id="pdfjs-editor-add-signature-save-warning-message"></span> <span id="addSignatureSaveWarning" data-l10n-id="pdfjs-editor-add-signature-save-warning-message"></span>